FROM node:22-alpine WORKDIR /app # Dynamic build arguments & environment variables ARG SITE_DOMAIN ARG SITE_URL ARG PORT=8080 ENV SITE_DOMAIN=$SITE_DOMAIN ENV SITE_URL=$SITE_URL ENV PORT=$PORT ENV NODE_ENV=production # Install dependencies COPY package*.json ./ RUN npm ci # Copy application source files COPY . . RUN chmod +x /app/entrypoint.sh # Pre-compile baseline static assets RUN npm run build # Expose web server port dynamically EXPOSE ${PORT} # Native container healthcheck probing IPv4 loopback HEALTHCHECK --interval=30s --timeout=5s --start-period=3s --retries=3 \ CMD node -e "fetch('http://127.0.0.1:' + (process.env.PORT || 8080) + '/healthz').then(r => process.exit(r.ok ? 0 : 1)).catch(() => process.exit(1))" # Serve site using dynamic entrypoint ENTRYPOINT ["/app/entrypoint.sh"]