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>
44 lines
1.2 KiB
Docker
44 lines
1.2 KiB
Docker
# 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
|
|
|
|
COPY prisma ./prisma
|
|
COPY prisma.config.ts ./
|
|
COPY tsconfig.json tsconfig.build.json nest-cli.json ./
|
|
COPY src ./src
|
|
|
|
RUN npx prisma generate \
|
|
&& npm run build \
|
|
&& npm prune --omit=dev \
|
|
&& npm install prisma ts-node typescript --no-save --registry=${NPM_REGISTRY}
|
|
|
|
# Production image — بدون apk / بدون npm دوباره
|
|
FROM node:22-alpine AS runner
|
|
WORKDIR /app
|
|
|
|
ENV NODE_ENV=production
|
|
|
|
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/prisma ./prisma
|
|
COPY --from=builder /app/prisma.config.ts ./
|
|
COPY docker-entrypoint.sh ./
|
|
|
|
RUN chmod +x docker-entrypoint.sh
|
|
|
|
EXPOSE 3000
|
|
|
|
ENTRYPOINT ["./docker-entrypoint.sh"]
|