Ir al contenido

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.

  • Node.js v22.12.0 o superior
  • Un proveedor de alojamiento Node.js o VPS

Configura EmDash para la implementación en Node.js:

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. Construye el proyecto:
Ventana de terminal
npm run build
  1. Inicializa la base de datos:

    Ventana de terminal
    npx emdash init --database ./data/emdash.db
  2. Inicia el servidor:

    Ventana de terminal
    node ./dist/server/entry.mjs

El servidor se ejecuta por defecto en http://localhost:4321.

Para producción, usa almacenamiento compatible con S3 en lugar del sistema de archivos local:

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
}),
}),
],
});

Crea un 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"]

Construye y ejecuta:

Ventana de terminal
docker build -t my-emdash-site .
docker run -p 4321:4321 -v emdash-data:/app/data my-emdash-site
VariableDescripción
EMDASH_AUTH_SECRETFirma cookies de sesión y tokens de autenticación. Genera con npx emdash auth secret.
EMDASH_PREVIEW_SECRETFirma URLs de vista previa para contenido en borrador. Genera con npx emdash auth secret.
VariableDescripciónEjemplo
DATABASE_PATHRuta a la base de datos SQLite/data/emdash.db
HOSTHost del servidor0.0.0.0
PORTPuerto del servidor4321
S3_ENDPOINTURL del endpoint S3https://xxx.r2.cloudflarestorage.com
S3_BUCKETNombre del bucket S3my-media-bucket
S3_ACCESS_KEY_IDClave de acceso S3AKIA...
S3_SECRET_ACCESS_KEYClave secreta S3...
S3_PUBLIC_URLURL pública para medioshttps://cdn.example.com

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

Añade un endpoint de comprobación de salud para balanceadores de carga:

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

Configura tu plataforma para verificar /health para sondas de actividad.