- 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.
11 KiB
🔄 Руководство по обновлению (Redeploy)
📋 Содержание
🚀 Быстрый старт
После внесения изменений в код на сервере:
cd /opt/ai-review
sudo ./redeploy-ubuntu.sh
Скрипт автоматически:
- Создаст backup
- Обновит код
- Применит изменения
- Перезапустит сервис
🔧 Что делает скрипт
Шаг 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:
-
Сервис запущен:
systemctl status ai-reviewДолжно быть:
Active: active (running) -
API отвечает:
curl http://localhost:8000/docsДолжно вернуть HTML страницу Swagger UI
-
Frontend доступен:
curl http://localhost:8000/ | grep "AI Review"Должно найти "AI Review" в HTML
-
WebSocket работает:
curl -i -N -H "Connection: Upgrade" -H "Upgrade: websocket" http://localhost:8000/ws/reviewsДолжно вернуть
101 Switching Protocols -
База данных обновлена:
cd /opt/ai-review/backend source venv/bin/activate sqlite3 review.db ".tables"Должны быть все таблицы, включая новые
-
Логи чистые:
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
📚 См. также
- UBUNTU_DEPLOYMENT.md - Первичная установка
- DEPLOYMENT.md - Общее руководство по развертыванию
- README.md - Основная документация