- 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.
523 lines
10 KiB
Markdown
523 lines
10 KiB
Markdown
# 🐧 Развертывание на 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
|
||
```
|
||
|
||
**Наслаждайтесь автоматическим ревью кода! 🚀**
|
||
|