Node.js에 배포

이 페이지

EmDash는 Node.js 22 이상을 지원하는 모든 호스팅 플랫폼에서 실행됩니다. 이 가이드는 SQLite와 로컬 또는 S3 호환 스토리지를 사용해 일반적인 제공업체에 배포하는 방법을 다룹니다.

사전 요구 사항

  • Node.js v22.12.0 이상
  • Node.js 호스팅 제공업체 또는 VPS

구성

Node.js 배포를 위해 EmDash를 구성합니다.

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. 프로젝트를 빌드합니다.
npm run build
  1. 데이터베이스를 초기화합니다.

    npx emdash init --database ./data/emdash.db
  2. 서버를 시작합니다.

    node ./dist/server/entry.mjs

기본적으로 서버는 http://localhost:4321에서 실행됩니다.

프로덕션 스토리지

프로덕션에서는 로컬 파일 시스템 대신 S3 호환 스토리지를 사용하세요.

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

빌드 컨텍스트를 작게 유지하기 위해 .dockerignore를 추가합니다.

node_modules
dist
.git

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

빌드 및 실행:

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

또는 Docker Compose를 사용합니다.

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

volumes:
  emdash-data:
docker compose up -d

환경 변수

프로덕션 필수

변수설명
EMDASH_AUTH_SECRET세션 쿠키와 인증 토큰에 서명합니다. npx emdash auth secret으로 생성합니다.
EMDASH_PREVIEW_SECRET초안 콘텐츠 미리보기 URL에 서명합니다. npx emdash auth secret으로 생성합니다.

데이터베이스 및 스토리지

변수설명예시
EMDASH_SITE_URL브라우저 대상 공개 오리진 (미설정 시 SITE_URL로 대체)https://example.com
DATABASE_PATHSQLite 데이터베이스 경로/data/emdash.db
HOST서버 호스트0.0.0.0
PORT서버 포트4321
S3_ENDPOINTS3 엔드포인트 URLhttps://xxx.r2.cloudflarestorage.com
S3_BUCKETS3 버킷 이름my-media-bucket
S3_ACCESS_KEY_IDS3 액세스 키AKIA...
S3_SECRET_ACCESS_KEYS3 시크릿 키...
S3_PUBLIC_URL미디어 공개 URLhttps://cdn.example.com

영구 스토리지

SQLite에는 영구 디스크 스토리지가 필요합니다. 호스팅 플랫폼에서 다음을 제공하는지 확인하세요.

  • 마운트된 볼륨 또는 영구 디스크
  • 데이터베이스 디렉터리에 대한 쓰기 권한
  • 데이터베이스 파일 백업 메커니즘

헬스 체크

로드 밸런서용 헬스 체크 엔드포인트를 추가합니다.

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

라이브니스 프로브에서 /health를 확인하도록 플랫폼을 구성합니다.