code-review-agent/UBUNTU_DEPLOYMENT.md
Primakov Alexandr Alexandrovich 48fbb5bcb3 Add deployment script and documentation for Ubuntu setup
- Introduced `deploy-ubuntu.sh` for automated deployment of the AI Code Review Platform on Ubuntu with systemd.
- Added `UBUNTU_DEPLOYMENT.md` for detailed deployment instructions and requirements.
- Updated `README.md` to include quick deployment instructions and features of the new script.
- Created `uninstall-ubuntu.sh` for easy removal of the platform and its components.
- Enhanced logging and configuration setup within the deployment script.
2025-10-12 23:39:59 +03:00

523 lines
10 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.

# 🐧 Развертывание на Ubuntu с Systemd
Руководство по развертыванию AI Code Review Platform на Ubuntu Server с systemd.
---
## 🚀 Быстрая установка
### Одна команда:
```bash
sudo ./deploy-ubuntu.sh
```
Скрипт автоматически:
- ✅ Установит зависимости (Python, Node.js)
- ✅ Соберет frontend
- ✅ Создаст systemd service
- ✅ Настроит логирование
- ✅ Запустит сервис
- ✅ (Опционально) Настроит nginx
---
## 📋 Требования
### Системные требования:
- **OS:** Ubuntu 20.04+ / Debian 11+
- **Python:** 3.10+
- **Node.js:** 18+
- **RAM:** минимум 2GB
- **Disk:** минимум 5GB
### Права:
Скрипт должен быть запущен с **sudo**
---
## 🔧 Пошаговая установка
### 1. Клонирование репозитория
```bash
cd ~
git clone <repository-url>
cd platform/review
```
### 2. Подготовка скрипта
```bash
chmod +x deploy-ubuntu.sh
chmod +x uninstall-ubuntu.sh
```
### 3. Запуск установки
```bash
sudo ./deploy-ubuntu.sh
```
### 4. Следуйте инструкциям
Скрипт спросит:
- Установить ли nginx?
- Доменное имя (для nginx)
---
## 📁 Структура после установки
```
/opt/ai-review/ # Основная директория
├── backend/
│ ├── app/
│ ├── public/ # Frontend build
│ ├── venv/ # Python venv
│ ├── .env # Конфигурация
│ └── review.db # База данных
├── frontend/
└── ...
/var/log/ai-review/ # Логи
├── access.log
└── error.log
/etc/systemd/system/ # Systemd
└── ai-review.service
/etc/nginx/ # Nginx (опционально)
└── sites-available/
└── ai-review
```
---
## ⚙️ Конфигурация
### Редактирование .env:
```bash
sudo nano /opt/ai-review/backend/.env
```
**Обязательно настройте:**
```bash
# Ollama
OLLAMA_BASE_URL=http://localhost:11434
OLLAMA_MODEL=mistral:7b
# Мастер токены
MASTER_GITEA_TOKEN=your_token_here
MASTER_GITHUB_TOKEN=your_token_here
# Ключ шифрования (уже создан)
ENCRYPTION_KEY=...
```
**После изменений:**
```bash
sudo systemctl restart ai-review
```
---
## 🔄 Управление сервисом
### Systemd команды:
```bash
# Статус
sudo systemctl status ai-review
# Запуск
sudo systemctl start ai-review
# Остановка
sudo systemctl stop ai-review
# Перезапуск
sudo systemctl restart ai-review
# Автозапуск при загрузке
sudo systemctl enable ai-review
# Отключить автозапуск
sudo systemctl disable ai-review
```
---
## 📊 Мониторинг
### Просмотр логов:
**Systemd журнал:**
```bash
# Последние 50 строк
sudo journalctl -u ai-review -n 50
# В реальном времени
sudo journalctl -u ai-review -f
# Только ошибки
sudo journalctl -u ai-review -p err
```
**Файлы логов:**
```bash
# Access log
tail -f /var/log/ai-review/access.log
# Error log
tail -f /var/log/ai-review/error.log
# Последние 100 строк
tail -n 100 /var/log/ai-review/error.log
```
### Проверка состояния:
```bash
# Health check
curl http://localhost:8000/health
# API
curl http://localhost:8000/api/repositories
# Статус процесса
ps aux | grep uvicorn
```
---
## 🌐 Nginx как Reverse Proxy
### Конфигурация создается автоматически:
```nginx
server {
listen 80;
server_name yourdomain.com;
location / {
proxy_pass http://localhost:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /ws {
proxy_pass http://localhost:8000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
```
### Ручная настройка nginx:
```bash
# Редактировать конфиг
sudo nano /etc/nginx/sites-available/ai-review
# Проверить синтаксис
sudo nginx -t
# Перезагрузить nginx
sudo systemctl reload nginx
```
---
## 🔒 SSL/HTTPS с Let's Encrypt
### Установка Certbot:
```bash
sudo apt-get install certbot python3-certbot-nginx
```
### Получение сертификата:
```bash
sudo certbot --nginx -d yourdomain.com
```
Certbot автоматически настроит nginx для HTTPS!
### Автопродление:
```bash
# Проверка таймера
sudo systemctl status certbot.timer
# Тестовое продление
sudo certbot renew --dry-run
```
---
## 🔥 Firewall
### UFW (Ubuntu Firewall):
```bash
# Разрешить SSH
sudo ufw allow 22
# Разрешить HTTP
sudo ufw allow 80
# Разрешить HTTPS
sudo ufw allow 443
# Включить firewall
sudo ufw enable
# Статус
sudo ufw status
```
---
## 🔧 Troubleshooting
### Сервис не запускается:
```bash
# Проверить логи
sudo journalctl -u ai-review -n 100
# Проверить статус
sudo systemctl status ai-review
# Проверить права
ls -la /opt/ai-review/backend/
# Проверить .env
cat /opt/ai-review/backend/.env
```
### База данных не создается:
```bash
# Проверить права на директорию
sudo chown -R $USER:$USER /opt/ai-review/backend/
# Пересоздать БД
rm /opt/ai-review/backend/review.db
sudo systemctl restart ai-review
```
### Ollama недоступен:
```bash
# Проверить Ollama
curl http://localhost:11434/api/version
# Установить Ollama
curl -fsSL https://ollama.com/install.sh | sh
# Скачать модель
ollama pull mistral:7b
```
### Nginx ошибка:
```bash
# Проверить конфигурацию
sudo nginx -t
# Проверить логи nginx
sudo tail -f /var/log/nginx/error.log
# Проверить что backend работает
curl http://localhost:8000/health
```
### Нет места на диске:
```bash
# Проверить место
df -h
# Очистить старые логи
sudo journalctl --vacuum-time=7d
# Очистить логи приложения
sudo truncate -s 0 /var/log/ai-review/*.log
```
---
## 📦 Обновление
### Автоматическое обновление:
```bash
cd /opt/ai-review
sudo git pull
sudo ./deploy-ubuntu.sh
```
### Ручное обновление:
```bash
# 1. Остановить сервис
sudo systemctl stop ai-review
# 2. Обновить код
cd /opt/ai-review
sudo git pull
# 3. Пересобрать frontend
cd frontend
npm install
npm run build
# 4. Обновить Python зависимости
cd ../backend
source venv/bin/activate
pip install -r requirements.txt
deactivate
# 5. Запустить сервис
sudo systemctl start ai-review
```
---
## 🗑️ Удаление
### Полное удаление:
```bash
sudo ./uninstall-ubuntu.sh
```
Это удалит:
- Systemd service
- Все файлы в `/opt/ai-review`
- Nginx конфигурацию
- Логи
---
## 📊 Мониторинг производительности
### Использование ресурсов:
```bash
# CPU и память
top -p $(pgrep -f "uvicorn app.main")
# Детальная информация
htop
# Использование диска
du -sh /opt/ai-review/*
```
### Systemd ресурсы:
```bash
# Статистика сервиса
systemctl show ai-review --property=CPUUsageNSec
systemctl show ai-review --property=MemoryCurrent
```
---
## 🔄 Backup
### Создание резервной копии:
```bash
#!/bin/bash
# backup.sh
BACKUP_DIR="/backup/ai-review"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p "$BACKUP_DIR"
# Резервная копия БД
cp /opt/ai-review/backend/review.db \
"$BACKUP_DIR/review_$DATE.db"
# Резервная копия .env
cp /opt/ai-review/backend/.env \
"$BACKUP_DIR/env_$DATE"
# Сжать старые бэкапы
find "$BACKUP_DIR" -name "*.db" -mtime +7 -exec gzip {} \;
echo "Backup создан: $BACKUP_DIR/review_$DATE.db"
```
### Автоматический backup через cron:
```bash
# Редактировать crontab
sudo crontab -e
# Добавить строку (каждый день в 3:00)
0 3 * * * /opt/ai-review/backup.sh
```
---
## ✅ Checklist после установки
- [ ] Сервис запущен (`systemctl status ai-review`)
- [ ] Health check работает (`curl localhost:8000/health`)
- [ ] Frontend открывается в браузере
- [ ] Настроен .env с токенами
- [ ] Ollama запущен и модель скачана
- [ ] Nginx настроен (если используется)
- [ ] SSL сертификат получен (если нужен)
- [ ] Firewall настроен
- [ ] Логи пишутся (`tail -f /var/log/ai-review/access.log`)
- [ ] Автозапуск включен (`systemctl is-enabled ai-review`)
- [ ] Backup настроен
---
## 📞 Поддержка
Если возникли проблемы:
1. Проверьте логи: `sudo journalctl -u ai-review -n 100`
2. Проверьте конфигурацию: `cat /opt/ai-review/backend/.env`
3. Проверьте статус: `sudo systemctl status ai-review`
4. Откройте issue в репозитории
---
## 🎉 Готово!
Сервис развернут и готов к работе!
**Доступ:**
- Local: http://localhost:8000
- External: http://your-domain.com
**Управление:**
```bash
sudo systemctl {start|stop|restart|status} ai-review
```
**Логи:**
```bash
sudo journalctl -u ai-review -f
```
**Наслаждайтесь автоматическим ревью кода! 🚀**