Stand up Ketesa for matrix admin. Add the matrix bot

This commit is contained in:
Astra Logical 2026-07-22 15:54:01 -04:00
parent 2155402052
commit 6c47622e40
5 changed files with 155 additions and 2 deletions

View file

@ -2,7 +2,7 @@ apiVersion: v1
kind: Pod kind: Pod
metadata: metadata:
name: data-restorer name: data-restorer
namespace: default namespace: matrix
spec: spec:
containers: containers:
- name: alpine - name: alpine
@ -14,4 +14,4 @@ spec:
volumes: volumes:
- name: target-volume - name: target-volume
persistentVolumeClaim: persistentVolumeClaim:
claimName: forgejo-data claimName: postgres-data

View file

@ -0,0 +1,64 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: synapse-admin
namespace: matrix
annotations:
keel.sh/policy: "all"
keel.sh/match-tag: "true"
keel.sh/schedule: "0 3 * * *"
spec:
replicas: 1
selector:
matchLabels:
app: synapse-admin
template:
metadata:
labels:
app: synapse-admin
spec:
containers:
- name: synapse-admin
image: ghcr.io/etkecc/ketesa:latest
ports:
- containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
name: synapse-admin-svc
namespace: matrix
spec:
type: ClusterIP
ports:
- port: 80
targetPort: 8080
protocol: TCP
name: http
selector:
app: synapse-admin
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: synapse-admin-ingress
namespace: matrix
annotations:
cert-manager.io/cluster-issuer: "letsencrypt-prod"
traefik.ingress.kubernetes.io/router.entrypoints: websecure
spec:
tls:
- hosts:
- starling-admin.mynest.love
secretName: synapse-admin-tls
rules:
- host: "starling-admin.mynest.love"
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: synapse-admin-svc
port:
number: 80

View file

@ -15,6 +15,7 @@ data:
- name: compat - name: compat
- name: graphql - name: graphql
- name: assets - name: assets
- name: adminapi
binds: binds:
- host: "::" - host: "::"
port: 8080 port: 8080

View file

@ -0,0 +1,66 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: matrix-keycloak-bot
namespace: default
labels:
app.kubernetes.io/name: matrix-keycloak-bot
app.kubernetes.io/component: automation
spec:
# Maintain exactly 1 replica to prevent duplicate event handling on Matrix syncs
replicas: 1
strategy:
type: Recreate
selector:
matchLabels:
app.kubernetes.io/name: matrix-keycloak-bot
template:
metadata:
labels:
app.kubernetes.io/name: matrix-keycloak-bot
spec:
imagePullSecrets:
- name: forgejo-registry-secret
securityContext:
runAsNonRoot: true
runAsUser: 10001
runAsGroup: 10001
fsGroup: 10001
containers:
- name: bot
image: weaver.mynest.love/nest/nest-matrix-bot:latest
imagePullPolicy: Always
securityContext:
allowPrivilegeEscalation: false
readOnlyRootFilesystem: true
capabilities:
drop:
- ALL
env:
# --- Non-Sensitive Configuration ---
- name: MATRIX_HOMESERVER
value: "https://starling.mynest.love"
- name: MATRIX_BOT_USER
value: "@access-bot:starling.mynest.love"
- name: ADMIN_ROOM_ID
value: "!adminroomid:starling.mynest.love"
- name: ADMIN_MATRIX_IDS
value: "@nest:starling.mynest.love"
- name: KEYCLOAK_URL
value: "https://sso.mynest.love/"
- name: KEYCLOAK_REALM
value: "nest"
- name: KEYCLOAK_CLIENT_ID
value: "nest-matrix-bot"
# --- Sensitive Credentials from Vault-managed Secret ---
- name: MATRIX_BOT_PASSWORD
valueFrom:
secretKeyRef:
name: matrix-bot-credentials
key: MATRIX_BOT_PASSWORD
- name: KEYCLOAK_CLIENT_SECRET
valueFrom:
secretKeyRef:
name: matrix-bot-credentials
key: KEYCLOAK_CLIENT_SECRET

View file

@ -0,0 +1,22 @@
apiVersion: external-secrets.io/v1beta1
kind: ExternalSecret
metadata:
name: matrix-bot-credentials
namespace: default
spec:
refreshInterval: 1h
secretStoreRef:
kind: ClusterSecretStore
name: vault-backend
target:
name: matrix-bot-credentials
creationPolicy: Owner
data:
- secretKey: MATRIX_BOT_PASSWORD
remoteRef:
key: secret/data/nest/matrix-bot
property: bot_password
- secretKey: KEYCLOAK_CLIENT_SECRET
remoteRef:
key: secret/data/nest/matrix-bot
property: client_secret