fix(api): TCP keepalive + pool tuning sur la connexion PG

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 <noreply@anthropic.com>
This commit is contained in:
ordinarthur 2026-05-17 13:29:24 +02:00
parent 5f88a6411e
commit cb1195ab73

View File

@ -12,12 +12,27 @@ const dbConfig = defineConfig({
connections: { connections: {
postgres: { postgres: {
client: 'pg', 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: { connection: {
host: env.get('PG_HOST'), host: env.get('PG_HOST'),
port: env.get('PG_PORT'), port: env.get('PG_PORT'),
user: env.get('PG_USER'), user: env.get('PG_USER'),
password: env.get('PG_PASSWORD'), password: env.get('PG_PASSWORD'),
database: env.get('PG_DB_NAME'), 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: { migrations: {
naturalSort: true, naturalSort: true,