Déployer sur Node.js

Sur cette page

EmDash fonctionne sur toute plateforme d’hébergement Node.js 22 ou supérieur. Ce guide couvre le déploiement chez les fournisseurs courants avec SQLite et un stockage local ou compatible S3.

Prérequis

  • Node.js v22.12.0 ou supérieur
  • Un fournisseur d’hébergement Node.js ou un VPS

Configuration

Configurez EmDash pour un déploiement Node.js :

import { defineConfig } from "astro/config";
import node from "@astrojs/node";
import emdash, { local, s3 } from "emdash/astro";
import { sqlite } from "emdash/db";

export default defineConfig({
	output: "server",
	adapter: node({ mode: "standalone" }),
	integrations: [
		emdash({
			database: sqlite({ url: "file:./data/emdash.db" }),
			storage: local({
				directory: "./data/uploads",
				baseUrl: "/_emdash/api/media/file",
			}),
		}),
	],
});

Construire et exécuter

  1. Construire le projet :
npm run build
  1. Initialiser la base de données :

    npx emdash init --database ./data/emdash.db
  2. Démarrer le serveur :

    node ./dist/server/entry.mjs

Le serveur écoute par défaut sur http://localhost:4321.

Stockage en production

En production, utilisez un stockage compatible S3 plutôt que le système de fichiers local :

import emdash, { s3 } from "emdash/astro";

export default defineConfig({
	integrations: [
		emdash({
			database: sqlite({ url: `file:${process.env.DATABASE_PATH}` }),
			storage: s3({
				endpoint: process.env.S3_ENDPOINT,
				bucket: process.env.S3_BUCKET,
				accessKeyId: process.env.S3_ACCESS_KEY_ID,
				secretAccessKey: process.env.S3_SECRET_ACCESS_KEY,
				publicUrl: process.env.S3_PUBLIC_URL, // Optional CDN URL
			}),
		}),
	],
});

Docker

Ajoutez un .dockerignore pour réduire le contexte de build :

node_modules
dist
.git

Créez un Dockerfile :

FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:22-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
COPY --from=builder /app/seed ./seed
COPY --from=builder /app/astro.config.mjs ./

RUN mkdir -p data

ENV HOST=0.0.0.0
ENV PORT=4321

EXPOSE 4321
CMD ["sh", "-c", "npx emdash init && node ./dist/server/entry.mjs"]

Construire et exécuter :

docker build -t my-emdash-site .
docker run -p 4321:4321 -v emdash-data:/app/data my-emdash-site

Ou utilisez Docker Compose :

services:
  emdash:
    build: .
    ports:
      - "4321:4321"
    volumes:
      - emdash-data:/app/data
    restart: unless-stopped

volumes:
  emdash-data:
docker compose up -d

Variables d’environnement

Obligatoires en production

VariableDescription
EMDASH_AUTH_SECRETSigne les cookies de session et les jetons d’authentification. Générez avec npx emdash auth secret.
EMDASH_PREVIEW_SECRETSigne les URL de prévisualisation du contenu brouillon. Générez avec npx emdash auth secret.

Base de données et stockage

VariableDescriptionExemple
EMDASH_SITE_URLOrigine publique côté navigateur (repli sur SITE_URL)https://example.com
DATABASE_PATHChemin vers la base SQLite/data/emdash.db
HOSTHôte du serveur0.0.0.0
PORTPort du serveur4321
S3_ENDPOINTURL du point de terminaison S3https://xxx.r2.cloudflarestorage.com
S3_BUCKETNom du compartiment S3my-media-bucket
S3_ACCESS_KEY_IDClé d’accès S3AKIA...
S3_SECRET_ACCESS_KEYClé secrète S3...
S3_PUBLIC_URLURL publique des médiashttps://cdn.example.com

Stockage persistant

SQLite nécessite un disque persistant. Vérifiez que votre plateforme fournit :

  • Un volume monté ou un disque persistant
  • Un accès en écriture au répertoire de la base de données
  • Des mécanismes de sauvegarde du fichier de base de données

Vérifications d’état

Ajoutez un point de terminaison de santé pour les équilibreurs de charge :

export const GET = () => {
  return new Response("OK", { status: 200 });
};

Configurez votre plateforme pour interroger /health dans les sondes de liveness.