DMJBot Installation Guide

Wiki / Install

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:

  • dmjbot container (application)
  • db container (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:

  • dmjbot container (application)
  • db container (PostgreSQL)

What this config does:

  • Starts PostgreSQL 17 as db.
  • Configures DMJBot with DMJBOT_DATABASE__TYPE=postgres.
  • Uses DMJBOT_DATABASE__SETTINGS__SSL_MODE=disable for 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.

  1. Put certificates in docker/certs/:
    • docker/certs/fullchain.pem
    • docker/certs/privkey.pem
  2. 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.