# نصب و ارتقای بیوتی پل ۰٫۴

این بسته سورس Laravel و پوشه `vendor` را دارد. فایل APK آماده نیست؛ APK هر سالن بعداً با نام، تصویر و دامنه همان سالن روی worker اندروید ساخته می‌شود.

## نصب سرور

1. PHP **8.4.x** با `mbstring`, `PDO` و درایور دیتابیس، `openssl`, `fileinfo`, `gd`, `curl`, `xml` نصب کنید. SQLite برای نصب ساده یا PostgreSQL برای تولید قابل استفاده است. cron و worker صف نیز لازم‌اند.
2. بسته را **بیرون مسیر عمومی وب** باز کنید. Document root وب‌سرور را دقیقاً روی پوشه `public/` بگذارید؛ `install.php`, `.env`, `storage/` و `vendor/` نباید از HTTP قابل دسترسی باشند. برای دامنه اصلی HTTPS معتبر برقرار کنید.
3. در پوسته سرور، از پوشه اصلی برنامه اجرا کنید:

```bash
php install.php --check
php install.php --install --url=https://beautypol.com --email=admin@beautypol.com
```

رمز مدیر کل در ترمینال پرسیده می‌شود؛ در محیط نصب خودکار آن را فقط از متغیر محیطی `BEAUTYPOL_INSTALL_PASSWORD` با حداقل ۱۲ نویسه بدهید، سپس متغیر را حذف کنید. رمز را در آرگومان خط فرمان، لاگ یا فایل منتشر نکنید. نصب اولیه `.env` با تنظیمات تولید و پایگاه SQLite می‌سازد. برای PostgreSQL، پیش از `--install` فایل `.env` را از `.env.example` بسازید و `APP_ENV=production`, `APP_DEBUG=false`, `APP_URL=https://...`, `CENTRAL_HOSTS=...`, `SESSION_SECURE_COOKIE=true` و اطلاعات پایگاه را تنظیم کنید. فایل `.env` باید فقط برای کاربر سرویس قابل خواندن باشد.

4. `php artisan schedule:run` را هر دقیقه با cron اجرا کنید و worker `php artisan queue:work --queue=sms,default --tries=1 --timeout=60` را با مدیر سرویس نگه دارید. برای سایت‌هایی با ترافیک، SQLite را با PostgreSQL جایگزین کنید.
5. ورود مدیر: `https://beautypol.com/login`. حساب مدیر با همان ایمیل و رمز نصب ساخته می‌شود. SMS به صورت پیش‌فرض خاموش است. کلید IPPanel برای سامانه و هر سالن جداگانه از پنل ذخیره می‌شود؛ پیش از فعال کردن `SMS_ENABLED=true` الگوهای ارسال را در IPPanel تنظیم و ارسال واقعی را آزمایش کنید.

## خروجی اپلیکیشن

بر روی ماشین worker، JDK **17**، Gradle **8.13**، Android SDK platform 36 و build-tools 36.0.0 نصب کنید. `ANDROID_HOME` و `ANDROID_GRADLE` را در `.env` تنظیم کنید. دسترسی خواندن/نوشتن به storage خصوصی و دسترسی به همان دیتابیس لازم است. `APK_BUILDS_ENABLED=true` و worker `php artisan queue:work --queue=android --tries=1 --timeout=1800` را فعال کنید. پنل قبل از ثبت درخواست، محیط ساخت را بررسی می‌کند؛ برای معماری worker جدا، باید همین پیش‌نیازها روی میزبان وب نیز حاضر باشند یا بررسی محیط برای worker مشترک طراحی شود. کلید امضای هر سالن در `storage/app/private/signing/` قرار می‌گیرد؛ از `.env`, دیتابیس و این پوشه با هم نسخه پشتیبان رمزگذاری‌شده بگیرید. تغییر کلید امضا مانع به‌روزرسانی اپ در مارکت می‌شود. فایل APK/AAB را پیش از انتشار روی دستگاه واقعی و در مارکت آزمایش کنید.

## خطا و ارتقا

`php install.php --check` کمبود افزونه، vendor و دسترسی نوشتن را با نام مرحله نشان می‌دهد. خطای اتصال دیتابیس یا مهاجرت، مرحله و مسیر لاگ `storage/logs/laravel.log` را نشان می‌دهد و اطلاعات محرمانه را در کنسول چاپ نمی‌کند. به کاربران عمومی `APP_DEBUG=true` نشان ندهید.

قبل از ارتقا از `.env`, دیتابیس و `storage/app/private/` نسخه پشتیبان بگیرید، سپس فایل‌های برنامه را جایگزین کنید؛ **`.env`, فایل دیتابیس، کلیدهای امضا و فایل‌های بارگذاری‌شده را بازنویسی نکنید**. `php install.php --upgrade` فقط مهاجرت‌ها و بذر پلن‌ها را اجرا می‌کند و حساب مدیر یا APP_KEY را بازسازی نمی‌کند. پس از ارتقا worker ها را restart کنید.

## تغییر نام از نسخه قبلی

در ارتقا، نام نمایشی در فایل `.env` به «بیوتی پل» تغییر می‌کند؛ `APP_KEY`، داده‌ها، نام بسته اپ‌های منتشرشده و کلید امضا حفظ می‌شوند. اگر از دامنه جدید `beautypol.com` استفاده می‌کنید، **بعد از تنظیم DNS و HTTPS معتبر**، در `.env` مقادیر `APP_URL=https://beautypol.com` و `CENTRAL_HOSTS=beautypol.com` را تنظیم کنید و کش تنظیمات را پاک کنید. شناسه‌های فنی قدیمیِ مهاجرت‌ها و رکوردهای DNS برای سازگاری با نصب‌های قبلی همچنان پشتیبانی می‌شوند.
