Deployment
Deploy with Docker, Compose, or JAR. Recommended default: Docker. Production checklist covers persistence, auth, TLS, backups, and health.
Three packaging choices
The runtime ships as a Docker image, a Docker Compose skeleton, and a standalone JAR. Pick one — they are three packaging choices around the same process.
Compare the three
Docker
Best default for portable, repeatable deployment. One command, one volume, runs everywhere Docker runs.
Recommended
Docker Compose
Use when you also need sidecars (LightRAG, Hive, external databases). Keeps multi-container orchestration in one file.
Multi-service
JAR
Use for host-level development, controlled Java service deployment, or environments where you cannot run Docker.
Direct
Recommended default
If you do not yet know which you need, use Docker. One command, one volume, one port. Switch to Compose only when you add a second container (LightRAG, Hive). Use the JAR only when Docker is off the table.
Docker Compose skeleton
services:
golemcore-bot:
image: ghcr.io/alexk-dev/golemcore-bot:latest
restart: unless-stopped
shm_size: 256m
cap_add:
- SYS_ADMIN
environment:
STORAGE_PATH: /app/workspace
TOOLS_WORKSPACE: /app/sandbox
volumes:
- ./workspace:/app/workspace
- ./sandbox:/app/sandbox
ports:
- "8080:8080"docker compose up -d[+] Running 2/2
✔ Network golemcore_default Created 0.1s
✔ Container golemcore-golemcore-bot-1 Started 0.3sProduction checklist
Before you call a deployment production-ready, verify each item. Every one has bitten real operators; none are optional.
- Persistent volumes mounted.
workspaceandsandboxare on a named volume or host mount. Verify withdocker inspect golemcore-bot. - Admin password rotated. The initial password from the logs is replaced via Settings → Security, or
BOT_DASHBOARD_ADMIN_PASSWORDis set at container start. - Provider key stored in the config, not in the image. Keys are in
preferences/llm-providers.jsonon the persistent volume, never baked into the image. - Model router assignments populated. At least
balancedModelis set inpreferences/model-router.json. - Browser flags set if you use the browser plugin.
--shm-size=256mand--cap-add=SYS_ADMINare present. Without them, Chromium crashes silently. - Dashboard reachable behind TLS. Do not expose port 8080 directly on a public interface. Front it with a reverse proxy that terminates TLS.
- Backups of the workspace volume. Volume snapshot schedule or file-level backup of
workspace/. - Logs collected.
docker logsis tailed into your log aggregator, orworkspace/logs/is read directly. - Health endpoint monitored.
/actuator/healthis polled by your monitoring system.