Extended Installation Options
Use this page when you need deployment options beyond the basic quick start.
Recommended single-node run
Use explicit restart policy and environment overrides:
docker run -d \
--name dmjbot \
--restart unless-stopped \
-p 8080:80 \
-v dmjbot-data:/data \
-e DMJBOT_CORE__MODEL="anthropic:claude-sonnet-4-20250514" \
-e ANTHROPIC_API_KEY="<your-key>" \
dmjbot/dmjbot:latest
Docker + MySQL backend
Run DMJBot and MySQL in one compose stack:
docker compose -f docker/compose-mysql.yml up -d
Two-container layout in this compose file:
dmjbotcontainer (application)dbcontainer (MySQL)
What this config does:
- Starts MySQL 8.4 as
db. - Configures DMJBot with
DMJBOT_DATABASE__TYPE=mysql. - Waits for DB health before DMJBot starts.
Set credentials with environment variables before start (or via .env):
export MYSQL_USER=dmjbot
export MYSQL_PASSWORD=dmjbot
export MYSQL_DATABASE=dmjbot
Minimal two-container example (compose.mysql.min.yml):
services:
dmjbot:
image: dmjbot/dmjbot:latest
ports:
- "8080:80"
volumes:
- dmjbot-data:/data
environment:
- DMJBOT_DATABASE__TYPE=mysql
- DMJBOT_DATABASE__SETTINGS__HOST=db
- DMJBOT_DATABASE__SETTINGS__PORT=3306
- DMJBOT_DATABASE__SETTINGS__USER=dmjbot
- DMJBOT_DATABASE__SETTINGS__PASSWORD=dmjbot
- DMJBOT_DATABASE__SETTINGS__DATABASE=dmjbot
depends_on:
db:
condition: service_healthy
db:
image: mysql:8.4
environment:
- MYSQL_USER=dmjbot
- MYSQL_PASSWORD=dmjbot
- MYSQL_DATABASE=dmjbot
- MYSQL_RANDOM_ROOT_PASSWORD=yes
volumes:
- mysql-data:/var/lib/mysql
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
interval: 5s
timeout: 5s
retries: 5
volumes:
dmjbot-data:
mysql-data:
Run it:
docker compose -f compose.mysql.min.yml up -d
Docker + PostgreSQL backend
Run DMJBot and PostgreSQL in one compose stack:
docker compose -f docker/compose-postgres.yml up -d
Two-container layout in this compose file:
dmjbotcontainer (application)dbcontainer (PostgreSQL)
What this config does:
- Starts PostgreSQL 17 as
db. - Configures DMJBot with
DMJBOT_DATABASE__TYPE=postgres. - Uses
DMJBOT_DATABASE__SETTINGS__SSL_MODE=disablefor local compose usage.
Set credentials with environment variables before start (or via .env):
export POSTGRES_USER=dmjbot
export POSTGRES_PASSWORD=dmjbot
export POSTGRES_DB=dmjbot
Minimal two-container example (compose.postgres.min.yml):
services:
dmjbot:
image: dmjbot/dmjbot:latest
ports:
- "8080:80"
volumes:
- dmjbot-data:/data
environment:
- DMJBOT_DATABASE__TYPE=postgres
- DMJBOT_DATABASE__SETTINGS__HOST=db
- DMJBOT_DATABASE__SETTINGS__PORT=5432
- DMJBOT_DATABASE__SETTINGS__USER=dmjbot
- DMJBOT_DATABASE__SETTINGS__PASSWORD=dmjbot
- DMJBOT_DATABASE__SETTINGS__DATABASE=dmjbot
- DMJBOT_DATABASE__SETTINGS__SSL_MODE=disable
depends_on:
db:
condition: service_healthy
db:
image: postgres:17-alpine
environment:
- POSTGRES_USER=dmjbot
- POSTGRES_PASSWORD=dmjbot
- POSTGRES_DB=dmjbot
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U dmjbot"]
interval: 5s
timeout: 5s
retries: 5
volumes:
dmjbot-data:
postgres-data:
Run it:
docker compose -f compose.postgres.min.yml up -d
Docker + nginx in front
Use this when you want SSL termination in nginx and DMJBot to stay HTTP internally.
- Put certificates in
docker/certs/:docker/certs/fullchain.pemdocker/certs/privkey.pem
- Start the compose stack:
docker compose -f docker/compose-nginx-ssl.yml up -d
This stack exposes:
https://<host>/via nginx on port 443.http://<host>/on port 80 with redirect to HTTPS.
For built-in HTTPS directly in DMJBot (without nginx), see SSL/TLS Setup.