feat(web): payload uses postgres in prod, sqlite locally
Some checks failed
CI / Lint (push) Has been cancelled
CI / Typecheck (push) Has been cancelled
CI / Broker tests (Postgres) (push) Has been cancelled
CI / Docker build (linux/amd64) (push) Has been cancelled

Production containers get DATABASE_URL (postgres) — Payload
creates tables in a 'payload' schema. Local dev falls back to
SQLite file for zero-config.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Alejandro Gutiérrez
2026-04-06 01:23:50 +01:00
parent b758fe07ff
commit c0cb19c53a
3 changed files with 150 additions and 19 deletions

View File

@@ -20,6 +20,7 @@
"@hookform/resolvers": "5.2.2",
"@next/bundle-analyzer": "16.2.2",
"@number-flow/react": "0.5.10",
"@payloadcms/db-postgres": "3.81.0",
"@payloadcms/db-sqlite": "^3.81.0",
"@payloadcms/next": "^3.81.0",
"@payloadcms/richtext-lexical": "^3.81.0",

View File

@@ -1,4 +1,5 @@
import { buildConfig } from "payload";
import { postgresAdapter } from "@payloadcms/db-postgres";
import { sqliteAdapter } from "@payloadcms/db-sqlite";
import { lexicalEditor } from "@payloadcms/richtext-lexical";
import path from "path";
@@ -8,6 +9,9 @@ import sharp from "sharp";
const filename = fileURLToPath(import.meta.url);
const dirname = path.dirname(filename);
// Use Postgres in production (DATABASE_URL), SQLite locally
const usePostgres = !!process.env.DATABASE_URL;
export default buildConfig({
secret: process.env.PAYLOAD_SECRET || "claudemesh-dev-secret-change-in-production",
@@ -20,11 +24,16 @@ export default buildConfig({
editor: lexicalEditor(),
db: sqliteAdapter({
client: {
url: process.env.PAYLOAD_DATABASE_URI || `file:${path.resolve(dirname, "payload.db")}`,
},
}),
db: usePostgres
? postgresAdapter({
pool: { connectionString: process.env.DATABASE_URL! },
schemaName: "payload",
})
: sqliteAdapter({
client: {
url: process.env.PAYLOAD_DATABASE_URI || `file:${path.resolve(dirname, "payload.db")}`,
},
}),
sharp,