diff --git a/.env b/.env index 7d4cd44..2bd33ec 100644 --- a/.env +++ b/.env @@ -1,8 +1,8 @@ SECRET_KEY=testing_$weak_secret_is_allowd DEBUG=True ALLOWED_HOSTS=yuwenerp.yuwen.cloud,localhost, -DB_HOST=localhost -DB_PORT=5432 +DB_HOST=127.0.0.1 +DB_PORT=6432 DB_NAME=flower DB_USER=postgres DB_PASSWORD=postgres \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 3e99ede..5c80122 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,5 +3,6 @@ "." ], "python.testing.unittestEnabled": false, - "python.testing.pytestEnabled": true + "python.testing.pytestEnabled": true, + "python-envs.pythonProjects": [] } \ No newline at end of file diff --git a/celerybeat-schedule b/celerybeat-schedule index 3e13a88..c527186 100644 Binary files a/celerybeat-schedule and b/celerybeat-schedule differ diff --git a/celerybeat-schedule-shm b/celerybeat-schedule-shm index 2daa650..9fda1d9 100644 Binary files a/celerybeat-schedule-shm and b/celerybeat-schedule-shm differ diff --git a/celerybeat-schedule-wal b/celerybeat-schedule-wal index 085bdcb..c324539 100644 Binary files a/celerybeat-schedule-wal and b/celerybeat-schedule-wal differ diff --git a/deploy/pgbouncer/pgbouncer.ini b/deploy/pgbouncer/pgbouncer.ini new file mode 100644 index 0000000..5e6028f --- /dev/null +++ b/deploy/pgbouncer/pgbouncer.ini @@ -0,0 +1,17 @@ +[databases] +# 主业务库,经 PgBouncer 转发到 Postgres +flower = host=postgres port=5432 dbname=flower pool_mode=session + +[pgbouncer] +listen_addr = 0.0.0.0 +listen_port = 6432 +auth_type = md5 +auth_file = /etc/pgbouncer/userlist.txt +pool_mode = session +max_client_conn = 800 +default_pool_size = 40 +reserve_pool_size = 10 +stats_users = pgbouncer_stats +ignore_startup_parameters = extra_float_digits +log_connections = 0 +log_disconnections = 0 diff --git a/deploy/pgbouncer/userlist.txt b/deploy/pgbouncer/userlist.txt new file mode 100644 index 0000000..60cf607 --- /dev/null +++ b/deploy/pgbouncer/userlist.txt @@ -0,0 +1,2 @@ +"postgres" "md53175bce1d3201d16594cebf9d7eb3f9d" +"pgbouncer_stats" "md5020ee831c95741b96bf72786eed800c1" diff --git a/docker-compose.yml b/docker-compose.yml index 29b2815..7426d59 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -14,6 +14,18 @@ services: - db_data:/var/lib/postgresql/data restart: unless-stopped + pgbouncer: + image: edoburu/pgbouncer:latest + container_name: pgbouncer + ports: + - "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 + pgadmin: image: dpage/pgadmin4:latest container_name: pgadmin @@ -68,13 +80,13 @@ services: PYTHONPATH: /app DEBUG: "1" ALLOWED_HOSTS: "localhost,127.0.0.1,0.0.0.0,8.148.215.233,yuwenerp.yuwen.cloud" - DB_HOST: postgres - DB_PORT: "5432" + DB_HOST: pgbouncer + DB_PORT: "6432" DB_NAME: flower DB_USER: postgres DB_PASSWORD: postgres depends_on: - - postgres + - pgbouncer - redis - rabbitmq restart: unless-stopped @@ -96,6 +108,7 @@ services: volumes: - .:/app depends_on: + - pgbouncer - postgres - redis - rabbitmq @@ -103,8 +116,8 @@ services: CELERY_BROKER_URL: amqp://guest:guest@rabbitmq:5672// CELERY_RESULT_BACKEND: redis://redis:6379/0 PYTHONPATH: /app - DB_HOST: postgres - DB_PORT: "5432" + DB_HOST: pgbouncer + DB_PORT: "6432" DB_NAME: flower DB_USER: postgres DB_PASSWORD: postgres @@ -125,14 +138,15 @@ services: volumes: - .:/app depends_on: + - pgbouncer - postgres - redis - rabbitmq environment: DJANGO_SETTINGS_MODULE: flower.settings PYTHONPATH: /app - DB_HOST: postgres - DB_PORT: "5432" + DB_HOST: pgbouncer + DB_PORT: "6432" DB_NAME: flower DB_USER: postgres DB_PASSWORD: postgres diff --git a/flower/settings.py b/flower/settings.py index 23b6163..af0a367 100644 --- a/flower/settings.py +++ b/flower/settings.py @@ -194,9 +194,9 @@ DATABASES = { 'USER': env('DB_USER'), 'PASSWORD': env('DB_PASSWORD'), 'HOST': env('DB_HOST', default='localhost'), - 'PORT': env('DB_PORT', default='5432'), + 'PORT': env('DB_PORT', default='6432'), 'CONN_HEALTH_CHECK': True, - 'CONN_MAX_AGE': 60, + 'CONN_MAX_AGE': env.int('CONN_MAX_AGE', default=0), } }