Desplegar en Node.js
EmDash puede ejecutarse en cualquier plataforma de hosting con Node.js 22 o superior. Esta guía cubre un despliegue típico con SQLite y almacenamiento local o compatible con S3.
Requisitos previos
Sección titulada «Requisitos previos»- Node.js v22.12.0 o superior
- Un proveedor de alojamiento Node.js o VPS
Configuración
Sección titulada «Configuración»Configura EmDash para la implementación en 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", }), }), ],});Construir y ejecutar
Sección titulada «Construir y ejecutar»- Construye el proyecto:
npm run build-
Inicializa la base de datos:
Ventana de terminal npx emdash init --database ./data/emdash.db -
Inicia el servidor:
Ventana de terminal node ./dist/server/entry.mjs
El servidor se ejecuta por defecto en http://localhost:4321.
Almacenamiento en Producción
Sección titulada «Almacenamiento en Producción»Para producción, usa almacenamiento compatible con S3 en lugar del sistema de archivos 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 }), }), ],});Crea un Dockerfile:
FROM node:22-alpine AS builderWORKDIR /appCOPY package*.json ./RUN npm ciCOPY . .RUN npm run build
FROM node:22-alpineWORKDIR /appCOPY --from=builder /app/dist ./distCOPY --from=builder /app/node_modules ./node_modulesCOPY --from=builder /app/package.json ./
ENV HOST=0.0.0.0ENV PORT=4321
EXPOSE 4321CMD ["node", "./dist/server/entry.mjs"]Construye y ejecuta:
docker build -t my-emdash-site .docker run -p 4321:4321 -v emdash-data:/app/data my-emdash-siteVariables de Entorno
Sección titulada «Variables de Entorno»Requeridas para producción
Sección titulada «Requeridas para producción»| Variable | Descripción |
|---|---|
EMDASH_AUTH_SECRET | Firma cookies de sesión y tokens de autenticación. Genera con npx emdash auth secret. |
EMDASH_PREVIEW_SECRET | Firma URLs de vista previa para contenido en borrador. Genera con npx emdash auth secret. |
Base de Datos y Almacenamiento
Sección titulada «Base de Datos y Almacenamiento»| Variable | Descripción | Ejemplo |
|---|---|---|
DATABASE_PATH | Ruta a la base de datos SQLite | /data/emdash.db |
HOST | Host del servidor | 0.0.0.0 |
PORT | Puerto del servidor | 4321 |
S3_ENDPOINT | URL del endpoint S3 | https://xxx.r2.cloudflarestorage.com |
S3_BUCKET | Nombre del bucket S3 | my-media-bucket |
S3_ACCESS_KEY_ID | Clave de acceso S3 | AKIA... |
S3_SECRET_ACCESS_KEY | Clave secreta S3 | ... |
S3_PUBLIC_URL | URL pública para medios | https://cdn.example.com |
Almacenamiento persistente
Sección titulada «Almacenamiento persistente»SQLite requiere almacenamiento en disco persistente. Asegúrate de que tu plataforma de alojamiento proporcione:
- Un volumen montado o disco persistente
- Acceso de escritura al directorio de la base de datos
- Mecanismos de respaldo para el archivo de base de datos
Comprobaciones de salud
Sección titulada «Comprobaciones de salud»Añade un endpoint de comprobación de salud para balanceadores de carga:
export const GET = () => { return new Response("OK", { status: 200 });};Configura tu plataforma para verificar /health para sondas de actividad.