EmDash prend en charge plusieurs backends de base de données. Choisissez en fonction de votre cible de déploiement.
Aperçu
| Base de données | Idéal pour | Déploiement |
|---|---|---|
| D1 | Cloudflare Workers | Edge, distribué globalement |
| PostgreSQL | Node.js production | Toute plateforme avec Postgres |
| libSQL | Bases distantes | Edge ou Node.js |
| SQLite | Node.js, dév local | Serveur unique |
Cloudflare D1
D1 est la base de données SQLite serverless de Cloudflare. Utilisez-la lors du déploiement sur Cloudflare Workers.
import { d1 } from "@emdash-cms/cloudflare";
export default defineConfig({
integrations: [
emdash({
database: d1({ binding: "DB" }),
}),
],
});
Configuration
| Option | Type | Défaut | Description |
|---|---|---|---|
binding | string | — | Nom de binding D1 depuis wrangler.jsonc |
session | string | "disabled" | Mode de réplication lecture (voir ci-dessous) |
bookmarkCookie | string | "__em_d1_bookmark" | Nom du cookie pour les signets de session |
Configuration
wrangler.jsonc
{
"d1_databases": [
{
"binding": "DB",
"database_name": "emdash-db",
"database_id": "your-database-id"
}
]
} wrangler.toml
[[d1_databases]]
binding = "DB"
database_name = "emdash-db"
database_id = "your-database-id" Créer une base de données D1
wrangler d1 create emdash-db
Réplicas en lecture
D1 prend en charge la réplication en lecture pour réduire la latence de lecture des sites distribués globalement. Lorsqu’elle est activée, les requêtes de lecture sont acheminées vers les réplicas proches au lieu de toujours atteindre la base de données primaire.
EmDash utilise l’API D1 Sessions pour gérer cela de manière transparente. Activez-la avec l’option session:
import { d1 } from "@emdash-cms/cloudflare";
export default defineConfig({
integrations: [
emdash({
database: d1({
binding: "DB",
session: "auto",
}),
}),
],
});
Modes de session
| Mode | Comportement |
|---|---|
"disabled" | Pas de sessions. Toutes les requêtes vont au primaire. Par défaut. |
"auto" | Les requêtes anonymes lisent depuis le réplica le plus proche. Les utilisateurs authentifiés obtiennent une cohérence read-your-writes via des cookies de signet. |
"primary-first" | Comme "auto", mais la première requête va toujours au primaire. À utiliser pour les sites avec des écritures très fréquentes. |
Comment ça fonctionne
- Les visiteurs anonymes obtiennent
first-unconstrained— les lectures vont au réplica le plus proche pour la latence la plus faible. Comme les utilisateurs anonymes n’écrivent jamais, ils n’ont pas besoin de garanties de cohérence. - Les utilisateurs authentifiés (éditeurs, auteurs) obtiennent des sessions basées sur des signets. Après une écriture, un cookie de signet garantit que la prochaine requête verra au moins cet état.
- Les requêtes d’écriture (
POST,PUT,DELETE) commencent toujours à la base de données primaire. - Les requêtes au moment du build (collections de contenu Astro) contournent complètement les sessions et utilisent directement le primaire.
libSQL
libSQL est un fork de SQLite qui prend en charge les connexions distantes. Utilisez-le lorsque vous avez besoin d’une base de données distante sans 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,
}),
}),
],
});
Configuration
| Option | Type | Description |
|---|---|---|
url | string | URL de la base de données (libsql://... ou file:...) |
authToken | string | Jeton d’authentification pour bases distantes (optionnel pour local) |
Développement local
Utilisez un fichier libSQL local pendant le développement:
database: libsql({ url: "file:./data.db" });
PostgreSQL
PostgreSQL est pris en charge pour les déploiements Node.js nécessitant une base de données relationnelle complète.
import { postgres } from "emdash/db";
export default defineConfig({
integrations: [
emdash({
database: postgres({
connectionString: process.env.DATABASE_URL,
}),
}),
],
});
Configuration
Vous pouvez vous connecter avec une chaîne de connexion ou des paramètres individuels:
// Chaîne de connexion
database: postgres({
connectionString: "postgres://user:password@localhost:5432/emdash",
});
// Paramètres individuels
database: postgres({
host: "localhost",
port: 5432,
database: "emdash",
user: "emdash",
password: process.env.DB_PASSWORD,
ssl: true,
});
| Option | Type | Description |
|---|---|---|
connectionString | string | URL de connexion PostgreSQL |
host | string | Hôte de la base de données |
port | number | Port de la base de données |
database | string | Nom de la base de données |
user | string | Utilisateur de la base de données |
password | string | Mot de passe de la base de données |
ssl | boolean | Activer SSL |
pool.min | number | Connexions de pool minimum (défaut 0) |
pool.max | number | Connexions de pool maximum (défaut 10) |
Mise en pool de connexions
L’adaptateur utilise pg.Pool en interne. Ajustez la taille du pool en fonction de votre déploiement:
database: postgres({
connectionString: process.env.DATABASE_URL,
pool: { min: 2, max: 20 },
});
SQLite
SQLite avec better-sqlite3 est l’option la plus simple pour les déploiements Node.js.
import { sqlite } from "emdash/db";
export default defineConfig({
integrations: [
emdash({
database: sqlite({ url: "file:./data.db" }),
}),
],
});
Configuration
| Option | Type | Description |
|---|---|---|
url | string | Chemin de fichier avec préfixe file: |
Chemin de fichier
L’url doit commencer par file::
// Chemin relatif
database: sqlite({ url: "file:./data/emdash.db" });
// Chemin absolu
database: sqlite({ url: "file:/var/data/emdash.db" });
// Depuis une variable d'environnement
database: sqlite({ url: `file:${process.env.DATABASE_PATH}` });
Migrations
EmDash gère automatiquement les migrations pour SQLite, libSQL et PostgreSQL. Pour D1, exécutez les migrations via Wrangler.
Vérifier le statut des migrations
npx emdash init --database ./data.db
Cette commande:
- Crée le fichier de base de données si nécessaire
- Exécute les migrations en attente
- Rapporte le statut actuel des migrations
Fichiers de migration
Les migrations sont livrées avec EmDash. Pour les exécuter manuellement:
# SQLite/libSQL - les migrations s'exécutent automatiquement
# D1 - exécuter via wrangler
wrangler d1 migrations apply DB
Configuration basée sur l’environnement
Utilisez différentes bases de données par environnement:
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 })],
});
Ou basculez en fonction des variables d’environnement:
const database = process.env.DATABASE_URL
? postgres({ connectionString: process.env.DATABASE_URL })
: sqlite({ url: "file:./data.db" });