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`