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 following containers:

selu-server

The core application server. Handles the dashboard, message routing, and coordination between channels and agents.

selu-db

A PostgreSQL database for storing conversations, settings, credentials, and agent metadata.

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. Download the Docker Compose file:
Terminal window
curl -O https://get.selu.dev/docker-compose.yml
  1. Create an .env file with your settings:
Terminal window
SELU_SECRET_KEY=your-random-secret-key-here
POSTGRES_PASSWORD=a-strong-database-password
  1. Start everything:
Terminal window
docker compose up -d
  1. Open http://localhost:3000 in your browser to access the Selu dashboard.

The default docker-compose.yml looks like this:

services:
selu-server:
image: ghcr.io/selu/selu-server:latest
ports:
- "3000:3000"
env_file: .env
depends_on:
- selu-db
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- selu-data:/data
selu-db:
image: postgres:16-alpine
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: selu
volumes:
- selu-pgdata:/var/lib/postgresql/data
volumes:
selu-data:
selu-pgdata:
  • Use strong passwords for both SELU_SECRET_KEY and POSTGRES_PASSWORD.
  • 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 selu-pgdata which contains your database.
  • Restrict Docker socket access if running in a shared environment.

See the Environment Variables reference for all available configuration options.