# استقرار گواهینو روی cPanel

گواهینو یک اپلیکیشن مستقل Laravel است و داخل وردپرس نصب نمی‌شود. وردپرس اصلی روی
`pishtazanweb.com` باقی می‌ماند و ساب‌دامین `govahino.pishtazanweb.com` مستقیماً
پوشه `public` این پروژه را اجرا می‌کند.

## پیش‌نیاز هاست

- PHP 8.3 یا جدیدتر
- MySQL 8 یا MariaDB سازگار
- افزونه‌های PHP: `curl`, `fileinfo`, `gd`, `intl`, `mbstring`, `openssl`,
  `pdo_mysql`, `zip`, `opcache`
- امکان تعریف Cron Job
- گواهی SSL فعال برای ساب‌دامین

نام پنل (cPanel یا DirectAdmin) در معماری برنامه اثری ندارد؛ امکانات بالا مهم هستند.

## ساخت ساب‌دامین

در بخش Domains ساب‌دامین `govahino.pishtazanweb.com` را بسازید. Document Root باید
به این مسیر اشاره کند:

```text
/home/CPANEL_USER/govahino/public
```

Document Root نباید روی ریشه پروژه باشد؛ در غیر این صورت فایل `.env` و کدهای داخلی
ممکن است در دسترس وب قرار بگیرند.

## پایگاه داده

در MySQL Database Wizard یک دیتابیس و کاربر با دسترسی کامل بسازید. سپس
`.env.cpanel.example` را به `.env` کپی و مقادیر دیتابیس را وارد کنید.

## فرمان‌های استقرار

از Terminal خود cPanel در ریشه پروژه اجرا کنید:

```bash
php artisan key:generate --force
php artisan migrate --seed --force
php artisan storage:link
php artisan optimize
```

دارایی‌های Tailwind و Bootstrap از قبل در `public/build` کامپایل شده‌اند؛ روی هاست
به Node.js یا اجرای npm نیازی نیست. پوشه `vendor` نیز در بسته نهایی قرار می‌گیرد تا
روی هاست اشتراکی نیاز به Composer نباشد.

## مجوز پوشه‌ها

پوشه‌های `storage` و `bootstrap/cache` باید برای کاربر PHP قابل‌نوشتن باشند.
معمولاً سطح دسترسی `775` کافی است و نباید از `777` استفاده شود.

## Cron و صف

دو Cron زیر را هر دقیقه اجرا کنید و مسیر PHP/پروژه را با هاست خود تطبیق دهید:

```cron
* * * * * /usr/local/bin/php /home/CPANEL_USER/govahino/artisan schedule:run >/dev/null 2>&1
* * * * * /usr/local/bin/php /home/CPANEL_USER/govahino/artisan queue:work --stop-when-empty --tries=3 >/dev/null 2>&1
```

## تنظیم سرویس‌ها

- در کاوه‌نگار قالب `govahino-login` را تأیید و API Key را در `.env` وارد کنید.
- Merchant زیبال را در `ZIBAL_MERCHANT` قرار دهید.
- Callback زیبال:
  `https://govahino.pishtazanweb.com/payments/zibal/callback`
- پس از تغییر `.env` فرمان `php artisan optimize:clear` و سپس
  `php artisan optimize` را اجرا کنید.

## بررسی نهایی

- `/status` باید JSON با وضعیت `ok` برگرداند.
- ثبت‌نام OTP، تکمیل پروفایل و ورود با رمز را آزمایش کنید.
- یک پرداخت واقعی با مبلغ کم و بازگشت Callback را کنترل کنید.
- Cron و ثبت لاگ در `storage/logs` را بررسی کنید.
- قبل از فروش، پشتیبان‌گیری زمان‌بندی‌شده MySQL و `storage/app/public` را فعال کنید.
