Requirements
Before you start, make sure you have the following:- Docker and Docker Compose installed on your server
- An AWS account with SES available in your target region
- A domain name with DNS control, so you can create the required subdomains
Quick start
Configure environment variables
Copy the example env file and fill in your values:At minimum you need to set:See Environment variables for the full reference.
Domain setup
Plunk uses subdomain-based routing. Create DNS A records (or CNAME records if behind a load balancer) for each subdomain pointing to your server’s IP address.| Subdomain | Service | Required |
|---|---|---|
api.yourdomain.com | API server | Yes |
app.yourdomain.com | Dashboard | Yes |
www.yourdomain.com | Landing page | No |
docs.yourdomain.com | Documentation site | No |
smtp.yourdomain.com | SMTP relay | No |
You need a reverse proxy (Traefik, nginx, Caddy) in front of the Plunk container to terminate TLS and route subdomains. The container’s nginx listens on port 80 and routes by
Host header internally. Point your reverse proxy at port 80 of the plunk container.Services in the stack
The Docker Compose file runs five containers:| Container | Image | Purpose |
|---|---|---|
plunk | ghcr.io/useplunk/plunk:latest | All application services: API server, BullMQ worker, Next.js dashboard, landing page, documentation site, and optional SMTP relay — all managed by PM2 behind nginx |
postgres | postgres:16-alpine | Primary database |
redis | redis:7-alpine | Queue backend for BullMQ email and workflow jobs |
minio | minio/minio:latest | S3-compatible file storage for uploads |
ntfy | binwiederhier/ntfy:latest | Internal system notifications |
Next steps
Docker deployment
Understand the container internals, runtime environment injection, SMTP TLS setup, and how to upgrade.
Environment variables
Complete reference for every configuration variable, organized by category.
Email setup
Step-by-step AWS SES configuration: IAM credentials, configuration sets, SNS topics, and bounce handling.
API reference
Explore the REST API once your instance is running.