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 <cursoragent@cursor.com>
This commit is contained in:
2026-08-05 20:37:59 +03:30
co-authored by Cursor
parent 9f0422c1db
commit 9a9566dd50
2 changed files with 28 additions and 15 deletions
+19 -15
View File
@@ -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
+9
View File
@@ -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`