code-review-agent/docs/REDEPLOY_GUIDE.md

438 lines
11 KiB
Markdown
Raw Permalink 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.

# 🔄 Руководство по обновлению (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 <current-branch>
```
Загружает последние изменения из репозитория.
### Шаг 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 <commit-hash>
# 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 <PID>
# Запустить сервис
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) - Основная документация