## Summary - Add paperless-ngx (v2.20.13) as a new ArgoCD-managed service on indri - Dockerfile built from forge mirror (`mirrors/paperless-ngx`), multi-stage with s6-overlay - PostgreSQL database via `blumeops-pg` CNPG cluster, Redis sidecar for Celery - NFS document storage on sifaka (`/volume1/paperless`) - Authentik OIDC SSO via baked JSON blob from 1Password - Caddy route at `paperless.ops.eblu.me` - 1Password item "Paperless (blumeops)" created with all secrets ## Files - `containers/paperless/Dockerfile` — multi-stage build - `argocd/manifests/paperless/` — full k8s manifest set - `argocd/apps/paperless.yaml` — ArgoCD application - `argocd/manifests/databases/` — CNPG role + ExternalSecret - `ansible/roles/caddy/defaults/main.yml` — Caddy route - `service-versions.yaml` — version tracking entry - `docs/reference/services/paperless.md` — reference card ## Remaining deploy steps 1. Build container: `mise run container-build-and-release paperless` 2. Update kustomization.yaml `newTag` with actual image tag 3. Create Authentik application/provider for paperless 4. Create `paperless` database on blumeops-pg 5. Sync ArgoCD apps, then sync paperless from branch 6. Provision Caddy: `mise run provision-indri -- --tags caddy` 7. Verify at https://paperless.ops.eblu.me 🤖 Generated with [Claude Code](https://claude.com/claude-code) Reviewed-on: #328
107 lines
3.4 KiB
YAML
107 lines
3.4 KiB
YAML
---
|
|
apiVersion: apps/v1
|
|
kind: Deployment
|
|
metadata:
|
|
name: authentik-worker
|
|
namespace: authentik
|
|
spec:
|
|
replicas: 1
|
|
selector:
|
|
matchLabels:
|
|
app: authentik
|
|
component: worker
|
|
template:
|
|
metadata:
|
|
labels:
|
|
app: authentik
|
|
component: worker
|
|
spec:
|
|
containers:
|
|
- name: worker
|
|
image: registry.ops.eblu.me/blumeops/authentik:kustomized
|
|
args: ["worker"]
|
|
env:
|
|
- name: AUTHENTIK_SECRET_KEY
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: authentik-config
|
|
key: secret-key
|
|
- name: AUTHENTIK_POSTGRESQL__HOST
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: authentik-config
|
|
key: postgresql-host
|
|
- name: AUTHENTIK_POSTGRESQL__PORT
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: authentik-config
|
|
key: postgresql-port
|
|
- name: AUTHENTIK_POSTGRESQL__NAME
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: authentik-config
|
|
key: postgresql-name
|
|
- name: AUTHENTIK_POSTGRESQL__USER
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: authentik-config
|
|
key: postgresql-user
|
|
- name: AUTHENTIK_POSTGRESQL__PASSWORD
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: authentik-config
|
|
key: postgresql-password
|
|
- name: AUTHENTIK_REDIS__HOST
|
|
value: authentik-redis
|
|
- name: AUTHENTIK_WORKER_CONCURRENCY
|
|
value: "2"
|
|
- name: AUTHENTIK_GRAFANA_CLIENT_SECRET
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: authentik-config
|
|
key: grafana-client-secret
|
|
- name: AUTHENTIK_FORGEJO_CLIENT_SECRET
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: authentik-config
|
|
key: forgejo-client-secret
|
|
- name: AUTHENTIK_ZOT_CLIENT_SECRET
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: authentik-config
|
|
key: zot-client-secret
|
|
- name: AUTHENTIK_JELLYFIN_CLIENT_SECRET
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: authentik-config
|
|
key: jellyfin-client-secret
|
|
- name: AUTHENTIK_ARGOCD_CLIENT_SECRET
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: authentik-config
|
|
key: argocd-client-secret
|
|
- name: AUTHENTIK_MEALIE_CLIENT_SECRET
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: authentik-config
|
|
key: mealie-client-secret
|
|
- name: AUTHENTIK_PAPERLESS_CLIENT_SECRET
|
|
valueFrom:
|
|
secretKeyRef:
|
|
name: authentik-config
|
|
key: paperless-client-secret
|
|
volumeMounts:
|
|
- name: blueprints
|
|
mountPath: /blueprints/custom
|
|
readOnly: true
|
|
resources:
|
|
requests:
|
|
memory: "512Mi"
|
|
cpu: "100m"
|
|
limits:
|
|
memory: "2Gi"
|
|
cpu: "1000m"
|
|
volumes:
|
|
- name: blueprints
|
|
configMap:
|
|
name: authentik-blueprints
|