From 5a1e618cabe040a51b37ec9949b7bca9c4024d72 Mon Sep 17 00:00:00 2001 From: colaftc Date: Thu, 25 Dec 2025 10:40:34 +0800 Subject: [PATCH] fix: replace pgbouncer setting --- .env | 4 ++-- .vscode/settings.json | 3 ++- celerybeat-schedule | Bin 12288 -> 12288 bytes celerybeat-schedule-shm | Bin 32768 -> 32768 bytes celerybeat-schedule-wal | Bin 3032352 -> 4120032 bytes deploy/pgbouncer/pgbouncer.ini | 17 +++++++++++++++++ deploy/pgbouncer/userlist.txt | 2 ++ docker-compose.yml | 28 +++++++++++++++++++++------- flower/settings.py | 4 ++-- 9 files changed, 46 insertions(+), 12 deletions(-) create mode 100644 deploy/pgbouncer/pgbouncer.ini create mode 100644 deploy/pgbouncer/userlist.txt 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 3e13a88faf41007b775f248f6cea0aa5fccceed3..c52718605b5c5dab19279e9b6980166cd607151b 100644 GIT binary patch delta 191 zcmZojXh_(=Ccw3Yf&UKwasEX-TQ(Lh;Sp}ln(N6T)$Ns)yz5AXt#;5KQnk)8s&T8Ho&I z@01J^Z>9`W?-Ql9Q%Zp9OZAkdYfWA%uPi=YlUYfmv?Mt`H7_wKCpD#kwL?#Fy2j@F s@;~`CxL2|>3ow;baj)QEmSTcBisz~Tvl3H$d|7Hyab|vAd_4Cm08acv82|tP diff --git a/celerybeat-schedule-shm b/celerybeat-schedule-shm index 2daa650c4f4d0c162adfac6455737854c1442011..9fda1d94a4232e81e589482dcb4dc09e16333686 100644 GIT binary patch delta 712 zcmb7?XH?Ar7{>p-zoc}Lm56NRCL^+UB74v5y|;|yUMn*zvdJpkjN3ILo2+cv>vmf= zdt@cjdS zbxiY)iw+G6ch?2}Z{PCIg5_rY!yi|%`5h?w-~fAln47i1Ru%7M$n-IaOM)ayvZP9y zyp-4SR^H1;`6OTDn|zlaV#x3{ipC^Kk|Jh#A+O|(yps=-E}!MAWJsp`lq^xOLI7)W zU_(x9u_G7usK`wo^5Q@~@>76<6vC0hI8lV6I8%(`xKM(Ul%h0cC`&oYM{Gtr=B7PFbdT;>tPd={{fMJ#3s!7ODN%UQunLRiIWLRrIF*0G)qY-AIg z*+Ljw*~WHuu#<2i*u`%4pd*sK?9;HH1L%puz(Edim?K1Ulw-tjoD-bn6sI}ESZgHDC#B-N>+~)xgdBkI$@RVmf$4CMu5=kPN6jJ%SC(C{e I&MLL%FFrZQfB*mh delta 174 zcmZo@U}|V!s+V}A%K!oej0_AwB=CTVfq@ywFMA!4_5Aj>S(A@OYpIL9bl$$;j(nWl z%sr&42OAC~K<55O0#I=_2)(hlnR~N_z!lTY4gv}+oBy~zV47?wAh-FK#{;I#h5~9P E0IN7Ui~s-t diff --git a/celerybeat-schedule-wal b/celerybeat-schedule-wal index 085bdcb7b8d1053cebeb894409bc41a125be96d9..c324539b0b4b5c76553eafa1d06d10a012d46ace 100644 GIT binary patch delta 15159 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 puA!-=t)r`_Z(wL7Ha0OeGqnF0X5H`vVAIA%Xw^ 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), } }