- 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
284 lines
8.3 KiB
YAML
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 |