prisma generate needs over three minutes on the production host, which made every deploy hang on that build step. The client is now generated on the dev machine into prisma-client.tar.gz (tracked, 8.5MB) and the image just untars it. Dropping the unused linux-musl engine target halves that payload. Co-authored-by: Cursor <cursoragent@cursor.com>
34 lines
1.2 KiB
Docker
34 lines
1.2 KiB
Docker
# bookworm کامل تا OpenSSL آماده باشد (بدون apt روی سرور ایران)
|
|
FROM node:22-bookworm
|
|
WORKDIR /app
|
|
|
|
ENV NODE_ENV=production
|
|
ENV TZ=Asia/Tehran
|
|
|
|
COPY deploy-bundle.tar.gz /tmp/deploy-bundle.tar.gz
|
|
RUN tar -xzf /tmp/deploy-bundle.tar.gz -C /app \
|
|
&& rm /tmp/deploy-bundle.tar.gz
|
|
|
|
# هیچ دستور prisma یا npm روی سرور اجرا نمیشود؛ همه چیز از قبل ساخته آمده است
|
|
ENV CHECKPOINT_DISABLE=1
|
|
ENV DO_NOT_TRACK=1
|
|
ENV PRISMA_HIDE_UPDATE_MESSAGE=1
|
|
|
|
COPY package.json package-lock.json prisma.config.ts /app/
|
|
COPY prisma /app/prisma
|
|
|
|
# کلاینت Prisma روی سیستم دولوپر با scripts/pack-prisma-client.sh ساخته میشود
|
|
COPY prisma-client.tar.gz /tmp/prisma-client.tar.gz
|
|
RUN rm -rf /app/node_modules/.prisma/client \
|
|
&& mkdir -p /app/node_modules/.prisma \
|
|
&& tar -xzf /tmp/prisma-client.tar.gz -C /app/node_modules/.prisma \
|
|
&& rm /tmp/prisma-client.tar.gz
|
|
|
|
# dist آخر باشد تا دیپلوی معمولی فقط همین لایه را دوباره بسازد
|
|
COPY dist /app/dist
|
|
COPY docker-entrypoint.sh /app/docker-entrypoint.sh
|
|
RUN chmod +x /app/docker-entrypoint.sh
|
|
|
|
EXPOSE 3000
|
|
ENTRYPOINT ["./docker-entrypoint.sh"]
|