Add DATABASE_URL env var support for EmDash
- Add .env.example documenting SQLite/PostgreSQL/MySQL config - Add src/lib/db.ts with getDatabaseConfig() helper that parses DATABASE_URL and returns the appropriate db config - Update astro.config.mjs to use getDatabaseConfig() instead of hardcoded sqlite path Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
36
.env.example
Normal file
36
.env.example
Normal file
@@ -0,0 +1,36 @@
|
||||
# EmDash Environment Variables
|
||||
# Copy this file to .env and fill in your values
|
||||
|
||||
# ===========================================
|
||||
# DATABASE (choose one)
|
||||
# ===========================================
|
||||
|
||||
# SQLite (default - local file)
|
||||
# DATABASE_URL=file:./storage/data.db
|
||||
|
||||
# PostgreSQL
|
||||
# DATABASE_URL=postgresql://user:password@host:5432/emdash
|
||||
|
||||
# MySQL
|
||||
# DATABASE_URL=mysql://user:password@host:3306/emdash
|
||||
|
||||
# ===========================================
|
||||
# SESSION SECRET (required for production)
|
||||
# ===========================================
|
||||
# Generate with: openssl rand -base64 32
|
||||
# SESSION_SECRET=your-secret-key-here
|
||||
|
||||
# ===========================================
|
||||
# S3 STORAGE (optional - for cloud storage)
|
||||
# ===========================================
|
||||
# AWS S3
|
||||
# S3_BUCKET=my-uploads
|
||||
# S3_REGION=us-east-1
|
||||
# AWS_ACCESS_KEY_ID=xxx
|
||||
# AWS_SECRET_ACCESS_KEY=xxx
|
||||
|
||||
# Cloudflare R2
|
||||
# R2_ACCOUNT_ID=xxx
|
||||
# R2_ACCESS_KEY_ID=xxx
|
||||
# R2_SECRET_ACCESS_KEY=xxx
|
||||
# R2_BUCKET=my-uploads
|
||||
@@ -3,7 +3,7 @@ import react from "@astrojs/react";
|
||||
import { auditLogPlugin } from "@emdash-cms/plugin-audit-log";
|
||||
import { defineConfig, fontProviders } from "astro/config";
|
||||
import emdash, { local } from "emdash/astro";
|
||||
import { sqlite } from "emdash/db";
|
||||
import { getDatabaseConfig } from "./src/lib/db.ts";
|
||||
|
||||
export default defineConfig({
|
||||
output: "server",
|
||||
@@ -17,7 +17,7 @@ export default defineConfig({
|
||||
integrations: [
|
||||
react(),
|
||||
emdash({
|
||||
database: sqlite({ url: "file:./storage/data.db" }),
|
||||
database: getDatabaseConfig(),
|
||||
storage: local({
|
||||
directory: "./storage/uploads",
|
||||
baseUrl: "/_emdash/api/media/file",
|
||||
|
||||
37
src/lib/db.ts
Normal file
37
src/lib/db.ts
Normal file
@@ -0,0 +1,37 @@
|
||||
import { sqlite, postgres, mysql } from "emdash/db";
|
||||
|
||||
/**
|
||||
* Database configuration from environment variables.
|
||||
*
|
||||
* Supports:
|
||||
* - SQLite: DATABASE_URL=file:./storage/data.db
|
||||
* - PostgreSQL: DATABASE_URL=postgresql://user:pass@host:5432/db
|
||||
* - MySQL: DATABASE_URL=mysql://user:pass@host:3306/db
|
||||
*/
|
||||
export function getDatabaseConfig() {
|
||||
const url = process.env.DATABASE_URL;
|
||||
|
||||
if (!url) {
|
||||
// Default to SQLite
|
||||
return sqlite({ url: "file:./storage/data.db" });
|
||||
}
|
||||
|
||||
if (url.startsWith("file:")) {
|
||||
// SQLite
|
||||
return sqlite({ url: url });
|
||||
}
|
||||
|
||||
if (url.startsWith("postgresql:")) {
|
||||
// PostgreSQL
|
||||
return postgres({ connectionString: url });
|
||||
}
|
||||
|
||||
if (url.startsWith("mysql:")) {
|
||||
// MySQL
|
||||
return mysql({ connectionString: url });
|
||||
}
|
||||
|
||||
// Fallback to SQLite
|
||||
console.warn(`Unknown DATABASE_URL protocol, falling back to SQLite`);
|
||||
return sqlite({ url: "file:./storage/data.db" });
|
||||
}
|
||||
Reference in New Issue
Block a user