Cache prisma generate layer so routine deploys rebuild only dist

prisma generate takes ~110s on the production host and it sat after COPY dist,
so every deploy paid for it. Moving schema copy and generate ahead of dist
means a code-only deploy reuses that layer and finishes in seconds.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-08 16:22:45 +03:30
co-authored by Cursor
parent 811f671e78
commit aa9b3ee451
+9 -8
View File
@@ -9,19 +9,20 @@ 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
# همه‌چیز جز node_modules از گیت می‌آید تا دیپلوی فقط با git pull انجام شود
COPY package.json package-lock.json prisma.config.ts /app/
COPY prisma /app/prisma
COPY dist /app/dist
COPY docker-entrypoint.sh /app/docker-entrypoint.sh
RUN chmod +x /app/docker-entrypoint.sh
# کلاینت Prisma باید با اسکیمای گیت هم‌خوان شود؛ آفلاین است چون engine در باندل هست
ENV CHECKPOINT_DISABLE=1
ENV PRISMA_HIDE_UPDATE_MESSAGE=1
# اسکیما و generate قبل از dist بمانند تا لایه‌شان کش شود؛ generate روی سرور کند است
COPY package.json package-lock.json prisma.config.ts /app/
COPY prisma /app/prisma
# DATABASE_URL فقط برای بارگذاری prisma.config.ts لازم است، اتصالی برقرار نمی‌شود
RUN DATABASE_URL="postgresql://build:build@localhost:5432/build?schema=public" \
./node_modules/.bin/prisma generate
# 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"]