blumeops/docs/reference/infrastructure/routing.md
Erich Blume 07f52e9488
All checks were successful
Build Container / detect (push) Successful in 2s
Build Container / build-dockerfile (paperless) (push) Successful in 9s
Deploy Paperless-ngx document management (#328)
## 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
2026-04-08 17:54:12 -07:00

3.3 KiB

title modified tags
Routing 2026-03-03
infrastructure
networking

Service Routing

Services are accessible via three DNS domains with different reachability.

DNS Domains

Domain Proxy Reachable From
*.eblu.me flyio-proxy (Fly.io → Tailscale tunnel) Public internet
*.ops.eblu.me Caddy on indri k8s pods, docker containers, tailnet clients
*.tail8d86e.ts.net Tailscale MagicDNS Tailnet clients only

Use *.ops.eblu.me for services that need pod-to-service communication. Use *.eblu.me for services exposed publicly via Fly.io.

Caddy Services (*.ops.eblu.me)

DNS points to indri's Tailscale IP. TLS via Let's Encrypt (ACME DNS-01 with Gandi).

Service URL Description
Homepage https://go.ops.eblu.me Service dashboard
forgejo https://forge.ops.eblu.me Git hosting (SSH: 2222)
zot https://registry.ops.eblu.me Container registry
grafana https://grafana.ops.eblu.me Dashboards
argocd https://argocd.ops.eblu.me GitOps CD
prometheus https://prometheus.ops.eblu.me Metrics
loki https://loki.ops.eblu.me Logs
miniflux https://feed.ops.eblu.me RSS reader
kiwix https://kiwix.ops.eblu.me Offline Wikipedia
transmission https://torrent.ops.eblu.me BitTorrent
teslamate https://tesla.ops.eblu.me Tesla logger
navidrome https://dj.ops.eblu.me Music streaming
jellyfin https://jellyfin.ops.eblu.me Media server
postgresql pg.ops.eblu.me:5432 Database
mealie https://meals.ops.eblu.me Recipe manager
paperless https://paperless.ops.eblu.me Document management
[[sifaka Sifaka]] https://nas.ops.eblu.me

Public Services (*.eblu.me)

DNS CNAMEs point to blumeops-proxy.fly.dev. TLS via Fly.io-managed Let's Encrypt. Traffic tunnels back to the homelab over Tailscale. Only services tagged tag:flyio-target are reachable by the proxy — see flyio-proxy for details.

Service URL Description
docs https://docs.eblu.me Documentation site
forgejo https://forge.eblu.me Git hosting (public)

Tailscale-Only Services

Service URL Description
Kubernetes https://k8s.tail8d86e.ts.net Minikube API

Port Map (Indri)

Port Service Protocol Binding Notes
443 Caddy HTTPS 0.0.0.0 Reverse proxy
2222 Caddy L4 TCP 0.0.0.0 SSH proxy to Forgejo
5432 Caddy L4 TCP 0.0.0.0 PostgreSQL proxy
9100 Caddy L4 TCP 0.0.0.0 Sifaka node_exporter proxy
9633 Caddy L4 TCP 0.0.0.0 Sifaka smartctl_exporter proxy
2200 Forgejo SSH TCP localhost Built-in SSH server
3001 Forgejo HTTP localhost Web UI
5050 Zot HTTP localhost Registry API
8096 Jellyfin HTTP localhost Media server
44491 K8s API HTTPS 0.0.0.0 Minikube API server