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 . && exec 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 # - 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