# نشر بوصلة على VPS (أوبونتو) — خطوات منفذة بالترتيب

**تنبيه مهم:** الاستضافة المشتركة (Shared Hosting) بـ cPanel من Namecheap **لا تشغّل هذا التطبيق** —
هي PHP/MySQL فقط: بلا Node.js طويل التشغيل وبلا PostgreSQL. البديل من نفس Namecheap:
**VPS** (Pulsar أو أعلى) بنظام Ubuntu — أو أي VPS آخر (Hetzner/DigitalOcean).

## 1) على الـVPS (مرة واحدة)
```
ssh root@SERVER_IP
adduser bousla && usermod -aG sudo bousla
su - bousla
sudo apt update && sudo apt install -y git
git clone <repo> /tmp/setup-helper && bash /tmp/setup-helper/deploy/server-setup.sh YOUR_DOMAIN
```
السكربت يثبّت PostgreSQL + Node 20 + Nginx + HTTPS، وينشئ القاعدة والمستخدم ويطبع كلمة المرور مرة واحدة.

## 2) رفع الكود
```
sudo mkdir -p /var/www/bousla && sudo chown bousla:bousla /var/www/bousla
# من جهازك:  rsync -av --exclude node_modules --exclude .next --exclude .git bousla-release/ bousla@SERVER_IP:/var/www/bousla/
cd /var/www/bousla && npm ci
cd apps/web && npx next build
```

## 3) ملف البيئة
```
cp /tmp/setup-helper/deploy/.env.production.example apps/api/.env
nano apps/api/.env     # ضع كلمة مرور القاعدة المطبوعة من السكربت
```

## 4) الترحيلات والتشغيل الدائم
```
cd /var/www/bousla && npm run db:migrate
sudo cp deploy/bousla-api.service deploy/bousla-web.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now bousla-api bousla-web
```

## 5) Nginx
```
sudo cp deploy/nginx-bousla.conf /etc/nginx/sites-available/bousla
sudo nano /etc/nginx/sites-available/bousla   # ضع نطاقك مكان YOUR_DOMAIN
sudo ln -s /etc/nginx/sites-available/bousla /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d YOUR_DOMAIN    # HTTPS
```

## 6) التحقق
- https://YOUR_DOMAIN/login يعمل وشهادة سارية
- `curl -s https://YOUR_DOMAIN/api/health` → ok
- منفذ 4000 مغلق خارجيًا: `ufw status`
- نسخة احتياطية: `bash scripts/backup.sh` + cron يومي (انظر DEPLOYMENT.md)

## 7) التراجع عن إصدار
- الكود: `git checkout <previous-tag> && npm ci && npm run build && sudo systemctl restart bousla-api bousla-web`
- القاعدة: `bash scripts/restore-drill.sh backups/<أحدث نسخة سليمة>.dump` ثم الاسترجاع الفعلي بنفس الأداة بعد إيقاف الخدمتين
