11# ==============================================================================
2- # Stage 1: Dependencies - Install production dependencies
2+ # Stage 1: Dependencies - Install production dependencies with build tools
33# ==============================================================================
4- FROM node:22-slim AS deps
4+ FROM node:22-alpine AS deps
55
66WORKDIR /app
77
88# Install build dependencies for better-sqlite3
9- RUN apt-get update && apt-get install -y \
10- python3 \
11- make \
12- g++ \
13- && rm -rf /var/lib/apt/lists/*
9+ RUN apk add --no-cache python3 make g++
1410
11+ # Install dependencies based on the preferred package manager
1512COPY package.json package-lock.json* ./
1613
14+ # Use npm ci for faster, more reliable installs
1715RUN npm ci --only=production && \
1816 npm cache clean --force
1917
2018# ==============================================================================
2119# Stage 2: Builder - Build the application
2220# ==============================================================================
23- FROM node:22-slim AS builder
21+ FROM node:22-alpine AS builder
2422
2523WORKDIR /app
2624
27- # Install build dependencies
28- RUN apt-get update && apt-get install -y \
29- python3 \
30- make \
31- g++ \
32- && rm -rf /var/lib/apt/lists/*
25+ # Install build dependencies for better-sqlite3
26+ RUN apk add --no-cache python3 make g++
3327
3428# Copy dependencies from deps stage
3529COPY --from=deps /app/node_modules ./node_modules
@@ -39,14 +33,17 @@ COPY . .
3933RUN npm ci && \
4034 npm cache clean --force
4135
36+ # Rebuild better-sqlite3 for Alpine
37+ RUN npm rebuild better-sqlite3
38+
4239# Build Next.js application
4340ENV NEXT_TELEMETRY_DISABLED=1
4441ENV NODE_ENV=production
4542
4643RUN npm run build
4744
4845# ==============================================================================
49- # Stage 3: Runner - Minimal production image
46+ # Stage 3: Runner - Use slim debian instead of distroless for better-sqlite3
5047# ==============================================================================
5148FROM node:22-slim AS runner
5249
@@ -62,13 +59,16 @@ ENV HOSTNAME="0.0.0.0"
6259RUN groupadd -g 1001 nodejs && \
6360 useradd -u 1001 -g nodejs nodejs
6461
62+ # Create data directory BEFORE copying files
63+ RUN mkdir -p /app/data && chown -R nodejs:nodejs /app/data
64+
6565# Copy only necessary files from builder
6666COPY --from=builder --chown=nodejs:nodejs /app/.next/standalone ./
6767COPY --from=builder --chown=nodejs:nodejs /app/.next/static ./.next/static
6868COPY --from=builder --chown=nodejs:nodejs /app/public ./public
6969
70- # Create data directory for SQLite database
71- RUN mkdir -p /app/data && chown -R nodejs:nodejs /app/data
70+ # Ensure data directory has correct permissions after copy
71+ RUN chown -R nodejs:nodejs /app/data
7272
7373USER nodejs
7474
0 commit comments