Opciones de base de datos
EmDash admite varios motores de base de datos. Elige el que mejor encaje con tu entorno de despliegue.
Resumen
Sección titulada «Resumen»| Base de datos | Mejor para | Despliegue |
|---|---|---|
| D1 | Cloudflare Workers | Edge, distribuido globalmente |
| PostgreSQL | Node.js en producción | Cualquier plataforma con Postgres |
| libSQL | Bases de datos remotas | Edge o Node.js |
| SQLite | Node.js, desarrollo local | Servidor único |
Cloudflare D1
Sección titulada «Cloudflare D1»D1 es la base de datos SQLite sin servidor de Cloudflare. Úsala al desplegar en Cloudflare Workers.
import { d1 } from "@emdash-cms/cloudflare";
export default defineConfig({ integrations: [ emdash({ database: d1({ binding: "DB" }), }), ],});Opciones
Sección titulada «Opciones»| Opción | Tipo | Valor por defecto | Descripción |
|---|---|---|---|
binding | string | — | Nombre del binding D1 de wrangler.jsonc |
session | string | "disabled" | Modo de replicación de lectura (ver abajo) |
bookmarkCookie | string | "__ec_d1_bookmark" | Nombre de la cookie para marcadores de sesión |
Configuración de Wrangler
Sección titulada «Configuración de Wrangler»{ "d1_databases": [ { "binding": "DB", "database_name": "emdash-db", "database_id": "your-database-id" } ]}[[d1_databases]]binding = "DB"database_name = "emdash-db"database_id = "your-database-id"Crear una base de datos D1
Sección titulada «Crear una base de datos D1»wrangler d1 create emdash-dbRéplicas de lectura
Sección titulada «Réplicas de lectura»D1 admite replicación de lectura para reducir la latencia de lectura en sitios distribuidos globalmente. Cuando está habilitada, las consultas de lectura se dirigen a las réplicas más cercanas en lugar de siempre acceder a la base de datos principal.
EmDash utiliza la API de sesiones de D1 para gestionarlo de forma transparente. Actívala con la opción session:
import { d1 } from "@emdash-cms/cloudflare";
export default defineConfig({ integrations: [ emdash({ database: d1({ binding: "DB", session: "auto", }), }), ],});Modos de sesión
Sección titulada «Modos de sesión»| Modo | Comportamiento |
|---|---|
"disabled" | Sin sesiones. Todas las consultas van a la principal. Valor por defecto. |
"auto" | Las solicitudes anónimas leen desde la réplica más cercana. Los usuarios autenticados obtienen consistencia de lectura-tus-escrituras mediante cookies de marcador. |
"primary-first" | Como "auto", pero la primera consulta siempre va a la principal. Úsalo para sitios con escrituras muy frecuentes. |
Cómo funciona
Sección titulada «Cómo funciona»- Visitantes anónimos reciben
first-unconstrained: las lecturas van a la réplica más cercana para minimizar la latencia. Como nunca escriben, no necesitan garantías de consistencia. - Usuarios autenticados (editores, autores) reciben sesiones basadas en marcadores. Después de una escritura, una cookie de marcador garantiza que la siguiente solicitud vea al menos ese estado.
- Solicitudes de escritura (
POST,PUT,DELETE) siempre comienzan en la base de datos principal. - Consultas en tiempo de compilación (colecciones de contenido de Astro) omiten las sesiones por completo y usan la principal directamente.
libSQL es un fork de SQLite que admite conexiones remotas. Úsalo cuando necesites una base de datos remota sin Cloudflare D1.
import { libsql } from "emdash/db";
export default defineConfig({ integrations: [ emdash({ database: libsql({ url: process.env.LIBSQL_DATABASE_URL, authToken: process.env.LIBSQL_AUTH_TOKEN, }), }), ],});Configuración
Sección titulada «Configuración»| Opción | Tipo | Descripción |
|---|---|---|
url | string | URL de la base de datos (libsql://... o file:...) |
authToken | string | Token de autenticación para bases de datos remotas (opcional para locales) |
Desarrollo local
Sección titulada «Desarrollo local»Usa un archivo libSQL local durante el desarrollo:
database: libsql({ url: "file:./data.db" });PostgreSQL
Sección titulada «PostgreSQL»PostgreSQL es compatible para despliegues de Node.js que necesitan una base de datos relacional completa.
import { postgres } from "emdash/db";
export default defineConfig({ integrations: [ emdash({ database: postgres({ connectionString: process.env.DATABASE_URL, }), }), ],});Configuración
Sección titulada «Configuración»Puedes conectarte con una cadena de conexión o parámetros individuales:
// Cadena de conexióndatabase: postgres({ connectionString: "postgres://user:password@localhost:5432/emdash",});
// Parámetros individualesdatabase: postgres({ host: "localhost", port: 5432, database: "emdash", user: "emdash", password: process.env.DB_PASSWORD, ssl: true,});| Opción | Tipo | Descripción |
|---|---|---|
connectionString | string | URL de conexión de PostgreSQL |
host | string | Host de la base de datos |
port | number | Puerto de la base de datos |
database | string | Nombre de la base de datos |
user | string | Usuario de la base de datos |
password | string | Contraseña de la base de datos |
ssl | boolean | Habilitar SSL |
pool.min | number | Conexiones mínimas del pool (por defecto 0) |
pool.max | number | Conexiones máximas del pool (por defecto 10) |
Pool de conexiones
Sección titulada «Pool de conexiones»El adaptador utiliza pg.Pool internamente. Ajusta el tamaño del pool según tu despliegue:
database: postgres({ connectionString: process.env.DATABASE_URL, pool: { min: 2, max: 20 },});SQLite con better-sqlite3 es la opción más simple para despliegues de Node.js.
js title="astro.config.mjs"import { sqlite } from "emdash/db";
export default defineConfig({ integrations: [ emdash({ database: sqlite({ url: "file:./data.db" }), }), ],});Configuración
Sección titulada «Configuración»| Opción | Tipo | Descripción |
|---|---|---|
url | string | Ruta del archivo con prefijo file: |
Ruta del archivo
Sección titulada «Ruta del archivo»La url debe comenzar con file::
// Relative pathdatabase: sqlite({ url: "file:./data/emdash.db" });
// Ruta absolutadatabase: sqlite({ url: "file:/var/data/emdash.db" });
// Desde variable de entornodatabase: sqlite({ url: `file:${process.env.DATABASE_PATH}` });Migraciones
Sección titulada «Migraciones»EmDash maneja las migraciones automáticamente para SQLite, libSQL y PostgreSQL. Para D1, ejecuta las migraciones a través de Wrangler.
Verificar el Estado de la Migración
Sección titulada «Verificar el Estado de la Migración»npx emdash init --database ./data.dbEste comando:
- Crea el archivo de base de datos si es necesario
- Ejecuta cualquier migración pendiente
- Informa el estado actual de la migración
Archivos de Migración
Sección titulada «Archivos de Migración»Las migraciones están incluidas con EmDash. Para ejecutarlas manualmente:
# SQLite/libSQL: las migraciones se ejecutan automáticamente
# D1: ejecutar mediante Wranglerwrangler d1 migrations apply DBConfiguración basada en el entorno
Sección titulada «Configuración basada en el entorno»Usa diferentes bases de datos por entorno:
import { sqlite, libsql, postgres } from "emdash/db";import { d1 } from "@emdash-cms/cloudflare";
const database = import.meta.env.PROD ? d1({ binding: "DB" }) : sqlite({ url: "file:./data.db" });
export default defineConfig({ integrations: [emdash({ database })],});O cambia según las variables de entorno:
const database = process.env.DATABASE_URL ? postgres({ connectionString: process.env.DATABASE_URL }) : sqlite({ url: "file:./data.db" });