# SiriusScan Development Docker Compose Override # Use with: docker compose -f docker-compose.yaml -f docker-compose.dev.yaml up --build # # Builds Postgres, Valkey, and RabbitMQ from ./sirius-* Dockerfiles (no GHCR pull). # sirius-ui / sirius-api / sirius-engine use local dev images with pull_policy: never. # For registry-based infra instead, use docker-compose.yaml alone or add IMAGE_TAG + ghcr login. # # Linux "Permission denied" on bind mounts: sirius-ui and sirius-api run as UID/GID 1001 by # default. If the repo is owned by root (e.g. /opt/Sirius), webpack/go cannot write into mounts. # Fix either: # • chown -R 1001:1001 sirius-ui sirius-api (and optional minor-projects paths you mount), or # • Add to .env: SIRIUS_DEV_CONTAINER_UID=0 SIRIUS_DEV_CONTAINER_GID=0 (dev-only; runs as root in those containers). services: sirius-rabbitmq: build: context: ./sirius-rabbitmq dockerfile: Dockerfile image: sirius-sirius-rabbitmq:source pull_policy: never sirius-postgres: build: context: ./sirius-postgres dockerfile: Dockerfile image: sirius-sirius-postgres:source pull_policy: never sirius-valkey: build: context: ./sirius-valkey dockerfile: Dockerfile image: sirius-sirius-valkey:source pull_policy: never sirius-ui: build: context: ./sirius-ui/ dockerfile: Dockerfile target: development # Use development stage args: NEXT_PUBLIC_CLIENTVAR: "clientvar" # Override registry image with local dev build image: sirius-sirius-ui:dev pull_policy: never user: "${SIRIUS_DEV_CONTAINER_UID:-1001}:${SIRIUS_DEV_CONTAINER_GID:-1001}" volumes: # Mount source code for live reloading - ./sirius-ui/src:/app/src - ./sirius-ui/public:/app/public - ./sirius-ui/prisma:/app/prisma - ./sirius-ui/next.config.mjs:/app/next.config.mjs - ./sirius-ui/tailwind.config.ts:/app/tailwind.config.ts - ./sirius-ui/package.json:/app/package.json - ./sirius-ui/postcss.config.cjs:/app/postcss.config.cjs # Mount startup scripts for live updates - ./sirius-ui/start-dev.sh:/app/start-dev.sh - ./sirius-ui/start-prod.sh:/app/start-prod.sh # Preserve node_modules from container to avoid architecture conflicts - node_modules:/app/node_modules # Add system monitor from separate repository - ../minor-projects/app-system-monitor:/system-monitor # Add app administrator from separate repository - ../minor-projects/app-administrator:/app-administrator # Note: UI reads NSE scripts from ValKey (populated by scanner) # No sirius-nse volume mount needed - scanner manages repos independently environment: - NODE_ENV=development - NEXT_TELEMETRY_DISABLED=1 # Override to use SQLite for authentication as defined in schema.prisma - DATABASE_URL=file:./dev.db - NEXTAUTH_SECRET=development-secret-key - NEXTAUTH_URL=http://localhost:3000 - VALKEY_HOST=sirius-valkey - VALKEY_PORT=6379 - RABBITMQ_URL=amqp://guest:guest@sirius-rabbitmq:5672/ - SIRIUS_API_URL=http://sirius-api:9001 - NEXT_PUBLIC_SIRIUS_API_URL=http://localhost:9001 - CONTAINER_NAME=sirius-ui # Internal API auth (file mount from base compose) - SIRIUS_API_KEY_FILE=${SIRIUS_API_KEY_FILE:-/run/secrets/sirius_api_key} # Performance: increase Node.js heap for faster webpack compilation - NODE_OPTIONS=--max-old-space-size=4096 # Performance: enable filesystem polling for reliable hot reload on Docker bind mounts - WATCHPACK_POLLING=true ports: - "3000:3000" - "3001:3001" # Development port # Remove PostgreSQL dependency - using SQLite for authentication depends_on: [] # Override base resource limits for development performance # Webpack compilation needs significantly more CPU than serving a production build deploy: resources: limits: memory: 4G cpus: "4" reservations: memory: 1G cpus: "1" sirius-api: build: context: ./sirius-api/ target: development # Use development stage # Override image for dev builds image: sirius-sirius-api:dev pull_policy: never user: "${SIRIUS_DEV_CONTAINER_UID:-1001}:${SIRIUS_DEV_CONTAINER_GID:-1001}" volumes: - ./sirius-api:/api # Enable for local go-api development with source-aware functionality: - ../minor-projects/go-api:/go-api # Add system monitor from separate repository - ../minor-projects/app-system-monitor:/system-monitor # Add app administrator from separate repository - ../minor-projects/app-administrator:/app-administrator ports: - "9001:9001" environment: - GO_ENV=development - API_PORT=9001 - POSTGRES_HOST=sirius-postgres - POSTGRES_USER=postgres - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required for development. Run installer first using docker compose -f docker-compose.installer.yaml run --rm sirius-installer} - POSTGRES_DB=sirius - POSTGRES_PORT=5432 - VALKEY_HOST=sirius-valkey - VALKEY_PORT=6379 - RABBITMQ_URL=amqp://guest:guest@sirius-rabbitmq:5672/ - LOG_LEVEL=info - CONTAINER_NAME=sirius-api - SIRIUS_API_KEY_FILE=${SIRIUS_API_KEY_FILE:-/run/secrets/sirius_api_key} sirius-engine: build: context: ./sirius-engine/ target: development # Use development stage # Override image for dev builds image: sirius-sirius-engine:dev pull_policy: never # Uses bridge networking (from base compose) with explicit port mapping: # 5174:5174 - Engine main port # 50051:50051 - Agent gRPC port # This allows native agents on the host to connect via localhost:50051 # Required for ICMP probes in ping++ fingerprinting cap_add: - NET_RAW volumes: - ./sirius-engine:/engine # Mount start scripts for hot reload of startup changes - ./sirius-engine/start-enhanced.sh:/start-enhanced.sh - ./sirius-engine/start.sh:/start.sh # Development volume mounts (require ../minor-projects/ structure): # Enabled for local development with source-aware functionality - ../minor-projects/app-agent:/app-agent - ../minor-projects/app-scanner:/app-scanner - ../minor-projects/app-terminal:/app-terminal - ../minor-projects/go-api:/go-api - ../minor-projects/ping++:/ping++ - ../minor-projects/sirius-nse:/sirius-nse - ../minor-projects/sirius-agent-modules:/app-agent/sirius-agent-modules # Add system monitor from separate repository - ../minor-projects/app-system-monitor:/system-monitor # Add app administrator from separate repository - ../minor-projects/app-administrator:/app-administrator environment: - GO_ENV=development - ENGINE_MAIN_PORT=5174 - GRPC_AGENT_PORT=50051 - POSTGRES_HOST=sirius-postgres - POSTGRES_USER=postgres - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required for development. Run installer first using docker compose -f docker-compose.installer.yaml run --rm sirius-installer} - POSTGRES_DB=sirius - POSTGRES_PORT=5432 - VALKEY_HOST=sirius-valkey - VALKEY_PORT=6379 - RABBITMQ_URL=amqp://guest:guest@sirius-rabbitmq:5672/ - LOG_LEVEL=info # Scanner/agent API base (canonical SIRIUS_API_URL; API_BASE_URL mirrors it in base compose) - SIRIUS_API_URL=${SIRIUS_API_URL:-http://sirius-api:9001} - API_BASE_URL=${SIRIUS_API_URL:-http://sirius-api:9001} - AGENT_ID=sirius-engine - HOST_ID=sirius-engine - ENABLE_SCRIPTING=true - CONTAINER_NAME=sirius-engine - SIRIUS_API_KEY_FILE=${SIRIUS_API_KEY_FILE:-/run/secrets/sirius_api_key} networks: default: name: sirius driver: bridge volumes: node_modules: