From aa9b3ee45110369213a3c3ee57eb604814a0ac2c Mon Sep 17 00:00:00 2001 From: adonis Date: Sat, 8 Aug 2026 16:22:45 +0330 Subject: [PATCH] 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 --- Dockerfile | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8589a89..a9a8a13 100644 --- a/Dockerfile +++ b/Dockerfile @@ -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"]