Skip to main content
Esta página todavía está en inglés. La traducción al español está en progreso.

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

The setup wizard on first boot asks for a provider key (Anthropic, OpenAI or Codex). Everything else — integrations, Telegram, Stripe, Omie, Bling, Asaas, etc. — is configured through the UI.

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.
No Node.js, Python, or any SDK needs to be installed on the host. The images ship everything.

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 arm64 natively, no Rosetta overhead.
  • AWS Graviton, Oracle Cloud ARM free tier, Raspberry Pi 4/5 — pulls arm64 natively.
  • Traditional x86_64 servers — pulls amd64 as usual.
You never pass --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 from evoapicloud/evo-nexus-{dashboard,runtime} on Docker Hub — no git clone required.
Open it — it’s commented and self-explanatory. Key things to know:
  • 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) and 32352 (terminal WebSocket).
  • Volumes: 6 named volumes that survive docker compose down and hold everything the UI configures.

Step 2 — Start the stack

First run downloads the images (~800 MB total, a few minutes depending on your connection). Subsequent boots are instant. Check that all 3 services are up:
You should see:
If the dashboard takes longer than 30 seconds to go healthy, check logs:

Step 3 — Open the UI and run the setup wizard

Open http://localhost:8080 in your browser. You’ll see the first-boot wizard:
  1. Create admin user — username + password for the dashboard itself.
  2. Pick a provider — paste your Anthropic API key, OpenAI key, or click “Login with ChatGPT” for Codex OAuth.
  3. Optional integrations — Telegram bot token, Stripe, Omie, etc. Everything else is optional and can be added later.
Once you save a provider key, the 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

Your data volumes are preserved — everything you configured through the UI stays intact.

Pin to a specific version

Edit docker-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:
Tradeoffs:
  • 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 via environment: wins. This can be confusing for non-technical users.
For the absolutely purist flow, pass 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:
Additionally, every file under /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 of docker-compose.hub.yml. The simplest path is Caddy:
Then 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:
Then open 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:
99% of the time this is either (a) port conflict, (b) volume mount permission issue (rare, usually only on SELinux-enabled hosts — add :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

Useful paths inside the 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

The -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