From 455278f398512fdc3b881f0d4a1e134560c63c02 Mon Sep 17 00:00:00 2001 From: morteza-mortezai Date: Fri, 29 May 2026 09:06:36 +0330 Subject: [PATCH] optimize docker file --- .dockerignore | 13 +++++++++ Dockerfile | 79 ++++++++++++++++----------------------------------- 2 files changed, 37 insertions(+), 55 deletions(-) create mode 100644 .dockerignore diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..5c19169 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,13 @@ +node_modules +dist +.git +.gitignore +.env +.env.* +coverage +test +*.md +.dockerignore +Dockerfile* +npm-debug.log +.vscode diff --git a/Dockerfile b/Dockerfile index 9ee9880..c528667 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,79 +1,48 @@ # Stage 1: Base FROM node:22-alpine AS base -# Install timezone support -RUN apk add --no-cache tzdata -RUN cp /usr/share/zoneinfo/Asia/Tehran /etc/localtime && echo "Asia/Tehran" > /etc/timezone +# Alpine mirror + timezone data +RUN sed -i 's|https://dl-cdn.alpinelinux.org/alpine|https://mirror.de.velop.ir/alpine|g' /etc/apk/repositories \ + && apk add --no-cache tzdata + +ENV TZ=Asia/Tehran +ENV NPM_CONFIG_REGISTRY=https://package-mirror.liara.ir/repository/npm/ +RUN npm config set registry https://package-mirror.liara.ir/repository/npm/ -# Set workdir for clarity WORKDIR /app -# Stage 2: Dependencies +# Stage 2: Build dependencies FROM base AS deps WORKDIR /temp-deps COPY package*.json ./ RUN npm ci --ignore-scripts -# Stage 3: Build +# Stage 3: Production dependencies +FROM base AS prod-deps +WORKDIR /temp-deps +COPY package*.json ./ +RUN npm ci --omit=dev + +# Stage 4: Build FROM base AS builder WORKDIR /build -COPY . ./ +COPY package*.json ./ COPY --from=deps /temp-deps/node_modules ./node_modules -RUN if [ -f package.json ] && grep -q '"build":' package.json; then npm run build; fi +COPY . . +RUN npm run build -# Stage 4: Runner +# Stage 5: Runner FROM base AS runner RUN addgroup -S appgroup && adduser -S appuser -G appgroup + WORKDIR /app -COPY . ./ -COPY --from=builder --chown=appuser:appgroup /build/ ./ -RUN chown -R appuser:appgroup /app +COPY package*.json ./ +COPY --from=prod-deps --chown=appuser:appgroup /temp-deps/node_modules ./node_modules +COPY --from=builder --chown=appuser:appgroup /build/dist ./dist USER appuser ENV NODE_ENV=production EXPOSE 4000 -CMD ["npm", "start"] - -# # Stage 1: Build Stage -# FROM node:22-alpine AS base - -# RUN npm install -g corepack@latest -# RUN corepack enable && corepack prepare pnpm@9 --activate - -# # Install tzdata to support timezone settings -# RUN apk add --no-cache tzdata - -# # Set the timezone to Asia/Tehran -# RUN cp /usr/share/zoneinfo/Asia/Tehran /etc/localtime && echo "Asia/Tehran" > /etc/timezone - - -# FROM base AS deps -# WORKDIR /temp-deps -# COPY package*.json pnpm-lock.yaml ./ -# RUN pnpm install --frozen-lockfile --loglevel info - - -# FROM base AS builder -# WORKDIR /build -# COPY . ./ -# COPY --from=deps /temp-deps/node_modules ./node_modules -# RUN if [ -f package.json ] && grep -q '"build":' package.json; then pnpm run build; fi -# RUN pnpm install --prod --frozen-lockfile --loglevel info - -# FROM base AS runner -# RUN addgroup -S appgroup && adduser -S appuser -G appgroup -# WORKDIR /app - -# COPY . ./ -# COPY --from=builder --chown=appuser:appgroup /build/ ./ - -# RUN chown -R appuser:appgroup /app - -# USER appuser - -# ENV NODE_ENV=production -# EXPOSE 3000 - -# CMD ["npm", "start"] \ No newline at end of file +CMD ["node", "--max-old-space-size=2048", "dist/main.js"]