Files
mediaproc/ctrl/docker-compose.yml

189 lines
4.2 KiB
YAML

x-common-env: &common-env
DATABASE_URL: postgresql://mpr_user:mpr_pass@postgres:5432/mpr
REDIS_URL: redis://redis:6379/0
DJANGO_SETTINGS_MODULE: mpr.settings
DEBUG: 1
GRPC_HOST: grpc
GRPC_PORT: 50051
S3_ENDPOINT_URL: http://minio:9000
S3_BUCKET_IN: mpr-media-in
S3_BUCKET_OUT: mpr-media-out
AWS_ACCESS_KEY_ID: minioadmin
AWS_SECRET_ACCESS_KEY: minioadmin
AWS_REGION: us-east-1
x-healthcheck-defaults: &healthcheck-defaults
interval: 5s
timeout: 5s
retries: 5
services:
# =============================================================================
# Infrastructure
# =============================================================================
postgres:
image: postgres:15-alpine
environment:
POSTGRES_DB: mpr
POSTGRES_USER: mpr_user
POSTGRES_PASSWORD: mpr_pass
ports:
- "5436:5432"
volumes:
- postgres-data:/var/lib/postgresql/data
healthcheck:
<<: *healthcheck-defaults
test: ["CMD-SHELL", "pg_isready -U mpr_user -d mpr"]
redis:
image: redis:7-alpine
ports:
- "6381:6379"
volumes:
- redis-data:/data
healthcheck:
<<: *healthcheck-defaults
test: ["CMD", "redis-cli", "ping"]
minio:
image: minio/minio
command: ["server", "/data", "--console-address", ":9001"]
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_ROOT_USER: minioadmin
MINIO_ROOT_PASSWORD: minioadmin
volumes:
- minio-data:/data
healthcheck:
<<: *healthcheck-defaults
test: ["CMD", "mc", "ready", "local"]
minio-init:
image: minio/mc
depends_on:
minio:
condition: service_healthy
entrypoint: ["/bin/sh", "-c"]
command:
- |
mc alias set local http://minio:9000 minioadmin minioadmin
mc mb --ignore-existing local/mpr-media-in
mc mb --ignore-existing local/mpr-media-out
mc anonymous set download local/mpr-media-in
mc anonymous set download local/mpr-media-out
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- django
- fastapi
- timeline
- minio
# =============================================================================
# Application Services
# =============================================================================
django:
build:
context: ..
dockerfile: ctrl/Dockerfile
command: >
bash -c "python manage.py migrate &&
python manage.py loadbuiltins || true &&
python manage.py runserver 0.0.0.0:8701"
ports:
- "8701:8701"
environment:
<<: *common-env
volumes:
- ..:/app
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
fastapi:
build:
context: ..
dockerfile: ctrl/Dockerfile
command: uvicorn api.main:app --host 0.0.0.0 --port 8702 --reload
ports:
- "8702:8702"
environment:
<<: *common-env
volumes:
- ..:/app
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
grpc:
build:
context: ..
dockerfile: ctrl/Dockerfile
command: python -m rpc.server
ports:
- "50052:50051"
environment:
<<: *common-env
GRPC_PORT: 50051
GRPC_MAX_WORKERS: 10
volumes:
- ..:/app
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
celery:
build:
context: ..
dockerfile: ctrl/Dockerfile
command: celery -A mpr worker -l info -Q transcode -c 2
environment:
<<: *common-env
MPR_EXECUTOR: local
volumes:
- ..:/app
depends_on:
postgres:
condition: service_healthy
redis:
condition: service_healthy
grpc:
condition: service_started
timeline:
build:
context: ../ui/timeline
dockerfile: Dockerfile
ports:
- "5173:5173"
environment:
VITE_ALLOWED_HOSTS: ${VITE_ALLOWED_HOSTS:-}
volumes:
- ../ui/timeline/src:/app/src
volumes:
postgres-data:
redis-data:
minio-data:
networks:
default:
name: mpr
name: mpr