homelab-codex-ws/services/vikunja/service.yaml
Oskar Kapala f7e1391f30 feat(vikunja): bring PIHA Vikunja under GitOps (postgres + Forgejo OIDC)
Wraps the existing manually-run Vikunja instance on PIHA in the standard
service layout. No deploy — definition only, for review.

- services/vikunja/: docker-compose.yml (vikunja + postgres:16-alpine),
  service.yaml, README, healthcheck, config.yml (OIDC, secret-free),
  .env.example. Real .env stays gitignored.
- Pins EXISTING named volumes (vikunja_vikunja_db, vikunja_vikunja_files)
  so DB + uploaded files survive cutover.
- extra_hosts forgejo.okit.pl=192.168.31.5 (npm on PIHA) so OIDC discovery
  resolves over LAN instead of flaky public DNS.
- OIDC client secret injected via env (VIKUNJA_AUTH_OPENID_PROVIDERS_
  FORGEJO_CLIENTSECRET); config.yml keeps trailing-slash authurl/redirecturl.
- Registers vikunja in hosts/piha/services.yaml + inventory/topology.yaml,
  plus hosts/piha/runtime/vikunja override (advisory mem_limits).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-17 15:02:37 +02:00

32 lines
1 KiB
YAML

service:
name: vikunja
owner_node: piha
exposure: private # reachable on Tailscale; public via npm reverse proxy
dependencies:
- forgejo # OIDC identity provider (forgejo.okit.pl)
ports:
- container: 3456
host: 3456
protocol: tcp
healthcheck:
type: http
endpoint: http://localhost:3456/api/v1/info
interval: 30s
timeout: 10s
retries: 5
restart_policy: unless-stopped
persistence:
# Data lives in pre-existing Docker named volumes — do NOT move/rename.
paths:
- vikunja_vikunja_db # postgres data -> /var/lib/postgresql/data
- vikunja_vikunja_files # uploads -> /app/vikunja/files
runtime:
config_files:
- config.yml # OIDC provider metadata (secret-free, in git)
- .env # secrets (gitignored, supplied per node)
env_vars:
- POSTGRES_PASSWORD
- VIKUNJA_DATABASE_PASSWORD
- VIKUNJA_SERVICE_JWTSECRET
- VIKUNJA_AUTH_OPENID_PROVIDERS_FORGEJO_CLIENTSECRET