code-review-agent/REDEPLOY_GUIDE.md
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

11 KiB
Raw Blame History

🔄 Руководство по обновлению (Redeploy)

📋 Содержание


🚀 Быстрый старт

После внесения изменений в код на сервере:

cd /opt/ai-review
sudo ./redeploy-ubuntu.sh

Скрипт автоматически:

  1. Создаст backup
  2. Обновит код
  3. Применит изменения
  4. Перезапустит сервис

🔧 Что делает скрипт

Шаг 1: Остановка сервиса

systemctl stop ai-review

Безопасно останавливает работающий сервис.

Шаг 2: Создание backup

# Backup сохраняется в:
/opt/ai-review-backups/backup-YYYYMMDD-HHMMSS/

Создается копия базы данных на случай проблем.

Шаг 3: Обновление кода

git fetch --all
git pull origin <current-branch>

Загружает последние изменения из репозитория.

Шаг 4: Обновление зависимостей Backend

cd backend
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

Устанавливает новые Python пакеты, если добавлены.

Шаг 5: Применение миграций БД

python migrate.py

Создает новые таблицы или изменяет существующие.

Шаг 6: Сборка Frontend

cd frontend
npm install  # если нужно
npm run build

Собирает React приложение в production режиме.

Шаг 7: Запуск сервиса

systemctl start ai-review

Запускает обновленный сервис.


📖 Использование

Стандартное обновление

# 1. Зайти на сервер
ssh user@your-server

# 2. Перейти в директорию проекта
cd /opt/ai-review

# 3. Обновить код (если нужно)
git pull

# 4. Запустить redeploy
sudo ./redeploy-ubuntu.sh

Обновление конкретной ветки

cd /opt/ai-review
git checkout feature-branch
git pull
sudo ./redeploy-ubuntu.sh

Обновление без Git

Если проект не в Git:

# 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'

⏮️ Откат изменений

Быстрый откат

Если после обновления что-то сломалось:

# 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

Откат к конкретному коммиту

cd /opt/ai-review

# Посмотреть историю
git log --oneline -10

# Откатиться к нужному коммиту
sudo -u $USER git reset --hard <commit-hash>

# Redeploy
sudo ./redeploy-ubuntu.sh

Восстановление из backup

Если нужно только восстановить БД:

# Остановить сервис
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

Ошибка: "Сервис не запустился"

# Посмотреть логи
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 не найден"

cd /opt/ai-review/backend

# Пересоздать venv
python3 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt

Ошибка: "Frontend не собрался"

cd /opt/ai-review/frontend

# Удалить node_modules и пересобрать
rm -rf node_modules
npm install
npm run build

# Проверить результат
ls -lh ../backend/public/

Ошибка: "Permission denied"

# Исправить права доступа
sudo chown -R $USER:$USER /opt/ai-review
sudo chmod +x /opt/ai-review/redeploy-ubuntu.sh

Сервис постоянно перезапускается

# Остановить автоматический перезапуск
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

База данных заблокирована

# Остановить все процессы, использующие БД
sudo systemctl stop ai-review
sudo lsof /opt/ai-review/backend/review.db

# Если процессы остались, убить их
sudo kill -9 <PID>

# Запустить сервис
sudo systemctl start ai-review

📊 Проверка после обновления

Checklist:

  1. Сервис запущен:

    systemctl status ai-review
    

    Должно быть: Active: active (running)

  2. API отвечает:

    curl http://localhost:8000/docs
    

    Должно вернуть HTML страницу Swagger UI

  3. Frontend доступен:

    curl http://localhost:8000/ | grep "AI Review"
    

    Должно найти "AI Review" в HTML

  4. WebSocket работает:

    curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" http://localhost:8000/ws/reviews
    

    Должно вернуть 101 Switching Protocols

  5. База данных обновлена:

    cd /opt/ai-review/backend
    source venv/bin/activate
    sqlite3 review.db ".tables"
    

    Должны быть все таблицы, включая новые

  6. Логи чистые:

    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 окружении
  • Повторить обновление после исправления

📅 Регулярное обслуживание

Еженедельно:

# Проверить место на диске
df -h /opt

# Очистить старые backups (старше 30 дней)
find /opt/ai-review-backups/ -type d -mtime +30 -exec rm -rf {} \;

# Проверить обновления системы
sudo apt update
sudo apt list --upgradable

Ежемесячно:

# Обновить 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)

# Создать cron job для автоматического обновления каждую ночь
sudo crontab -e

# Добавить строку:
0 3 * * * cd /opt/ai-review && ./redeploy-ubuntu.sh >> /var/log/ai-review-redeploy.log 2>&1

⚠️ Внимание: Автоматическое обновление может сломать сервис. Используйте только если уверены.

Уведомления о завершении

# Установить mail utils
sudo apt install mailutils

# Отправить email после redeploy
sudo ./redeploy-ubuntu.sh && echo "Redeploy completed" | mail -s "AI Review Updated" admin@example.com

Резюме

Команда для обновления:

sudo ./redeploy-ubuntu.sh

Команда для отката:

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

Логи:

journalctl -u ai-review -f

Проверка работы:

systemctl status ai-review
curl http://localhost:8000/docs

📚 См. также