services: db: image: postgres:16-alpine environment: POSTGRES_DB: ${POSTGRES_DB:-rehearsalhub} POSTGRES_USER: ${POSTGRES_USER:-rh_user} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-default_secure_password} volumes: - pg_data_dev:/var/lib/postgresql/data ports: - "5432:5432" networks: - rh_net healthcheck: test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-rh_user} -d ${POSTGRES_DB:-rehearsalhub} || exit 1"] interval: 10s timeout: 5s retries: 20 start_period: 20s redis: image: redis:7-alpine networks: - rh_net healthcheck: test: ["CMD-SHELL", "redis-cli ping || exit 1"] interval: 5s timeout: 3s retries: 10 api: build: context: ./api target: development command: sh -c "alembic upgrade head && python3 -m uvicorn rehearsalhub.main:app --host 0.0.0.0 --port 8000 --reload" environment: DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-rh_user}:${POSTGRES_PASSWORD:-default_secure_password}@db:5432/${POSTGRES_DB:-rehearsalhub} NEXTCLOUD_URL: ${NEXTCLOUD_URL:-https://cloud.example.com} NEXTCLOUD_USER: ${NEXTCLOUD_USER:-rh_service} NEXTCLOUD_PASS: ${NEXTCLOUD_PASS:-default_password} REDIS_URL: redis://redis:6379/0 SECRET_KEY: ${SECRET_KEY:-replace_me_with_32_byte_hex_default} INTERNAL_SECRET: ${INTERNAL_SECRET:-replace_me_with_32_byte_hex_default} STORAGE_ENCRYPTION_KEY: ${STORAGE_ENCRYPTION_KEY:-5vaaZQs4J7CFYZ7fqee37HgIt4xNxKHHX6OWd29Yh5E=} DOMAIN: localhost ports: - "8000:8000" networks: - rh_net depends_on: db: condition: service_healthy audio-worker: build: context: ./worker target: development environment: DATABASE_URL: postgresql+asyncpg://${POSTGRES_USER:-rh_user}:${POSTGRES_PASSWORD:-default_secure_password}@db:5432/${POSTGRES_DB:-rehearsalhub} REDIS_URL: redis://redis:6379/0 API_URL: http://api:8000 INTERNAL_SECRET: ${INTERNAL_SECRET:-replace_me_with_32_byte_hex_default} ANALYSIS_VERSION: "1.0.0" LOG_LEVEL: DEBUG PYTHONUNBUFFERED: "1" volumes: - ./worker/src:/app/src:z - audio_tmp:/tmp/audio networks: - rh_net depends_on: db: condition: service_healthy redis: condition: service_healthy web: build: context: ./web target: development environment: API_URL: http://api:8000 ports: - "3000:3000" networks: - rh_net depends_on: - api networks: rh_net: driver: bridge volumes: pg_data_dev: audio_tmp: