Hand-rolled manifests under apps/kaneo/ + Argo Application: - Dedicated PostgreSQL 16-alpine on hcloud-volumes-encrypted (20Gi), pinned to fsn1 via csi.hetzner.cloud/location node affinity. - Kaneo v2.22.0 (single ghcr.io/usekaneo/kaneo image; API + web on 5173). Pinned to fsn1 for consistency with the volume. - Traefik ingress at kaneo.basicstack.de with letsencrypt-prod cert. - Better Auth JWT secret and Postgres credentials as SealedSecrets. - OIDC via Pocket ID using CUSTOM_OAUTH_*, restricted to the two new Pocket ID groups kaneo-admins / kaneo-members (client id d58ff9bb-dc98-49b4-9535-4af2aba66de2). - Registration + password + email-OTP sign-in disabled; SSO only. Co-Authored-By: Paperclip <noreply@paperclip.ing> |
||
|---|---|---|
| .. | ||
| kaneo-app-secrets-sealed.yaml | ||
| kaneo-db-credentials-sealed.yaml | ||
| kaneo-deployment.yaml | ||
| kaneo-ingress.yaml | ||
| kaneo-oidc-secret-sealed.yaml | ||
| kaneo-postgres-deployment.yaml | ||
| kaneo-postgres-pvc.yaml | ||
| kaneo-postgres-service.yaml | ||
| kaneo-service.yaml | ||
| README.md | ||
Kaneo
Self-hosted Kaneo — open-source project management — deployed on the BasicStack Kubernetes cluster.
- URL: https://kaneo.basicstack.de
- Namespace:
kaneo - Distribution: hand-rolled manifests, GitOps-managed by Argo CD
(see
apps/app-kaneo.yaml). - Auth: OIDC via Pocket ID (
https://auth.basicstack.de) withCUSTOM_OAUTH_*env vars. Client id + secret live inkaneo-oidc-secret(SealedSecret). Access is restricted to Pocket ID groupskaneo-admins/kaneo-members. - Database: dedicated PostgreSQL in-namespace on
hcloud-volumes-encrypted(20Gi). Both the Postgres and Kaneo pods pin to thefsn1datacenter viacsi.hetzner.cloud/location=fsn1node affinity — the Hetzner volume is DC-local. - TLS: Traefik ingress, cert issued by
letsencrypt-prod(DNS-01 via the Hetzner cert-manager webhook). - Image:
ghcr.io/usekaneo/kaneo:2.22.0(single container bundling API + web on port 5173, health at/api/health).
Files
| File | Purpose |
|---|---|
kaneo-postgres-pvc.yaml |
20 Gi encrypted Hetzner volume for Postgres data. |
kaneo-postgres-deployment.yaml |
Postgres 16-alpine, pinned to fsn1. |
kaneo-postgres-service.yaml |
ClusterIP service kaneo-postgres:5432. |
kaneo-db-credentials-sealed.yaml |
Postgres user password (SealedSecret). |
kaneo-app-secrets-sealed.yaml |
AUTH_SECRET (Better Auth JWT secret, ≥32 chars). |
kaneo-oidc-secret-sealed.yaml |
OIDC client id + secret from Pocket ID. |
kaneo-deployment.yaml |
Kaneo app deployment (pinned to fsn1). |
kaneo-service.yaml |
ClusterIP service on port 80 → container 5173. |
kaneo-ingress.yaml |
Traefik ingress + letsencrypt-prod cert. |
Post-deploy setup
- Point browser at https://kaneo.basicstack.de and sign in via the "Sign in with Pocket ID" (custom OAuth) button.
- The first admin (
andreas.leinen@basicstack.de, member ofkaneo-admins) must be promoted inside Kaneo — the current upstream release does not map OIDC groups to roles.
SMTP
SMTP env vars are intentionally not wired. Once a
kaneo@basicstack.de mailbox exists in Stalwart, add
SMTP_HOST/SMTP_PORT/SMTP_USER/SMTP_PASSWORD/SMTP_FROM via
kaneo-smtp-sealed.yaml and reference them from the deployment. Set
DISABLE_EMAIL_OTP_SIGN_IN=true so users continue to sign in via SSO
rather than email codes.