FROM node:18-alpine AS build WORKDIR /app COPY package.json yarn.lock ./ RUN corepack enable && yarn install --frozen-lockfile COPY . . RUN yarn build FROM node:18-alpine AS runtime WORKDIR /app ENV NODE_ENV=production ENV HOST=0.0.0.0 ENV PORT=9000 COPY --from=build --chown=node:node /app/dist ./dist COPY --from=build --chown=node:node /app/dist-server ./dist-server RUN mkdir -p /app/logs && chown node:node /app/logs USER node EXPOSE 9000 HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 CMD node -e "fetch('http://127.0.0.1:9000/healthz').then(r => process.exit(r.ok ? 0 : 1)).catch(() => process.exit(1))" CMD ["node", "dist-server/server.mjs"]