# راهنمای نصب اولیه BVPN

## پیش‌نیازها
- PHP 8.2 یا جدیدتر با PDO MySQL، cURL، OpenSSL، JSON و Sessions.
- MySQL/MariaDB و دسترسی ساخت دیتابیس.
- Composer برای نصب `phpseclib/phpseclib` ماژول مدیریت سرورها.
- HTTPS فعال روی دامنه.

## نصب اولیه
1. ابتدا از سایت فعلی و دیتابیس خود نسخه پشتیبان بگیرید.
2. فایل ZIP را در مسیر آزمایشی یا پوشه `public_html/bvpn` استخراج کنید. روی سایت دارای داده واقعی، مستقیم جایگزینی نکنید.
3. یک دیتابیس و کاربر MySQL بسازید.
4. `schema.sql` را از طریق phpMyAdmin وارد کنید.
5. `config.example.php` را به `config.php` کپی کنید و اطلاعات دیتابیس را وارد کنید.
6. در پوشه `servers-manager` دستور `composer install --no-dev` را اجرا کنید. اگر دسترسی SSH/CLI به cPanel ندارید، Composer را محلی اجرا کنید و پوشه `vendor` را همراه بسته بارگذاری کنید.
7. بررسی کنید `servers-manager/storage` برای PHP قابل نوشتن باشد؛ دسترسی وب مستقیم به این پوشه باید مسدود بماند.
8. ورود آزمایشی اصلی: `admin` / `admin` یا `arshia` / `arshia`. این رمزها عمومی و موقت‌اند؛ پیش از انتشار، رمزهای مدیر را تغییر دهید.
9. وارد `/bvpn/servers-manager/` شوید و سرور را با IP، پورت فعلی 22، کاربر root و رمز واردشده در فرم ثبت کنید. رمز در بسته قرار داده نشده است.
10. ابتدا «تست اتصال» را اجرا کنید. بعد از مشاهده خروجی موفق، نصب مانیتورینگ را اجرا کنید.

## تنظیم پیامک
در `config.php` مقدارهای `sms.enabled`, `sms.api_key`, `sms.from_number`, `sms.otp_pattern_code` و `sms.otp_pattern_variable` را مطابق پنل IPPanel وارد کنید. ابتدا ارسال OTP را روی شماره خود آزمایش کنید.

## تنظیم پرداخت
در `config.php` مرچنت زیبال و `payment.enabled` را تنظیم کنید. مقدار `monthly_price_toman` در جدول `settings` باید قیمت صحیح تومان باشد. دامنه callback باید HTTPS و در پنل درگاه مورد تأیید باشد. پرداخت واقعی را تا زمان تست callback و بررسی دیتابیس فعال نکنید.

## نکات عملیاتی
- فایل `PROJECT_CONTEXT_FA.md` را برای ادامه کار نگه دارید.
- هیچ‌وقت رمز واقعی سرور یا API Key را داخل ZIP، پیام‌رسان یا مستندات ذخیره نکنید.
- پیش از تغییر پورت SSH، TCP/443 را هم در فایروال Ubuntu و هم در فایروال ارائه‌دهنده مجاز کنید. اتصال جدید روی 443 را در یک نشست جدا آزمایش کنید و نشست 22 را تا پایان تست باز نگه دارید.
- مصرف `nethogs` در این نسخه آزمایشی است و نباید تا پیش از سنجش کنترل‌شده برای قطع خودکار حجم استفاده شود.
- این بسته نسخه آغازین است و هنوز کل پروژه به‌صورت یکپارچه و نهایی تست نشده است.


## اجرای تست‌های محلی
در محیطی که PHP 8.2+، Python 3 و Bash دارد، از ریشه پروژه اجرا کنید:

```bash
find . -name '*.php' -not -path './servers-manager/vendor/*' -print0 | xargs -0 -n1 php -l
php servers-manager/tests/smoke.php
bash -n servers-manager/server/install-agent.sh
python3 -m py_compile servers-manager/server/usage_collector.py
```

تست‌های محلی به سرور واقعی وصل نمی‌شوند. نصب عامل و تغییر پورت، عملیات واقعی و تغییردهنده روی Ubuntu هستند؛ ابتدا خروجی تست اتصال را بررسی کنید و پیش از تغییر پورت، فایروال ارائه‌دهنده را نیز تنظیم کنید.


## نکته برای نصب بدون Terminal
در ماژول `servers-manager` کلید برنامه از قبل تنظیم شده است و برای نمایش پنل نیازی به Composer نیست. برای اجرای SSH باید `phpseclib3` در vendor موجود باشد یا افزونه PHP `ssh2` از طریق cPanel فعال شود. اگر افزونه موجود نیست، از پشتیبانی هاست درخواست فعال‌سازی کنید؛ هیچ دستور ترمینالی لازم نیست.
