Add Zulip to phd-server stack #11

Merged
parkerhdavis merged 1 commit from add-zulip into main 2026-05-29 22:24:00 -06:00
parkerhdavis commented 2026-05-29 22:23:54 -06:00 (Migrated from github.com)

Summary

Adds Zulip as the eleventh service on phd-server, inlined into docker-compose.phd-server.yml alongside its postgres / rabbitmq / redis / memcached sidecars (following the Immich pattern). Adapted from upstream docker-zulip, pinned to 12.0-1.

  • Listens on 127.0.0.1:8082 behind Traefik/Pangolin, DISABLE_HTTPS=True, LOADBALANCER_IPS covering the Docker bridge gateway so Zulip trusts the proxy's X-Forwarded-* headers.
  • Five auto-generated infrastructure secrets (postgres, memcached, rabbitmq, redis, secret_key) are file-mounted from zulip/secrets/ (gitignored). make setup phd-server generates them.
  • The Resend SMTP password lives in .env as ZULIP_SMTP_PASSWORD and is threaded into the container as SECRETS_email_password — verified against the upstream entrypoint that the SECRETS_* env-var path writes to the same zulip-secrets.conf key as a /run/secrets/zulip__* file mount would.
  • New Makefile targets follow the Perforce pattern: zulip cmd='...', zulip-create-org, zulip-shell, zulip-backup, zulip-gen-secret.

Test plan

  • docker compose config --quiet parses cleanly with stub secret files in place
  • make help renders the new Zulip section
  • On phd-server: make setup phd-server generates the five secrets and the backup dir
  • make up phd-server brings Zulip up cleanly (no boot-time secret errors)
  • Pangolin resource created for zulip.${BASE_DOMAIN} → http://<phd-server-ip>:8082 with WebSocket support
  • make zulip-create-org produces a working realm-creation link
  • Once Resend issues the API key: set ZULIP_SMTP_PASSWORD in .env, recreate the container, verify invitation emails deliver
## Summary Adds Zulip as the eleventh service on phd-server, inlined into `docker-compose.phd-server.yml` alongside its postgres / rabbitmq / redis / memcached sidecars (following the Immich pattern). Adapted from upstream [docker-zulip](https://github.com/zulip/docker-zulip), pinned to `12.0-1`. - Listens on `127.0.0.1:8082` behind Traefik/Pangolin, `DISABLE_HTTPS=True`, `LOADBALANCER_IPS` covering the Docker bridge gateway so Zulip trusts the proxy's `X-Forwarded-*` headers. - Five auto-generated infrastructure secrets (postgres, memcached, rabbitmq, redis, secret_key) are file-mounted from `zulip/secrets/` (gitignored). `make setup phd-server` generates them. - The Resend SMTP password lives in `.env` as `ZULIP_SMTP_PASSWORD` and is threaded into the container as `SECRETS_email_password` — verified against the upstream entrypoint that the `SECRETS_*` env-var path writes to the same `zulip-secrets.conf` key as a `/run/secrets/zulip__*` file mount would. - New Makefile targets follow the Perforce pattern: `zulip cmd='...'`, `zulip-create-org`, `zulip-shell`, `zulip-backup`, `zulip-gen-secret`. ## Test plan - [x] `docker compose config --quiet` parses cleanly with stub secret files in place - [x] `make help` renders the new Zulip section - [ ] On phd-server: `make setup phd-server` generates the five secrets and the backup dir - [ ] `make up phd-server` brings Zulip up cleanly (no boot-time secret errors) - [ ] Pangolin resource created for `zulip.${BASE_DOMAIN}` → `http://<phd-server-ip>:8082` with WebSocket support - [ ] `make zulip-create-org` produces a working realm-creation link - [ ] Once Resend issues the API key: set `ZULIP_SMTP_PASSWORD` in `.env`, recreate the container, verify invitation emails deliver
Sign in to join this conversation.
No reviewers
No labels
No milestone
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
parker/cumulus!11
No description provided.