cluster

Infrastructure files for Nordgedanken and Midnightthoughts.
git clone git://archive.git.mtrnord.blog/MTRNord/cluster.git
Log | Files | Refs | README

commit 6bdcd90ff6f63f34be0feb3b5590085e43f8a815
parent 40408097d5d7307652bdbb5a0788be6ab5133b78
Author: MTRNord <MTRNord@users.noreply.github.com>
Date:   Mon, 20 Oct 2025 20:47:44 +0200

anubis

Signed-off-by: MTRNord <MTRNord@users.noreply.github.com>

Diffstat:
M.gitleaksignore | 1+
Mapps/talos_cluster/blog/docker/Dockerfile | 6+++---
Mapps/talos_cluster/blog/docker/wordpress.conf | 2+-
Mapps/talos_cluster/blog/mysql.yaml | 112++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mapps/talos_cluster/blog/wordpress.yaml | 182++++++++++++++++++++++++++++++++++++++++----------------------------------------
Aapps/talos_cluster/cgit/anubis-secret.yaml | 28++++++++++++++++++++++++++++
Mapps/talos_cluster/cgit/deployment.yaml | 44++++++++++++++++++++++++++++++++++++++++++++
Mapps/talos_cluster/cgit/kustomization.yaml | 1+
Mapps/talos_cluster/cgit/service.yaml | 6+++++-
Mapps/talos_cluster/continuwuity/deployment.yaml | 90++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mapps/talos_cluster/envoy-gateway/gateway_settings.yaml | 432++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mapps/talos_cluster/plausible/release.yaml | 16++++++++--------
Mapps/talos_cluster/plausible/route.yaml | 5++---
Minfrastructure_talos/configs/cnpg-cluster.yaml | 44++++++++++++++++++++++----------------------
14 files changed, 523 insertions(+), 446 deletions(-)

diff --git a/.gitleaksignore b/.gitleaksignore @@ -1,2 +1,3 @@ apps/talos_cluster/monitoring-stack/dashboards/connectivity-tester-dashboard.json:generic-api-key:328 apps/talos_cluster/blog/docker/wp-cache-config.php:generic-api-key:9 +apps/talos_cluster/cgit/deployment.yaml:generic-api-key:51 diff --git a/apps/talos_cluster/blog/docker/Dockerfile b/apps/talos_cluster/blog/docker/Dockerfile @@ -114,9 +114,9 @@ RUN wget -q https://downloads.wordpress.org/plugin/wp-mail-smtp.4.6.0.zip \ && rm wp-mail-smtp.4.6.0.zip # Install Simply Gallery Block -RUN wget -q https://downloads.wordpress.org/plugin/simply-gallery-block.3.2.7.zip \ - && unzip -q simply-gallery-block.3.2.7.zip -d /var/www/html/wordpress/wp-content/plugins/ \ - && rm simply-gallery-block.3.2.7.zip +RUN wget -q https://downloads.wordpress.org/plugin/simply-gallery-block.3.2.8.zip \ + && unzip -q simply-gallery-block.3.2.8.zip -d /var/www/html/wordpress/wp-content/plugins/ \ + && rm simply-gallery-block.3.2.8.zip # Install Table of Contents Block RUN wget -q https://downloads.wordpress.org/plugin/table-of-content-block.1.0.6.zip \ diff --git a/apps/talos_cluster/blog/docker/wordpress.conf b/apps/talos_cluster/blog/docker/wordpress.conf @@ -118,7 +118,7 @@ server { fastcgi_pass phpfpm; } - location ~* \.(ogg|ogv|svg|svgz|eot|otf|woff|woff2|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { + location ~* \.(avif|ogg|ogv|svg|svgz|eot|otf|woff|woff2|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ { expires max; log_not_found off; access_log off; diff --git a/apps/talos_cluster/blog/mysql.yaml b/apps/talos_cluster/blog/mysql.yaml @@ -18,74 +18,74 @@ spec: - name: mysql image: mariadb:12.0 env: - - name: MARIADB_ROOT_PASSWORD - valueFrom: - secretKeyRef: - name: mysql-cred - key: admin-password - - name: MARIADB_USER - valueFrom: - secretKeyRef: - name: mysql-cred - key: username - - name: MARIADB_PASSWORD - valueFrom: - secretKeyRef: - name: mysql-cred - key: password - - name: MARIADB_DATABASE - valueFrom: - secretKeyRef: - name: mysql-cred - key: db-name - - name: MYSQL_ROOT_HOST - value: "%" + - name: MARIADB_ROOT_PASSWORD + valueFrom: + secretKeyRef: + name: mysql-cred + key: admin-password + - name: MARIADB_USER + valueFrom: + secretKeyRef: + name: mysql-cred + key: username + - name: MARIADB_PASSWORD + valueFrom: + secretKeyRef: + name: mysql-cred + key: password + - name: MARIADB_DATABASE + valueFrom: + secretKeyRef: + name: mysql-cred + key: db-name + - name: MYSQL_ROOT_HOST + value: "%" volumeMounts: - - name: mysql-volume - mountPath: /var/lib/mysql - - name: mysql-configmap - mountPath: /docker-entrypoint-initdb.d - - name: mysql-config - mountPath: /etc/mysql/conf.d + - name: mysql-volume + mountPath: /var/lib/mysql + - name: mysql-configmap + mountPath: /docker-entrypoint-initdb.d + - name: mysql-config + mountPath: /etc/mysql/conf.d resources: - requests: - memory: "256Mi" - cpu: "100m" - limits: - memory: "1024Mi" - cpu: "600m" + requests: + memory: "256Mi" + cpu: "100m" + limits: + memory: "1024Mi" + cpu: "600m" livenessProbe: - tcpSocket: - port: 3306 - initialDelaySeconds: 30 - periodSeconds: 10 - timeoutSeconds: 5 - successThreshold: 1 - failureThreshold: 3 + tcpSocket: + port: 3306 + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 3 readinessProbe: - tcpSocket: - port: 3306 - initialDelaySeconds: 30 - periodSeconds: 10 - timeoutSeconds: 5 - successThreshold: 1 - failureThreshold: 3 + tcpSocket: + port: 3306 + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 5 + successThreshold: 1 + failureThreshold: 3 volumes: - name: mysql-configmap configMap: - name: mysql-configmap + name: mysql-configmap - name: mysql-config configMap: - name: mysql-config + name: mysql-config volumeClaimTemplates: - metadata: - name: mysql-volume + name: mysql-volume spec: - accessModes: ["ReadWriteOnce"] - storageClassName: "longhorn" - resources: - requests: - storage: 2Gi + accessModes: ["ReadWriteOnce"] + storageClassName: "longhorn" + resources: + requests: + storage: 2Gi --- apiVersion: v1 kind: Service diff --git a/apps/talos_cluster/blog/wordpress.yaml b/apps/talos_cluster/blog/wordpress.yaml @@ -32,77 +32,77 @@ spec: - name: wordpress image: ghcr.io/mtrnord/blog:latest env: - - name: DB_HOST - value: mysql-service.blog.svc.cluster.local - - name: DB_USER - valueFrom: - secretKeyRef: - name: mysql-cred - key: username - - name: DB_PASSWORD - valueFrom: - secretKeyRef: - name: mysql-cred - key: password - - name: DB_NAME - valueFrom: - secretKeyRef: - name: mysql-cred - key: db-name - - name: AUTH_KEY - valueFrom: - secretKeyRef: - name: mysql-cred - key: auth-key - - name: SECURE_AUTH_KEY - valueFrom: - secretKeyRef: - name: mysql-cred - key: secure-auth-key - - name: LOGGED_IN_KEY - valueFrom: - secretKeyRef: - name: mysql-cred - key: logged-in-key - - name: NONCE_KEY - valueFrom: - secretKeyRef: - name: mysql-cred - key: nonce-key - - name: AUTH_SALT - valueFrom: - secretKeyRef: - name: mysql-cred - key: auth-salt - - name: SECURE_AUTH_SALT - valueFrom: - secretKeyRef: - name: mysql-cred - key: secure-auth-salt - - name: LOGGED_IN_SALT - valueFrom: - secretKeyRef: - name: mysql-cred - key: logged-in-salt - - name: NONCE_SALT - valueFrom: - secretKeyRef: - name: mysql-cred - key: nonce-salt + - name: DB_HOST + value: mysql-service.blog.svc.cluster.local + - name: DB_USER + valueFrom: + secretKeyRef: + name: mysql-cred + key: username + - name: DB_PASSWORD + valueFrom: + secretKeyRef: + name: mysql-cred + key: password + - name: DB_NAME + valueFrom: + secretKeyRef: + name: mysql-cred + key: db-name + - name: AUTH_KEY + valueFrom: + secretKeyRef: + name: mysql-cred + key: auth-key + - name: SECURE_AUTH_KEY + valueFrom: + secretKeyRef: + name: mysql-cred + key: secure-auth-key + - name: LOGGED_IN_KEY + valueFrom: + secretKeyRef: + name: mysql-cred + key: logged-in-key + - name: NONCE_KEY + valueFrom: + secretKeyRef: + name: mysql-cred + key: nonce-key + - name: AUTH_SALT + valueFrom: + secretKeyRef: + name: mysql-cred + key: auth-salt + - name: SECURE_AUTH_SALT + valueFrom: + secretKeyRef: + name: mysql-cred + key: secure-auth-salt + - name: LOGGED_IN_SALT + valueFrom: + secretKeyRef: + name: mysql-cred + key: logged-in-salt + - name: NONCE_SALT + valueFrom: + secretKeyRef: + name: mysql-cred + key: nonce-salt ports: - - containerPort: 8080 - name: wordpress + - containerPort: 8080 + name: wordpress resources: - requests: - memory: "256Mi" - cpu: "100m" - limits: - memory: "2048Mi" - cpu: "2000m" + requests: + memory: "256Mi" + cpu: "100m" + limits: + memory: "2048Mi" + cpu: "2000m" volumeMounts: - - name: wordpress-persistent-storage - mountPath: /var/www/html/wordpress/wp-content/uploads - subPath: uploads + - name: wordpress-persistent-storage + mountPath: /var/www/html/wordpress/wp-content/uploads + subPath: uploads #- name: wordpress-persistent-storage # mountPath: /var/www/html/wordpress/wp-content/plugins # subPath: plugins @@ -110,29 +110,29 @@ spec: # mountPath: /var/www/html/wordpress/wp-content/themes # subPath: themes readinessProbe: - httpGet: - path: /wp-login.php - port: 8080 - scheme: "HTTP" - initialDelaySeconds: 30 - periodSeconds: 10 - timeoutSeconds: 15 - successThreshold: 1 - failureThreshold: 3 + httpGet: + path: /wp-login.php + port: 8080 + scheme: "HTTP" + initialDelaySeconds: 30 + periodSeconds: 10 + timeoutSeconds: 15 + successThreshold: 1 + failureThreshold: 3 livenessProbe: - httpGet: - path: /wp-login.php - port: 8080 - scheme: "HTTP" - initialDelaySeconds: 60 - periodSeconds: 10 - timeoutSeconds: 15 - successThreshold: 1 - failureThreshold: 3 + httpGet: + path: /wp-login.php + port: 8080 + scheme: "HTTP" + initialDelaySeconds: 60 + periodSeconds: 10 + timeoutSeconds: 15 + successThreshold: 1 + failureThreshold: 3 volumes: - name: wordpress-persistent-storage persistentVolumeClaim: - claimName: wordpress-pvc + claimName: wordpress-pvc --- kind: Service apiVersion: v1 @@ -162,8 +162,8 @@ spec: - mtrnord.blog rules: - backendRefs: - - name: wordpress-service - port: 8080 + - name: wordpress-service + port: 8080 timeouts: - request: 240s - backendRequest: 0s + request: 240s + backendRequest: 0s diff --git a/apps/talos_cluster/cgit/anubis-secret.yaml b/apps/talos_cluster/cgit/anubis-secret.yaml @@ -0,0 +1,28 @@ +apiVersion: v1 +kind: Secret +metadata: + name: anubis-key + namespace: git +type: Opaque +stringData: + ED25519_PRIVATE_KEY_HEX: ENC[AES256_GCM,data:JIaos5kgzi1MBUW2b+MGEY8otBbcYGVS00tkWWmBkCH1TnmRbAYbg5YIJvUBB5GPwDbd7i8VPiyMCaDp5HGvHQ==,iv:Ew/4sC5eIPTU/w3kk/Ny2Qj55D5S09zWETdeb1NfQtA=,tag:xLyROMmANbXupQwnG5s+CA==,type:str] +sops: + kms: [] + gcp_kms: [] + azure_kv: [] + hc_vault: [] + age: + - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh + enc: | + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSAzTDlGd1RzSjQyRlhIWmdR + T00ycnNJbkNoaSswTjhQaCs0V25mRkdRUUVZCkJ3VnUvK1ZQd2Q5U3BhNE15L1BJ + ZUlEV3I1ZGlydlV0SkU2NUZRelZndTAKLS0tIGdva1B2Qk1WWTVkL2NweWpOLzVH + ZW05QUNvODFndnVNZHdRZjZPTHZBWDQKuJpxyObJLh7o9cOkUYwFEiYE+E+9nSE3 + 1nRWG84+UOPQjko62JtIsWJ3xLHLpJb0BHrZk/HkAqciOiTk8dJy/A== + -----END AGE ENCRYPTED FILE----- + lastmodified: "2025-10-20T18:47:40Z" + mac: ENC[AES256_GCM,data:qXtxTMT9hOooEUPMR1u5OPN3qFD18MUNnK+GrqaoBB5g87EzwL346HQKLMbtVjfx1z/m4xKCggPKyOpLZZddYwOBQoNgeYuDy7U4gy2lqlaWzRqp6WohZEDvkEYwux1s5iwcI7Wm396hXqQSgqTCwLdmEzoC4RaaACGfNzPib0Y=,iv:C9thmSKNHEc4O1dnrQNglOnRS0jTlIhjA70JD/2yGkI=,tag:lYk7/XPg/vFyFvlgBB/CeA==,type:str] + pgp: [] + encrypted_regex: ^(harborAdminPassword|totpVaultKey|kimaiAppSecret|kimaiAdminPassword|GITHUB_CLIENT_ID|GITHUB_CLIENT_SECRET|GITHUB_PRIVATE_KEY|woosh|root_password|rspamd_password|pgdb_password|matrix_access_token|pgdb_remote_url|hmac_secret_key|adminPassword|adminEmail|jenkinsAdminEmail|securityRealm|gerrit.config|routing_key|DATABASE_URL|SMTP_PASSWORD|SECRET_KEY_BASE|admin_password|extraCommands|key|clickhouseDatabaseURL|databaseURL|client_id|client_secret|secret_key_base|otp_secret|private_key|public_key|primaryKey|deterministicKey|keyDerivationSalt|token|clientId|secretKey|installationId|installationKey|uriOverride|adminToken.value|password.value|sql_password|erlangCookie|AUTHENTICATION_PASSWORD|ROOM_API_SECRET_KEY|adminPassword|configPassword|adminUser|configUser|MAIL_PASSWORD|APP_KEY|api_key|api_secret|keys|livekit_key|livekit_secret|secret_key|admin_pass|admin_email|mariadbPassword|mariadbRootPassword|privateKey|data|stringData|PASSWD|password|pass|postgresPassword|postgresqlPassword|redminePassword|smtpPassword|registration_shared_secret|shared_secret|secret|admin_token|integrationKey|rootPassword)$ + version: 3.9.1 diff --git a/apps/talos_cluster/cgit/deployment.yaml b/apps/talos_cluster/cgit/deployment.yaml @@ -36,6 +36,50 @@ spec: imagePullSecrets: - name: ghcr-pull containers: + - name: anubis + image: ghcr.io/techarohq/anubis:latest + imagePullPolicy: Always + env: + - name: "BIND" + value: ":8081" + - name: "DIFFICULTY" + value: "4" + - name: ED25519_PRIVATE_KEY_HEX + valueFrom: + secretKeyRef: + name: anubis-key + key: ED25519_PRIVATE_KEY_HEX + - name: "METRICS_BIND" + value: ":9090" + - name: "SERVE_ROBOTS_TXT" + value: "true" + - name: "TARGET" + value: "http://localhost:8080" + - name: "OG_PASSTHROUGH" + value: "false" + - name: "OG_EXPIRY_TIME" + value: "24h" + resources: + limits: + cpu: 750m + memory: 256Mi + requests: + cpu: 250m + memory: 256Mi + ports: + - containerPort: 8081 + name: anubis + protocol: TCP + securityContext: + runAsUser: 1000 + runAsGroup: 1000 + runAsNonRoot: true + allowPrivilegeEscalation: false + capabilities: + drop: + - ALL + seccompProfile: + type: RuntimeDefault - name: cgit image: ghcr.io/mtrnord/cgit-docker:main imagePullPolicy: Always diff --git a/apps/talos_cluster/cgit/kustomization.yaml b/apps/talos_cluster/cgit/kustomization.yaml @@ -3,5 +3,6 @@ kind: Kustomization namespace: git resources: - ssh-keys.yaml + - anubis-secret.yaml - deployment.yaml - service.yaml diff --git a/apps/talos_cluster/cgit/service.yaml b/apps/talos_cluster/cgit/service.yaml @@ -13,6 +13,10 @@ spec: targetPort: http protocol: TCP name: http + - port: 8081 + targetPort: anubis + protocol: TCP + name: anubis - port: 2222 targetPort: ssh protocol: TCP @@ -32,7 +36,7 @@ spec: rules: - backendRefs: - name: cgit - port: 8080 + port: 8081 --- apiVersion: gateway.networking.k8s.io/v1alpha2 kind: TCPRoute diff --git a/apps/talos_cluster/continuwuity/deployment.yaml b/apps/talos_cluster/continuwuity/deployment.yaml @@ -18,45 +18,45 @@ spec: containers: - name: continuwuity resources: - limits: {} - requests: - memory: "100Mi" - cpu: "28m" + limits: {} + requests: + memory: "100Mi" + cpu: "28m" image: forgejo.ellis.link/continuwuation/continuwuity:main #image: forgejo.ellis.link/continuwuation/continuwuity:pr-1099-head imagePullPolicy: Always ports: - - containerPort: 8448 + - containerPort: 8448 # Mount the continuwuity config which is stored in the continuwuity-config secret at the config path and should go to /config.yaml volumeMounts: - - name: continuwuity-config - mountPath: /etc/conduwuit - readOnly: true - - name: continuwuity-data - mountPath: /var/lib/continuwuity + - name: continuwuity-config + mountPath: /etc/conduwuit + readOnly: true + - name: continuwuity-data + mountPath: /var/lib/continuwuity env: - - name: CONTINUWUITY_CONFIG - value: /etc/conduwuit/conduwuit.toml + - name: CONTINUWUITY_CONFIG + value: /etc/conduwuit/conduwuit.toml livenessProbe: - httpGet: - path: /_matrix/client/versions - port: 8448 - initialDelaySeconds: 50 - timeoutSeconds: 5 + httpGet: + path: /_matrix/client/versions + port: 8448 + initialDelaySeconds: 50 + timeoutSeconds: 5 readinessProbe: - httpGet: - path: /_matrix/client/versions - port: 8448 - initialDelaySeconds: 20 - timeoutSeconds: 5 + httpGet: + path: /_matrix/client/versions + port: 8448 + initialDelaySeconds: 20 + timeoutSeconds: 5 # Mount the continuwuity config which is stored in the continuwuity-config secret at the config path and should go to /config.yaml volumes: - name: continuwuity-config secret: - secretName: continuwuity-config + secretName: continuwuity-config - name: continuwuity-data persistentVolumeClaim: - claimName: continuwuity + claimName: continuwuity --- apiVersion: v1 kind: Service @@ -86,40 +86,40 @@ spec: # Client traffic (sync, login, media, etc.) - name: client-traffic matches: - - path: - type: PathPrefix - value: /_matrix/client + - path: + type: PathPrefix + value: /_matrix/client backendRefs: - - name: continuwuity - port: 8448 + - name: continuwuity + port: 8448 timeouts: - request: 240s - backendRequest: 0s + request: 240s + backendRequest: 0s - name: media-traffic matches: - - path: - type: PathPrefix - value: /_matrix/media + - path: + type: PathPrefix + value: /_matrix/media backendRefs: - - name: continuwuity - port: 8448 + - name: continuwuity + port: 8448 # Federation traffic - name: federation-traffic matches: - - path: - type: PathPrefix - value: /_matrix/federation + - path: + type: PathPrefix + value: /_matrix/federation backendRefs: - - name: continuwuity - port: 8448 + - name: continuwuity + port: 8448 timeouts: - request: 240s - backendRequest: 0s + request: 240s + backendRequest: 0s # Fallback (anything else Matrix-y) - name: fallback backendRefs: - - name: continuwuity - port: 8448 + - name: continuwuity + port: 8448 --- apiVersion: gateway.envoyproxy.io/v1alpha1 kind: BackendTrafficPolicy diff --git a/apps/talos_cluster/envoy-gateway/gateway_settings.yaml b/apps/talos_cluster/envoy-gateway/gateway_settings.yaml @@ -48,42 +48,42 @@ spec: protocol: TCP port: 25 allowedRoutes: - kinds: - - kind: TCPRoute - namespaces: - from: All + kinds: + - kind: TCPRoute + namespaces: + from: All - name: submissions protocol: TCP port: 465 allowedRoutes: - kinds: - - kind: TCPRoute - namespaces: - from: All + kinds: + - kind: TCPRoute + namespaces: + from: All - name: submission protocol: TCP port: 587 allowedRoutes: - kinds: - - kind: TCPRoute - namespaces: - from: All + kinds: + - kind: TCPRoute + namespaces: + from: All - name: imap protocol: TCP port: 143 allowedRoutes: - kinds: - - kind: TCPRoute - namespaces: - from: All + kinds: + - kind: TCPRoute + namespaces: + from: All - name: imaps protocol: TCP port: 993 allowedRoutes: - kinds: - - kind: TCPRoute - namespaces: - from: All + kinds: + - kind: TCPRoute + namespaces: + from: All --- apiVersion: gateway.networking.k8s.io/v1 kind: Gateway @@ -107,384 +107,384 @@ spec: protocol: TCP port: 22 allowedRoutes: - kinds: - - kind: TCPRoute - namespaces: - from: All + kinds: + - kind: TCPRoute + namespaces: + from: All - name: https-talos-midnightthoughts protocol: HTTPS hostname: "talos.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: talos.midnightthoughts.space-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: talos.midnightthoughts.space-tls - name: https-nordgedanken.dev protocol: HTTPS hostname: "nordgedanken.dev" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: nordgedanken.dev-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: nordgedanken.dev-tls - name: https-openpgpkey.nordgedanken.dev protocol: HTTPS hostname: "openpgpkey.nordgedanken.dev" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: openpgpkey.nordgedanken.dev-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: openpgpkey.nordgedanken.dev-tls - name: https-midnightthoughts-auth protocol: HTTPS hostname: "auth.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: auth.midnightthoughts.space-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: auth.midnightthoughts.space-tls - name: https-midnightthoughts-grafana protocol: HTTPS hostname: "grafana.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: grafana.midnightthoughts.space-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: grafana.midnightthoughts.space-tls - name: https-draupnir-midnightthoughts protocol: HTTPS hostname: "draupnir.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: draupnir.midnightthoughts.space-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: draupnir.midnightthoughts.space-tls - name: https-matrix-draupnir-midnightthoughts protocol: HTTPS hostname: "matrix.draupnir.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: matrix.draupnir.midnightthoughts.space-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: matrix.draupnir.midnightthoughts.space-tls - name: https-midnightthoughts-vault protocol: HTTPS hostname: "vault.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: vault.midnightthoughts.space-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: vault.midnightthoughts.space-tls - name: https-midnightthoughts-budget protocol: HTTPS hostname: "budget.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: budget.midnightthoughts.space-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: budget.midnightthoughts.space-tls - name: https-midnightthoughts-ldap protocol: HTTPS hostname: "ldap.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: ldap.midnightthoughts.space-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: ldap.midnightthoughts.space-tls - name: ldap protocol: TCP port: 389 allowedRoutes: - kinds: - - kind: TCPRoute - namespaces: - from: All + kinds: + - kind: TCPRoute + namespaces: + from: All - name: https-mtrnord-blog-gts protocol: HTTPS hostname: "gts.mtrnord.blog" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: gts.mtrnord.blog-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: gts.mtrnord.blog-tls - name: https-midnightthoughts-collabora protocol: HTTPS hostname: "collabora.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: collabora.midnightthoughts.space + mode: Terminate + certificateRefs: + - kind: Secret + name: collabora.midnightthoughts.space - name: https-midnightthoughts-webhook-kubernetes protocol: HTTPS hostname: "webhook.kubernetes.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: webhook.kubernetes.midnightthoughts.space-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: webhook.kubernetes.midnightthoughts.space-tls - name: https-api-connectivity-tester-mtrnord-blog protocol: HTTPS hostname: "api.connectivity-tester.mtrnord.blog" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: api.connectivity-tester.mtrnord.blog-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: api.connectivity-tester.mtrnord.blog-tls - name: https-stage-connectivity-tester-mtrnord-blog protocol: HTTPS hostname: "stage.connectivity-tester.mtrnord.blog" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: stage.connectivity-tester.mtrnord.blog-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: stage.connectivity-tester.mtrnord.blog-tls - name: https-connectivity-tester-mtrnord-blog protocol: HTTPS hostname: "connectivity-tester.mtrnord.blog" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: connectivity-tester.mtrnord.blog-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: connectivity-tester.mtrnord.blog-tls - name: https-federationtester-mtrnord-blog protocol: HTTPS hostname: "federationtester.mtrnord.blog" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: federationtester.mtrnord.blog-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: federationtester.mtrnord.blog-tls - name: https-mtrnord-blog-root protocol: HTTPS hostname: "mtrnord.blog" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: mtrnord.blog-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: mtrnord.blog-tls - name: https-mtrnord-blog-matrix protocol: HTTPS hostname: "matrix.mtrnord.blog" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: matrix.mtrnord.blog-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: matrix.mtrnord.blog-tls - name: https-rss-mtrnord-blog protocol: HTTPS hostname: "rss.mtrnord.blog" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: rss.mtrnord.blog-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: rss.mtrnord.blog-tls - name: https-notify-mtrnord-blog protocol: HTTPS hostname: "notify.mtrnord.blog" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: notify.mtrnord.blog-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: notify.mtrnord.blog-tls - name: https-midnightthoughts-rspamd protocol: HTTPS hostname: "rspamd.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: rspamd.midnightthoughts.space-tls + mode: Terminate + certificateRefs: + - kind: Secret + name: rspamd.midnightthoughts.space-tls - name: https-midnightthoughts-plane protocol: HTTPS hostname: "plane.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: plane.midnightthoughts.space + mode: Terminate + certificateRefs: + - kind: Secret + name: plane.midnightthoughts.space - name: https-midnightthoughts-kimai protocol: HTTPS hostname: "kimai.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: kimai.midnightthoughts.space + mode: Terminate + certificateRefs: + - kind: Secret + name: kimai.midnightthoughts.space - name: https-midnightthoughts-morg-statistics protocol: HTTPS hostname: "morg-statistics.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: morg-statistics.midnightthoughts.space + mode: Terminate + certificateRefs: + - kind: Secret + name: morg-statistics.midnightthoughts.space - name: https-midnightthoughts-mta-sts protocol: HTTPS hostname: "mta-sts.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: mta-sts.midnightthoughts.space + mode: Terminate + certificateRefs: + - kind: Secret + name: mta-sts.midnightthoughts.space - name: https-midnightthoughts-lists protocol: HTTPS hostname: "lists.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: lists.midnightthoughts.space + mode: Terminate + certificateRefs: + - kind: Secret + name: lists.midnightthoughts.space - name: https-midnightthoughts-git protocol: HTTPS hostname: "git.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: git.midnightthoughts.space + mode: Terminate + certificateRefs: + - kind: Secret + name: git.midnightthoughts.space - name: https-midnightthoughts-plausible protocol: HTTPS hostname: "plausible.midnightthoughts.space" port: 443 allowedRoutes: - namespaces: - from: "All" + namespaces: + from: "All" tls: - mode: Terminate - certificateRefs: - - kind: Secret - name: plausible.midnightthoughts.space + mode: Terminate + certificateRefs: + - kind: Secret + name: plausible.midnightthoughts.space - name: http protocol: HTTP port: 80 allowedRoutes: - namespaces: - from: "All" - # - name: https-midnightthoughts-capacitor - # protocol: HTTPS - # hostname: "ui.k8s.midnightthoughts.space" - # port: 443 - # allowedRoutes: - # namespaces: - # from: "All" - # tls: - # mode: Terminate - # certificateRefs: - # - kind: Secret - # name: ui.k8s.midnightthoughts.space-tls + namespaces: + from: "All" + # - name: https-midnightthoughts-capacitor + # protocol: HTTPS + # hostname: "ui.k8s.midnightthoughts.space" + # port: 443 + # allowedRoutes: + # namespaces: + # from: "All" + # tls: + # mode: Terminate + # certificateRefs: + # - kind: Secret + # name: ui.k8s.midnightthoughts.space-tls --- apiVersion: gateway.envoyproxy.io/v1alpha1 kind: ClientTrafficPolicy diff --git a/apps/talos_cluster/plausible/release.yaml b/apps/talos_cluster/plausible/release.yaml @@ -53,7 +53,7 @@ spec: tls: - secretName: plausible.midnightthoughts.space-tls hosts: - - plausible.midnightthoughts.space + - plausible.midnightthoughts.space sops: kms: [] gcp_kms: [] @@ -62,13 +62,13 @@ sops: age: - recipient: age1esjyg2qfy49awv0ptkzvpk425adczjr38m37w2mmcahzc4p8n54sll2nzh enc: | - -----BEGIN AGE ENCRYPTED FILE----- - YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsMTlGbFBDRHRKTStDem9P - YzkyMkpCU0dUY3JxcVh5U0pNQ0c1Nk51QWxFCkpaREg3VmFzZUpDWWx1aWx4S3ph - R0xFZW5mZmdrYVNUTkZ5cmR6OGZVekUKLS0tIEpQcGZwdlBpU2ZzM3RyOFg2cEEr - WmsxdDBKazdGU1prc0J3Sm5KNkFIZ2cKmLPkcujA43iuZKbztxKccV5jLLSrkh9D - kySjfHTy9HHCEJLxGfZ+iEpeMEF4x91GF6wIPXTyD4XqamsbvYdlcA== - -----END AGE ENCRYPTED FILE----- + -----BEGIN AGE ENCRYPTED FILE----- + YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBsMTlGbFBDRHRKTStDem9P + YzkyMkpCU0dUY3JxcVh5U0pNQ0c1Nk51QWxFCkpaREg3VmFzZUpDWWx1aWx4S3ph + R0xFZW5mZmdrYVNUTkZ5cmR6OGZVekUKLS0tIEpQcGZwdlBpU2ZzM3RyOFg2cEEr + WmsxdDBKazdGU1prc0J3Sm5KNkFIZ2cKmLPkcujA43iuZKbztxKccV5jLLSrkh9D + kySjfHTy9HHCEJLxGfZ+iEpeMEF4x91GF6wIPXTyD4XqamsbvYdlcA== + -----END AGE ENCRYPTED FILE----- lastmodified: "2025-10-16T21:00:15Z" mac: ENC[AES256_GCM,data:qsQNsaocKZ1DTIGjgK0uD2T5kpE+odfSXKD2dxB5QhpREIeORJIIB3kHPr7JYJMFPFbpfNzUXnqQymjPEbU8FfsMKtB4RhkdSzxGiLEztjnw65MufTTBF4Suur1874O7XgVcJAIOniw1Cpgj2pqBw89V1hwg+kK2uph1iSfS45U=,iv:4xWH8uaaF6Uckg7oDUyJkBFm9OeA86XWvwQDObwc5yE=,tag:6Q5rJrTs8EPlQ5VDyVUmkg==,type:str] pgp: [] diff --git a/apps/talos_cluster/plausible/route.yaml b/apps/talos_cluster/plausible/route.yaml @@ -1,4 +1,3 @@ ---- apiVersion: gateway.networking.k8s.io/v1 kind: HTTPRoute metadata: @@ -12,8 +11,8 @@ spec: - plausible.midnightthoughts.space rules: - backendRefs: - - name: plausible-plausible-analytics - port: 80 + - name: plausible-plausible-analytics + port: 80 --- apiVersion: gateway.envoyproxy.io/v1alpha1 kind: BackendTrafficPolicy diff --git a/infrastructure_talos/configs/cnpg-cluster.yaml b/infrastructure_talos/configs/cnpg-cluster.yaml @@ -112,7 +112,7 @@ spec: - name: barman-cloud.cloudnative-pg.io isWALArchiver: true parameters: - barmanObjectName: hetzner-base-backup + barmanObjectName: hetzner-base-backup managed: roles: - name: freshrss @@ -120,128 +120,128 @@ spec: login: true superuser: false passwordSecret: - name: freshrss + name: freshrss - name: meowlnir ensure: present login: true comment: Read Only Access for synapse required but RW to meowlnir db superuser: false passwordSecret: - name: meowlnir + name: meowlnir - name: connectivity-tester-stage ensure: present login: true superuser: false passwordSecret: - name: connectivity-tester-stage + name: connectivity-tester-stage - name: connectivity-tester ensure: present login: true superuser: false passwordSecret: - name: connectivity-tester + name: connectivity-tester - name: draupnir_synapse ensure: present login: true superuser: false passwordSecret: - name: draupnir-synapse + name: draupnir-synapse - name: authentik ensure: present login: true superuser: false passwordSecret: - name: authentik + name: authentik - name: ejabberd ensure: present login: true superuser: false passwordSecret: - name: ejabberd + name: ejabberd - name: vaultwarden ensure: present login: true superuser: false passwordSecret: - name: vaultwarden + name: vaultwarden - name: mastodon ensure: present login: true superuser: false passwordSecret: - name: mastodon + name: mastodon - name: openproject ensure: present login: true superuser: false passwordSecret: - name: openproject + name: openproject - name: plausible ensure: present login: true superuser: false passwordSecret: - name: plausible + name: plausible - name: coder ensure: present login: true superuser: false passwordSecret: - name: coder + name: coder - name: matrix_auth ensure: present login: true superuser: false passwordSecret: - name: matrix-auth + name: matrix-auth - name: cachet ensure: present login: true superuser: false passwordSecret: - name: cachet + name: cachet - name: docuseal ensure: present login: true superuser: false passwordSecret: - name: docuseal + name: docuseal - name: bugzilla ensure: present login: true superuser: false passwordSecret: - name: bugzilla + name: bugzilla - name: rundeck ensure: present login: true superuser: false passwordSecret: - name: rundeck + name: rundeck - name: plane ensure: present login: true superuser: false passwordSecret: - name: plane + name: plane - name: gotosocial ensure: present login: true superuser: false passwordSecret: - name: gotosocial + name: gotosocial - name: grafana-ro ensure: present login: true superuser: false passwordSecret: - name: grafana-ro + name: grafana-ro - name: mailman ensure: present login: true superuser: false passwordSecret: - name: mailman + name: mailman storage: storageClass: hcloud-volumes size: 15Gi