Serve the Zitadel login from the Login V2 container

Zitadel v4 redirects every sign-in to /ui/v2/login, which is served by a
separate container (zitadel-login) that this stack didn't run, so logging
in on a fresh instance ended in a 404.

- Add zitadel-login, with its own service account (login-client) whose
  PAT Zitadel writes to a volume only that container mounts.
- Configure the Login V2 base URL (ZITADEL_LOGIN_BASE_URL): its own port
  in dev, same hostname as Zitadel behind the edge in prod.
- Pin zitadel and zitadel-login to v4.19.1 and add healthchecks.
- Run Zitadel as root, as Zitadel's own compose does, so it can write the
  PATs into root-owned mounts (the Linux bind mount and the new volume).
- Route /ui/v2/login on the auth vhost to the login container and drop
  the no-op grpc_set_header.
- Document the extra steps for an instance created before this.
This commit is contained in:
2026-09-24 15:05:42 +02:00
parent 7d1a3e75d8
commit 6dcbd9589a
6 changed files with 108 additions and 4 deletions
+3
View File
@@ -20,6 +20,9 @@ ZITADEL_EXTERNAL_DOMAIN=auth.example.com
ZITADEL_EXTERNAL_PORT=443
ZITADEL_EXTERNAL_SECURE=true
ZITADEL_TLS_MODE=external
ZITADEL_PUBLIC_SCHEME=https
# Login V2 UI, routed by the edge under the same hostname. No trailing slash.
ZITADEL_LOGIN_BASE_URL=https://auth.example.com/ui/v2/login
ZITADEL_DATABASE_PASSWORD=CHANGE_ME
ZITADEL_ORG_NAME=Iker Demo
ZITADEL_ADMIN_USERNAME=admin@ikerdemo.cat