Files
siriusscan--sirius/docker-compose.yaml
T
0sm0s1z 620874feee feat(startup): adopt docker-native installer flow and harden startup contracts
Move startup configuration to a Docker Compose installer entrypoint and remove wrapper-based ambiguity, while enforcing consistent secret validation and auth behavior across base, dev, and prod flows.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-02-22 16:29:08 -08:00

242 lines
8.1 KiB
YAML

# SiriusScan Base Docker Compose Configuration
# This is the base configuration that works for most environments
# Use with: docker compose up -d
name: sirius
services:
sirius-rabbitmq:
build:
context: ./sirius-rabbitmq
dockerfile: Dockerfile
restart: unless-stopped
container_name: sirius-rabbitmq
hostname: sirius-rabbitmq
environment:
VALKEY_HOST: ${VALKEY_HOST:-sirius-valkey}
VALKEY_PORT: ${VALKEY_PORT:-6379}
ports:
- "5672:5672"
- "15672:15672"
volumes:
- ./rabbitmq/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf:ro
- rabbitmq_data:/var/lib/rabbitmq
healthcheck:
test: ["CMD", "rabbitmqctl", "status"]
interval: 30s
timeout: 15s
retries: 5
deploy:
resources:
limits:
memory: 512M
cpus: "0.5"
reservations:
memory: 256M
cpus: "0.25"
sirius-postgres:
build:
context: ./sirius-postgres
dockerfile: Dockerfile
restart: unless-stopped
container_name: sirius-postgres
hostname: sirius-postgres
environment:
POSTGRES_USER: ${POSTGRES_USER:-postgres}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required. Run installer first using docker compose -f docker-compose.installer.yaml run --rm sirius-installer}
POSTGRES_DB: ${POSTGRES_DB:-sirius}
VALKEY_HOST: ${VALKEY_HOST:-sirius-valkey}
VALKEY_PORT: ${VALKEY_PORT:-6379}
ports:
- "5432:5432"
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 10s
timeout: 5s
retries: 5
deploy:
resources:
limits:
memory: 1G
cpus: "0.5"
reservations:
memory: 512M
cpus: "0.25"
sirius-valkey:
build:
context: ./sirius-valkey
dockerfile: Dockerfile
restart: unless-stopped
container_name: sirius-valkey
hostname: sirius-valkey
environment:
VALKEY_HOST: ${VALKEY_HOST:-sirius-valkey}
VALKEY_PORT: ${VALKEY_PORT:-6379}
ports:
- "6379:6379"
volumes:
- valkey_data:/data
healthcheck:
test: ["CMD", "valkey-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
deploy:
resources:
limits:
memory: 256M
cpus: "0.25"
reservations:
memory: 128M
cpus: "0.1"
sirius-ui:
image: ghcr.io/siriusscan/sirius-ui:${IMAGE_TAG:-latest}
pull_policy: always
container_name: sirius-ui
hostname: sirius-ui
restart: unless-stopped
ports:
- "3000:3000"
environment:
- NODE_ENV=${NODE_ENV:-production}
- SKIP_ENV_VALIDATION=${SKIP_ENV_VALIDATION:-1}
- DATABASE_URL=${DATABASE_URL:-postgresql://postgres:${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required. Run installer first using docker compose -f docker-compose.installer.yaml run --rm sirius-installer}@sirius-postgres:5432/sirius}
# UI auth settings
- NEXTAUTH_SECRET=${NEXTAUTH_SECRET:?NEXTAUTH_SECRET is required for sirius-ui. Run installer first using docker compose -f docker-compose.installer.yaml run --rm sirius-installer}
- NEXTAUTH_URL=${NEXTAUTH_URL:-http://localhost:3000}
- INITIAL_ADMIN_PASSWORD=${INITIAL_ADMIN_PASSWORD:?INITIAL_ADMIN_PASSWORD is required for sirius-ui. Run installer first using docker compose -f docker-compose.installer.yaml run --rm sirius-installer}
- SIRIUS_API_URL=${SIRIUS_API_URL:-http://sirius-api:9001}
- NEXT_PUBLIC_SIRIUS_API_URL=${NEXT_PUBLIC_SIRIUS_API_URL:-http://localhost:9001}
- DISCORD_CLIENT_ID=${DISCORD_CLIENT_ID:-dummy_client_id}
- DISCORD_CLIENT_SECRET=${DISCORD_CLIENT_SECRET:-dummy_client_secret}
# API key for authenticated requests to sirius-api (set via root key bootstrap or .env)
- SIRIUS_API_KEY=${SIRIUS_API_KEY:?SIRIUS_API_KEY is required for sirius-ui. Run installer first using docker compose -f docker-compose.installer.yaml run --rm sirius-installer}
depends_on:
sirius-postgres:
condition: service_healthy
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:3000/"]
interval: 30s
timeout: 10s
retries: 3
deploy:
resources:
limits:
memory: 2G
cpus: "2"
reservations:
memory: 512M
cpus: "0.5"
sirius-api:
image: ghcr.io/siriusscan/sirius-api:${IMAGE_TAG:-latest}
pull_policy: always
container_name: sirius-api
hostname: sirius-api
restart: unless-stopped
ports:
- "9001:9001"
environment:
- GO_ENV=${GO_ENV:-production}
- API_PORT=${API_PORT:-9001}
- CORS_ALLOWED_ORIGINS=${CORS_ALLOWED_ORIGINS:-*}
- POSTGRES_HOST=${POSTGRES_HOST:-sirius-postgres}
- POSTGRES_USER=${POSTGRES_USER:-postgres}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required for sirius-api. Run installer first using docker compose -f docker-compose.installer.yaml run --rm sirius-installer}
- POSTGRES_DB=${POSTGRES_DB:-sirius}
- POSTGRES_PORT=${POSTGRES_PORT:-5432}
- VALKEY_HOST=${VALKEY_HOST:-sirius-valkey}
- VALKEY_PORT=${VALKEY_PORT:-6379}
- RABBITMQ_URL=${RABBITMQ_URL:-amqp://guest:guest@sirius-rabbitmq:5672/}
- LOG_LEVEL=${LOG_LEVEL:-error}
- SIRIUS_API_KEY=${SIRIUS_API_KEY:?SIRIUS_API_KEY is required for sirius-api. Run installer first using docker compose -f docker-compose.installer.yaml run --rm sirius-installer}
deploy:
resources:
limits:
memory: 1G
cpus: "1.0"
reservations:
memory: 256M
cpus: "0.25"
depends_on:
sirius-postgres:
condition: service_healthy
sirius-rabbitmq:
condition: service_healthy
sirius-valkey:
condition: service_healthy
healthcheck:
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://127.0.0.1:9001/health"]
interval: 30s
timeout: 10s
retries: 3
sirius-engine:
image: ghcr.io/siriusscan/sirius-engine:${IMAGE_TAG:-latest}
pull_policy: always
container_name: sirius-engine
hostname: sirius-engine
restart: unless-stopped
cap_add:
- NET_RAW
ports:
- "5174:5174"
- "50051:50051" # Agent gRPC
environment:
- GO_ENV=${GO_ENV:-production}
- ENGINE_MAIN_PORT=${ENGINE_MAIN_PORT:-5174}
- GRPC_AGENT_PORT=${GRPC_AGENT_PORT:-50051}
- POSTGRES_HOST=${POSTGRES_HOST:-sirius-postgres}
- POSTGRES_USER=${POSTGRES_USER:-postgres}
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required for sirius-engine. Run installer first using docker compose -f docker-compose.installer.yaml run --rm sirius-installer}
- POSTGRES_DB=${POSTGRES_DB:-sirius}
- POSTGRES_PORT=${POSTGRES_PORT:-5432}
- VALKEY_HOST=${VALKEY_HOST:-sirius-valkey}
- VALKEY_PORT=${VALKEY_PORT:-6379}
- RABBITMQ_URL=${RABBITMQ_URL:-amqp://guest:guest@sirius-rabbitmq:5672/}
- SIRIUS_API_URL=${SIRIUS_API_URL:-http://sirius-api:9001}
- API_BASE_URL=${API_BASE_URL:-http://sirius-api:9001}
- AGENT_ID=${AGENT_ID:-sirius-engine}
- HOST_ID=${HOST_ID:-sirius-engine}
- ENABLE_SCRIPTING=${ENABLE_SCRIPTING:-true}
- LOG_LEVEL=${LOG_LEVEL:-info}
# API key for authenticated requests to sirius-api
- SIRIUS_API_KEY=${SIRIUS_API_KEY:?SIRIUS_API_KEY is required for sirius-engine. Run installer first using docker compose -f docker-compose.installer.yaml run --rm sirius-installer}
depends_on:
sirius-rabbitmq:
condition: service_healthy
sirius-postgres:
condition: service_healthy
sirius-valkey:
condition: service_healthy
healthcheck:
test: ["CMD", "bash", "-lc", "echo > /dev/tcp/127.0.0.1/50051"]
interval: 30s
timeout: 10s
retries: 3
deploy:
resources:
limits:
memory: 2G
cpus: "1.0"
reservations:
memory: 1G
cpus: "0.5"
volumes:
postgres_data:
driver: local
valkey_data:
driver: local
rabbitmq_data:
driver: local
networks:
default:
name: sirius
driver: bridge