# Build stage - build client assets FROM node:20-alpine AS client-builder WORKDIR /app/client COPY client/package.json client/package-lock.json* ./ RUN npm ci COPY client/ ./ RUN npm run build # Production stage - run server with built client FROM node:20-alpine WORKDIR /app # Copy server package files and install dependencies COPY package.json package-lock.json* ./ RUN npm ci --omit=dev # Copy server source COPY server ./server # Copy built client assets COPY --from=client-builder /app/client/dist ./client/dist # Create data directory for SQLite RUN mkdir -p /app/data # Health check HEALTHCHECK --interval=30s --timeout=3s --start-period=10s --retries=3 \ CMD wget --no-verbose --tries=1 --spider http://localhost:3000/api/health || exit 1 ENV NODE_ENV=production ENV PORT=3000 EXPOSE 3000 CMD ["node", "server/index.js"]