# Цагдаагийн Мэдэгдэл Систем - Үйлдвэрлэлийн Баталгаажуулалт

Энэ баримт бичиг системийг үйлдвэрлэлийн сервер дээр байршуулахаас өмнө шалгадаг алхамуудыг дүрсэлнэ.

## Баталгаажуулалтын Жагсаалт

### 1. Системийн Шаардлага
- [ ] Node.js v14 эсвэл түүнээс дээш хэвтээ суулгагдсан
- [ ] MySQL 5.7 эсвэл MariaDB 10.3+ суулгагдсан
- [ ] npm пакетийн менежер суулгагдсан
- [ ] npm install амжилттай ажилласан

### 2. Өгөгдлийн Сан
- [ ] MySQL сервер ажиллаж байгаа
- [ ] Администратор хэрэглэгч байна
- [ ] Өгөгдлийн сан үүсгэлээ
- [ ] Бүх таблицуудыг үүсгэлээ
- [ ] Анхны өгөгдөлсүүдийг оруулсан
- [ ] Индексүүд үүсгэлээ

### 3. Окружа (Environment)
- [ ] .env файлийг .env.example-ээс хууслаа
- [ ] DB_HOST, DB_USER, DB_PASSWORD зөвтөө
- [ ] JWT_SECRET аль хэдийн тохиргоо хийлээ (29+ тэмдэгт)
- [ ] HCAPTCHA_SECRET тохиргоо хийлээ
- [ ] SMTP параметрүүд зөвтөө (имэйл илгээхийн тулд)
- [ ] APP_BASE_URL домэйнээ заасан

### 4. Серверийн Тохиргоо
- [ ] Port 5000 эсвэл заасан портоор ашиглах боломжтой
- [ ] Файл салгах директори үүсгэлээ (uploads/)
- [ ] Логирование директори үүсгэлээ (logs/)
- [ ] Бүх файлуудыг Node.js процесс уншиж болдог

### 5. Кодын Баталгаажуулалт
- [ ] package.json байгаа
- [ ] server.js анхнаа байгаа
- [ ] routes/ директори байгаа
- [ ] middleware/ директори байгаа
- [ ] public/ директори байгаа
- [ ] utils/ директори байгаа
- [ ] config/ директори байгаа

### 6. Аюулгүй байдал
- [ ] JWT_SECRET хүнээс ажиглагдахгүй байна
- [ ] SMTP_PASSWORD хүнээс ажиглагдахгүй байна
- [ ] DB_PASSWORD хүнээс ажиглагдахгүй байна
- [ ] .env файл git-ийн .gitignore-д байгаа
- [ ] SSL сертификат суулгасан (HTTPS)
- [ ] Firewall портыг баганаж байгаа

### 7. Серверийн Эхлүүлэлт
```bash
# Хамаарлуудыг суулгах
npm install

# Тохиргоо хийх (Mac/Linux)
chmod +x setup.sh
./setup.sh

# Тохиргоо хийх (Windows)
setup.bat

# Сервер асаах
npm start
```

### 8. Сервер Асаалтын Баталгаа
- [ ] Сервер localhost:5000 дээр сонсож байгаа
- [ ] Өгөгдлийн санн руу холбоо амжилттай
- [ ] Анхны администратор цаашилал бүтээгдсэн
- [ ] Нөхцөлтэй хэрвүүлэгч бүтээгдсэн
- [ ] Аюулгүй байдлын токен гаргаж болно

### 9. Имэйл Тохиргоо
- [ ] SMTP серверийн мэдээлэл зөвтөө
- [ ] Туршилтын имэйл илгээж болно
- [ ] Бүртгэлийн түүхүүд имэйл руу хүрнэ
- [ ] Мэдэгдлүүдийн уведомлялга имэйл руу хүрнэ

### 10. Бэкап ба Сэргээлэлт
- [ ] Өгөгдлийн санг урьдчилсан сэргээлтээ хийв
- [ ] uploads/ буюу upload файлуудын сэргээлтээ хийв
- [ ] Сэргээлтийн үйлдвэрлэл баримт бичиг байгаа
- [ ] Үйл ажиллагааны сүрвэлжилэл байгаа

## Үйлдвэрлэлийн Развертывания Процесс

### 1-р Үе: Подготовка
```bash
# Хамаарлуудыг шинэчлэх
npm install --production

# Осумасалаарвохомиэ
npm audit fix
```

### 2-р Үе: Өгөгдлийн Сан
```bash
# Өгөгдлийн сан үүсгэх
mysql -h localhost -u root -p < database.sql

# Баталгаажуулалт
mysql -h localhost -u root -p -e "USE police_notification_db; SHOW TABLES;"
```

### 3-р Үе: Окружа
```bash
# .env файлийг бүтээх
cp .env.example .env

# .env-д үнэнцэлийг оруулах (текст редакторд)
nano .env
```

### 4-р Үе: Сервер Эхлүүлэлт
```bash
# Үйлдвэрлэлийн режимээр асаах
NODE_ENV=production npm start

# эсвэл
npm run start
```

### 5-р Үе: Баталгаажуулалт
Вэб серверийг нээх:
```
http://your_server_ip:5000
```

Администратор логин:
- Нэр: admin
- Нууц үг: admin123 (анхны - ШИНЭЧЛЭХ!)

## Нийтлэг Асуудлууд

### Өгөгдлийн санн руу холбоо ямар байхгүй
```
Error: connect ECONNREFUSED 127.0.0.1:3306
```
- MySQL сервер ажиллаж байгаа эсэх шалгана
- DB_HOST, DB_USER, DB_PASSWORD сайн байгаа эсэх
- MySQL сервер запуск хийн байгаа эсэх

### JWT_SECRET алдаа
```
Error: jwt must be provided
```
- JWT_SECRET .env-д байгаа эсэх
- JWT_SECRET 20+ тэмдэгтээс дээш байгаа

### Port аль хэдийн ашиглагдаж байна
```
Error: listen EADDRINUSE :::5000
```
- PORT .env-д өөр утгаар оруулах
- эсвэл бусад процессийг таслах

## Үйлдвэрлэлийн Зөвлөмжүүд

1. **PM2 ашиглах** - Node процессийг сүргүүлэх
   ```bash
   npm install -g pm2
   pm2 start server.js --name "police-system"
   pm2 startup
   pm2 save
   ```

2. **Nginx ашиглах** - Reverse proxy нь порт 5000 өмнө
   ```nginx
   server {
       listen 80;
       server_name your_domain.com;
       location / {
           proxy_pass http://localhost:5000;
       }
   }
   ```

3. **SSL сертификат** - HTTPS бүхийлэх
   ```bash
   certbot --nginx -d your_domain.com
   ```

4. **Хөгжим нөхцөл** - Логрүүдийн масш даам хийх
   ```bash
   # logs/ директорийг үүсгэх
   mkdir -p logs
   
   # лог эргүүлэлтийг сүргүүлэх
   logrotate logs/
   ```

5. **Үйл ажиллагаа сүргүүлэх** - Систем үзүүлэлтүүдийг сүргүүлэх
   - Модульдээ PM2 монитор сүргүүлэх
   - Өгөгдлийн сан бэкап хийж байх
   - Логүүдийг жохог байлгах

## Дараагийн Алхамууд

1. Администратор нууц үгийг сэргээх
2. SMTP имэйл параметрийг туршилтын болоход туршилт хийх
3. SSL сертификат суулгах
4. DNS нэмэлтийг оруулах
5. Hcaptcha продакшны ключ авах болон оруулах
6. Үйлдвэрлэлийн мониторинг сүргүүлэх

---

**Шалалт дуусган дараа сервер үйлдвэрлэл төлөвт ажиллаж болно.**
