Files
Primakov Alexandr Alexandrovich 493a14e2c8 Enhance deployment documentation and add redeploy guide
- Updated `README.md` to include instructions for the new `redeploy-ubuntu.sh` script and added a link to the new `REDEPLOY_GUIDE.md`.
- Created `REDEPLOY_GUIDE.md` detailing the redeployment process, including backup creation, code updates, and troubleshooting steps.
- Introduced `redeploy-hint.md` for GitHub Actions automation example, outlining setup for automatic redeployment on push events.
- Improved documentation structure for better navigation and clarity.
2025-10-13 00:15:47 +03:00

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) - Основная документация