# 🔄 Руководство по обновлению (Redeploy) ## 📋 Содержание - [Быстрый старт](#-быстрый-старт) - [Что делает скрипт](#-что-делает-скрипт) - [Использование](#-использование) - [Откат изменений](#-откат-изменений) - [Troubleshooting](#-troubleshooting) --- ## 🚀 Быстрый старт После внесения изменений в код на сервере: ```bash cd /opt/ai-review sudo ./redeploy-ubuntu.sh ``` Скрипт автоматически: 1. Создаст backup 2. Обновит код 3. Применит изменения 4. Перезапустит сервис --- ## 🔧 Что делает скрипт ### Шаг 1: Остановка сервиса ```bash systemctl stop ai-review ``` Безопасно останавливает работающий сервис. ### Шаг 2: Создание backup ```bash # Backup сохраняется в: /opt/ai-review-backups/backup-YYYYMMDD-HHMMSS/ ``` Создается копия базы данных на случай проблем. ### Шаг 3: Обновление кода ```bash git fetch --all git pull origin ``` Загружает последние изменения из репозитория. ### Шаг 4: Обновление зависимостей Backend ```bash cd backend source venv/bin/activate pip install --upgrade pip pip install -r requirements.txt ``` Устанавливает новые Python пакеты, если добавлены. ### Шаг 5: Применение миграций БД ```bash python migrate.py ``` Создает новые таблицы или изменяет существующие. ### Шаг 6: Сборка Frontend ```bash cd frontend npm install # если нужно npm run build ``` Собирает React приложение в production режиме. ### Шаг 7: Запуск сервиса ```bash systemctl start ai-review ``` Запускает обновленный сервис. --- ## 📖 Использование ### Стандартное обновление ```bash # 1. Зайти на сервер ssh user@your-server # 2. Перейти в директорию проекта cd /opt/ai-review # 3. Обновить код (если нужно) git pull # 4. Запустить redeploy sudo ./redeploy-ubuntu.sh ``` ### Обновление конкретной ветки ```bash cd /opt/ai-review git checkout feature-branch git pull sudo ./redeploy-ubuntu.sh ``` ### Обновление без Git Если проект не в Git: ```bash # 1. Скопировать новые файлы на сервер scp -r ./backend user@server:/opt/ai-review/ scp -r ./frontend user@server:/opt/ai-review/ # 2. Запустить redeploy ssh user@server 'cd /opt/ai-review && sudo ./redeploy-ubuntu.sh' ``` --- ## ⏮️ Откат изменений ### Быстрый откат Если после обновления что-то сломалось: ```bash # 1. Остановить сервис sudo systemctl stop ai-review # 2. Найти последний backup ls -lt /opt/ai-review-backups/ # 3. Восстановить БД sudo cp /opt/ai-review-backups/backup-YYYYMMDD-HHMMSS/review.db /opt/ai-review/backend/ # 4. Откатить код (если использовался git pull) cd /opt/ai-review sudo -u $USER git reset --hard HEAD~1 # 5. Запустить redeploy снова sudo ./redeploy-ubuntu.sh ``` ### Откат к конкретному коммиту ```bash cd /opt/ai-review # Посмотреть историю git log --oneline -10 # Откатиться к нужному коммиту sudo -u $USER git reset --hard # Redeploy sudo ./redeploy-ubuntu.sh ``` ### Восстановление из backup Если нужно только восстановить БД: ```bash # Остановить сервис sudo systemctl stop ai-review # Восстановить БД sudo cp /opt/ai-review-backups/backup-YYYYMMDD-HHMMSS/review.db /opt/ai-review/backend/ # Запустить сервис sudo systemctl start ai-review ``` --- ## 🐛 Troubleshooting ### Ошибка: "Сервис не запустился" ```bash # Посмотреть логи journalctl -u ai-review -n 50 --no-pager # Проверить конфигурацию cat /opt/ai-review/backend/.env # Попробовать запустить вручную cd /opt/ai-review/backend source venv/bin/activate uvicorn app.main:app --host 0.0.0.0 --port 8000 ``` ### Ошибка: "Virtual environment не найден" ```bash cd /opt/ai-review/backend # Пересоздать venv python3 -m venv venv source venv/bin/activate pip install --upgrade pip pip install -r requirements.txt ``` ### Ошибка: "Frontend не собрался" ```bash cd /opt/ai-review/frontend # Удалить node_modules и пересобрать rm -rf node_modules npm install npm run build # Проверить результат ls -lh ../backend/public/ ``` ### Ошибка: "Permission denied" ```bash # Исправить права доступа sudo chown -R $USER:$USER /opt/ai-review sudo chmod +x /opt/ai-review/redeploy-ubuntu.sh ``` ### Сервис постоянно перезапускается ```bash # Остановить автоматический перезапуск sudo systemctl stop ai-review sudo systemctl disable ai-review # Запустить в режиме отладки cd /opt/ai-review/backend source venv/bin/activate uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload # Когда найдете проблему, включить обратно sudo systemctl enable ai-review sudo systemctl start ai-review ``` ### База данных заблокирована ```bash # Остановить все процессы, использующие БД sudo systemctl stop ai-review sudo lsof /opt/ai-review/backend/review.db # Если процессы остались, убить их sudo kill -9 # Запустить сервис sudo systemctl start ai-review ``` --- ## 📊 Проверка после обновления ### Checklist: 1. **Сервис запущен:** ```bash systemctl status ai-review ``` Должно быть: `Active: active (running)` 2. **API отвечает:** ```bash curl http://localhost:8000/docs ``` Должно вернуть HTML страницу Swagger UI 3. **Frontend доступен:** ```bash curl http://localhost:8000/ | grep "AI Review" ``` Должно найти "AI Review" в HTML 4. **WebSocket работает:** ```bash curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" http://localhost:8000/ws/reviews ``` Должно вернуть `101 Switching Protocols` 5. **База данных обновлена:** ```bash cd /opt/ai-review/backend source venv/bin/activate sqlite3 review.db ".tables" ``` Должны быть все таблицы, включая новые 6. **Логи чистые:** ```bash journalctl -u ai-review -n 20 --no-pager ``` Не должно быть ERROR сообщений --- ## 🔐 Best Practices ### 1. Перед обновлением - ✅ Проверить текущий статус: `systemctl status ai-review` - ✅ Посмотреть логи: `journalctl -u ai-review -n 50` - ✅ Убедиться, что нет активных review - ✅ Предупредить пользователей о downtime ### 2. Во время обновления - ✅ Следить за выводом скрипта - ✅ Не прерывать процесс - ✅ Записать версию, на которую обновляетесь ### 3. После обновления - ✅ Проверить все пункты из Checklist - ✅ Протестировать основной функционал - ✅ Проверить, что старые review не сломались - ✅ Убедиться, что новые фичи работают ### 4. В случае проблем - ✅ Сохранить логи: `journalctl -u ai-review > error.log` - ✅ Откатиться к предыдущей версии - ✅ Разобраться с проблемой в dev окружении - ✅ Повторить обновление после исправления --- ## 📅 Регулярное обслуживание ### Еженедельно: ```bash # Проверить место на диске df -h /opt # Очистить старые backups (старше 30 дней) find /opt/ai-review-backups/ -type d -mtime +30 -exec rm -rf {} \; # Проверить обновления системы sudo apt update sudo apt list --upgradable ``` ### Ежемесячно: ```bash # Обновить Python пакеты cd /opt/ai-review/backend source venv/bin/activate pip list --outdated pip install --upgrade pip pip install --upgrade -r requirements.txt # Обновить Node.js пакеты cd /opt/ai-review/frontend npm outdated npm update # Redeploy cd /opt/ai-review sudo ./redeploy-ubuntu.sh ``` --- ## 🎯 Автоматизация ### Настроить автоматическое обновление (не рекомендуется для production) ```bash # Создать cron job для автоматического обновления каждую ночь sudo crontab -e # Добавить строку: 0 3 * * * cd /opt/ai-review && ./redeploy-ubuntu.sh >> /var/log/ai-review-redeploy.log 2>&1 ``` **⚠️ Внимание:** Автоматическое обновление может сломать сервис. Используйте только если уверены. ### Уведомления о завершении ```bash # Установить mail utils sudo apt install mailutils # Отправить email после redeploy sudo ./redeploy-ubuntu.sh && echo "Redeploy completed" | mail -s "AI Review Updated" admin@example.com ``` --- ## ✅ Резюме **Команда для обновления:** ```bash sudo ./redeploy-ubuntu.sh ``` **Команда для отката:** ```bash sudo systemctl stop ai-review sudo cp /opt/ai-review-backups/backup-*/review.db /opt/ai-review/backend/ cd /opt/ai-review && sudo -u $USER git reset --hard HEAD~1 sudo ./redeploy-ubuntu.sh ``` **Логи:** ```bash journalctl -u ai-review -f ``` **Проверка работы:** ```bash systemctl status ai-review curl http://localhost:8000/docs ``` --- ## 📚 См. также - [UBUNTU_DEPLOYMENT.md](UBUNTU_DEPLOYMENT.md) - Первичная установка - [DEPLOYMENT.md](DEPLOYMENT.md) - Общее руководство по развертыванию - [README.md](README.md) - Основная документация