49 lines
1.4 KiB
Docker
49 lines
1.4 KiB
Docker
# ── Stage 1: Build ──────────────────────────────────────────────
|
|
# Utiliser Debian (slim) pour builder ET runtime → même libc (glibc)
|
|
# Évite l'incompatibilité musl/glibc avec better-sqlite3 (addon natif)
|
|
FROM node:22-slim AS builder
|
|
|
|
WORKDIR /app
|
|
|
|
# Install build dependencies for better-sqlite3 (native addon)
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
python3 make g++ \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY package.json package-lock.json ./
|
|
RUN npm ci
|
|
|
|
COPY . .
|
|
RUN npm run build
|
|
|
|
# ── Stage 2: Runtime ────────────────────────────────────────────
|
|
FROM node:22-slim
|
|
|
|
WORKDIR /app
|
|
|
|
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"]
|