# استقرار کاتالوگ — `ktg.montzar.ir` هاست مشترک مونتایم: `185.50.38.53` (SSH پورت `3031`، کاربر `montime`) دامنه: `https://ktg.montzar.ir` پورت داخلی: `3020` (۳۰۰۰ مونتایم، ۳۰۰۱ فوری‌سند، ۳۰۱۰ سوپرادمین) دیتابیس Postgres بقیه پروژه‌ها را لمس نکنید. این اپ SQLite خودش را در `/var/www/ktg/data` دارد. --- کد از Gitea کلون می‌شود: `http://get.feep.ir/Mahdi/digitalcatalog.git` --- ## کارهایی که روی سرور است SSH: ```bash ssh -p 3031 montime@185.50.38.53 ``` ### ۱) کلون ```bash sudo mkdir -p /var/www/ktg sudo chown montime:montime /var/www/ktg git clone http://get.feep.ir/Mahdi/digitalcatalog.git /var/www/ktg ``` اگر Gitea خصوصی است، همان یوزر/توکن را بزنید. ### ۲) پورت آزاد باشد ```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`) روی این دامنه کار نمی‌کنند؛ باید روی سرور دوباره ساخته شوند. --- ## آپدیت بعدی کد روی ویندوز `git push`. روی سرور: ```bash cd /var/www/ktg git pull 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 وصل نمی‌شود.