# راهنمای استقرار روی cPanel - سایت‌ساز پرو

این راهنما دو روش برای اجرای پروژه روی هاست cPanel توضیح می‌دهد.

---

## روش ۱: استقرار وردپرس Multisite (پیشنهادی برای سایت‌ساز واقعی)

این روش همان چیزی است که برای یک پلتفرم واقعی SaaS نیاز دارید - هر کاربر سایت جداگانه وردپرسی خود را دارد.

### مرحله ۱: نصب وردپرس روی cPanel

1. وارد cPanel شوید (typically `yourdomain.com/cpanel`)
2. به بخش **Softaculous Apps Installer** → **WordPress** بروید
3. روی **Install Now** کلیک کنید
4. تنظیمات:
   - **Protocol**: `https://`
   - **Domain**: دامنه اصلی شما (مثلاً `sitesaz.pro`)
   - **In Directory**: خالی بگذارید (نصب در root)
   - **Database Name**: `sitesaz_wp` (یا هر نام دلخواه)
   - **Admin Username**: `admin`
   - **Admin Password**: یک رمز قوی
   - **Admin Email**: ایمیل شما
5. روی **Install** کلیک کنید

### مرحله ۲: فعال‌سازی Multisite

1. با FTP یا File Manager به مسیر `/public_html/wp-config.php` بروید
2. قبل از خط `/* That's all, stop editing! */` این را اضافه کنید:
   ```php
   define('WP_ALLOW_MULTISITE', true);
   ```
3. فایل را ذخیره کنید
4. وارد wp-admin شوید → **Tools** → **Network Setup**
5. نوع **Sub-domains** را انتخاب کنید
6. روی **Install** کلیک کنید
7. دستورالعمل صفحه بعد را دنبال کنید (افزودن کد به `wp-config.php` و `.htaccess`)

### مرحله ۳: تنظیم Wildcard Subdomains

1. در cPanel به **Subdomains** بروید
2. یک ساب‌دامنه با نام `*` (asterisk) بسازید:
   - **Subdomain**: `*`
   - **Document Root**: `/public_html`
3. روی **Create** کلیک کنید

### مرحله ۴: آپلود پلاگین سایت‌ساز پرو

1. تمام پوشه `wordpress-plugin/` از این پروژه را ZIP کنید
2. وارد **Network Admin** (`wp-admin/network/`) شوید
3. به **Plugins** → **Add New** → **Upload Plugin** بروید
4. فایل ZIP را آپلود کنید
5. روی **Network Activate** کلیک کنید

### مرحله ۵: نصب افزونه‌های مورد نیاز

در **Network Admin** → **Plugins** → **Add New**:
- **Elementor** (نصب و Network Activate)
- **Elementor Pro** (نصب با لایسنس)
- **WooCommerce** (نصب، بدون Network Activate - هر سایت جداگانه فعال شود)
- **Digits - OTP Mobile Login** (نصب و Network Activate)
- **WooCommerce Wallet** (نصب)
- **WooCommerce Subscriptions** (نصب)
- **Yoast SEO** (نصب)

### مرحله ۶: نصب درگاه پرداخت ایرانی

1. **Persian WooCommerce Payment Gateway** (زرین‌پال) را نصب کنید
2. مرچنت‌کد زرین‌پال خود را در تنظیمات وارد کنید
3. کیف پول ووکامرس را فعال کنید

### مرحله ۷: تنظیمات پلاگین سایت‌ساز

1. در **Network Admin** → **سایت‌ساز پرو** → **تنظیمات**
2. افزونه‌های پیش‌فرض را برای نصب خودکار انتخاب کنید
3. محدودیت هر پلن را تنظیم کنید
4. درگاه پرداخت را پیکربندی کنید

### مرحله ۸: فعال‌سازی SSL

1. در cPanel به **SSL/TLS Status** بروید
2. روی **Run AutoSSL** کلیک کنید (Let's Encrypt رایگان)
3. منتظر بمانید تا تمام دامنه‌ها SSL بگیرند

---

## روش ۲: استقرار Next.js روی cPanel (فقط برای نمایش دمو)

> ⚠️ **هشدار**: این روش فقط برای داشتن یک نسخه نمایشی از پنل Next.js است. برای پلتفرم واقعی SaaS، روش ۱ (وردپرس) را استفاده کنید.

### گزینه الف: با Node.js (اگر هاست شما Node.js پشتیبانی می‌کند)

بررسی کنید: cPanel → **Software** → **Setup Node.js App**

اگر Node.js موجود است:

1. **Build پروژه به‌صورت production**:
   ```bash
   bun install
   bun run build
   ```
   (در سیستم محلی خودتان - نه روی هاست)

2. **آپلود فایل‌ها به cPanel**:
   - فایل‌های `.next/`, `public/`, `package.json`, `next.config.ts`, `prisma/` را آپلود کنید
   - در مسیر `/public_html` یا یک ساب‌دامنه قرار دهید

3. **ایجاد Node.js App در cPanel**:
   - به **Setup Node.js App** بروید
   - **Create Application**
   - Node.js version: 18+
   - Application root: مسیر پروژه
   - Application URL: دامنه شما
   - Application startup file: `server.js`

4. **نصب وابستگی‌ها**:
   ```bash
   npm install --production
   npx prisma generate
   npx prisma db push
   npm run db:seed
   ```

5. **راه‌اندازی**:
   - Application را Start کنید
   - پورت معمولاً توسط cPanel مدیریت می‌شود (نه ۳۰۰۰)

### گزینه ب: Static Export (بدون پشتیبانی API)

اگر هاست Node.js ندارد، می‌توانید فقط فرانت‌اند را به‌صورت static export کنید (بدون API و دیتابیس):

1. در `next.config.ts`:
   ```typescript
   const nextConfig = {
     output: 'export',
     images: { unoptimized: true },
   };
   ```

2. Build:
   ```bash
   bun run build
   ```

3. پوشه `out/` را در `/public_html` آپلود کنید

> نکته: در این حالت API و دیتابیس کار نمی‌کنند - فقط نمایش فرانت‌اند.

---

## روش ۳: استقرار روی VPS (توصیه شده برای پلتفرم واقعی)

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

1. یک VPS اوبونتو تهیه کنید (مثلاً از Hetzner، DigitalOcean یا آراز کلود)
2. Docker و Docker Compose نصب کنید
3. این پروژه را clone کنید
4. `docker-compose up -d` (شامل Next.js + PostgreSQL + Caddy + Redis)
5. دامنه را به IP سرور pointing کنید

---

## سوالات متداول استقرار

### سوال: آیا برای سایت‌ساز واقعی نیاز به PHP است؟

**بله.** برای یک پلتفرم واقعی SaaS که هر کاربر سایت وردپرسی جداگانه دارد:
- **PHP + WordPress** برای backend (همان پلاگین در `wordpress-plugin/`)
- **MySQL** برای دیتابیس وردپرس
- **Apache/Nginx** برای وب‌سرور

Next.js فقط می‌تواند بخش پنل مدیریت پلتفرم (frontend) باشد - اما هسته اصلی باید وردپرس باشد.

### سوال: آیا می‌توانم فقط Next.js را بدون PHP استفاده کنم؟

**بله، اما باید کار زیادی انجام دهید:**
- تمام منطق ساخت سایت (ایجاد فایل‌های وردپرس، دیتابیس وردپرس، نصب افزونه‌ها) را باید در Next.js پیاده کنید
- این به معنی بازنویسی کامل هسته وردپرس است
- **توصیه نمی‌شود** - وردپرس بهینه‌ترین راه است

### سوال: دیتابیس SQLite کجاست و چگونه به MySQL مهاجرت کنم؟

الان پروژه از SQLite (در `db/custom.db`) استفاده می‌کند. برای پروداکشن:

1. در `prisma/schema.prisma` datasource را به MySQL تغییر دهید:
   ```prisma
   datasource db {
     provider = "mysql"
     url      = env("DATABASE_URL")
   }
   ```
2. در `.env`:
   ```
   DATABASE_URL="mysql://user:password@localhost:3306/sitesaz"
   ```
3. اجرا:
   ```bash
   bun run db:push
   bun run db:seed
   ```

### سوال: چگونه دامنه اختصاصی کاربران را فعال کنم؟

1. **در وردپرس Multisite**: به‌صورت خودکار با Domain Mapping
2. **در cPanel**: Wildcard subdomain `*.sitesaz.pro` بسازید
3. **SSL**: AutoSSL با Let's Encrypt در cPanel فعال کنید

### سوال: چگونه دیتای واقعی سایت خودم را جایگزین کنم؟

الان داده‌های نمونه در `prisma/seed.ts` تعریف شده‌اند. برای استفاده از دیتای واقعی:
1. `bun run db:push --accept-data-loss` (پاک کردن داده‌ها)
2. داده‌های واقعی خود را از طریق API یا مستقیم با Prisma اضافه کنید
3. یا فایل `seed.ts` را ویرایش و دوباره `bun run db:seed` اجرا کنید

---

## اطلاعات ورود دمو (پس از seed)

- **کاربر**: `sara@example.com` (موبایل: 09123456789) - پلن حرفه‌ای
- **کاربر ۲**: `mohammad@r-enterprise.ir` - پلن بیزینس
- **کاربر ۳**: `ali@gold-zarrin.ir` - پلن حرفه‌ای
- **ادمین**: `admin@sitesaz.pro` - پلن سازمانی

> نکته: در این نسخه دمو، سیستم ورود با کوکی ساده است (هر کاربر فعلاً سارا احمدی می‌بیند). برای ورود واقعی، NextAuth.js یا دیجیتس OTP را اضافه کنید.

---

## عیب‌یابی

### خطای "Cannot connect to database"
- فایل `.env` را بررسی کنید: `DATABASE_URL="file:/home/z/my-project/db/custom.db"`
- مطمئن شوید پوشه `db/` قابل نوشتن است

### خطای "API returns 500"
- لاگ سرور را بررسی کنید: `tail -f dev.log`
- با `bun run db:push` دیتابیس را sync کنید

### تصاویر قالب‌ها لود نمی‌شوند
- مطمئن شوید فایل‌های `public/templates/*.png` وجود دارند
- با Image Generation skill دوباره تولید کنید
