- 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
 | ||
| ```
 | ||
| 
 | ||
| **Наслаждайтесь автоматическим ревью кода! 🚀**
 | ||
| 
 |