# Flamenco Development Environment # Provides containerized development setup with hot-reloading and shared storage # # Usage: # docker compose -f compose.dev.yml up -d # docker compose -f compose.dev.yml --profile dev-tools up -d services: # ============================================================================= # Flamenco Manager - Central coordination server # ============================================================================= flamenco-manager: build: context: . dockerfile: Dockerfile.dev target: development container_name: ${COMPOSE_PROJECT_NAME}-manager hostname: flamenco-manager ports: - "${MANAGER_PORT:-8080}:8080" # Manager API and web interface - "${MANAGER_DEBUG_PORT:-8082}:8082" # pprof debugging labels: caddy: manager.${DOMAIN} caddy.reverse_proxy: "{{upstreams 8080}}" caddy.header: "X-Forwarded-Proto https" volumes: # Source code for development - .:/app - /app/node_modules # Prevent node_modules override - /app/web/app/node_modules # Prevent webapp node_modules override # Data persistence - flamenco-data:/data - flamenco-shared:/shared-storage # Development cache - go-mod-cache:/go/pkg/mod - yarn-cache:/usr/local/share/.cache/yarn environment: # Development environment - ENVIRONMENT=development - LOG_LEVEL=${LOG_LEVEL:-debug} # Database configuration - DATABASE_FILE=/data/flamenco-manager.sqlite # Shared storage - SHARED_STORAGE_PATH=/shared-storage # Manager configuration - MANAGER_HOST=${MANAGER_HOST:-0.0.0.0} - MANAGER_PORT=8080 - MANAGER_DATABASE_CHECK_PERIOD=${DATABASE_CHECK_PERIOD:-1m} # Enable profiling - ENABLE_PPROF=${ENABLE_PPROF:-true} # Shaman configuration - SHAMAN_ENABLED=${SHAMAN_ENABLED:-false} - SHAMAN_CHECKOUT_PATH=/shared-storage/shaman-checkouts - SHAMAN_STORAGE_PATH=/data/shaman-storage # Worker variables for multi-platform support - BLENDER_LINUX=/usr/local/blender/blender - BLENDER_WINDOWS=C:\Program Files\Blender Foundation\Blender\blender.exe - BLENDER_DARWIN=/Applications/Blender.app/Contents/MacOS/Blender - FFMPEG_LINUX=/usr/bin/ffmpeg - FFMPEG_WINDOWS=C:\ffmpeg\bin\ffmpeg.exe - FFMPEG_DARWIN=/usr/local/bin/ffmpeg healthcheck: test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8080/api/v3/version"] interval: 30s timeout: 10s retries: 3 start_period: 40s command: > sh -c " echo 'Starting Flamenco Manager in development mode...' && flamenco-manager -pprof " depends_on: - shared-storage-setup networks: - flamenco-net - caddy # ============================================================================= # Flamenco Worker - Task execution daemon # ============================================================================= flamenco-worker: build: context: . dockerfile: Dockerfile.dev target: development container_name: ${COMPOSE_PROJECT_NAME}-worker hostname: flamenco-worker volumes: # Source code for development - .:/app - /app/node_modules # Data and shared storage - flamenco-shared:/shared-storage - worker-data:/data # Development cache - go-mod-cache:/go/pkg/mod environment: # Development environment - ENVIRONMENT=development - LOG_LEVEL=${LOG_LEVEL:-debug} # Worker configuration - WORKER_NAME=${WORKER_NAME:-docker-dev-worker} - MANAGER_URL=http://flamenco-manager:8080 - DATABASE_FILE=/data/flamenco-worker.sqlite # Task execution - SHARED_STORAGE_PATH=/shared-storage - TASK_TIMEOUT=${TASK_TIMEOUT:-10m} - WORKER_SLEEP_SCHEDULE=${WORKER_SLEEP_SCHEDULE:-} # Worker tags for organization - WORKER_TAGS=${WORKER_TAGS:-docker,development} command: > sh -c " echo 'Waiting for Manager to be ready...' && sleep 10 && echo 'Starting Flamenco Worker in development mode...' && flamenco-worker " depends_on: - flamenco-manager networks: - flamenco-net # ============================================================================= # Development Services # ============================================================================= # Profiling proxy for pprof debugging profiling-proxy: image: nginx:alpine container_name: ${COMPOSE_PROJECT_NAME}-profiling-proxy labels: caddy: profiling.${DOMAIN} caddy.reverse_proxy: "{{upstreams 80}}" caddy.header: "X-Forwarded-Proto https" volumes: - ./scripts/nginx-profiling.conf:/etc/nginx/conf.d/default.conf depends_on: - flamenco-manager networks: - flamenco-net - caddy profiles: - dev-tools # Vue.js development server for webapp hot-reloading webapp-dev: build: context: . dockerfile: Dockerfile.dev target: development container_name: ${COMPOSE_PROJECT_NAME}-webapp-dev ports: - "${WEBAPP_DEV_PORT:-8081}:8081" labels: caddy: ${DOMAIN} caddy.reverse_proxy: "{{upstreams 8081}}" caddy.header: "X-Forwarded-Proto https" volumes: - ./web/app:/app/web/app - /app/web/app/node_modules - yarn-cache:/usr/local/share/.cache/yarn working_dir: /app/web/app command: yarn dev --host 0.0.0.0 environment: - VITE_API_BASE_URL=https://manager.${DOMAIN} networks: - flamenco-net - caddy profiles: - dev-tools # Hugo development server for documentation docs-dev: build: context: . dockerfile: Dockerfile.dev target: development container_name: ${COMPOSE_PROJECT_NAME}-docs-dev ports: - "${DOCS_DEV_PORT:-1313}:1313" labels: caddy: docs.${DOMAIN} caddy.reverse_proxy: "{{upstreams 1313}}" caddy.header: "X-Forwarded-Proto https" volumes: - ./web/project-website:/app/web/project-website working_dir: /app/web/project-website command: > sh -c " go install github.com/gohugoio/hugo@v0.121.2 && hugo server --bind 0.0.0.0 --port 1313 -D " networks: - flamenco-net - caddy profiles: - dev-tools # Database management and development tools dev-tools: build: context: . dockerfile: Dockerfile.dev target: tools container_name: ${COMPOSE_PROJECT_NAME}-dev-tools volumes: - .:/app - flamenco-data:/data - go-mod-cache:/go/pkg/mod environment: - DATABASE_FILE=/data/flamenco-manager.sqlite networks: - flamenco-net profiles: - dev-tools # ============================================================================= # Utility Services # ============================================================================= # Initialize shared storage with proper permissions shared-storage-setup: image: alpine:latest container_name: ${COMPOSE_PROJECT_NAME}-storage-init volumes: - flamenco-shared:/shared-storage command: > sh -c " echo 'Setting up shared storage...' && mkdir -p /shared-storage/projects /shared-storage/renders /shared-storage/assets && chmod -R 755 /shared-storage && echo 'Shared storage initialized' " # ============================================================================= # Networks # ============================================================================= networks: flamenco-net: driver: bridge name: ${COMPOSE_PROJECT_NAME}-network caddy: external: true # ============================================================================= # Volumes # ============================================================================= volumes: # Persistent data flamenco-data: name: ${COMPOSE_PROJECT_NAME}-data flamenco-shared: name: ${COMPOSE_PROJECT_NAME}-shared-storage worker-data: name: ${COMPOSE_PROJECT_NAME}-worker-data # Development caches go-mod-cache: name: ${COMPOSE_PROJECT_NAME}-go-mod-cache yarn-cache: name: ${COMPOSE_PROJECT_NAME}-yarn-cache