services: webserver: build: ../../../docker/nginx/ logging: driver: "${LOG_DRIVER}" options: max-file: "${LOG_OPT_MAXF}" max-size: "${LOG_OPT_MAXS}" working_dir: /application container_name: nginx-uvicorn-webserver volumes: - ../../../www:/www - ../../../script/:/script/ - ../../../config/web-server/nginx/gunicorn/conf.d/:/etc/nginx/conf.d/ - ../../../config/web-server/nginx/gunicorn/nginx_conf/nginx.conf:/etc/nginx/nginx.conf - ../../../config/web-server/nginx/gunicorn/proxy_params/proxy_params:/etc/nginx/proxy_params - ./ssl/certs/:/etc/ssl/certs/ - ./ssl/letsencrypt/:/etc/letsencrypt/ - ../../../log/:/log/ - ../../../script/logrotate/nginx/nginx:/etc/logrotate.d/nginx ports: - 80:80 - 443:443 environment: TZ: "Asia/Seoul" restart: always uvicorn-app: build: ../../../docker/gunicorn/ logging: driver: "${LOG_DRIVER}" options: max-file: "${LOG_OPT_MAXF}" max-size: "${LOG_OPT_MAXS}" working_dir: /www/${PROJECT_DIR} container_name: uvicorn-app volumes: - ../../../www:/www - ../../../log:/log - ../../../config/app-server/uvicorn/:/uvicorn - ../../../script/logrotate/uvicorn/uvicorn:/etc/logrotate.d/uvicorn command: bash -c "uv pip install --system --no-cache . && gunicorn -c /uvicorn/gunicorn_uvicorn.conf.py" environment: TZ: "Asia/Seoul" restart: always celery: build: ../../../docker/gunicorn/ logging: driver: "${LOG_DRIVER}" options: max-file: "${LOG_OPT_MAXF}" max-size: "${LOG_OPT_MAXS}" working_dir: /www/${PROJECT_DIR} container_name: celery-app volumes: - ../../../www:/www - ../../../log:/log - ../../../script/logrotate/uvicorn/celery/uvicorn-celery:/etc/logrotate.d/uvicorn-celery command: bash -c "uv pip install --system --no-cache . && \ celery -A config worker \ --loglevel=INFO \ --logfile=/log/uvicorn/celery/worker-%n%I.log" environment: TZ: "Asia/Seoul" restart: always depends_on: - redis - gunicorn-uvicorn-app profiles: - celery celery-beat: build: ../../../docker/gunicorn/ logging: driver: "${LOG_DRIVER}" options: max-file: "${LOG_OPT_MAXF}" max-size: "${LOG_OPT_MAXS}" working_dir: /www/${PROJECT_DIR} container_name: celerybeat-app volumes: - ../../../www:/www - ../../../log:/log - ../../../script/logrotate/uvicorn/celerybeat/uvicorn-celerybeat:/etc/logrotate.d/uvicorn-celerybeat command: bash -c "uv pip install --system --no-cache . && \ celery -A config beat \ --loglevel=INFO \ --scheduler django_celery_beat.schedulers:DatabaseScheduler \ --logfile=/log/uvicorn/celerybeat/celerybeat.log" environment: TZ: "Asia/Seoul" restart: always depends_on: - celery profiles: - celery flower: image: mher/flower:master logging: driver: "${LOG_DRIVER}" options: max-file: "${LOG_OPT_MAXF}" max-size: "${LOG_OPT_MAXS}" container_name: flower ports: - "5555:5555" environment: - CELERY_BROKER_URL=${CELERY_BROKER_URL} - FLOWER_BASIC_AUTH=${FLOWER_ID}:${FLOWER_PWD} restart: always depends_on: - celery-beat profiles: - celery redis: image: redis:latest logging: driver: "${LOG_DRIVER}" options: max-file: "${LOG_OPT_MAXF}" max-size: "${LOG_OPT_MAXS}" container_name: redis_db # ports: # - 6379:6379 volumes: - ./redis/data:/data - ./redis/conf/:/usr/local/etc/redis/ labels: - "name=redis" - "mode=standalone" environment: TZ: "Asia/Seoul" restart: always command: redis-server /usr/local/etc/redis/redis.conf redis-stats: image: insready/redis-stat:latest logging: driver: "${LOG_DRIVER}" options: max-file: "${LOG_OPT_MAXF}" max-size: "${LOG_OPT_MAXS}" container_name: redis-stats ports: - 63790:63790 command: ["--verbose", "--server", "redis:6379"] environment: TZ: "Asia/Seoul" depends_on: - redis restart: always profiles: - redis