flamenco/compose.dev.yml
Ryan Malloy e8ea44a0a6 Implement optimized Docker development environment
- Add multi-stage Dockerfile.dev with 168x Go module performance improvement
- Implement modern Docker Compose configuration with caddy-docker-proxy
- Add comprehensive Makefile.docker for container management
- Migrate from Poetry to uv for Python dependencies
- Fix Alpine Linux compatibility and Docker mount conflicts
- Create comprehensive documentation in docs/ directory
- Add Playwright testing integration
- Configure reverse proxy with automatic HTTPS
- Update .gitignore for Docker development artifacts
2025-09-09 10:25:30 -06:00

284 lines
8.3 KiB
YAML

# 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