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", }), }), ],});빌드 및 실행
섹션 제목: “빌드 및 실행”- 프로젝트를 빌드합니다:
npm run build-
데이터베이스를 초기화합니다:
Terminal window npx emdash init --database ./data/emdash.db -
서버를 시작합니다:
Terminal window node ./dist/server/entry.mjs
서버는 기본적으로 http://localhost:4321에서 실행됩니다.
프로덕션 스토리지
섹션 제목: “프로덕션 스토리지”프로덕션 환경에서는 로컬 파일 시스템 대신 S3 호환 스토리지를 사용하세요:
js title="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 }), }), ],});Docker
섹션 제목: “Docker”Dockerfile을 생성합니다:
dockerfile title="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"]빌드 및 실행:
docker build -t my-emdash-site .docker run -p 4321:4321 -v emdash-data:/app/data my-emdash-site환경 변수
섹션 제목: “환경 변수”프로덕션 필수
섹션 제목: “프로덕션 필수”| 변수 | 설명 |
|---|---|
EMDASH_AUTH_SECRET | 세션 쿠키와 인증 토큰에 서명합니다. npx emdash auth secret로 생성합니다. |
EMDASH_PREVIEW_SECRET | 초안 콘텐츠의 미리보기 URL에 서명합니다. npx emdash auth secret로 생성합니다. |
데이터베이스 및 스토리지
섹션 제목: “데이터베이스 및 스토리지”| 변수 | 설명 | 예시 |
|---|---|---|
DATABASE_PATH | SQLite 데이터베이스 경로 | /data/emdash.db |
HOST | 서버 호스트 | 0.0.0.0 |
PORT | 서버 포트 | 4321 |
S3_ENDPOINT | S3 엔드포인트 URL | https://xxx.r2.cloudflarestorage.com |
S3_BUCKET | S3 버킷 이름 | my-media-bucket |
S3_ACCESS_KEY_ID | S3 액세스 키 | AKIA... |
S3_SECRET_ACCESS_KEY | S3 비밀 키 | ... |
S3_PUBLIC_URL | 미디어 공개 URL | https://cdn.example.com |
영구 스토리지
섹션 제목: “영구 스토리지”SQLite는 영구 디스크 스토리지가 필요합니다. 호스팅 플랫폼이 다음을 제공하는지 확인하세요:
- 마운트된 볼륨 또는 영구 디스크
- 데이터베이스 디렉터리에 대한 쓰기 권한
- 데이터베이스 파일을 위한 백업 메커니즘
헬스 체크
섹션 제목: “헬스 체크”로드 밸런서를 위한 헬스 체크 엔드포인트를 추가하세요:
astro title="src/pages/health.ts"export const GET = () => { return new Response("OK", { status: 200 });};플랫폼을 구성하여 라이브니스 프로브에 /health를 확인하도록 설정하세요.