370 lines
9.1 KiB
Markdown
370 lines
9.1 KiB
Markdown
# 🚀 Развертывание AI Code Review Platform
|
||
|
||
## 📋 Быстрый старт
|
||
|
||
### Одна команда для запуска всего:
|
||
|
||
**Linux/Mac:**
|
||
```bash
|
||
./start.sh
|
||
```
|
||
|
||
**Windows:**
|
||
```bash
|
||
start.bat
|
||
```
|
||
|
||
Это автоматически:
|
||
1. ✅ Проверит установку Node.js и Python
|
||
2. ✅ Установит зависимости frontend
|
||
3. ✅ Соберет frontend в `backend/public`
|
||
4. ✅ Установит зависимости backend
|
||
5. ✅ Создаст `.env` из примера (если нужно)
|
||
6. ✅ Запустит сервер на http://localhost:8000
|
||
|
||
---
|
||
|
||
## 🔧 Требования
|
||
|
||
### Системные требования:
|
||
- **Python:** 3.10 или выше
|
||
- **Node.js:** 18 или выше
|
||
- **npm:** 9 или выше
|
||
|
||
### Проверка установленных версий:
|
||
```bash
|
||
python --version # или python3 --version
|
||
node --version
|
||
npm --version
|
||
```
|
||
|
||
---
|
||
|
||
## ⚙️ Настройка
|
||
|
||
### 1. Клонирование репозитория
|
||
|
||
```bash
|
||
git clone <repository-url>
|
||
cd platform/review
|
||
```
|
||
|
||
### 2. Конфигурация
|
||
|
||
Отредактируйте `backend/.env`:
|
||
|
||
```bash
|
||
# Ollama Configuration
|
||
OLLAMA_BASE_URL=http://localhost:11434
|
||
OLLAMA_MODEL=mistral:7b
|
||
|
||
# Master Git Tokens (optional)
|
||
MASTER_GITEA_TOKEN=your_gitea_token_here
|
||
MASTER_GITHUB_TOKEN=your_github_token_here
|
||
|
||
# Security
|
||
ENCRYPTION_KEY=your-32-character-encryption-key
|
||
```
|
||
|
||
**Генерация ключа шифрования:**
|
||
```python
|
||
python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"
|
||
```
|
||
|
||
### 3. Запуск
|
||
|
||
```bash
|
||
# Linux/Mac
|
||
chmod +x start.sh
|
||
./start.sh
|
||
|
||
# Windows
|
||
start.bat
|
||
```
|
||
|
||
---
|
||
|
||
## 🏗️ Архитектура развертывания
|
||
|
||
### Схема работы:
|
||
|
||
```
|
||
┌─────────────────────────────────────────┐
|
||
│ Пользователь │
|
||
│ http://localhost:8000 │
|
||
└──────────────┬──────────────────────────┘
|
||
│
|
||
▼
|
||
┌─────────────────────────────────────────┐
|
||
│ FastAPI Backend │
|
||
│ │
|
||
│ ┌─────────────────────────────────┐ │
|
||
│ │ API Endpoints │ │
|
||
│ │ /api/repositories │ │
|
||
│ │ /api/reviews │ │
|
||
│ │ /api/webhooks │ │
|
||
│ └─────────────────────────────────┘ │
|
||
│ │
|
||
│ ┌─────────────────────────────────┐ │
|
||
│ │ Static Files │ │
|
||
│ │ Serves: backend/public/ │ │
|
||
│ │ (React frontend build) │ │
|
||
│ └─────────────────────────────────┘ │
|
||
└─────────────────────────────────────────┘
|
||
│
|
||
├─────────► SQLite DB
|
||
│
|
||
├─────────► Ollama (AI)
|
||
│
|
||
└─────────► Git APIs
|
||
(Gitea/GitHub/Bitbucket)
|
||
```
|
||
|
||
### Как это работает:
|
||
|
||
1. **Frontend билдится** в `backend/public/`
|
||
2. **Backend раздает** статику из `backend/public/`
|
||
3. **Один порт** (8000) для всего
|
||
4. **API** доступно на `/api/*`
|
||
5. **Frontend** на `/` (все остальные роуты)
|
||
|
||
---
|
||
|
||
## 📁 Структура после сборки
|
||
|
||
```
|
||
platform/review/
|
||
├── backend/
|
||
│ ├── public/ # ← Frontend build (создается автоматически)
|
||
│ │ ├── index.html
|
||
│ │ ├── assets/
|
||
│ │ │ ├── index-*.js
|
||
│ │ │ └── index-*.css
|
||
│ │ └── ...
|
||
│ ├── app/
|
||
│ ├── venv/
|
||
│ ├── .env
|
||
│ └── requirements.txt
|
||
├── frontend/
|
||
│ ├── src/
|
||
│ ├── package.json
|
||
│ └── vite.config.ts # ← Настроен на build в ../backend/public
|
||
├── start.sh # ← Единый скрипт запуска (Linux/Mac)
|
||
└── start.bat # ← Единый скрипт запуска (Windows)
|
||
```
|
||
|
||
---
|
||
|
||
## 🔄 Процесс сборки
|
||
|
||
### Что происходит при запуске `start.sh` / `start.bat`:
|
||
|
||
```bash
|
||
1. Проверка Node.js ✓
|
||
→ node --version
|
||
|
||
2. Проверка Python ✓
|
||
→ python --version
|
||
|
||
3. Установка зависимостей frontend ✓
|
||
→ cd frontend
|
||
→ npm install
|
||
|
||
4. Сборка frontend ✓
|
||
→ npm run build
|
||
→ Вывод: backend/public/
|
||
|
||
5. Установка зависимостей backend ✓
|
||
→ cd backend
|
||
→ python -m venv venv
|
||
→ pip install -r requirements.txt
|
||
|
||
6. Проверка .env ✓
|
||
→ Создание из .env.example если нужно
|
||
|
||
7. Запуск сервера ✓
|
||
→ uvicorn app.main:app --reload
|
||
```
|
||
|
||
---
|
||
|
||
## 🌐 Доступ к приложению
|
||
|
||
После запуска доступно:
|
||
|
||
- **Frontend (UI):** http://localhost:8000
|
||
- **API:** http://localhost:8000/api
|
||
- **API Docs (Swagger):** http://localhost:8000/docs
|
||
- **WebSocket:** ws://localhost:8000/ws
|
||
|
||
---
|
||
|
||
## 🛠️ Разработка
|
||
|
||
### Запуск в режиме разработки (с hot-reload):
|
||
|
||
**Терминал 1 - Backend:**
|
||
```bash
|
||
cd backend
|
||
source venv/bin/activate # или venv\Scripts\activate на Windows
|
||
uvicorn app.main:app --reload
|
||
```
|
||
|
||
**Терминал 2 - Frontend:**
|
||
```bash
|
||
cd frontend
|
||
npm run dev
|
||
```
|
||
|
||
В этом режиме:
|
||
- Frontend: http://localhost:5173
|
||
- Backend: http://localhost:8000
|
||
- Frontend проксирует API запросы на backend
|
||
|
||
### Пересборка frontend:
|
||
|
||
```bash
|
||
cd frontend
|
||
npm run build
|
||
```
|
||
|
||
Frontend автоматически соберется в `backend/public/`
|
||
|
||
---
|
||
|
||
## 🐳 Docker (опционально)
|
||
|
||
TODO: Добавить Dockerfile и docker-compose.yml
|
||
|
||
---
|
||
|
||
## 📊 Production Deployment
|
||
|
||
### Для продакшена рекомендуется:
|
||
|
||
1. **Использовать Gunicorn + Uvicorn:**
|
||
|
||
```bash
|
||
cd backend
|
||
gunicorn app.main:app \
|
||
--workers 4 \
|
||
--worker-class uvicorn.workers.UvicornWorker \
|
||
--bind 0.0.0.0:8000
|
||
```
|
||
|
||
2. **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";
|
||
}
|
||
}
|
||
```
|
||
|
||
3. **Systemd service:**
|
||
|
||
```ini
|
||
[Unit]
|
||
Description=AI Code Review Platform
|
||
After=network.target
|
||
|
||
[Service]
|
||
Type=notify
|
||
User=www-data
|
||
WorkingDirectory=/path/to/platform/review/backend
|
||
ExecStart=/path/to/venv/bin/uvicorn app.main:app --host 0.0.0.0 --port 8000
|
||
Restart=always
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
```
|
||
|
||
---
|
||
|
||
## 🔧 Troubleshooting
|
||
|
||
### Проблема: Frontend не отображается
|
||
|
||
**Решение:**
|
||
```bash
|
||
cd frontend
|
||
npm run build
|
||
```
|
||
|
||
### Проблема: Backend не запускается
|
||
|
||
**Проверьте:**
|
||
1. Установлен ли Python 3.10+
|
||
2. Создано ли виртуальное окружение
|
||
3. Установлены ли зависимости
|
||
4. Корректен ли `.env` файл
|
||
|
||
### Проблема: Ollama недоступен
|
||
|
||
**Убедитесь что:**
|
||
```bash
|
||
# Ollama запущен
|
||
ollama serve
|
||
|
||
# Модель скачана
|
||
ollama pull mistral:7b
|
||
|
||
# Ollama доступен
|
||
curl http://localhost:11434/api/version
|
||
```
|
||
|
||
### Проблема: Ошибки шифрования токенов
|
||
|
||
**Удалите БД и пересоздайте:**
|
||
```bash
|
||
rm backend/review.db
|
||
# Перезапустите сервер
|
||
```
|
||
|
||
---
|
||
|
||
## 📝 Полезные команды
|
||
|
||
```bash
|
||
# Проверка статуса
|
||
ps aux | grep uvicorn
|
||
|
||
# Просмотр логов
|
||
tail -f backend/logs/app.log # если настроено логирование
|
||
|
||
# Остановка сервера
|
||
# Ctrl+C в терминале где запущен
|
||
|
||
# Очистка
|
||
rm -rf backend/public/
|
||
rm -rf frontend/node_modules/
|
||
rm -rf backend/venv/
|
||
```
|
||
|
||
---
|
||
|
||
## ✅ Готово!
|
||
|
||
Теперь у вас есть:
|
||
- 🚀 Единая команда запуска
|
||
- 📦 Автоматическая сборка frontend
|
||
- 🌐 Один порт для всего
|
||
- 🔄 Hot-reload в разработке
|
||
- 📚 Документация
|
||
|
||
**Запускайте и наслаждайтесь!** 🎉
|
||
|