fix: Prisma binary download for Iran servers
This commit is contained in:
91
DEPLOY_IRAN.md
Normal file
91
DEPLOY_IRAN.md
Normal 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
|
||||
```
|
||||
@@ -6,7 +6,9 @@ ENV PRISMA_ENGINES_MIRROR=https://binaries.prismacdn.com
|
||||
ENV PRISMA_ENGINES_CHECKSUM_IGNORE_MISSING=1
|
||||
|
||||
COPY package.json package-lock.json ./
|
||||
COPY prisma ./prisma
|
||||
RUN npm ci
|
||||
RUN npx prisma generate
|
||||
|
||||
FROM node:20-alpine AS builder
|
||||
WORKDIR /app
|
||||
@@ -20,9 +22,9 @@ ENV PRISMA_ENGINES_MIRROR=https://binaries.prismacdn.com
|
||||
ENV PRISMA_ENGINES_CHECKSUM_IGNORE_MISSING=1
|
||||
|
||||
COPY --from=deps /app/node_modules ./node_modules
|
||||
COPY --from=deps /app/prisma ./prisma
|
||||
COPY . .
|
||||
|
||||
RUN for i in 1 2 3 4 5; do npx prisma generate && exit 0; sleep 10; done; exit 1
|
||||
ENV NODE_ENV=production
|
||||
RUN npm run build
|
||||
RUN npm prune --omit=dev
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
{
|
||||
"scripts": {
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
"build": "prisma generate && next build",
|
||||
"start": "next start",
|
||||
"postinstall": "prisma generate",
|
||||
"db:push": "prisma db push",
|
||||
"db:generate": "prisma generate",
|
||||
"db:studio": "prisma studio",
|
||||
|
||||
Reference in New Issue
Block a user