34 lines
810 B
Docker
34 lines
810 B
Docker
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"]
|