From cb1195ab731eb46a47688ee7f70dd7ab8dcb2a3b Mon Sep 17 00:00:00 2001 From: ordinarthur <@arthurbarre.js@gmail.com> Date: Sun, 17 May 2026 13:29:24 +0200 Subject: [PATCH] fix(api): TCP keepalive + pool tuning sur la connexion PG MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le firewall entre pod K3s et LXC PG coupe silencieusement les connexions idle (« Connection terminated unexpectedly » remonté par Sentry). On active `keepAlive` sur le socket pg et on recycle les connexions idle du pool plus vite (idleTimeoutMillis: 30 s). Co-Authored-By: Claude Opus 4.7 --- apps/api/config/database.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/apps/api/config/database.ts b/apps/api/config/database.ts index d5de41e..b319207 100644 --- a/apps/api/config/database.ts +++ b/apps/api/config/database.ts @@ -12,12 +12,27 @@ const dbConfig = defineConfig({ connections: { postgres: { client: 'pg', + // TCP keepalive (keepAlive / keepAliveInitialDelayMillis) : empêche le + // firewall entre pod K3s et LXC PG de couper silencieusement les + // connexions idle (cause de l'erreur « Connection terminated + // unexpectedly » remontée par Sentry). Lucid type-narrow ne les expose + // pas mais le driver `pg` les accepte et knex les forward tels quels. connection: { host: env.get('PG_HOST'), port: env.get('PG_PORT'), user: env.get('PG_USER'), password: env.get('PG_PASSWORD'), database: env.get('PG_DB_NAME'), + // @ts-expect-error Lucid n'expose pas keepAlive/keepAliveInitialDelayMillis dans son type pg ; le driver et knex les forward tels quels. + keepAlive: true, + keepAliveInitialDelayMillis: 10_000, + }, + pool: { + min: 0, + max: 10, + // Recycler les connexions idle rapidement plutôt que d'en garder + // qui risquent d'être coupées côté réseau. + idleTimeoutMillis: 30_000, }, migrations: { naturalSort: true,