1
0
forked from erp-dev/erp
Files
erpnew/docker-compose.prod.yml
2025-12-24 23:12:56 +08:00

157 lines
4.4 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
version: "3.8"
services:
postgres:
image: postgres:16-alpine
container_name: postgres
environment:
POSTGRES_USER: ${POSTGRES_USER:-postgres}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
POSTGRES_DB: ${POSTGRES_DB:-flower}
# 仅绑定到本机,避免把数据库暴露到公网
ports:
- "127.0.0.1:${POSTGRES_PORT:-5432}:5432"
volumes:
- db_data:/var/lib/postgresql/data
restart: unless-stopped
pgbouncer:
image: pgbouncer/pgbouncer:latest
container_name: pgbouncer
# 配置文件已包含所有配置,环境变量仅作为备用
environment:
DATABASES_HOST: postgres
DATABASES_PORT: "${POSTGRES_PORT:-5432}"
DATABASES_USER: ${POSTGRES_USER:-postgres}
DATABASES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
DATABASES_DBNAME: ${POSTGRES_DB:-flower}
ports:
- "${PGBOUNCER_PORT:-6432}:6432"
volumes:
- ./pgbouncer/pgbouncer.ini:/etc/pgbouncer/pgbouncer.ini
depends_on:
- postgres
restart: unless-stopped
redis:
image: redis:7-alpine
container_name: redis
volumes:
- redis_data:/data
restart: unless-stopped
rabbitmq:
image: rabbitmq:3-management-alpine
container_name: rabbitmq
environment:
RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER:-guest}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS:-guest}
volumes:
- rabbitmq_data:/var/lib/rabbitmq
restart: unless-stopped
web:
image: ${FLOWER_IMAGE:-flower-app:latest}
container_name: flower_web
command:
- uvicorn
- flower.asgi:application
- --host
- 0.0.0.0
- --port
- "8000"
- --workers
- "${UVICORN_WORKERS:-1}"
ports:
- "${WEB_PORT:-8000}:8000"
environment:
DJANGO_SETTINGS_MODULE: flower.settings
PYTHONPATH: /app
DEBUG: "${DEBUG:-0}"
ALLOWED_HOSTS: "${ALLOWED_HOSTS:-yuwenerp.yuwen.cloud}"
DB_HOST: ${DB_HOST:-pgbouncer}
DB_PORT: "${DB_PORT:-6432}"
DB_NAME: "${DB_NAME:-flower}"
DB_USER: "${DB_USER:-postgres}"
DB_PASSWORD: "${DB_PASSWORD:-postgres}"
CELERY_BROKER_URL: "${CELERY_BROKER_URL:-amqp://guest:guest@rabbitmq:5672//}"
CELERY_RESULT_BACKEND: "${CELERY_RESULT_BACKEND:-redis://redis:6379/0}"
depends_on:
- pgbouncer
- postgres
- redis
- rabbitmq
restart: unless-stopped
celery_worker:
image: ${FLOWER_IMAGE:-flower-app:latest}
container_name: celery_worker
command:
- celery
- -A
- flower
- worker
- -l
- info
- --concurrency=${CELERY_CONCURRENCY:-2}
- --pool=solo
environment:
PYTHONPATH: /app
DB_HOST: ${DB_HOST:-pgbouncer}
DB_PORT: "${DB_PORT:-6432}"
DB_NAME: "${DB_NAME:-flower}"
DB_USER: "${DB_USER:-postgres}"
DB_PASSWORD: "${DB_PASSWORD:-postgres}"
CELERY_BROKER_URL: "${CELERY_BROKER_URL:-amqp://guest:guest@rabbitmq:5672//}"
CELERY_RESULT_BACKEND: "${CELERY_RESULT_BACKEND:-redis://redis:6379/0}"
# 数据库备份输出目录api_v1.tasks.backup_database 默认输出到 BASE_DIR/data-bak
volumes:
# 默认落在 compose 同级目录的 ./data-bak方便宿主机直接查看/拷贝
# 也可通过 BACKUP_DIR 指定绝对路径,如 /srv/flower/data-bak
- ${BACKUP_DIR:-./data-bak}:/app/data-bak
depends_on:
- pgbouncer
- postgres
- redis
- rabbitmq
restart: unless-stopped
celery_beat:
image: ${FLOWER_IMAGE:-flower-app:latest}
container_name: celery_beat
command:
- celery
- -A
- flower
- beat
- -l
- info
- --schedule
- /var/lib/celery/celerybeat-schedule
environment:
DJANGO_SETTINGS_MODULE: flower.settings
PYTHONPATH: /app
DB_HOST: ${DB_HOST:-pgbouncer}
DB_PORT: "${DB_PORT:-6432}"
DB_NAME: "${DB_NAME:-flower}"
DB_USER: "${DB_USER:-postgres}"
DB_PASSWORD: "${DB_PASSWORD:-postgres}"
CELERY_BROKER_URL: "${CELERY_BROKER_URL:-amqp://guest:guest@rabbitmq:5672//}"
CELERY_RESULT_BACKEND: "${CELERY_RESULT_BACKEND:-redis://redis:6379/0}"
# Celery Beat 的持久化调度文件,避免重启后重复/错过调度
volumes:
- celery_beat_data:/var/lib/celery
depends_on:
- pgbouncer
- postgres
- redis
- rabbitmq
restart: unless-stopped
volumes:
db_data:
redis_data:
rabbitmq_data:
celery_beat_data: