# ---- Build web frontend ---- FROM node:22-alpine AS web-build WORKDIR /web COPY web/package.json web/package-lock.json ./ RUN npm ci COPY web/ . RUN npm run build # ---- Build server ---- FROM node:22-alpine AS server-build WORKDIR /app COPY server/package.json server/package-lock.json ./ RUN npm ci COPY server/tsconfig.json ./ COPY server/src/ src/ RUN npm run build # ---- Production ---- FROM node:22-alpine RUN apk add --no-cache python3 make g++ WORKDIR /app COPY server/package.json server/package-lock.json ./ RUN npm ci --omit=dev COPY --from=server-build /app/dist dist/ COPY --from=web-build /web/dist public/ VOLUME /app/data ENV PORT=3000 EXPOSE 3000 CMD ["node", "dist/index.js"]