# Цагдаагийн Мэдэгдэл Систем - Үйлдвэрлэлийн Скриптүүд
# Police Notification System - Production Deployment Scripts

Энэ баримтовна үйлдвэрлэлийн сүргүүлэлтийн автоматик скриптүүдийн хэрэглээ зөвлөмжүүдийг дүрсэлнэ.

---

## 📋 Боломжтой Скриптүүд

### 1. 📦 `setup.sh` / `setup.bat` - Автоматик Эхлүүлэлт

Системийн анхны тохиргоо болон эхлүүлэлтийг автоматжуулсан скрипт.

#### Linux / macOS хэрэглэх:

```bash
chmod +x setup.sh
./setup.sh
```

**Скрипт гүйцэтгэх зүйлүүд:**
1. Node.js хамаарлуудыг суулгах
2. .env файл үүсгэх
3. Өгөгдлийн сан үүсгэх
4. Анхны системийн тохиргоо
5. Автоматик сэргээлтийн эхлүүлэлт

#### Windows хэрэглэх:

```bash
setup.bat
```

**Интерактив урам:**
- MySQL сервер хост
- MySQL хэрэглэгч нэр
- MySQL нууц үг
- Өгөгдлийн сан нэр

---

### 2. 💾 `backup-db.sh` / `backup-db.bat` - Өгөгдлийн Сан Бэкап

Өгөгдлийн санг ямар ч цаг сэргээлтийн файлд хорооних.

#### Linux / macOS:

```bash
chmod +x backup-db.sh

# Бэкап хийх
./backup-db.sh

# Бэкап жагсаалт
./backup-db.sh -list

# Бэкап сэргээх
./backup-db.sh -restore backups/police_notification_db_YYYYMMDD_HHMMSS.sql

# Хуучин бэкап устгах (7 өдөрөөс)
./backup-db.sh -clean

# Мэдээлэл авах
./backup-db.sh -h
```

#### Windows:

```bash
REM Бэкап хийх
backup-db.bat

REM Бэкап жагсаалт
backup-db.bat -list

REM Бэкап сэргээх
backup-db.bat -restore backups\police_notification_db_YYYYMMDD_HHMMSS.sql

REM Хуучин бэкап устгах
backup-db.bat -clean

REM Мэдээлэл авах
backup-db.bat -h
```

#### Бэкапын Шалгалтын Жагсаалт:

```bash
ls -lh backups/           # Бэкап файлүүдийг харах
du -sh backups/           # Бэкапын нийт хэмжээ
```

---

### 3. ⚙️ `ecosystem.config.js` - PM2 Сүргүүлэлт

PM2 процесс менежерийн тохиргоо файл. Үйлдвэрлэлийн сүргүүлэлтийг сүргүүлэх.

#### PM2 суулгах:

```bash
npm install -g pm2
pm2 --version
```

#### PM2 ашиглан сервер асаах:

```bash
# Энгийнээр асаах
pm2 start ecosystem.config.js

# Үйлдвэрлэлийн режимээр
pm2 start ecosystem.config.js --env production

# Бүх CPU ашиглан (8 core = 8 үйлдвэрлэлтийн процесс)
# (Аль хэдийн tus-д "instances": "max" байна)
```

#### PM2 команд:

```bash
# Процессийн жагсаалт
pm2 list
pm2 status

# Логүүдийг харах
pm2 logs                           # Бүх логүүдийн шалгалт
pm2 logs police-notification-system
pm2 logs --lines 50                # Сүүлийн 50 мөр

# Процессийн мониторинг
pm2 monit                          # Real-time CPU/память

# Процессийг сүргүүлэх
pm2 restart all                    # Дахин эхлүүлэлт
pm2 reload all                     # Zero-downtime restarting
pm2 stop all                       # Зогсоох
pm2 start all                      # Эхлүүлэх
pm2 delete all                     # Устгалт

# Системийн эхлүүлэлтээр PM2 ажиллуулах
pm2 startup                        # Startup скрипт үүсгэх
pm2 startup -u ubuntu --hp /home/ubuntu  # Ubuntu дээр
pm2 save                           # Сүүлийн процессийн бэкап

# Сүүлийн процессийг сэргээх
pm2 resurrect

# PM2 хүргүүлэх
pm2 kill                           # PM2 демон хүргүүлэх
pm2 unstartup                      # Startup hook хүргүүлэх
```

#### Үйлдвэрлэлийн тохиргоо (ecosystem.config.js):

```javascript
{
  apps: [{
    name: 'police-notification-system',
    script: 'server.js',
    instances: 'max',           // Бүх CPU core ашиглах
    exec_mode: 'cluster',       // Cluster MODE
    env: {
      NODE_ENV: 'production',
      PORT: 5000
    },
    max_memory_restart: '500M', // Санах ойн хязгаар
    error_file: 'logs/pm2-error.log',
    out_file: 'logs/pm2-out.log'
  }]
}
```

---

## 🔄 Үйлдвэрлэлийн Үйл Ажиллагаа

### 📅 Өдөр бүрийн Үйл Ажиллагаа

```bash
# Сервер статусын шалгалт
pm2 status

# Логүүдийн шалгалт
pm2 logs police-notification-system --lines 20

# Өгөгдлийн санн руу холбоо баталгаажуулалт
mysql -h localhost -u root -p -e "USE police_notification_db; SELECT COUNT(*) FROM users;"
```

### 🗓️ Долоо хоног бүрийн Үйл Ажиллагаа

```bash
# Өгөгдлийн сан бэкап хийх
./backup-db.sh

# Сүүлийн бэкапны хүмүүлт баталгаажуулалт
ls -lh backups/ | head -5

# MySQL нөхцөл байдлыг шалгах
mysqladmin -u root -p ping
```

### 📆 Сар бүрийн Үйл Ажиллагаа

```bash
# Node.js, npm нөөцийн шинэчлэлт баталгаажуулалт
node --version
npm --version

# Хуучин бэкап чистить
./backup-db.sh -clean

# Серверийн үйлдвэрлэлийн мониторинг
pm2 monit

# Логирование файлүүдийг хэмжээ өөрчлөх
du -sh logs/
du -sh uploads/
```

---

## 🚀 Развертывания Процесс

### Сэргээлтийн Процесс (Хэрэвэй амжилтгүй):

#### 1. Өмнөх Версийнээс Сэргээлт

```bash
# Бэкап жагсаалт харах
./backup-db.sh -list

# Өмнөх өгөгдлийн сан сэргээх
./backup-db.sh -restore backups/police_notification_db_20260514_140000.sql

# Сервер сэргээлт
pm2 restart police-notification-system
```

#### 2. Үйлдвэрлэлийн Логүүдийн Шалгалт

```bash
pm2 logs police-notification-system --lines 50
cat logs/app.log | tail -50
```

---

## ⚠️ Аюулгүй байдлын Сэргээлтүүд

### 🔐 .env Файл Хамгаалалт

```bash
# Linux/Mac дээр хэрэглэгчийн эрхийг өндөрлөх
chmod 600 .env

# Windows дээр (PowerShell as Admin)
icacls .env /inheritance:r /grant:r "%USERNAME%:F"
```

### 📁 Файлын Өмнөхийг Үүсгэх

```bash
# Үйлдвэрлэлийн сургалт эхлүүлэхээс өмнө
cp -r . ../backup-production-$(date +%Y%m%d_%H%M%S)
```

---

## 🛠️ Нийтлэг Командууд

### Сервер Алдагдал Диагностика

```bash
# Портыг сонсож байгаа процессийг олох
lsof -i :5000          # Linux/Mac
netstat -ano | findstr :5000  # Windows

# MySQL холболтыг шалгах
mysql -h localhost -u root -p -e "SELECT 1"

# Өргөн өлслөлтийн хөдөлмөрийг шалгах
curl -I http://localhost:5000
```

### Үйлдвэрлэлийн Мониторинг

```bash
# CPU болон санах ойн хэрэглээ
pm2 monit

# Процессийн хүүхэлтэй
ps aux | grep node

# Сүргүүлэлтийн системийн үзүүлэлтүүд
free -h              # RAM Linux
vm_stat              # RAM macOS
tasklist /v          # RAM Windows
```

---

## 📊 Бэкап Стратеги

### Автоматик Бэкап (Cron - Linux/Mac)

```bash
# Crontab засварлах
crontab -e

# Өдөр бүрт 2 цаг дээр бэкап хийх
0 2 * * * /path/to/deploy/backup-db.sh

# Долоо хоног бүрт (Ямбүү сүүлийн өдөр) бэкап хийх
0 3 * * 0 /path/to/deploy/backup-db.sh

# Сар бүрт (1-р өдөрт) бэкап хийх
0 4 1 * * /path/to/deploy/backup-db.sh
```

### Бэкап Хадгалалт

```bash
# Яаж гүйцэтгэх эмэгтэй (7 өдөр)
./backup-db.sh -clean

# Amazon S3-д хадгалалтыг сүргүүлэх (заавал)
# sync backups/ s3://my-bucket/police-backups/
```

---

## 🔍 Асуудлыг Засах Нэрээ

### PM2 Үйл ажиллагаа анжуулт
- Процесс нээлттэй байгаа эсэх: `pm2 list`
- Логүүдийн алдаа: `pm2 logs --lines 50`

### Node.js Модулийн Асуудал
- Дахин суулгах: `npm install`
- Цэвэрлэх эсвэл сэргээлт: `npm cache clean --force`

### MySQL Холбоосын Асуудал
- Статусыг шалгах: `mysqladmin -u root -p status`
- Хэрэглэгчийн эрхийг баталгаажуулалт: `SHOW GRANTS FOR 'root'@'localhost';`

---

## ✅ Баталгаажуулалт Шалгалтын Жагсаалт

Үйлдвэрлэлийн скриптүүдийг гүйлгүүлэхээс өмнө:

- [ ] Node.js v14+ суулгагдсан
- [ ] MySQL сервер ажиллаж байгаа
- [ ] pm2 суулгагдсан (опционал)
- [ ] .env файл байгаа болон бүх утгалаа оруулсан
- [ ] database.sql байгаа
- [ ] logs/ болон backups/ директор үүсгэгдсэн
- [ ] npm install амжилттай
- [ ] Сервер асааж болно (npm start)

---

## 🎯 Дараагийн Үйл Ажиллагаа

1. **Сервер асаах:**
   ```bash
   pm2 start ecosystem.config.js
   pm2 startup
   pm2 save
   ```

2. **Логүүдийг сүргүүлэх:**
   ```bash
   pm2 logs
   ```

3. **Өгөгдлийн сан бэкап хийх:**
   ```bash
   ./backup-db.sh
   ```

4. **Үйлдвэрлэлийн үзүүлэлтүүдийг сүргүүлэх:**
   ```bash
   pm2 monit
   ```

---

**Үйлдвэрлэлийн Скриптүүдийн Баримт** v1.0  
**Сүүлийн Шинэчлэлт:** 2026-05-15  
**Төлөв:** ✅ Үйлдвэрлэлд бэлэн
