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

9.5 KiB
Raw Permalink Blame History

🚀 Инструкции по развертыванию в продакшн

📋 Предварительные требования

Системные требования

  • Node.js 18+ LTS
  • MySQL 8.0+
  • Nginx (рекомендуется для прокси)
  • PM2 (для управления процессами)

Минимальные характеристики сервера

  • CPU: 2 ядра
  • RAM: 4 GB
  • Диск: 20 GB SSD
  • Сеть: 100 Mbps

🔧 Установка и настройка

1. Подготовка сервера

# Обновление системы
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. Настройка базы данных

-- Подключение к 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. Настройка приложения

# Клонирование проекта
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

# 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. Инициализация базы данных

# Создание таблиц
npm run migrate

# Заполнение тестовыми данными
npm run seed

# ИЛИ полная настройка
npm run setup:prod

6. Настройка PM2

# Создание 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

# Создание конфигурации
sudo nano /etc/nginx/sites-available/warehouse-manager
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;
}
# Активация конфигурации
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)

# Установка 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. Развертывание фронтенда

# Копирование файлов
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. Измените пароли по умолчанию:

    UPDATE users SET password_hash = 'NEW_HASHED_PASSWORD' WHERE username = 'admin';
    
  2. Настройте файрвол:

    sudo ufw enable
    sudo ufw allow ssh
    sudo ufw allow 'Nginx Full'
    sudo ufw deny 3001  # Блокируем прямой доступ к API
    
  3. Регулярные обновления:

    # Автоматические обновления безопасности
    sudo apt install unattended-upgrades
    sudo dpkg-reconfigure -plow unattended-upgrades
    
  4. Мониторинг логов:

    # Просмотр логов приложения
    pm2 logs warehouse-api
    
    # Просмотр логов Nginx
    sudo tail -f /var/log/nginx/access.log
    sudo tail -f /var/log/nginx/error.log
    

📊 Мониторинг и обслуживание

PM2 команды

# Статус приложений
pm2 status

# Перезапуск
pm2 restart warehouse-api

# Обновление кода
pm2 reload warehouse-api

# Просмотр логов
pm2 logs warehouse-api

# Мониторинг ресурсов
pm2 monit

Резервное копирование

# Скрипт резервного копирования
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. Приложение не запускается:

    pm2 logs warehouse-api
    tail -f logs/err.log
    
  2. Ошибки подключения к БД:

    mysql -u warehouse_user -p warehouse_manager
    
  3. Проблемы с Nginx:

    sudo nginx -t
    sudo systemctl status nginx
    
  4. Проблемы с SSL:

    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