Skip to content

Services Overview

Need help getting set up?

Bunker Operations provides managed infrastructure and hands-on setup assistance for organizations running Changemaker Lite. We handle domains, tunnels, SMTP, and servers so you can focus on your campaign. Get in touch: bnkops.com | admin@bnkops.ca

Changemaker Lite runs as 30+ Docker containers orchestrated by Docker Compose. This page catalogs every service, organized by category.

Quick reference

Use docker compose ps to see which services are currently running, or docker compose ps -a to include stopped containers.


Core (Required)

These services form the minimum viable platform. Start them first.

Container Port Description
changemaker-v2-api 4000 Express.js REST API (Prisma ORM)
changemaker-v2-admin 3000 React admin GUI (Vite + Ant Design)
changemaker-v2-postgres 5433 PostgreSQL 16 — primary database
redis-changemaker 6379 Redis 7 — cache, rate limiting, job queues
changemaker-v2-nginx 80 Nginx reverse proxy — subdomain routing
# Start core services only (minimal)
docker compose up -d v2-postgres redis api admin nginx

# Or start everything at once
docker compose up -d

The API container automatically runs database migrations and seeding on startup via its entrypoint script.

Note

Nginx is technically optional for local development (you can access services directly by port), but required for production subdomain routing.


Media

Container Port Description Feature Flag
changemaker-media-api 4100 Fastify media API — video library, analytics, scheduling ENABLE_MEDIA_FEATURES=true
docker compose up -d media-api

The media API runs as a separate Fastify server sharing the same PostgreSQL database. It handles video upload (FFprobe metadata extraction), scheduled publishing via BullMQ, and GDPR-compliant view analytics.


Communication

Rocket.Chat (Team Chat)

Container Port Description Feature Flag
rocketchat-changemaker 8891 Rocket.Chat server ENABLE_CHAT=true
mongodb-changemaker MongoDB (Rocket.Chat data store)
nats-changemaker NATS (Rocket.Chat message bus)
docker compose up -d rocketchat mongodb nats

Gancio (Events)

Container Port Description Feature Flag
gancio-changemaker 8092 Gancio event platform GANCIO_SYNC_ENABLED=true
gancio-init Init container — creates Gancio database
docker compose up -d gancio

Init containers

gancio-init runs once on first start to create the Gancio database in PostgreSQL, then exits. This is normal — don't worry about seeing it in a "stopped" state.

Jitsi Meet (Video Conferencing)

Container Port Description Feature Flag
jitsi-web-changemaker 8893 Jitsi web interface ENABLE_MEET=true
jitsi-prosody-changemaker XMPP server (Prosody)
jitsi-jicofo-changemaker Jitsi conference focus
jitsi-jvb-changemaker 10000/udp Jitsi video bridge
docker compose up -d jitsi-web jitsi-prosody jitsi-jicofo jitsi-jvb

Firewall requirement

Jitsi requires UDP port 10000 open in your firewall for video/audio media traffic. Set JVB_ADVERTISE_IP in .env to your server's public IP address.


Newsletter & Email

Container Port Description Feature Flag
listmonk-app 9001 Listmonk newsletter platform LISTMONK_SYNC_ENABLED=true
listmonk-db 5432 PostgreSQL (Listmonk's own database)
listmonk-init Init container — creates API user
mailhog-changemaker 8025 MailHog email capture (development) EMAIL_TEST_MODE=true
# Newsletter platform
docker compose up -d listmonk-app

# Email testing (captures all outgoing emails)
docker compose up -d mailhog

Listmonk has its own PostgreSQL instance separate from the main database. The listmonk-init container auto-creates the API user for platform integration.


Developer Tools

Container Port Description
code-server-changemaker 8888 VS Code in the browser
mkdocs-changemaker 4003 MkDocs live preview (hot reload)
mkdocs-site-server-changemaker 4004 MkDocs static site server
gitea-changemaker 3030 Gitea — self-hosted Git repository
gitea-db PostgreSQL (Gitea's database)
changemaker-v2-nocodb 8091 NocoDB — read-only database browser
nocodb-init Init container — registers database
n8n-changemaker 5678 n8n — workflow automation
# Start individual tools
docker compose up -d code-server
docker compose up -d mkdocs mkdocs-site-server
docker compose up -d gitea
docker compose up -d nocodb
docker compose up -d n8n

Tip

mkdocs (port 4003) provides live editing with hot reload for documentation authors. mkdocs-site-server (port 4004) serves the built static site for production visitors.


Utilities

Container Port Description
mini-qr 8089 QR code PNG generator
excalidraw-changemaker 8090 Collaborative whiteboard
vaultwarden-changemaker 8445 Vaultwarden — Bitwarden-compatible password manager
vaultwarden-init Init container — configures admin settings
homepage-changemaker 3010 Homepage — service dashboard
docker compose up -d mini-qr excalidraw vaultwarden homepage

Mini QR is used internally by walk sheets and cut export pages to generate printable QR codes.


Monitoring (Docker Profile)

Monitoring services are behind a Docker Compose profile and are not started by default.

Container Port Description
prometheus-changemaker 9090 Prometheus — metrics collection
grafana-changemaker 3005 Grafana — monitoring dashboards
alertmanager-changemaker 9093 Alertmanager — alert routing
cadvisor-changemaker 8086 cAdvisor — container metrics
node-exporter-changemaker 9100 Node Exporter — host system metrics
redis-exporter-changemaker 9121 Redis Exporter — Redis metrics
gotify-changemaker 8889 Gotify — push notifications
# Start the entire monitoring stack
docker compose --profile monitoring up -d

The monitoring stack includes 3 pre-configured Grafana dashboards and 12 custom cm_* Prometheus metrics. See Monitoring for details.


Infrastructure

Container Port Description
newt Pangolin tunnel connector (Newt)
docker-socket-proxy Docker socket proxy for secure container access
# Newt starts automatically if PANGOLIN_NEWT_ID and PANGOLIN_NEWT_SECRET are set
docker compose up -d newt

The Newt container connects to a Pangolin tunnel server for secure public access without opening inbound ports. See Tunnel for setup.


Subdomain Routing

When Nginx is running, services are accessible via subdomains. The root domain serves documentation only; all application routes are at app.DOMAIN.

Subdomain Target Purpose
app.DOMAIN Admin (3000) All application routes (admin, public pages, campaigns, map, shifts, media gallery)
api.DOMAIN Express API (4000) REST API
media.DOMAIN Fastify Media API (4100) Media API
DOMAIN MkDocs Static (4004) Documentation / marketing site
db.DOMAIN NocoDB (8091) Database browser
docs.DOMAIN MkDocs Live (4003) Live documentation preview
code.DOMAIN Code Server (8888) Web IDE
n8n.DOMAIN n8n (5678) Workflow automation
git.DOMAIN Gitea (3030) Git hosting
home.DOMAIN Homepage (3010) Service dashboard
grafana.DOMAIN Grafana (3005) Metrics visualization
listmonk.DOMAIN Listmonk (9001) Newsletter platform
qr.DOMAIN Mini QR (8089) QR code generator
draw.DOMAIN Excalidraw (8090) Collaborative whiteboard
vault.DOMAIN Vaultwarden (8445) Password manager
events.DOMAIN Gancio (8092) Event platform
chat.DOMAIN Rocket.Chat (8891) Team chat
meet.DOMAIN Jitsi Meet (8893) Video conferencing
mail.DOMAIN MailHog (8025) Email capture (dev)

Init Containers

Several services use init containers — lightweight containers that run once on first startup to bootstrap databases or configuration, then exit with code 0. This pattern is borrowed from Kubernetes.

Init Container Purpose
listmonk-init Creates the Listmonk API user for platform integration
gancio-init Creates the Gancio database in the shared PostgreSQL instance
vaultwarden-init Configures Vaultwarden admin settings
nocodb-init Registers the main database with NocoDB for browsing

Seeing these containers in a "stopped" or "exited (0)" state is completely normal.


Starting Everything

To start all services at once (excluding monitoring):

docker compose up -d

To start everything including monitoring:

docker compose up -d && docker compose --profile monitoring up -d

To see what's running:

docker compose ps

Warning

Starting all services at once requires at least 4 GB RAM. For resource-constrained environments, start only the services you need.


Next Steps