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 { auditLogPlugin } from "@emdash-cms/plugin-audit-log";
|
||||||
import { defineConfig, fontProviders } from "astro/config";
|
import { defineConfig, fontProviders } from "astro/config";
|
||||||
import emdash, { local } from "emdash/astro";
|
import emdash, { local } from "emdash/astro";
|
||||||
import { sqlite } from "emdash/db";
|
import { getDatabaseConfig } from "./src/lib/db.ts";
|
||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
output: "server",
|
output: "server",
|
||||||
@@ -17,7 +17,7 @@ export default defineConfig({
|
|||||||
integrations: [
|
integrations: [
|
||||||
react(),
|
react(),
|
||||||
emdash({
|
emdash({
|
||||||
database: sqlite({ url: "file:./storage/data.db" }),
|
database: getDatabaseConfig(),
|
||||||
storage: local({
|
storage: local({
|
||||||
directory: "./storage/uploads",
|
directory: "./storage/uploads",
|
||||||
baseUrl: "/_emdash/api/media/file",
|
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