feat: Add review events persistence, version display, and auto-versioning system
This commit is contained in:
@@ -0,0 +1,522 @@
|
||||
# 🐧 Развертывание на 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
|
||||
```
|
||||
|
||||
**Наслаждайтесь автоматическим ревью кода! 🚀**
|
||||
|
||||
Reference in New Issue
Block a user