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

203 lines
4.9 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
POSTGRES_PASSWORD: postgres
POSTGRES_DB: flower
ports:
- "5432:5432"
volumes:
- db_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 3s
retries: 10
start_period: 10s
restart: unless-stopped
pgbouncer:
image: pgbouncer/pgbouncer:latest
container_name: pgbouncer
# 使用环境变量配置,让镜像自动生成配置文件
environment:
# 数据库连接配置(格式:数据库名=host=主机 port=端口 dbname=数据库名 user=用户 password=密码)
DATABASES: flower=host=postgres port=5432 dbname=flower user=postgres password=postgres
# PgBouncer 基本配置
PGBOUNCER_LISTEN_ADDR: 0.0.0.0
PGBOUNCER_LISTEN_PORT: 6432
PGBOUNCER_AUTH_TYPE: trust
# 连接池配置
PGBOUNCER_POOL_MODE: transaction
PGBOUNCER_MAX_CLIENT_CONN: "100"
PGBOUNCER_DEFAULT_POOL_SIZE: "25"
PGBOUNCER_MIN_POOL_SIZE: "5"
PGBOUNCER_RESERVE_POOL_SIZE: "5"
PGBOUNCER_RESERVE_POOL_TIMEOUT: "3"
# 连接超时设置
PGBOUNCER_SERVER_CONNECT_TIMEOUT: "15"
PGBOUNCER_SERVER_IDLE_TIMEOUT: "600"
PGBOUNCER_QUERY_TIMEOUT: "0"
PGBOUNCER_QUERY_WAIT_TIMEOUT: "120"
# 日志配置
PGBOUNCER_LOG_CONNECTIONS: "1"
PGBOUNCER_LOG_DISCONNECTIONS: "1"
PGBOUNCER_LOG_POOLER_ERRORS: "1"
# 其他设置
PGBOUNCER_IGNORE_STARTUP_PARAMETERS: extra_float_digits
PGBOUNCER_APPLICATION_NAME_ADD_HOST: "1"
ports:
- "6432:6432"
# 确保 postgres 完全启动后再启动 pgbouncer
depends_on:
postgres:
condition: service_healthy
# DNS 配置:使用 Docker 内置 DNS并添加 DNS 搜索域
dns:
- 127.0.0.11 # Docker 内置 DNS
dns_search:
- . # 当前网络域
restart: unless-stopped
pgadmin:
image: dpage/pgadmin4:latest
container_name: pgadmin
environment:
PGADMIN_DEFAULT_EMAIL: admin@admin.com
PGADMIN_DEFAULT_PASSWORD: admin
PGADMIN_CONFIG_SERVER_MODE: "False"
ports:
- "5050:80"
volumes:
- pgadmin_data:/var/lib/pgadmin
depends_on:
- postgres
restart: unless-stopped
redis:
image: redis:7-alpine
container_name: redis
ports:
- "6379:6379"
volumes:
- redis_data:/data
restart: unless-stopped
rabbitmq:
image: rabbitmq:3-management-alpine
container_name: rabbitmq
environment:
RABBITMQ_DEFAULT_USER: guest
RABBITMQ_DEFAULT_PASS: guest
ports:
- "5672:5672"
- "15672:15672"
volumes:
- rabbitmq_data:/var/lib/rabbitmq
restart: unless-stopped
web:
build:
context: .
target: base
container_name: flower_web
command: python manage.py runserver 0.0.0.0:8100
ports:
- "8100:8100"
volumes:
- .:/app
environment:
DJANGO_SETTINGS_MODULE: flower.settings
PYTHONPATH: /app
DEBUG: "1"
ALLOWED_HOSTS: "localhost,127.0.0.1,0.0.0.0,8.148.215.233,yuwenerp.yuwen.cloud"
DB_HOST: pgbouncer
DB_PORT: "6432"
DB_NAME: flower
DB_USER: postgres
DB_PASSWORD: postgres
depends_on:
- pgbouncer
- postgres
- redis
- rabbitmq
restart: unless-stopped
celery_worker:
build:
context: .
target: base
container_name: celery_worker
command:
- celery
- -A
- flower
- worker
- -l
- info
- --concurrency=2
- --pool=solo
volumes:
- .:/app
depends_on:
- pgbouncer
- postgres
- redis
- rabbitmq
environment:
CELERY_BROKER_URL: amqp://guest:guest@rabbitmq:5672//
CELERY_RESULT_BACKEND: redis://redis:6379/0
PYTHONPATH: /app
DB_HOST: pgbouncer
DB_PORT: "6432"
DB_NAME: flower
DB_USER: postgres
DB_PASSWORD: postgres
restart: unless-stopped
celery_beat:
build:
context: .
target: base
container_name: celery_beat
command:
- celery
- -A
- flower
- beat
- -l
- info
- --schedule
- /var/lib/celery/celerybeat-schedule
volumes:
- .:/app
- celery_beat_data:/var/lib/celery
environment:
DJANGO_SETTINGS_MODULE: flower.settings
PYTHONPATH: /app
DB_HOST: pgbouncer
DB_PORT: "6432"
DB_NAME: flower
DB_USER: postgres
DB_PASSWORD: postgres
CELERY_BROKER_URL: amqp://guest:guest@rabbitmq:5672//
CELERY_RESULT_BACKEND: redis://redis:6379/0
depends_on:
- pgbouncer
- postgres
- redis
- rabbitmq
restart: unless-stopped
volumes:
db_data:
redis_data:
pgadmin_data:
rabbitmq_data:
celery_beat_data: