services: # proxy: # build: # context: ../proxy # dockerfile: Dockerfile # restart: unless-stopped # expose: # - "8085" # volumes: # - ../proxy/config.json:/app/config.json:ro # - ../proxy/ca:/app/ca # environment: # PYTHONUNBUFFERED: "1" # PROXY_HOST: "0.0.0.0" # PROXY_PORT: "8085" db: image: postgres:18-alpine restart: always env_file: - ./backend/qlockify-backend-deployment/.env volumes: - postgres_data:/var/lib/postgresql - ./postgres/init.sql:/docker-entrypoint-initdb.d/init.sql command: postgres healthcheck: test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"] interval: 10s timeout: 5s retries: 5 ports: - "127.0.0.1:5432:5432" # Bound to localhost for security (as in old project) redis: image: redis:7-alpine restart: always ports: - "127.0.0.1:6379:6379" backend: build: context: ./backend/qlockify-backend-deployment dockerfile: ../Dockerfile restart: always env_file: - ./backend/qlockify-backend-deployment/.env volumes: - static_data:/app/static - media_data:/app/media command: > sh -c "python manage.py migrate && python manage.py collectstatic --noinput && gunicorn config.wsgi:application --bind 0.0.0.0:8000 --worker-class gthread --workers 2 --threads 8 --timeout 120 --keep-alive 75" expose: - "8000" depends_on: db: condition: service_healthy redis: condition: service_started # proxy: # condition: service_started # environment: # HTTP_PROXY: "http://proxy:8085" # HTTPS_PROXY: "http://proxy:8085" # http_proxy: "http://proxy:8085" # https_proxy: "http://proxy:8085" # NO_PROXY: "localhost,127.0.0.1,db,redis,proxy" # no_proxy: "localhost,127.0.0.1,db,redis,proxy" celery: build: context: ./backend/qlockify-backend-deployment dockerfile: ../Dockerfile restart: always env_file: - ./backend/qlockify-backend-deployment/.env volumes: - media_data:/app/media command: celery -A config worker -l INFO depends_on: db: condition: service_healthy redis: condition: service_started backend: condition: service_started celery-beat: build: context: ./backend/qlockify-backend-deployment dockerfile: ../Dockerfile restart: always env_file: - ./backend/qlockify-backend-deployment/.env volumes: - celery_beat_data:/app/run command: celery -A config beat -l INFO --schedule /app/run/celerybeat-schedule depends_on: db: condition: service_healthy redis: condition: service_started backend: condition: service_started frontend: build: context: ./frontend/qlockify-frontend-deployment dockerfile: ../Dockerfile restart: always env_file: - ./frontend/qlockify-frontend-deployment/.env expose: - "80" nginx: image: nginx:alpine restart: always ports: - "80:80" - "443:443" volumes: - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro - ./nginx/certs:/etc/nginx/certs:ro - ./nginx/.htpasswd:/etc/nginx/.htpasswd:ro - static_data:/usr/share/nginx/html/static:ro - media_data:/usr/share/nginx/html/media:ro depends_on: - backend - frontend volumes: postgres_data: static_data: media_data: celery_beat_data: