Files
rootxwire1/Dockerfile
mukesh13 3be087d83c Docker
2025-06-25 10:39:15 +05:30

55 lines
1.7 KiB
Docker

# syntax=docker/dockerfile:1
### Base Image ###
FROM node:18-alpine AS base
### Dependencies Stage ###
FROM base AS deps
# Use default Alpine mirror (or Tsinghua if preferred)
RUN echo "https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.18/main" > /etc/apk/repositories && \
echo "https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.18/community" >> /etc/apk/repositories && \
apk update --no-cache && \
apk add --no-cache vips-dev
WORKDIR /app
COPY package.json package-lock.json ./
# Enforce prebuilt sharp binaries
ENV SHARP_IGNORE_GLOBAL_LIBVIPS=true
RUN npm install --legacy-peer-deps --legacy-peer-deps
### Builder Stage ###
FROM base AS builder
RUN echo "https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.18/main" > /etc/apk/repositories && \
echo "https://mirrors.tuna.tsinghua.edu.cn/alpine/v3.18/community" >> /etc/apk/repositories && \
apk update --no-cache && \
apk add --no-cache vips-dev
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN npm run build
### Production Runner Stage ###
FROM nginx:alpine AS runner
WORKDIR /usr/share/nginx/html
# Set permissions for default nginx user
RUN mkdir -p /var/cache/nginx /var/run/nginx && \
chown -R nginx:nginx /var/cache/nginx /var/run/nginx /usr/share/nginx/html && \
chmod -R 755 /var/cache/nginx /var/run/nginx /usr/share/nginx/html
# Remove default Nginx assets
RUN rm -rf ./*
# Copy static assets from builder
COPY --from=builder --chown=nginx:nginx /app/public .
# Expose port
EXPOSE 80
# Healthcheck
HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \
CMD wget --no-verbose --tries=1 --spider http://localhost:80 || exit 1
# Run Nginx
CMD ["nginx", "-g", "daemon off;"]