163 lines
4.2 KiB
Markdown
163 lines
4.2 KiB
Markdown
# راهنمای دیپلوی با Runflare (بدون دسترسی بینالملل)
|
||
|
||
## مشکل
|
||
سرور فقط به mirror داخلی (Runflare) دسترسی دارد و نمیتواند Prisma engines را دانلود کند.
|
||
|
||
## راهحل: Pre-generate کردن Prisma Client
|
||
|
||
### مرحله ۱: Generate کردن Prisma Client (روی سیستم محلی با VPN)
|
||
|
||
```bash
|
||
# نصب dependencies
|
||
npm install
|
||
|
||
# Generate کردن Prisma Client
|
||
npx prisma generate
|
||
|
||
# این فایلها ساخته میشوند:
|
||
# - node_modules/.prisma/client/
|
||
# - node_modules/@prisma/client/
|
||
```
|
||
|
||
### مرحله ۲: کپی کردن Generated Files به پروژه
|
||
|
||
```bash
|
||
# ساخت پوشه برای 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
|
||
|
||
```bash
|
||
git add prisma/generated
|
||
git add Dockerfile
|
||
git commit -m "Add pre-generated Prisma client for Runflare deployment"
|
||
git push
|
||
```
|
||
|
||
### مرحله ۴: تنظیم Coolify برای استفاده از Runflare
|
||
|
||
در تنظیمات Coolify یا در سرور:
|
||
|
||
```bash
|
||
# تنظیم Docker برای استفاده از Runflare
|
||
sudo mkdir -p /etc/docker
|
||
sudo nano /etc/docker/daemon.json
|
||
```
|
||
|
||
اضافه کردن:
|
||
```json
|
||
{
|
||
"registry-mirrors": ["https://docker.runflare.com"]
|
||
}
|
||
```
|
||
|
||
```bash
|
||
sudo systemctl restart docker
|
||
```
|
||
|
||
## Dockerfile جدید
|
||
|
||
Dockerfile جدید این کارها رو انجام میده:
|
||
1. از NPM mirror استفاده میکنه
|
||
2. Prisma postinstall رو skip میکنه
|
||
3. از فایلهای pre-generated استفاده میکنه
|
||
|
||
## راهحل جایگزین: استفاده از Base Image آماده
|
||
|
||
اگر روش بالا کار نکرد:
|
||
|
||
### گام ۱: Build روی سیستم با VPN
|
||
|
||
```bash
|
||
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
|
||
```
|
||
|
||
### گام ۲: آپلود به سرور فایل ایرانی
|
||
|
||
```bash
|
||
# آپلود به سرویس فایل ایرانی مثل:
|
||
# - files.ir
|
||
# - uploadboy.com
|
||
# - یا هر سرویس دیگر
|
||
|
||
# یا مستقیم با SCP اگر IP سرور دارید
|
||
scp football-next.tar.gz user@server:/tmp/
|
||
```
|
||
|
||
### گام ۳: Load در سرور
|
||
|
||
```bash
|
||
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 کار کنه:
|
||
|
||
```bash
|
||
npm config set registry https://registry.npmmirror.com
|
||
# یا
|
||
npm config set registry https://npm.runflare.com
|
||
```
|
||
|
||
## عیبیابی
|
||
|
||
### خطا: Cannot find module '@prisma/client'
|
||
|
||
راهحل:
|
||
```bash
|
||
# روی سیستم محلی
|
||
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 در سرور: بستگی به سرعت سرور داره
|