apiVersion: apps/v1 kind: Deployment metadata: name: duckdb-backend namespace: family labels: app.kubernetes.io/name: duckdb-backend app.kubernetes.io/part-of: family-portal spec: replicas: 1 strategy: type: Recreate selector: matchLabels: app.kubernetes.io/name: duckdb-backend template: metadata: labels: app.kubernetes.io/name: duckdb-backend app.kubernetes.io/part-of: family-portal spec: imagePullSecrets: - name: registry-haumdaucher-de initContainers: - name: git-init image: alpine/git:latest command: ["/bin/sh", "-c"] args: - | set -e export HOME=/tmp cd /wiki if [ ! -d ".git" ]; then echo "Initializing wiki repository on dedicated PVC..." REPO_URL="https://${GIT_SYNC_USERNAME}:${GIT_SYNC_PASSWORD}@git.moritzgraf.de/moritz/knowledge-wiki.git" git config --global http.sslVerify false git config --global --add safe.directory /wiki git config --global --add safe.directory '*' git init git remote add origin "$REPO_URL" || git remote set-url origin "$REPO_URL" git fetch origin main git checkout -f -B main origin/main echo "Clone completed successfully." else echo "Repository already initialized on PVC, updating..." REPO_URL="https://${GIT_SYNC_USERNAME}:${GIT_SYNC_PASSWORD}@git.moritzgraf.de/moritz/knowledge-wiki.git" git config --global http.sslVerify false git config --global --add safe.directory /wiki git config --global --add safe.directory '*' git remote set-url origin "$REPO_URL" if [ -f .git/shallow ]; then echo "Unshallowing existing repository..." git fetch --unshallow origin main || git fetch origin main else git fetch origin main fi git rebase --abort 2>/dev/null || true git merge --abort 2>/dev/null || true git reset --hard origin/main git clean -fd fi env: - name: GIT_SYNC_USERNAME valueFrom: secretKeyRef: name: wiki-git-credentials key: git-sync-username - name: GIT_SYNC_PASSWORD valueFrom: secretKeyRef: name: wiki-git-credentials key: wiki-sync-token volumeMounts: - name: duckdb-wiki-data mountPath: /wiki containers: - name: duckdb-backend image: registry.haumdaucher.de/family/duckdb-backend:latest imagePullPolicy: Always env: - name: DATA_DIR value: "/wiki/data" - name: DUCKDB_DATA_DIR value: "/wiki/data" - name: WIKI_DIR value: "/wiki" - name: GIT_REPO_DIR value: "/wiki" - name: GIT_REPO_URL value: "https://git.moritzgraf.de/moritz/knowledge-wiki.git" - name: GIT_REMOTE_URL value: "https://git.moritzgraf.de/moritz/knowledge-wiki.git" - name: GIT_SYNC_USERNAME valueFrom: secretKeyRef: name: wiki-git-credentials key: git-sync-username - name: GIT_SYNC_PASSWORD valueFrom: secretKeyRef: name: wiki-git-credentials key: wiki-sync-token - name: GIT_SYNC_INTERVAL_SECONDS value: "60" - name: PORT value: "8000" - name: HOST value: "0.0.0.0" ports: - name: http containerPort: 8000 volumeMounts: - name: duckdb-wiki-data mountPath: /wiki resources: requests: cpu: 50m memory: 128Mi limits: cpu: 1000m memory: 1Gi readinessProbe: httpGet: path: /duckdb-api/v1/healthz port: 8000 initialDelaySeconds: 5 periodSeconds: 10 livenessProbe: httpGet: path: /duckdb-api/v1/healthz port: 8000 initialDelaySeconds: 15 periodSeconds: 20 volumes: - name: duckdb-wiki-data persistentVolumeClaim: claimName: duckdb-wiki-data --- apiVersion: v1 kind: Service metadata: name: duckdb-backend namespace: family labels: app.kubernetes.io/name: duckdb-backend app.kubernetes.io/part-of: family-portal spec: type: ClusterIP ports: - port: 8000 targetPort: 8000 name: http selector: app.kubernetes.io/name: duckdb-backend