fix(database): explicit RDS SSL via NODE_EXTRA_CA_CERTS
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import pg from "pg";
|
import pg from "pg";
|
||||||
import { drizzle } from "drizzle-orm/node-postgres";
|
import { drizzle } from "drizzle-orm/node-postgres";
|
||||||
|
import { readFileSync } from "node:fs";
|
||||||
import * as schema from "./schema/index.js";
|
import * as schema from "./schema/index.js";
|
||||||
|
|
||||||
export type Database = ReturnType<typeof createDatabase>["db"];
|
export type Database = ReturnType<typeof createDatabase>["db"];
|
||||||
@@ -24,11 +25,26 @@ export function createDatabase(connectionString?: string) {
|
|||||||
throw new Error("Missing DATABASE_URL. Set it in your .env or environment before starting the app.");
|
throw new Error("Missing DATABASE_URL. Set it in your .env or environment before starting the app.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RDS SSL: om NODE_EXTRA_CA_CERTS är satt används det certifikatet explicit.
|
||||||
|
// Detta krävs för node-postgres när sslmode=require och certifikatet inte finns
|
||||||
|
// i systemets CA-butik (t.ex. AWS RDS regionala CA).
|
||||||
|
let ssl: pg.PoolConfig["ssl"] | undefined;
|
||||||
|
const extraCa = process.env.NODE_EXTRA_CA_CERTS;
|
||||||
|
if (extraCa && url.includes("sslmode=")) {
|
||||||
|
try {
|
||||||
|
ssl = { ca: readFileSync(extraCa) };
|
||||||
|
} catch {
|
||||||
|
// Certifikatet kunde inte läsas – låt pg falla tillbaka till standardbeteende
|
||||||
|
// så att felet blir tydligt vid anslutning.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const pool = new pg.Pool({
|
const pool = new pg.Pool({
|
||||||
connectionString: url,
|
connectionString: url,
|
||||||
max: Number(process.env.DATABASE_POOL_MAX ?? 10),
|
max: Number(process.env.DATABASE_POOL_MAX ?? 10),
|
||||||
idleTimeoutMillis: 30_000,
|
idleTimeoutMillis: 30_000,
|
||||||
connectionTimeoutMillis: 10_000,
|
connectionTimeoutMillis: 10_000,
|
||||||
|
...(ssl ? { ssl } : {}),
|
||||||
});
|
});
|
||||||
|
|
||||||
const db = drizzle(pool, { schema, casing: "snake_case" });
|
const db = drizzle(pool, { schema, casing: "snake_case" });
|
||||||
|
|||||||
Reference in New Issue
Block a user