services: db: image: postgres:15.10 container_name: mostovik_db restart: unless-stopped environment: POSTGRES_DB: ${POSTGRES_DB:-mostovik_dev} POSTGRES_USER: ${POSTGRES_USER:-postgres} POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres} volumes: - ./data/db:/var/lib/postgresql/data - ./docker/postgres/init.sql:/docker-entrypoint-initdb.d/init.sql ports: - "5432:5432" networks: - mostovik_network healthcheck: test: ["CMD-SHELL", "pg_isready -U postgres"] interval: 30s timeout: 10s retries: 3 redis: image: redis:7-alpine container_name: mostovik_redis restart: unless-stopped ports: - "6379:6379" volumes: - ./data/redis:/data networks: - mostovik_network healthcheck: test: ["CMD", "redis-cli", "ping"] interval: 30s timeout: 10s retries: 3 web: build: context: . dockerfile: docker/Dockerfile.web container_name: mostovik_web restart: unless-stopped depends_on: db: condition: service_healthy redis: condition: service_healthy environment: - DEBUG=${DEBUG:-True} - SECRET_KEY=${SECRET_KEY:-django-insecure-development-key} - POSTGRES_HOST=db - POSTGRES_PORT=5432 - POSTGRES_DB=${POSTGRES_DB:-mostovik_dev} - POSTGRES_USER=${POSTGRES_USER:-postgres} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres} - REDIS_URL=redis://redis:6379/0 - CELERY_BROKER_URL=redis://redis:6379/0 - CELERY_RESULT_BACKEND=redis://redis:6379/0 volumes: - ./src:/app/src - ./logs:/app/logs - ./media:/app/media - ./staticfiles:/app/staticfiles ports: - "8000:8000" networks: - mostovik_network command: > sh -c "python src/manage.py migrate && python src/manage.py collectstatic --noinput && gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 3" celery_worker: build: context: . dockerfile: docker/Dockerfile.celery container_name: mostovik_celery_worker restart: unless-stopped depends_on: db: condition: service_healthy redis: condition: service_healthy environment: - DEBUG=${DEBUG:-True} - POSTGRES_HOST=db - POSTGRES_PORT=5432 - POSTGRES_DB=${POSTGRES_DB:-mostovik_dev} - POSTGRES_USER=${POSTGRES_USER:-postgres} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres} - REDIS_URL=redis://redis:6379/0 - CELERY_BROKER_URL=redis://redis:6379/0 - CELERY_RESULT_BACKEND=redis://redis:6379/0 volumes: - ./src:/app/src - ./logs:/app/logs networks: - mostovik_network command: celery -A config worker --loglevel=info celery_beat: build: context: . dockerfile: docker/Dockerfile.celery container_name: mostovik_celery_beat restart: unless-stopped depends_on: db: condition: service_healthy redis: condition: service_healthy environment: - DEBUG=${DEBUG:-True} - POSTGRES_HOST=db - POSTGRES_PORT=5432 - POSTGRES_DB=${POSTGRES_DB:-mostovik_dev} - POSTGRES_USER=${POSTGRES_USER:-postgres} - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-postgres} - REDIS_URL=redis://redis:6379/0 - CELERY_BROKER_URL=redis://redis:6379/0 - CELERY_RESULT_BACKEND=redis://redis:6379/0 volumes: - ./src:/app/src - ./logs:/app/logs networks: - mostovik_network command: celery -A config beat --loglevel=info --scheduler django_celery_beat.schedulers:DatabaseScheduler networks: mostovik_network: driver: bridge