From 9a9566dd50242b0c9d2eab0faa6be8fd325147c3 Mon Sep 17 00:00:00 2001 From: adonis Date: Wed, 5 Aug 2026 20:37:59 +0330 Subject: [PATCH] Fix Docker build for restricted Alpine CDN access Drop apk openssl (node alpine already has it) and use npmmirror by default so Iranian servers can build without Alpine TLS failures. Co-authored-by: Cursor --- Dockerfile | 34 +++++++++++++++++++--------------- README.md | 9 +++++++++ 2 files changed, 28 insertions(+), 15 deletions(-) diff --git a/Dockerfile b/Dockerfile index 5f35eee..b966af0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,15 @@ -# Build +# syntax=docker/dockerfile:1 + +# میرور npm برای سرورهای ایران (قابل تغییر با --build-arg) +ARG NPM_REGISTRY=https://registry.npmmirror.com + FROM node:22-alpine AS builder +ARG NPM_REGISTRY WORKDIR /app +# openssl از قبل داخل node:alpine هست؛ apk را حذف کردیم چون CDN آلپاین روی خیلی از سرورها TLS error می‌دهد +ENV NPM_CONFIG_REGISTRY=${NPM_REGISTRY} + COPY package.json package-lock.json ./ RUN npm ci @@ -10,29 +18,25 @@ COPY prisma.config.ts ./ COPY tsconfig.json tsconfig.build.json nest-cli.json ./ COPY src ./src -RUN npx prisma generate -RUN npm run build +RUN npx prisma generate \ + && npm run build \ + && npm prune --omit=dev \ + && npm install prisma ts-node typescript --no-save --registry=${NPM_REGISTRY} -# Production +# Production image — بدون apk / بدون npm دوباره FROM node:22-alpine AS runner WORKDIR /app ENV NODE_ENV=production -RUN apk add --no-cache openssl - -COPY package.json package-lock.json ./ -RUN npm ci --omit=dev && npm install prisma ts-node typescript --no-save - -COPY prisma ./prisma -COPY prisma.config.ts ./ +COPY --from=builder /app/package.json /app/package-lock.json ./ +COPY --from=builder /app/node_modules ./node_modules COPY --from=builder /app/dist ./dist -COPY --from=builder /app/node_modules/.prisma ./node_modules/.prisma -COPY --from=builder /app/node_modules/@prisma ./node_modules/@prisma +COPY --from=builder /app/prisma ./prisma +COPY --from=builder /app/prisma.config.ts ./ COPY docker-entrypoint.sh ./ -RUN chmod +x docker-entrypoint.sh \ - && npx prisma generate +RUN chmod +x docker-entrypoint.sh EXPOSE 3000 diff --git a/README.md b/README.md index 35ef94d..2423dcf 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,15 @@ RUN_SEED=true docker compose up -d --build docker compose up -d --build ``` +اگر بیلد به‌خاطر رجیستری npm یا Alpine خطا داد (رایج روی سرورهای ایران): + +```bash +# پیش‌فرض Dockerfile از میرور npmmirror استفاده می‌کند. +# در صورت نیاز: +docker compose build --build-arg NPM_REGISTRY=https://registry.npmmirror.com +RUN_SEED=true docker compose up -d +``` + - API روی `127.0.0.1:3000` بالا می‌آید - مایگریشن موقع استارت کانتینر اجرا می‌شود - LiteSpeed را Reverse Proxy کنید به `http://127.0.0.1:3000`