# ── Build stage ──────────────────────────────────────────────────────────────── FROM node:22-bookworm-slim AS builder WORKDIR /app # Native deps required for building better-sqlite3 via node-gyp RUN apt-get update \ && apt-get install -y --no-install-recommends python3 make g++ \ && rm -rf /var/lib/apt/lists/* # Copy dependency manifests first for better layer caching COPY package.json ./ # Install all deps (including devDependencies needed for the build). RUN npm install # Copy source and build COPY . . RUN npm run build # Prune to production-only deps, recompiling native modules for Linux RUN npm prune --omit=dev # ── Runtime stage ─────────────────────────────────────────────────────────────── FROM node:22-bookworm-slim AS runtime WORKDIR /app # Create a non-root user to run the app RUN groupadd --system trips && useradd --system --gid trips trips # Copy the built app and production node_modules from the builder COPY --from=builder /app/build ./build COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/package.json ./package.json # Directory for the SQLite database (mount a volume here) RUN mkdir -p /data && chown trips:trips /data USER trips ENV NODE_ENV=production ENV DATABASE_URL=file:/data/trips.db ENV PORT=3000 EXPOSE 3000 CMD ["node", "build"]