Files
sklad_legacy/DEPLOYMENT.md
2025-08-22 19:26:43 +03:00

368 lines
9.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🚀 Инструкции по развертыванию в продакшн
## 📋 Предварительные требования
### Системные требования
- **Node.js** 18+ LTS
- **MySQL** 8.0+
- **Nginx** (рекомендуется для прокси)
- **PM2** (для управления процессами)
### Минимальные характеристики сервера
- **CPU**: 2 ядра
- **RAM**: 4 GB
- **Диск**: 20 GB SSD
- **Сеть**: 100 Mbps
## 🔧 Установка и настройка
### 1. Подготовка сервера
```bash
# Обновление системы
sudo apt update && sudo apt upgrade -y
# Установка Node.js
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt-get install -y nodejs
# Установка MySQL
sudo apt install mysql-server -y
sudo mysql_secure_installation
# Установка PM2
sudo npm install -g pm2
# Установка Nginx
sudo apt install nginx -y
```
### 2. Настройка базы данных
```sql
-- Подключение к MySQL
sudo mysql
-- Создание базы данных
CREATE DATABASE warehouse_manager CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- Создание пользователя
CREATE USER 'warehouse_user'@'localhost' IDENTIFIED BY 'YOUR_STRONG_PASSWORD';
GRANT ALL PRIVILEGES ON warehouse_manager.* TO 'warehouse_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
```
### 3. Настройка приложения
```bash
# Клонирование проекта
git clone https://github.com/your-repo/warehouse-manager.git
cd warehouse-manager
# Установка зависимостей
cd server
npm install --production
# Создание production конфигурации
cp env.production.example .env
nano .env
```
### 4. Конфигурация .env
```env
# Production Environment Configuration
NODE_ENV=production
PORT=3001
# Database Configuration
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USER=warehouse_user
DB_PASSWORD=YOUR_STRONG_PASSWORD
DB_NAME=warehouse_manager
# Security Configuration
JWT_SECRET=YOUR_VERY_LONG_RANDOM_SECRET_KEY_HERE
JWT_EXPIRES_IN=8h
# CORS Configuration
CORS_ORIGIN=https://your-domain.com
CORS_CREDENTIALS=true
# Rate Limiting
RATE_LIMIT_WINDOW_MS=900000
RATE_LIMIT_MAX_REQUESTS=100
# Logging
LOG_LEVEL=info
LOG_FILE=logs/app.log
# Performance
CONNECTION_LIMIT=20
QUEUE_LIMIT=0
```
### 5. Инициализация базы данных
```bash
# Создание таблиц
npm run migrate
# Заполнение тестовыми данными
npm run seed
# ИЛИ полная настройка
npm run setup:prod
```
### 6. Настройка PM2
```bash
# Создание PM2 конфигурации
cat > ecosystem.config.js << EOF
module.exports = {
apps: [{
name: 'warehouse-api',
script: 'src/server.js',
instances: 'max',
exec_mode: 'cluster',
env: {
NODE_ENV: 'production',
PORT: 3001
},
error_file: './logs/err.log',
out_file: './logs/out.log',
log_file: './logs/combined.log',
time: true,
max_memory_restart: '1G',
restart_delay: 4000,
max_restarts: 10
}]
};
EOF
# Создание директории для логов
mkdir -p logs
# Запуск приложения
pm2 start ecosystem.config.js
pm2 save
pm2 startup
```
### 7. Настройка Nginx
```bash
# Создание конфигурации
sudo nano /etc/nginx/sites-available/warehouse-manager
```
```nginx
server {
listen 80;
server_name your-domain.com www.your-domain.com;
# Редирект на HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name your-domain.com www.your-domain.com;
# SSL сертификаты (Let's Encrypt)
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# SSL настройки
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
# Статические файлы фронтенда
location / {
root /var/www/warehouse-manager;
index index.html;
try_files $uri $uri/ /index.html;
# Кэширование
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, immutable";
}
}
# API прокси
location /api/ {
proxy_pass http://localhost:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_cache_bypass $http_upgrade;
# Rate limiting
limit_req zone=api burst=20 nodelay;
limit_req_zone $binary_remote_addr zone=api:10m rate=10r/s;
}
# Безопасность
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
}
```
```bash
# Активация конфигурации
sudo ln -s /etc/nginx/sites-available/warehouse-manager /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
```
### 8. SSL сертификат (Let's Encrypt)
```bash
# Установка Certbot
sudo apt install certbot python3-certbot-nginx -y
# Получение сертификата
sudo certbot --nginx -d your-domain.com -d www.your-domain.com
# Автоматическое обновление
sudo crontab -e
# Добавить строку: 0 12 * * * /usr/bin/certbot renew --quiet
```
### 9. Развертывание фронтенда
```bash
# Копирование файлов
sudo cp -r . /var/www/warehouse-manager/
sudo chown -R www-data:www-data /var/www/warehouse-manager/
sudo chmod -R 755 /var/www/warehouse-manager/
```
## 🔒 Безопасность
### Обязательные меры безопасности
1. **Измените пароли по умолчанию:**
```sql
UPDATE users SET password_hash = 'NEW_HASHED_PASSWORD' WHERE username = 'admin';
```
2. **Настройте файрвол:**
```bash
sudo ufw enable
sudo ufw allow ssh
sudo ufw allow 'Nginx Full'
sudo ufw deny 3001 # Блокируем прямой доступ к API
```
3. **Регулярные обновления:**
```bash
# Автоматические обновления безопасности
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
```
4. **Мониторинг логов:**
```bash
# Просмотр логов приложения
pm2 logs warehouse-api
# Просмотр логов Nginx
sudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.log
```
## 📊 Мониторинг и обслуживание
### PM2 команды
```bash
# Статус приложений
pm2 status
# Перезапуск
pm2 restart warehouse-api
# Обновление кода
pm2 reload warehouse-api
# Просмотр логов
pm2 logs warehouse-api
# Мониторинг ресурсов
pm2 monit
```
### Резервное копирование
```bash
# Скрипт резервного копирования
cat > backup.sh << 'EOF'
#!/bin/bash
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="/backup/warehouse-manager"
# Создание резервной копии БД
mysqldump -u warehouse_user -p warehouse_manager > $BACKUP_DIR/db_$DATE.sql
# Сжатие
gzip $BACKUP_DIR/db_$DATE.sql
# Удаление старых резервных копий (старше 30 дней)
find $BACKUP_DIR -name "db_*.sql.gz" -mtime +30 -delete
echo "Backup completed: $BACKUP_DIR/db_$DATE.sql.gz"
EOF
chmod +x backup.sh
# Добавление в cron (ежедневно в 2:00)
echo "0 2 * * * /path/to/backup.sh" | crontab -
```
## 🚨 Устранение неполадок
### Частые проблемы
1. **Приложение не запускается:**
```bash
pm2 logs warehouse-api
tail -f logs/err.log
```
2. **Ошибки подключения к БД:**
```bash
mysql -u warehouse_user -p warehouse_manager
```
3. **Проблемы с Nginx:**
```bash
sudo nginx -t
sudo systemctl status nginx
```
4. **Проблемы с SSL:**
```bash
sudo certbot certificates
sudo certbot renew --dry-run
```
## 📞 Поддержка
При возникновении проблем:
1. Проверьте логи: `pm2 logs warehouse-api`
2. Проверьте статус сервисов: `pm2 status`, `sudo systemctl status nginx`
3. Проверьте конфигурацию: `nginx -t`, `node -c src/server.js`