services: db: image: postgres:16-alpine environment: POSTGRES_DB: training POSTGRES_USER: training POSTGRES_PASSWORD: training expose: - "5432" volumes: - postgres_data:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U training"] interval: 5s timeout: 5s retries: 10 networks: - backend redis: image: redis:7-alpine expose: - "6379" healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 5s timeout: 3s retries: 10 networks: - backend web: build: context: . args: REQUIREMENTS_FILE: local.txt command: python manage.py runserver 0.0.0.0:8000 volumes: - .:/app ports: - "8000:8000" env_file: - .env environment: DJANGO_SETTINGS_MODULE: config.settings.local depends_on: db: condition: service_healthy redis: condition: service_healthy networks: - backend - edge celery: build: context: . args: REQUIREMENTS_FILE: local.txt command: celery -A config worker --loglevel=info volumes: - .:/app env_file: - .env environment: DJANGO_SETTINGS_MODULE: config.settings.local depends_on: db: condition: service_healthy redis: condition: service_healthy certificate-renderer: condition: service_started networks: - backend celery-beat: build: context: . args: REQUIREMENTS_FILE: local.txt command: celery -A config beat --loglevel=info --scheduler django_celery_beat.schedulers:DatabaseScheduler volumes: - .:/app env_file: - .env environment: DJANGO_SETTINGS_MODULE: config.settings.local depends_on: db: condition: service_healthy redis: condition: service_healthy networks: - backend frontend: build: context: . dockerfile: frontend/Dockerfile depends_on: - web environment: FRONTEND_API_BASE_URL: ${FRONTEND_API_BASE_URL:-} ports: - "${FRONTEND_PORT:-8080}:80" networks: - edge certificate-renderer: build: context: . dockerfile: certificates/Dockerfile.renderer environment: CERTIFICATE_RENDERER_TOKEN: ${CERTIFICATE_RENDERER_TOKEN:-} expose: - "8090" read_only: true tmpfs: - /tmp cap_drop: - ALL networks: - backend volumes: postgres_data: networks: backend: internal: true edge: