services: backend: container_name: backend-e-trznice build: context: ./backend dockerfile: Dockerfile restart: always env_file: - ./backend/.env networks: - app_network depends_on: - db - redis volumes: - static-data:/app/collectedstaticfiles - media-data:/app/media command: sh -c " python manage.py check && python manage.py collectstatic --clear --noinput --verbosity 3 && python manage.py makemigrations --noinput && python manage.py migrate --verbosity 3 --noinput && gunicorn -k uvicorn.workers.UvicornWorker trznice.asgi:application --bind 0.0.0.0:8000" ports: - "8000:8000" db: image: postgres:15-alpine container_name: postgres-e-trznice restart: always env_file: - ./backend/.env volumes: - db-data:/var/lib/postgresql/data ports: - "5432:5432" networks: - app_network redis: #extremly fast db, stores data in RAM memory container_name: redis-e-trznice image: redis:alpine restart: always env_file: - ./backend/.env environment: - REDIS_PASSWORD=${REDIS_PASSWORD} volumes: - redis-data:/data expose: - "6379" networks: - app_network celery: #task queue for handling asynchronous/hard tasks container_name: celery-e-trznice build: context: ./backend command: celery -A trznice worker --loglevel=info volumes: - ./backend:/code env_file: - ./backend/.env depends_on: - redis - db - backend networks: - app_network celery-beat: #periodic tasks scheduler container_name: celery-beat-e-trznice build: context: ./backend command: celery -A trznice beat --loglevel=info volumes: - ./backend:/code env_file: - ./backend/.env depends_on: - redis - db - backend networks: - app_network #end of backend services ----------------------- nginx: #web server, reverse proxy, serves static files container_name: nginx-e-trznice build: context: ./frontend dockerfile: Dockerfile.prod env_file: - ./frontend/.env ports: - 3000:80 depends_on: - backend networks: - app_network volumes: - static-data:/app/collectedstaticfiles # static (Django) - media-data:/app/media # media (Django) networks: app_network: driver: bridge volumes: redis-data: db-data: static-data: media-data: