Skip to content

Docker Setup

Selu runs as a set of Docker containers, making it easy to deploy on any machine that supports Docker. This guide walks you through the architecture and setup.

A Selu deployment consists of the main Selu server container and on-demand agent containers:

selu

The core application server. Handles the dashboard, message routing, local SQLite data, and orchestration.

Agent containers

Each installed agent runs in its own container. These are created automatically when you install agents from the marketplace.

All containers communicate over an internal Docker network. Agent containers connect to the server via gRPC.

  • Docker version 24 or later
  • Docker Compose version 2.20 or later
  • At least 2 GB of RAM (more if you plan to run many agents or use Ollama locally)
  • A Linux, macOS, or Windows machine
  1. Create a directory for your Selu installation:
Terminal window
mkdir selu && cd selu
  1. Run the installer:
Terminal window
bash <(curl -fsSL https://selu.bot/install.sh)
  1. Or run non-interactively with your preferred train:
Terminal window
bash <(curl -fsSL https://selu.bot/install.sh) --yes --channel stable

Open http://localhost:3000 in your browser to access the Selu dashboard.

The Selu dashboard after login, showing the sidebar navigation and chat interface.

The default docker-compose.yml looks like this:

services:
selu:
image: ghcr.io/selu-bot/selu:${SELU_IMAGE_TAG:-stable}
ports:
- "${SELU__SERVER__PORT:-3000}:${SELU__SERVER__PORT:-3000}"
environment:
- SELU__ENCRYPTION_KEY=${SELU__ENCRYPTION_KEY}
- SELU__SERVER__HOST=0.0.0.0
- SELU__SERVER__PORT=${SELU__SERVER__PORT:-3000}
- SELU__DATABASE__URL=sqlite:///app/data/selu.db?mode=rwc
- SELU__MARKETPLACE_URL=https://selu.bot/api/marketplace/agents
- SELU__INSTALLED_AGENTS_DIR=/app/installed_agents
- SELU__RELEASE_METADATA_URL=https://selu.bot/api/releases/selu
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./data:/app/data
- ./installed_agents:/app/installed_agents
  • Open System Updates in the Selu UI.
  • Choose a channel (stable, dev, nightly).
  • Click Check now and Update now, or enable Auto-update.
  • If a release fails health checks, use Rollback to restore the previous version.

Selu verifies release digests from https://selu.bot/api/releases/selu before applying updates. Updates are applied by the selu-updater sidecar container, so update jobs continue even while Selu is being restarted. By default, the sidecar does not refresh itself in the same run. It applies its own image refresh on the next update cycle.

  • Keep SELU__ENCRYPTION_KEY secret. This key protects encrypted credentials at rest.
  • Don’t expose port 3000 directly to the internet. Put a reverse proxy (like Nginx or Caddy) in front with HTTPS.
  • Back up your volumes regularly, especially ./data which contains your database and runtime state.
  • Restrict Docker socket access if running in a shared environment.

See the Environment Variables reference for all available configuration options.