fix: Prisma binary download for Iran servers

This commit is contained in:
2026-05-06 17:58:05 +03:30
parent 767c5f3892
commit ea6e67b4e8
3 changed files with 96 additions and 2 deletions

91
DEPLOY_IRAN.md Normal file
View File

@@ -0,0 +1,91 @@
# راهنمای دیپلوی در سرورهای ایران
## مشکل
سرورهای ایران به دلیل تحریم‌ها نمی‌توانند به `binaries.prisma.sh` دسترسی داشته باشند و Prisma نمی‌تواند باینری‌های لازم را دانلود کند.
## راه‌حل‌های پیاده‌سازی شده
### ۱. تغییرات Dockerfile
- باینری‌های Prisma در مرحله `deps` دانلود و generate می‌شوند
- از `PRISMA_ENGINES_MIRROR` برای استفاده از CDN استفاده شده
- باینری‌ها به مرحله `builder` منتقل می‌شوند
### ۲. تغییرات package.json
- اضافه شدن `postinstall` script برای اجرای خودکار `prisma generate`
- تغییر `build` script برای اطمینان از generate شدن Prisma قبل از build
## راه‌حل‌های جایگزین (در صورت عدم موفقیت)
### الف) استفاده از Proxy یا VPN
اگر سرور شما به proxy یا VPN دسترسی دارد:
```bash
# در Dockerfile قبل از RUN npm ci
ENV HTTP_PROXY=http://your-proxy:port
ENV HTTPS_PROXY=http://your-proxy:port
```
### ب) Pre-build کردن و Push کردن Image
روی سیستم محلی (با دسترسی به اینترنت):
```bash
# Build کردن image
docker build -t football-next:latest .
# Save کردن image
docker save football-next:latest > football-next.tar
# انتقال فایل به سرور و load کردن
docker load < football-next.tar
```
### ج) استفاده از Prisma Binary از قبل دانلود شده
۱. روی سیستم با اینترنت:
```bash
npx prisma generate
```
۲. فایل‌های generate شده در `node_modules/.prisma` و `node_modules/@prisma` را کپی کنید
۳. در Dockerfile از COPY استفاده کنید:
```dockerfile
COPY node_modules/.prisma ./node_modules/.prisma
COPY node_modules/@prisma ./node_modules/@prisma
```
### د) استفاده از Mirror داخلی
اگر یک mirror داخلی دارید:
```dockerfile
ENV PRISMA_ENGINES_MIRROR=https://your-internal-mirror.ir
```
## تست محلی
برای تست Dockerfile قبل از دیپلوی:
```bash
# Build
docker build -t football-next:test .
# Run
docker run -p 3000:3000 \
-e DATABASE_URL="your-db-url" \
-e NEXTAUTH_URL="http://localhost:3000" \
-e NEXTAUTH_SECRET="your-secret" \
football-next:test
```
## نکات مهم
1. مطمئن شوید `prisma` folder در `.dockerignore` نیست
2. متغیرهای محیطی را در Coolify یا platform دیپلوی خود تنظیم کنید
3. اگر همچنان مشکل دارید، لاگ‌های کامل build را بررسی کنید
## متغیرهای محیطی مورد نیاز
```env
DATABASE_URL=postgresql://user:password@host:5432/dbname
NEXTAUTH_URL=https://your-domain.com
NEXTAUTH_SECRET=your-secret-key
```