# Multi-stage build for SvelteKit app (environment-agnostic) # Stage 1: Build FROM node:24.13.1-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build # Stage 2: Production FROM node:24.13.1-alpine WORKDIR /app RUN npm install -g pm2 COPY package*.json ./ RUN npm ci --only=production && npm cache clean --force COPY --from=builder /app/build ./build COPY --from=builder /app/ecosystem.config.cjs ./ecosystem.config.cjs RUN mkdir -p logs # Default port; override with PORT env in compose or .env ENV NODE_ENV=production ENV HOST=0.0.0.0 ARG PORT=3001 ENV PORT=${PORT} EXPOSE ${PORT} HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD node -e "require('http').get('http://localhost:' + (process.env.PORT || 3001), (r) => { process.exit(r.statusCode === 200 ? 0 : 1); })" CMD ["pm2-runtime", "start", "ecosystem.config.cjs"]