# docker-compose.yml for Fester # ============================================================ # Quick start: # docker-compose up -d # # Then open http://localhost:8080 # # Volumes: # fester-db — SQLite database (builds, sessions, events) # fester-storage — snapshots, cache, CAS # fester-config — config.yaml, storage.json, node_roles.json # ============================================================ version: "3.8" services: fester: build: . image: fester:latest container_name: fester restart: unless-stopped ports: - "8080:8080" volumes: - fester-db:/var/lib/fester - fester-storage:/var/lib/fester/storage - fester-config:/etc/fester - ./config.yaml:/app/config.yaml:ro environment: - FESTER_DB_PATH=/var/lib/fester/fester.db - FESTER_CONFIG=/app/config.yaml - FESTER_NO_DRIFT=0 - FESTER_AUTOBUILD=0 healthcheck: test: ["CMD", "curl", "-f", "http://localhost:8080/api/health"] interval: 30s timeout: 5s retries: 3 start_period: 10s # Optional: MinIO for distributed cache # Uncomment to enable # minio: # image: minio/minio:latest # container_name: fester-minio # restart: unless-stopped # ports: # - "9000:9000" # - "9001:9001" # volumes: # - minio-data:/data # environment: # - MINIO_ROOT_USER=minioadmin # - MINIO_ROOT_PASSWORD=minioadmin # command: server /data --console-address ":9001" # Optional: Prometheus scraper # prometheus: # image: prom/prometheus:latest # container_name: fester-prometheus # restart: unless-stopped # ports: # - "9090:9090" # volumes: # - ./add-to-prometheus-config.yml:/etc/prometheus/prometheus.yml:ro # - prometheus-data:/prometheus # Optional: Grafana dashboard # grafana: # image: grafana/grafana:latest # container_name: fester-grafana # restart: unless-stopped # ports: # - "3000:3000" # volumes: # - grafana-data:/var/lib/grafana # - ./add-to-grafana-config.json:/etc/grafana/provisioning/dashboards/fester.json:ro # environment: # - GF_SECURITY_ADMIN_PASSWORD=admin volumes: fester-db: fester-storage: fester-config: # minio-data: # prometheus-data: # grafana-data: