Add digital catalog with shareable flipbook and ktg.montzar.ir deploy files.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-19 14:37:49 +03:30
co-authored by Cursor
commit a8374e7d6c
54 changed files with 8462 additions and 0 deletions
+167
View File
@@ -0,0 +1,167 @@
# استقرار کاتالوگ — `ktg.montzar.ir`
هاست مشترک مونتایم: `185.50.38.53` (SSH پورت `3031`، کاربر `montime`)
دامنه: `https://ktg.montzar.ir`
پورت داخلی: `3020` (۳۰۰۰ مونتایم، ۳۰۰۱ فوری‌سند، ۳۰۱۰ سوپرادمین)
دیتابیس Postgres بقیه پروژه‌ها را لمس نکنید. این اپ SQLite خودش را در `/var/www/ktg/data` دارد.
---
## کارهایی که روی لپ‌تاپ شماست
### ۱) بستهٔ ارسال را بسازید
در PowerShell:
```powershell
cd E:\projeha\DigitalCatalog
if (Test-Path catalog-deploy.tar) { Remove-Item catalog-deploy.tar }
tar --exclude=node_modules --exclude=dist --exclude=storage --exclude=data --exclude=.env --exclude=catalog-deploy.tar -cvf catalog-deploy.tar .
```
### ۲) آپلود روی سرور
رمز SSH همانی است که برای سوپرادمین/مونتایم می‌زنید:
```powershell
scp -P 3031 catalog-deploy.tar montime@185.50.38.53:/tmp/catalog-deploy.tar
```
بعد از آپلود، فایل `catalog-deploy.tar` روی ویندوز را می‌توانید پاک کنید.
---
## کارهایی که روی سرور است
SSH:
```bash
ssh -p 3031 montime@185.50.38.53
```
### ۳) پوشه و باز کردن فایل‌ها
```bash
sudo mkdir -p /var/www/ktg
sudo chown montime:montime /var/www/ktg
cd /var/www/ktg
tar -xvf /tmp/catalog-deploy.tar
rm /tmp/catalog-deploy.tar
```
اگر پوشه از قبل چیزی داشت و آپدیت است، `storage` و `data` را پاک نکنید.
### ۴) پورت آزاد باشد
```bash
pm2 list
ss -tlnp | grep -E '3000|3001|3010|3020' || netstat -tlnp | grep -E '3000|3001|3010|3020'
```
۳۰۲۰ باید خالی باشد. اگر اشغال بود بگویید تا پورت عوض شود؛ خودتان پورت بقیه را عوض نکنید.
### ۵) فایل `.env` سرور
```bash
cd /var/www/ktg
cp deploy/.env.production.example .env
nano .env
```
باید دقیقاً این باشد (مگر پورت عوض شده باشد):
```env
NODE_ENV=production
PORT=3020
API_PORT=3020
PUBLIC_BASE_URL=https://ktg.montzar.ir
STORAGE_DIR=/var/www/ktg/storage
DATABASE_PATH=/var/www/ktg/data/catalogs.sqlite
```
دیتابیس Postgres و `DATABASE_URL` سوپرادمین را اینجا نگذارید.
### ۶) نصب، بیلد، پوشه‌ها
Node ۲۰ یا جدیدتر.
```bash
cd /var/www/ktg
npm ci
npm run build
mkdir -p storage data
```
### ۷) PM2 — فقط این پروسهٔ جدید
پروسه‌های `montime` / `superadmin-api` / فوری‌سند را stop نکنید.
```bash
pm2 start /var/www/ktg/deploy/ecosystem.config.cjs
pm2 save
pm2 list
curl -sI http://127.0.0.1:3020
```
باید `HTTP/1.1 200` بیاید. اگر خطا بود: `pm2 logs ktg-catalog --lines 80`
### ۸) Nginx — فقط سایت جدید
```bash
sudo cp /var/www/ktg/deploy/nginx-ktg.montzar.ir.conf /etc/nginx/sites-available/ktg.montzar.ir
sudo ln -sf /etc/nginx/sites-available/ktg.montzar.ir /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
```
اگر `nginx -t` خطا داد، فایل‌های `adm.montzar.ir` را ویرایش نکنید؛ بگویید خروجی را بفرستید.
### ۹) گواهی SSL
DNS این زیردامنه از قبل مثل `adm.montzar.ir` روی همان IP است. اگر مرورگر هنوز به سرور نرسید، در پنل دامنه تأیید کنید `ktg.montzar.ir` رکورد `A` مثل `adm.montzar.ir` دارد.
```bash
sudo certbot --nginx -d ktg.montzar.ir
```
Certbot خودش HTTPS را به همین vhost اضافه می‌کند، نه به سایت‌های دیگر.
### ۱۰) تست نهایی
1. `https://ktg.montzar.ir` صفحهٔ ساخت فارسی
2. یک PDF/تصویر کوچک بسازید
3. QR و لینک باید با `https://ktg.montzar.ir/c/...` باشد نه localhost
4. لینک مشاهده در تب دیگر باز شود
کاتالوگ‌های لوکال (`127.0.0.1:3000`) روی این دامنه کار نمی‌کنند؛ باید روی سرور دوباره ساخته شوند.
---
## آپدیت بعدی کد
روی ویندوز دوباره مرحلهٔ ۱ و ۲. روی سرور:
```bash
cd /var/www/ktg
# اگر tar روی فایل‌های قبلی unpacked می‌شود:
tar -xvf /tmp/catalog-deploy.tar
npm ci
npm run build
pm2 restart ktg-catalog
```
پوشه‌های `storage` و `data` و فایل `.env` را پاک نکنید.
---
## تداخل نداشتن (یادآوری)
| این پروژه | بقیه — دست نزنید |
|---|---|
| دامنه `ktg.montzar.ir` | `adm.montzar.ir` و دامنهٔ مونتایم |
| پورت ۳۰۲۰ | ۳۰۰۰ / ۳۰۰۱ / ۳۰۱۰ |
| PM2 نام `ktg-catalog` | پروسه‌های موجود |
| `/var/www/ktg` | `/var/www/superadmin` و پوشهٔ مونتایم |
| SQLite داخل `data/` | Postgres |
لاگین و پروفایل اگر بعداً آمد، باز هم داخل همین دامنه و همین پوشه است؛ به دیتابیس Nest وصل نمی‌شود.