- VOL_PATH always defaults to /data; vscode/opencode VOL_PROJECTS nests it - TZ defaults to America/Vancouver (was UTC in etherpad, ntfy, redis) - compose section order fixed (volumes before environment, command after networks) - all default secrets are the literal ChangeThisPassword (grep-friendly, users must change them); removed a real key from ollama sample.env - sample.env synced with compose: missing vars added with defaults, dead vars removed - invoiceninja_dev/openarchiver_dev: app services had no environment block, wired all sample.env vars through so the stacks actually work - opencode: sample.env OLLAMA_HOST renamed to OLLAMA_HOST_URL to match compose - TZ values unquoted consistently Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
listmonk
Overview
Self-hosted newsletter and mailing list manager powered by PostgreSQL. This stack deploys listmonk with persistent storage, automatic database initialization/upgrades, and support for reverse proxy integration.
Project Details
- Project Repository: https://github.com/knadh/listmonk
- Container Image: https://hub.docker.com/r/listmonk/listmonk
- Compose Example: https://github.com/knadh/listmonk/blob/master/docker-compose.yml
- Documentation: https://listmonk.app/docs/
- Reverse Proxy Port:
9000(configurable withLISTMONK_PORT)
Environment Variable Notes
Most variables are optional because sane defaults are already included in the compose file.
Database
POSTGRES_IMAGE – PostgreSQL container image
POSTGRES_RESTART – Restart policy for PostgreSQL
POSTGRES_USER – PostgreSQL username
POSTGRES_PASSWORD – PostgreSQL password
POSTGRES_DB – PostgreSQL database name
listmonk
LISTMONK_IMAGE – listmonk container image
LISTMONK_RESTART – Restart policy for listmonk
LISTMONK_PORT – Web UI / proxy port
LISTMONK_HOSTNAME – Container hostname
LISTMONK_SSLMODE – PostgreSQL SSL mode
LISTMONK_MAX_OPEN – Maximum open DB connections
LISTMONK_MAX_IDLE – Maximum idle DB connections
LISTMONK_MAX_LIFETIME – DB connection lifetime
Initial Admin User
These are only used during first startup.
LISTMONK_ADMIN_USER – Initial admin username
LISTMONK_ADMIN_PASSWORD – Initial admin password
General
VOL_PATH – Base path for persistent storage
TZ – Container timezone
Volume Notes
/data/listmonk/db
PostgreSQL database storage
/data/listmonk/uploads
listmonk uploads and media storage
Back up both directories regularly.
Network Notes
Requires an external Docker network named:
proxy
Create it manually if it does not already exist:
docker network create proxy
Internal application traffic uses the private:
listmonk
bridge network.
Additional Notes / Gotchas
-
The stack automatically runs:
- database installation
- schema upgrades
- application startup
on container launch.
-
The install and upgrade commands are idempotent and safe to rerun.
-
Change all default passwords before exposing publicly.
-
Designed for use behind a reverse proxy such as Traefik, Caddy, Nginx Proxy Manager, or SWAG.
Dockhand Stack, Deploy from Git
Cookbooks Repository
stackname: listmonk
Compose file path: listmonk/compose.yaml
Additional env file (optional): listmonk/sample.env
Then load:
listmonk/sample.env
into the Environmental Variables section in Dockhand.
Create the Stack.