Files
football-next/DEPLOY_RUNFLARE.md

4.2 KiB
Raw Blame History

راهنمای دیپلوی با Runflare (بدون دسترسی بین‌الملل)

مشکل

سرور فقط به mirror داخلی (Runflare) دسترسی دارد و نمی‌تواند Prisma engines را دانلود کند.

راه‌حل: Pre-generate کردن Prisma Client

مرحله ۱: Generate کردن Prisma Client (روی سیستم محلی با VPN)

# نصب dependencies
npm install

# Generate کردن Prisma Client
npx prisma generate

# این فایل‌ها ساخته می‌شوند:
# - node_modules/.prisma/client/
# - node_modules/@prisma/client/

مرحله ۲: کپی کردن Generated Files به پروژه

# ساخت پوشه برای Prisma generated files
mkdir -p prisma/generated

# کپی کردن فایل‌های generate شده
cp -r node_modules/.prisma/client prisma/generated/.prisma-client
cp -r node_modules/@prisma/client prisma/generated/@prisma-client

# یا در Windows PowerShell:
# New-Item -ItemType Directory -Force -Path "prisma/generated"
# Copy-Item -Recurse "node_modules/.prisma/client" "prisma/generated/.prisma-client"
# Copy-Item -Recurse "node_modules/@prisma/client" "prisma/generated/@prisma-client"

مرحله ۳: Commit و Push

git add prisma/generated
git add Dockerfile
git commit -m "Add pre-generated Prisma client for Runflare deployment"
git push

مرحله ۴: تنظیم Coolify برای استفاده از Runflare

در تنظیمات Coolify یا در سرور:

# تنظیم Docker برای استفاده از Runflare
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json

اضافه کردن:

{
  "registry-mirrors": ["https://docker.runflare.com"]
}
sudo systemctl restart docker

Dockerfile جدید

Dockerfile جدید این کارها رو انجام می‌ده:

  1. از NPM mirror استفاده می‌کنه
  2. Prisma postinstall رو skip می‌کنه
  3. از فایل‌های pre-generated استفاده می‌کنه

راه‌حل جایگزین: استفاده از Base Image آماده

اگر روش بالا کار نکرد:

گام ۱: Build روی سیستم با VPN

docker build -t football-next:latest \
  --build-arg DATABASE_URL="postgresql://user:pass@host:5432/db" \
  --build-arg NEXTAUTH_URL="https://yourdomain.com" \
  --build-arg NEXTAUTH_SECRET="your-secret" \
  .

docker save football-next:latest | gzip > football-next.tar.gz

گام ۲: آپلود به سرور فایل ایرانی

# آپلود به سرویس فایل ایرانی مثل:
# - files.ir
# - uploadboy.com
# - یا هر سرویس دیگر

# یا مستقیم با SCP اگر IP سرور دارید
scp football-next.tar.gz user@server:/tmp/

گام ۳: Load در سرور

ssh user@server
cd /tmp
gunzip -c football-next.tar.gz | docker load
docker images  # بررسی

گام ۴: استفاده در Coolify

در Coolify:

  • Source Type: Docker Image
  • Image Name: football-next:latest
  • تنظیم Environment Variables

تنظیمات NPM برای Runflare

اگر می‌خواهید روی سرور npm کار کنه:

npm config set registry https://registry.npmmirror.com
# یا
npm config set registry https://npm.runflare.com

عیب‌یابی

خطا: Cannot find module '@prisma/client'

راه‌حل:

# روی سیستم محلی
npm install
npx prisma generate
# کپی کردن فایل‌های generated به prisma/generated
# commit و push

خطا: Prisma engines not found

راه‌حل: استفاده از روش "Build روی سیستم با VPN"

خلاصه

بهترین روش برای سرور بدون دسترسی بین‌الملل:

  1. Build image روی سیستم با VPN
  2. Save کردن image به فایل
  3. آپلود به سرور فایل ایرانی
  4. دانلود و Load در سرور
  5. استفاده در Coolify

این روش ۱۰۰٪ کار می‌کنه و دیگه نیازی به دسترسی بین‌الملل نیست.

حجم فایل

  • Image فشرده شده: ~200-300 MB
  • زمان آپلود با اینترنت ۱۰ مگ: ~5 دقیقه
  • زمان download در سرور: بستگی به سرعت سرور داره