Zum Inhalt springen

Auf Node.js bereitstellen

EmDash läuft auf jeder Hosting-Plattform mit Node.js 22 oder höher. Diese Anleitung beschreibt ein typisches Deployment mit SQLite und lokalem oder S3-kompatiblem Speicher.

  • Node.js v22.12.0 oder höher
  • Ein Node.js Hosting-Anbieter oder VPS

Konfigurieren Sie EmDash für das Node.js Deployment:

astro.config.mjs
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",
}),
}),
],
});
  1. Bauen Sie das Projekt:
Terminal-Fenster
npm run build
  1. Initialisieren Sie die Datenbank:

    Terminal-Fenster
    npx emdash init --database ./data/emdash.db
  2. Starten Sie den Server:

    Terminal-Fenster
    node ./dist/server/entry.mjs

Der Server läuft standardmäßig unter http://localhost:4321.

Für die Produktion verwenden Sie S3-kompatiblen Speicher anstelle des lokalen Dateisystems:

astro.config.mjs
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
}),
}),
],
});

Erstellen Sie eine Dockerfile:

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 ./
ENV HOST=0.0.0.0
ENV PORT=4321
EXPOSE 4321
CMD ["node", "./dist/server/entry.mjs"]

Bauen und ausführen:

Terminal-Fenster
docker build -t my-emdash-site .
docker run -p 4321:4321 -v emdash-data:/app/data my-emdash-site
VariableBeschreibung
EMDASH_AUTH_SECRETSigniert Session-Cookies und Auth-Tokens. Generieren mit npx emdash auth secret.
EMDASH_PREVIEW_SECRETSigniert Vorschau-URLs für Entwurfsinhalte. Generieren mit npx emdash auth secret.
VariableBeschreibungBeispiel
DATABASE_PATHPfad zur SQLite-Datenbank/data/emdash.db
HOSTServer-Host0.0.0.0
PORTServer-Port4321
S3_ENDPOINTS3-Endpunkt-URLhttps://xxx.r2.cloudflarestorage.com
S3_BUCKETS3-Bucket-Namemy-media-bucket
S3_ACCESS_KEY_IDS3-ZugangsschlüsselAKIA...
S3_SECRET_ACCESS_KEYS3-Geheimschlüssel...
S3_PUBLIC_URLÖffentliche URL für Medienhttps://cdn.example.com

SQLite benötigt persistenten Datenträgerspeicher. Stellen Sie sicher, dass Ihre Hosting-Plattform Folgendes bietet:

  • Einen gemounteten Volume oder persistenten Datenträger
  • Schreibzugriff auf das Datenbankverzeichnis
  • Backup-Mechanismen für die Datenbankdatei

Fügen Sie einen Health-Check-Endpunkt für Load-Balancer hinzu:

src/pages/health.ts
export const GET = () => {
return new Response("OK", { status: 200 });
};

Konfigurieren Sie Ihre Plattform so, dass sie /health für Liveness-Probes überprüft.