# syntax=docker/dockerfile:1.7 FROM node:22-alpine AS build WORKDIR /app COPY package.json package-lock.json ./ RUN npm ci COPY index.html tsconfig*.json vite.config.ts ./ COPY src ./src COPY shared ./shared RUN npm run build FROM node:22-alpine AS runtime ENV NODE_ENV=production \ HOST=0.0.0.0 \ PORT=9000 \ DATA_DIR=/data WORKDIR /app RUN mkdir -p /data && chown -R node:node /app /data COPY --from=build --chown=node:node /app/dist ./dist COPY --chown=node:node server ./server COPY --chown=node:node shared ./shared USER node EXPOSE 9000 VOLUME ["/data"] HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \ CMD node -e "fetch('http://127.0.0.1:9000/healthz').then(r=>{if(!r.ok)process.exit(1)}).catch(()=>process.exit(1))" CMD ["node", "server/index.mjs"]