Install DMJBot
DMJBot is installed from Docker Hub and runs as a single container.
Supported image:
dmjbot/dmjbot:latest
Prerequisites
- Docker installed and running.
- Network access from the container to your LLM provider endpoint.
- A persistent Docker volume or host bind mount for
/data.
Quick start
docker run -d \
--name dmjbot \
-p 8080:80 \
-v dmjbot-data:/data \
dmjbot/dmjbot:latest
Then open:
http://localhost:8080
Initial configuration
Recommended minimum setup:
- Set your bot name and timezone.
- Configure your model provider and API key.
Install bridge on your device
Install DMJBot Bridge on the machine that has access to your files/drives.
macOS
curl -fsSL https://dmjbot.com/bridge/install.sh | bash
Linux
curl -fsSL https://dmjbot.com/bridge/install.sh | bash
Windows (PowerShell)
iwr -useb https://dmjbot.com/bridge/install.ps1 | iex
Verify:
dmjbot-bridge --version
Connect a drive (quickest example)
This is the simplest path to expose one folder/drive to DMJBot.
- In DMJBot UI, go to
Settings -> Devices, add a device, and copy theconnect_url. - On the target machine, connect bridge:
dmjbot-bridge connect <connect_url>
- Install the local file server:
dmjbot-bridge install mcp-filestorage
- Configure it to one folder or drive root (for example
/Volumes/Work,/mnt/work, orD:\\Work).
dmjbot-bridge configure mcp-filestorage
- Start bridge (or install as a service):
dmjbot-bridge start
# optional background service
dmjbot-bridge service install
dmjbot-bridge service start
After this, DMJBot can work with files only in the folder/drive you configured.
HTTPS mode (nginx reverse proxy)
Place certificates first:
docker/certs/fullchain.pemdocker/certs/privkey.pem
Then start DMJBot with nginx SSL termination:
docker compose -f docker/compose-nginx-ssl.yml up -d
This exposes HTTPS on port 443 and redirects HTTP (port 80) to HTTPS.
For built-in TLS and full SSL options, see SSL/TLS Setup.
Database options
DMJBot supports:
- SQLite (default, simplest)
- PostgreSQL
- MySQL
Set DB type and settings using environment variables.
Example (PostgreSQL):
docker run -d \
--name dmjbot \
-p 8080:80 \
-v dmjbot-data:/data \
-e DMJBOT_DATABASE__TYPE=postgres \
-e DMJBOT_DATABASE__SETTINGS__HOST=<postgres-host> \
-e DMJBOT_DATABASE__SETTINGS__PORT=5432 \
-e DMJBOT_DATABASE__SETTINGS__USER=<user> \
-e DMJBOT_DATABASE__SETTINGS__PASSWORD=<password> \
-e DMJBOT_DATABASE__SETTINGS__DATABASE=<db> \
dmjbot/dmjbot:latest
Required persistence note
Always mount /data.
Without it, chat history, files, and SQLite DB are lost when the container is recreated.
Verify installation
docker psshowsdmjbotas running.curl http://localhost:8080/api/healthreturns JSON withstatus.- Browser can open
/config/(first run) or/login/(configured system).
Update DMJBot
docker pull dmjbot/dmjbot:latest
docker stop dmjbot
docker rm dmjbot
docker run -d --name dmjbot -p 8080:80 -v dmjbot-data:/data dmjbot/dmjbot:latest
Because data is in /data, your persisted state survives container replacement.