Files
emdash/Dockerfile
T

46 lines
1.2 KiB
Docker

# ── Stage 1: Build ──────────────────────────────────────────────
FROM node:22-alpine AS builder
WORKDIR /app
# Install build dependencies for better-sqlite3 (native addon)
RUN apk add --no-cache python3 make g++
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
RUN npm run build
# ── Stage 2: Runtime ────────────────────────────────────────────
FROM node:22-slim
WORKDIR /app
# better-sqlite3 needs shared libs available in slim
RUN apt-get update && apt-get install -y --no-install-recommends \
tini \
&& rm -rf /var/lib/apt/lists/*
# Copy built output and production node_modules
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./
# Create directories for persistent data
RUN mkdir -p /data /uploads && chown -R node:node /data /uploads /app
USER node
ENV HOST=0.0.0.0
ENV PORT=4321
ENV DATABASE_PATH=/data/emdash.db
ENV UPLOAD_DIR=/uploads
EXPOSE 4321
VOLUME ["/data", "/uploads"]
ENTRYPOINT ["tini", "--"]
CMD ["node", "./dist/server/entry.mjs"]