1
0
forked from erp-dev/erp

feat: prod clean

This commit is contained in:
2026-05-01 22:43:22 +08:00
parent 1afcfde151
commit d7b388e935
19 changed files with 1198 additions and 134 deletions

View File

@@ -1,42 +1,38 @@
version: "3.8"
x-app-image: &app-image
image: ${FLOWER_IMAGE:-flower-app:latest}
build:
context: .
dockerfile: Dockerfile.prod
x-app-runtime: &app-runtime
env_file:
- ${APP_ENV_FILE:-.env}
environment:
DJANGO_SETTINGS_MODULE: flower.settings
PYTHONPATH: /app
CACHE_HOST: redis
CACHE_PORT: 6379
CELERY_RESULT_HOST: redis
CELERY_RESULT_PORT: 6379
CELERY_BROKER_HOST: rabbitmq
CELERY_BROKER_PORT: 5672
restart: unless-stopped
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: edoburu/pgbouncer:latest
container_name: pgbouncer
ports:
- "127.0.0.1:6432:6432"
volumes:
- ./deploy/pgbouncer/pgbouncer.ini:/etc/pgbouncer/pgbouncer.ini
- ./deploy/pgbouncer/userlist.txt:/etc/pgbouncer/userlist.txt
depends_on:
- postgres
restart: unless-stopped
redis:
image: redis:7-alpine
container_name: redis
container_name: flower_redis
command:
- redis-server
- --appendonly
- yes
volumes:
- redis_data:/data
restart: unless-stopped
rabbitmq:
image: rabbitmq:3-management-alpine
container_name: rabbitmq
container_name: flower_rabbitmq
environment:
RABBITMQ_DEFAULT_USER: ${RABBITMQ_DEFAULT_USER:-guest}
RABBITMQ_DEFAULT_PASS: ${RABBITMQ_DEFAULT_PASS:-guest}
@@ -45,9 +41,11 @@ services:
restart: unless-stopped
web:
image: ${FLOWER_IMAGE:-flower-app:latest}
<<: [*app-image, *app-runtime]
container_name: flower_web
command:
- python
- -m
- uvicorn
- flower.asgi:application
- --host
@@ -58,37 +56,16 @@ services:
- "${UVICORN_WORKERS:-1}"
ports:
- "${WEB_PORT:-8100}: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}"
CACHE_HOST: ${CACHE_HOST:-redis}
CACHE_PORT: "${CACHE_PORT:-6379}"
# Celery BrokerRabbitMQ连接容器内用服务名访问
CELERY_BROKER_HOST: ${CELERY_BROKER_HOST:-rabbitmq}
CELERY_BROKER_PORT: "${CELERY_BROKER_PORT:-5672}"
CELERY_BROKER_USER: "${CELERY_BROKER_USER:-guest}"
CELERY_BROKER_PASSWORD: "${CELERY_BROKER_PASSWORD:-guest}"
# Celery Result BackendRedis连接容器内用服务名访问
CELERY_RESULT_HOST: ${CELERY_RESULT_HOST:-redis}
CELERY_RESULT_PORT: "${CELERY_RESULT_PORT:-6379}"
CELERY_RESULT_DB: "${CELERY_RESULT_DB:-1}"
depends_on:
- pgbouncer
- redis
- rabbitmq
restart: unless-stopped
celery_worker:
image: ${FLOWER_IMAGE:-flower-app:latest}
<<: [*app-image, *app-runtime]
container_name: celery_worker
command:
- python
- -m
- celery
- -A
- flower
@@ -97,78 +74,12 @@ services:
- 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}"
# 缓存Redis连接容器内用服务名访问
CACHE_HOST: ${CACHE_HOST:-redis}
CACHE_PORT: "${CACHE_PORT:-6379}"
# Celery 连接配置:容器内用服务名访问
CELERY_BROKER_HOST: ${CELERY_BROKER_HOST:-rabbitmq}
CELERY_BROKER_PORT: "${CELERY_BROKER_PORT:-5672}"
CELERY_BROKER_USER: "${CELERY_BROKER_USER:-guest}"
CELERY_BROKER_PASSWORD: "${CELERY_BROKER_PASSWORD:-guest}"
CELERY_RESULT_HOST: ${CELERY_RESULT_HOST:-redis}
CELERY_RESULT_PORT: "${CELERY_RESULT_PORT:-6379}"
CELERY_RESULT_DB: "${CELERY_RESULT_DB:-1}"
# 数据库备份输出目录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
- 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}"
# 缓存Redis连接容器内用服务名访问
CACHE_HOST: ${CACHE_HOST:-redis}
CACHE_PORT: "${CACHE_PORT:-6379}"
# Celery 连接配置:容器内用服务名访问
CELERY_BROKER_HOST: ${CELERY_BROKER_HOST:-rabbitmq}
CELERY_BROKER_PORT: "${CELERY_BROKER_PORT:-5672}"
CELERY_BROKER_USER: "${CELERY_BROKER_USER:-guest}"
CELERY_BROKER_PASSWORD: "${CELERY_BROKER_PASSWORD:-guest}"
CELERY_RESULT_HOST: ${CELERY_RESULT_HOST:-redis}
CELERY_RESULT_PORT: "${CELERY_RESULT_PORT:-6379}"
CELERY_RESULT_DB: "${CELERY_RESULT_DB:-1}"
# Celery Beat 的持久化调度文件,避免重启后重复/错过调度
volumes:
- celery_beat_data:/var/lib/celery
depends_on:
- postgres
- redis
- rabbitmq
restart: unless-stopped
volumes:
db_data:
redis_data:
rabbitmq_data:
celery_beat_data: