v1.0.92: back to DATABASE_URL — JSON format for jsonEnv

This commit is contained in:
2026-07-28 09:37:14 +04:00
parent d239458d97
commit 7fc17ab3cd
3 changed files with 14 additions and 33 deletions
+6 -8
View File
@@ -1,11 +1,9 @@
# PostgreSQL foriot — параметры инстанса # PostgreSQL foriot — jsonEnv для pythonk8s
# instanceUid: 509145c3-ba71-4687-a084-d9dcbc88d3d2 # instanceUid: 509145c3-ba71-4687-a084-d9dcbc88d3d2
# Кластер: iot-naeel | Версия: PostgreSQL 17 # Кластер: iot-naeel | Версия: PostgreSQL 17
# --- Переменные для jsonEnv pythonk8s --- ```json
DB_HOST=postgresqlk8s-master.509145c3-ba71-4687-a084-d9dcbc88d3d2.svc.cluster.local {
DB_PORT=5432 "DATABASE_URL": "postgresql://superuser:3VPcxOiNC0HOT358LFEOpGcubnhJmp9wifwDJYD7Nl3WKu5FRPq07FUte4BazAok@postgresqlk8s-master.509145c3-ba71-4687-a084-d9dcbc88d3d2.svc.cluster.local:5432/autotest?sslmode=require"
DB_NAME=autotest }
DB_USER=superuser ```
DB_PASSWORD=3VPcxOiNC0HOT358LFEOpGcubnhJmp9wifwDJYD7Nl3WKu5FRPq07FUte4BazAok
DB_SSLMODE=require
+2 -2
View File
@@ -49,8 +49,8 @@ CREATE INDEX IF NOT EXISTS idx_runs_created
def init_db(): def init_db():
"""Применить схему — идемпотентно, безопасно для конкурентного вызова.""" """Применить схему — идемпотентно, безопасно для конкурентного вызова."""
if not os.getenv("DB_USER"): if not os.getenv("DATABASE_URL"):
print("[DB] DB_USER not set — skipping init", flush=True) print("[DB] DATABASE_URL not set — skipping init", flush=True)
return return
conn = get_conn() conn = get_conn()
+6 -23
View File
@@ -2,15 +2,10 @@
Connection pool для PostgreSQL (psycopg2). Connection pool для PostgreSQL (psycopg2).
Lazy-init: пул создаётся при первом обращении к БД в каждом gunicorn-воркере. Lazy-init: пул создаётся при первом обращении к БД в каждом gunicorn-воркере.
Это безопасно для fork-модели — соединения открываются ПОСЛЕ fork. Безопасно для fork-модели — соединения открываются ПОСЛЕ fork.
Переменные окружения (отдельно!): Переменная окружения:
DB_HOST — хост (по умолчанию localhost) DATABASE_URL — postgresql://user:pass@host:5432/dbname?sslmode=require
DB_PORT — порт (по умолчанию 5432)
DB_NAME — имя БД (по умолчанию autotest)
DB_USER — пользователь
DB_PASSWORD — пароль
DB_SSLMODE — sslmode (по умолчанию require)
""" """
import os import os
@@ -20,25 +15,13 @@ from psycopg2 import pool
_pool = None _pool = None
def _build_dsn():
"""Собрать DSN из отдельных переменных окружения."""
return (
f"host={os.getenv('DB_HOST', 'localhost')} "
f"port={os.getenv('DB_PORT', '5432')} "
f"dbname={os.getenv('DB_NAME', 'autotest')} "
f"user={os.getenv('DB_USER', '')} "
f"password={os.getenv('DB_PASSWORD', '')} "
f"sslmode={os.getenv('DB_SSLMODE', 'require')}"
)
def get_pool(): def get_pool():
"""Lazy-init ThreadedConnectionPool (1-5 соединений).""" """Lazy-init ThreadedConnectionPool (1-5 соединений)."""
global _pool global _pool
if _pool is None: if _pool is None:
dsn = _build_dsn() dsn = os.getenv("DATABASE_URL", "")
if not os.getenv("DB_USER"): if not dsn:
return None # нет креда — нет пула return None
_pool = pool.ThreadedConnectionPool(1, 5, dsn) _pool = pool.ThreadedConnectionPool(1, 5, dsn)
return _pool return _pool