--- apiVersion: v1 kind: Namespace metadata: name: researchowl --- apiVersion: v1 kind: PersistentVolumeClaim metadata: annotations: # Never let ArgoCD prune this PVC: it holds persistent app data. argocd.argoproj.io/sync-options: Prune=false name: researchowl-data namespace: researchowl spec: accessModes: - ReadWriteOnce resources: requests: storage: 10Gi --- apiVersion: apps/v1 kind: Deployment metadata: name: researchowl namespace: researchowl labels: app: researchowl spec: replicas: 1 # Single-replica bot on a RWO local-path SQLite DB (WAL): Recreate avoids two pods # briefly opening /data/researchowl.db during a roll (double-writer corruption risk). strategy: type: Recreate selector: matchLabels: app: researchowl template: metadata: labels: app: researchowl spec: containers: - name: researchowl image: git.chemavx.xyz/chemavx/researchowl:72766229 imagePullPolicy: Always env: - name: TELEGRAM_BOT_TOKEN valueFrom: secretKeyRef: name: researchowl-secrets-infisical key: telegram-bot-token - name: TELEGRAM_ALLOWED_USERS valueFrom: secretKeyRef: name: researchowl-secrets-infisical key: telegram-allowed-users - name: OLLAMA_URL value: "http://ollama.ollama.svc.cluster.local:11434" - name: OLLAMA_MODEL value: "qwen2.5:3b" - name: OLLAMA_EMBED_MODEL value: "nomic-embed-text" - name: DB_PATH value: "/data/researchowl.db" - name: MAX_SOURCES value: "150" - name: MAX_DEPTH value: "3" - name: QUALITY_THRESHOLD value: "0.4" - name: ANTHROPIC_API_KEY valueFrom: secretKeyRef: name: researchowl-secrets-infisical key: anthropic-api-key - name: GHOST_URL value: "https://zonadeexclusion.com" - name: GHOST_API_KEY valueFrom: secretKeyRef: name: researchowl-secrets-infisical key: ghost-api-key - name: GHOST_URL_EN value: "https://www.theexclusionzone.com" - name: GHOST_API_KEY_EN valueFrom: secretKeyRef: name: researchowl-secrets-infisical key: ghost-api-key-en - name: SEO_AUTOFILL value: "on" volumeMounts: - name: data mountPath: /data resources: requests: memory: "256Mi" cpu: "100m" limits: memory: "1Gi" cpu: "500m" volumes: - name: data persistentVolumeClaim: claimName: researchowl-data imagePullSecrets: - name: gitea-registry-infisical # Secret is managed imperatively (not by ArgoCD) to avoid overwriting real values: # kubectl create secret generic researchowl-secrets \ # --from-literal=telegram-bot-token=YOUR_TOKEN \ # --from-literal=telegram-allowed-users=YOUR_USER_ID \ # --from-literal=anthropic-api-key=YOUR_KEY \ # -n researchowl