# راهنمای استقرار نسخه آزمایشی امن‌شده روی cPanel

> این بسته مرحله اول سخت‌سازی است. تا زمان تکمیل کنترل دسترسی واحدمحور و گردش دبیرخانه، برای اسناد محرمانه و استفاده عملیاتی سازمانی منتشر نشود.

## پیش‌نیاز
- cPanel با قابلیت **Setup Node.js App** و CloudLinux Passenger
- Node.js نسخه 20 یا 22 (ترجیحاً نسخه LTS ارائه‌شده توسط میزبان)
- زیردامنه اختصاصی مانند `letters.example.com`

## ۱) آماده‌سازی
1. در cPanel > File Manager وارد Home Directory شوید، نه `public_html`.
2. پوشه‌ای به نام `nameh` بسازید و محتویات این بسته را مستقیماً داخل آن Extract کنید؛ فایل `server.js` باید در ریشه همین پوشه باشد.
3. کنار آن (خارج از `public_html`) پوشه `nameh-data` بسازید.
4. از نسخه قبلی `db.json` و پوشه `files` نسخه پشتیبان مستقل بگیرید. دیتابیس قبلی را روی این نسخه آزمایشی کپی نکنید مگر اینکه مهاجرت آن را جداگانه آزمایش کرده باشید.

## ۲) ساخت برنامه Node.js
در cPanel > Setup Node.js App > Create Application:
- Node.js version: 20 یا 22
- Application mode: Production
- Application root: `nameh`
- Application URL: زیردامنه اختصاصی
- Application startup file: `server.js`

## ۳) متغیرهای محیطی
در بخش Environment Variables این متغیرها را تعریف کنید:

| نام | مقدار |
|---|---|
| `NODE_ENV` | `production` |
| `ADMIN_USER` | نام کاربری اولیه اختصاصی، حداقل ۳ نویسه |
| `ADMIN_PASS` | رمز تصادفی اختصاصی حداقل ۱۲ نویسه، شامل حرف و عدد |
| `DATA_DIR` | مسیر مطلق مانند `/home/CPANELUSER/nameh-data` |
| `FORCE_HTTPS` | پس از فعال‌سازی SSL و اطمینان از تشخیص HTTPS، مقدار `1` |

**مهم:** رمز اولیه فقط هنگام ساخته‌شدن دیتابیس جدید مصرف می‌شود. آن را در فایل یا تیکت عمومی ننویسید. اگر دیتابیس موجود باشد، تغییر Environment Variable رمز ذخیره‌شده را تغییر نمی‌دهد.

## ۴) SSL و اجرا
1. از cPanel > SSL/TLS Status برای زیردامنه AutoSSL را فعال کنید.
2. برنامه را Restart کنید.
3. آدرس HTTPS زیردامنه را باز کنید.
4. لاگ برنامه را بررسی کنید. اگر پیام نبودن یا ضعیف بودن `ADMIN_USER`/`ADMIN_PASS` دیدید، متغیرها را اصلاح و Restart کنید.

## ۵) پشتیبان‌گیری
- قبل از هر ارتقا، برنامه را متوقف و از کل `nameh-data` کپی بگیرید.
- نسخه پشتیبان را در همان پوشه عمومی سایت قرار ندهید.
- بازیابی را ابتدا روی یک برنامه آزمایشی جداگانه انجام دهید.
- این نسخه هنوز زمان‌بندی پشتیبان‌گیری و بازیابی درون‌برنامه‌ای ندارد؛ از ابزار Backup هاست یا cron مورد تأیید میزبان استفاده کنید.

## ۶) محدودیت‌های شناخته‌شده این بسته
- ذخیره‌سازی همچنان JSON است و به SQLite مهاجرت داده نشده است.
- کنترل دسترسی مبتنی بر واحد، نقش مسئول دبیرخانه، ارجاع بین واحدها و تاریخچه گردش مکاتبات هنوز در این بسته پیاده‌سازی نشده‌اند.
- برخی APIهای فعلی هنوز نیازمند بازطراحی کامل مجوزها و آزمون دسترسی هستند.
- این نسخه برای تست فنی روی cPanel است، نه استقرار نهایی با اطلاعات محرمانه.
