Services¶
Changemaker Lite orchestrates 20+ services via Docker Compose. This page is your map to every service: what it does, how to reach it, and where to find its upstream documentation.
Core Platform¶
The essential services that power the application.
-
Express API
Main V2 API server. Handles authentication, campaigns, map, shifts, pages, email, and all business logic. Prisma ORM with PostgreSQL.
Port:
4000· Container:changemaker-v2-api -
Fastify Media API
Video library server. Upload, metadata extraction (FFprobe), analytics, scheduled publishing, and public gallery. Shares the same PostgreSQL database.
Port:
4100· Container:changemaker-media-api -
Admin GUI
React single-page application (Vite + Ant Design + Zustand). Serves the admin dashboard, public campaign pages, volunteer portal, and media gallery — all from one build.
Port:
3000· Container:changemaker-v2-admin -
PostgreSQL 16
Primary database shared by both APIs. Managed by Prisma migrations. Contains 30+ tables covering users, campaigns, locations, shifts, media, and more.
Port:
5433(host) /5432(container) · Container:changemaker-v2-postgres -
Redis
In-memory store for rate limiting, BullMQ job queues (email, video scheduling), geocoding cache, and session data. Requires authentication.
Port:
6379· Container:redis-changemaker -
Nginx
Reverse proxy handling all subdomain routing (
app.,api.,media.,docs., etc.). Includes security headers (HSTS, CSP, Permissions-Policy) and WebSocket support.Port:
80/443· Container:changemaker-v2-nginx
Communication & Email¶
-
Listmonk
Self-hosted newsletter and mailing list manager. Drop-in replacement for Mailchimp. Opt-in sync with the main platform imports participants, locations, and users as subscriber lists.
Port:
9001· Container:listmonk-app· Subdomain:listmonk.DOMAIN -
MailHog
Email capture for development. All outgoing email is intercepted and displayed in a web UI when
EMAIL_TEST_MODE=true. No real emails are sent.Port:
8025(web) /1025(SMTP) · Container:mailhog-changemaker· Subdomain:mail.DOMAIN
Content & Editing¶
-
MkDocs
Material-themed documentation site with full-text search, blog, social cards, and Jinja2 template overrides. Two containers: live preview (dev) and static site (production).
Port:
4003(dev) /4004(static) · Container:mkdocs-changemaker· Subdomain:docs.DOMAIN -
Code Server
Full VS Code in the browser. Edit configuration files, templates, and documentation from anywhere without SSH. Supports extensions.
Port:
8888· Container:code-server-changemaker· Subdomain:code.DOMAIN
Data & Automation¶
-
NocoDB
Airtable-alternative database browser. Provides a spreadsheet-like interface to browse, filter, sort, and export campaign data. Read-only access to the main database.
Port:
8091· Container:changemaker-v2-nocodb· Subdomain:db.DOMAIN -
n8n
Visual workflow automation platform. Connect APIs, trigger actions on events, schedule tasks, and build custom integrations — all without code. 400+ built-in integrations.
Port:
5678· Container:n8n-changemaker· Subdomain:n8n.DOMAIN -
Gitea
Self-hosted Git repository hosting. Version control for campaign code, configuration, templates, and documentation. Includes issues, pull requests, and CI/CD.
Port:
3030(web) /2222(SSH) · Container:gitea-changemaker· Subdomain:git.DOMAIN
Utilities¶
-
Mini QR
Lightweight QR code generator. Produces PNG images for walk sheets, campaign materials, and event signage. Embedded in the admin dashboard via iframe.
Port:
8089· Container:mini-qr· Subdomain:qr.DOMAIN -
Homepage
Service dashboard showing the status of all containers at a glance. Auto-generated
services.yamlfromconfig.shprovides both production and local links.Port:
3010· Container:homepage-changemaker· Subdomain:home.DOMAIN -
Excalidraw
Collaborative whiteboard for brainstorming, diagramming, and visual planning. Real-time collaboration via WebSocket.
Port:
8090· Container:excalidraw-changemaker· Subdomain:draw.DOMAIN -
Vaultwarden
Self-hosted Bitwarden-compatible password manager. Secure credential sharing for campaign teams. Requires HTTPS for account creation; local browsing works on HTTP.
Port:
8445· Container:vaultwarden-changemaker· Subdomain:vault.DOMAIN
Team Communication¶
-
Rocket.Chat
Self-hosted team chat for volunteer coordination. Supports channels, direct messaging, threads, and file sharing. Embeddable in the admin dashboard via iframe. Enable with
ENABLE_CHAT=true.Port:
3000(internal) · Container:rocketchat-changemaker· Subdomain:chat.DOMAIN -
Jitsi Meet
Self-hosted video conferencing with JWT authentication. Four containers (web, Prosody, Jicofo, JVB) provide the full video call stack. Integrated with Rocket.Chat for one-click calls from channels and DMs. Enable with
ENABLE_MEET=true.Containers:
jitsi-web,jitsi-prosody,jitsi-jicofo,jitsi-jvb· Subdomain:meet.DOMAIN -
Gancio
Self-hosted event management platform. Automatic shift-to-event sync (when
GANCIO_SYNC_ENABLED=true) publishes shifts as public events. Uses the shared PostgreSQL database. Embeddable calendar widget available for MkDocs pages.Port:
8092· Container:gancio-changemaker· Subdomain:events.DOMAIN
Networking & Tunneling¶
-
Pangolin + Newt
Self-hosted tunnel server with the Newt client container. Exposes your services to the internet without port forwarding. Handles SSL/TLS, works behind CGNAT and double NAT.
Container:
newt-changemaker· Managed from Admin → Settings → Tunnel
Monitoring Stack¶
These services run behind the monitoring Docker Compose profile. Start them with:
-
Prometheus
Metrics collection and time-series database. Scrapes 12 custom
cm_*application metrics plus container, host, and Redis metrics. Pre-configured alert rules.Port:
9090· Container:prometheus-changemaker -
Grafana
Metrics visualization with 3 auto-provisioned dashboards: API Overview, Infrastructure, and Campaign Activity. Supports custom dashboards and alerting.
Port:
3005· Container:grafana-changemaker· Subdomain:grafana.DOMAIN -
Alertmanager
Alert routing and notification delivery. Receives alerts from Prometheus and dispatches to Gotify, email, or webhooks based on configurable rules.
Port:
9093· Container:alertmanager-changemaker -
cAdvisor
Container resource metrics. Exposes CPU, memory, network, and filesystem usage per container for Prometheus to scrape.
Port:
8086· Container:cadvisor-changemaker -
Node Exporter
Host system metrics. Reports CPU, memory, disk, and network stats for the underlying server.
Port:
9100· Container:node-exporter-changemaker -
Redis Exporter
Redis metrics for Prometheus. Exposes connection counts, memory usage, command stats, and keyspace info.
Port:
9121· Container:redis-exporter-changemaker -
Gotify
Self-hosted push notification server. Receives alerts from Alertmanager and delivers them to mobile/desktop clients.
Port:
8889· Container:gotify-changemaker
Quick Reference¶
All services at a glance with their default ports and subdomains.
| Service | Port | Subdomain | Docker Profile |
|---|---|---|---|
| Express API | 4000 | api. |
default |
| Media API | 4100 | media. |
default |
| Admin GUI | 3000 | app. |
default |
| PostgreSQL | 5433 | — | default |
| Redis | 6379 | — | default |
| Nginx | 80/443 | (all) | default |
| Listmonk | 9001 | listmonk. |
default |
| MailHog | 8025 | mail. |
default |
| MkDocs (dev) | 4003 | docs. |
default |
| MkDocs (static) | 4004 | (root) | default |
| Code Server | 8888 | code. |
default |
| NocoDB | 8091 | db. |
default |
| n8n | 5678 | n8n. |
default |
| Gitea | 3030 | git. |
default |
| Mini QR | 8089 | qr. |
default |
| Homepage | 3010 | home. |
default |
| Excalidraw | 8090 | draw. |
default |
| Vaultwarden | 8445 | vault. |
default |
| Rocket.Chat | — | chat. |
default |
| Jitsi Meet | — | meet. |
default |
| Gancio | 8092 | events. |
default |
| Newt (tunnel) | — | — | default |
| Prometheus | 9090 | — | monitoring |
| Grafana | 3005 | grafana. |
monitoring |
| Alertmanager | 9093 | — | monitoring |
| cAdvisor | 8086 | — | monitoring |
| Node Exporter | 9100 | — | monitoring |
| Redis Exporter | 9121 | — | monitoring |
| Gotify | 8889 | — | monitoring |
Starting services selectively
You don't need to run everything. Start only what you need:
# Core only
docker compose up -d v2-postgres redis api admin
# Add nginx for subdomain routing
docker compose up -d nginx
# Add monitoring
docker compose --profile monitoring up -d
See Getting Started for the recommended startup order.