Installing EvoNexus with Docker
The fastest way to run EvoNexus on any machine — Linux, macOS (Intel or Apple Silicon), Windows with WSL2, or a bare VPS. Pulls official images from Docker Hub, no source checkout or build step required.TL;DR
Prerequisites
- Docker Engine 24+ with Docker Compose v2. Install on Mac / Windows / Linux.
- 4 GB RAM minimum (8 GB recommended — the Claude CLI and embedding models can be hungry).
- 2 GB free disk for images + a few hundred MB for data volumes.
- An Anthropic API key (or OpenAI / ChatGPT Codex account) — you’ll paste this into the wizard on first boot.
Multi-arch — ARM64 works out of the box
Images are published as multi-arch manifests (linux/amd64 + linux/arm64), so:
- Apple Silicon (M1/M2/M3 Macs) — pulls
arm64natively, no Rosetta overhead. - AWS Graviton, Oracle Cloud ARM free tier, Raspberry Pi 4/5 — pulls
arm64natively. - Traditional x86_64 servers — pulls
amd64as usual.
--platform. Docker picks the right arch from the manifest list.
Step 1 — Get the compose file
Download the ready-to-run compose file. It pulls images fromevoapicloud/evo-nexus-{dashboard,runtime} on Docker Hub — no git clone required.
- 3 services:
dashboard(Flask + React + terminal),telegram(bot listener),scheduler(automated routines). Telegram and scheduler are optional — remove them from the file if you don’t need them. - Ports exposed:
8080(dashboard UI + API) and32352(terminal WebSocket). - Volumes: 6 named volumes that survive
docker compose downand hold everything the UI configures.
Step 2 — Start the stack
Step 3 — Open the UI and run the setup wizard
Open http://localhost:8080 in your browser. You’ll see the first-boot wizard:- Create admin user — username + password for the dashboard itself.
- Pick a provider — paste your Anthropic API key, OpenAI key, or click “Login with ChatGPT” for Codex OAuth.
- Optional integrations — Telegram bot token, Stripe, Omie, etc. Everything else is optional and can be added later.
telegram and scheduler services (which were waiting in a 30s poll loop) pick it up and start working. No restart needed.
Step 4 — Everyday commands
Updating
Pull the latest stable image
Pin to a specific version
Editdocker-compose.hub.yml and replace :latest with :vX.Y.Z (e.g. :v0.30.4). Available tags: https://hub.docker.com/r/evoapicloud/evo-nexus-dashboard/tags
Rolling back is just bumping the tag down and running pull && up -d.
Backup and restore
Your configuration, workspace files, memory, and agent state live in 6 named volumes. To snapshot them all:Advanced: passing secrets via environment variables
The default flow is “configure everything through the UI, which writes to a persisted.env inside the evonexus_config volume.” Most users should stick with that.
If you prefer to keep secrets out of the volume (for CI/CD, Vault, Doppler, or immutable infra), you can pass any env var directly in the compose file. They take precedence over the volume’s .env:
- Pro: secrets live with the infrastructure, not the user-editable volume. Rotate by redeploying.
- Con: the Providers page in the UI will still work (and will write to the volume’s
.env), but any value you pass viaenvironment:wins. This can be confusing for non-technical users.
REQUIRE_ANTHROPIC_KEY=0 on the telegram and scheduler services so they don’t wait for a UI-saved key — they’ll just use whatever is in environment:.
Advanced: Docker Secrets
Every env var also supports a_FILE counterpart. Point it at a file, and the entrypoint reads the content into the var at boot. This works natively with Docker Secrets in Swarm mode:
/run/secrets/ is auto-discovered: /run/secrets/anthropic_api_key → sets ANTHROPIC_API_KEY if it’s not already set.
Running on a VPS with a public domain
For production on a single-host VPS (not a Swarm cluster), put a reverse proxy in front ofdocker-compose.hub.yml. The simplest path is Caddy:
caddy run and you have HTTPS with automatic Let’s Encrypt certificates pointing at your EvoNexus stack.
For Docker Swarm with Traefik, see README.swarm.md and evonexus.stack.yml.
Troubleshooting
Dashboard port 8080 is already in use
Another service on your host is bound to 8080. Change the host port in the compose file:http://localhost:9090.
Telegram / scheduler logs say “waiting for ANTHROPIC_API_KEY”
Expected. These services poll.env every 30s. Configure a provider key in Dashboard → Providers and they’ll pick it up automatically — no restart needed.
Services keep restarting after up -d
Check logs:
:Z to volume mounts), or (c) disk full.
Fresh install doesn’t show any agents / skills on /agents or /skills
On a brand-new volume, the APIs return {"error": "Setup required", "needs_setup": true} until the wizard completes. Open http://localhost:8080 and complete the wizard first.
Want to see what’s inside the running container
/workspace/config/.env— everything the UI saves (ports, keys, integrations)/workspace/workspace/— generated artifacts (reports, dashboards, daily logs)/workspace/memory/— long-term memory the agents write/workspace/.claude/agent-memory/— per-agent persistent state/workspace/ADWs/logs/— routine execution logs (JSONL)
Uninstall
-v flag also deletes the named volumes — all your configuration and data is gone. Skip the flag to keep volumes around for a future reinstall.
See also
- Updating EvoNexus — version bumps across all install methods
- README.swarm.md — production Swarm / Portainer deployments with Traefik
- Environment variables reference — every variable the image recognizes