438 lines
11 KiB
Markdown
438 lines
11 KiB
Markdown
# 🔄 Руководство по обновлению (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) - Основная документация
|
||
|