251 lines
5.5 KiB
Markdown
251 lines
5.5 KiB
Markdown
# 🌐 Настройка URL для Production
|
|
|
|
## Проблема
|
|
|
|
После развертывания на сервере frontend пытается обращаться к `localhost` вместо реального IP/домена сервера.
|
|
|
|
## ✅ Решение
|
|
|
|
Frontend теперь использует **относительные пути** и динамические URL.
|
|
|
|
---
|
|
|
|
## 🔧 Как это работает
|
|
|
|
### 1. API запросы
|
|
|
|
**До:**
|
|
```typescript
|
|
const API_BASE_URL = 'http://localhost:8000/api';
|
|
```
|
|
|
|
**После:**
|
|
```typescript
|
|
const API_BASE_URL = import.meta.env.VITE_API_URL || '/api';
|
|
```
|
|
|
|
### 2. WebSocket
|
|
|
|
**До:**
|
|
```typescript
|
|
const wsUrl = 'ws://localhost:8000/ws/reviews';
|
|
```
|
|
|
|
**После:**
|
|
```typescript
|
|
const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';
|
|
const host = import.meta.env.VITE_WS_URL || `${protocol}//${window.location.host}`;
|
|
const wsUrl = `${host}/ws/reviews`;
|
|
```
|
|
|
|
---
|
|
|
|
## 📊 Режимы работы
|
|
|
|
### Development (npm run dev)
|
|
|
|
Frontend работает на `localhost:5173`, proxy перенаправляет запросы:
|
|
|
|
```typescript
|
|
// vite.config.ts
|
|
server: {
|
|
proxy: {
|
|
'/api': 'http://localhost:8000',
|
|
'/ws': 'ws://localhost:8000',
|
|
}
|
|
}
|
|
```
|
|
|
|
**Запросы:**
|
|
- `http://localhost:5173/api/...` → `http://localhost:8000/api/...`
|
|
- `ws://localhost:5173/ws/...` → `ws://localhost:8000/ws/...`
|
|
|
|
### Production (npm run build)
|
|
|
|
Frontend собран в `backend/public/`, backend раздает статику.
|
|
|
|
**Относительные пути:**
|
|
- `/api/...` → `http://your-server-ip:8000/api/...`
|
|
- `/ws/...` → `ws://your-server-ip:8000/ws/...`
|
|
|
|
Browser автоматически использует текущий host!
|
|
|
|
---
|
|
|
|
## 🎯 Примеры
|
|
|
|
### На локальной машине:
|
|
|
|
```
|
|
URL браузера: http://localhost:8000
|
|
API запрос: http://localhost:8000/api/repositories
|
|
WebSocket: ws://localhost:8000/ws/reviews
|
|
```
|
|
|
|
### На сервере (IP):
|
|
|
|
```
|
|
URL браузера: http://185.152.81.243:8000
|
|
API запрос: http://185.152.81.243:8000/api/repositories
|
|
WebSocket: ws://185.152.81.243:8000/ws/reviews
|
|
```
|
|
|
|
### На сервере (домен):
|
|
|
|
```
|
|
URL браузера: https://ai-review.example.com
|
|
API запрос: https://ai-review.example.com/api/repositories
|
|
WebSocket: wss://ai-review.example.com/ws/reviews
|
|
```
|
|
|
|
---
|
|
|
|
## ⚙️ Переменные окружения
|
|
|
|
### .env.production (создается автоматически)
|
|
|
|
```bash
|
|
# Относительные пути (по умолчанию)
|
|
VITE_API_URL=/api
|
|
VITE_WS_URL=
|
|
```
|
|
|
|
### .env.development (для разработки)
|
|
|
|
```bash
|
|
# Явные URL для development
|
|
VITE_API_URL=http://localhost:8000/api
|
|
VITE_WS_URL=ws://localhost:8000
|
|
```
|
|
|
|
### Кастомная настройка:
|
|
|
|
Если нужен специфичный URL (например, разные домены):
|
|
|
|
```bash
|
|
# frontend/.env.production
|
|
VITE_API_URL=https://api.example.com/api
|
|
VITE_WS_URL=wss://api.example.com
|
|
```
|
|
|
|
---
|
|
|
|
## 🔄 Пересборка после изменений
|
|
|
|
### Локально:
|
|
|
|
```bash
|
|
cd frontend
|
|
npm run build
|
|
```
|
|
|
|
### На сервере:
|
|
|
|
```bash
|
|
cd /opt/ai-review/frontend
|
|
npm run build
|
|
sudo systemctl restart ai-review
|
|
```
|
|
|
|
---
|
|
|
|
## 🐛 Troubleshooting
|
|
|
|
### Проблема: API запросы идут на localhost
|
|
|
|
**Причина:** Frontend собран со старым кодом
|
|
|
|
**Решение:**
|
|
```bash
|
|
cd frontend
|
|
rm -rf dist/ ../backend/public/
|
|
npm run build
|
|
```
|
|
|
|
### Проблема: WebSocket не подключается
|
|
|
|
**Проверьте:**
|
|
1. Открыть DevTools → Network → WS
|
|
2. Проверить URL WebSocket подключения
|
|
3. Убедиться что backend доступен
|
|
|
|
**Для HTTPS:**
|
|
```bash
|
|
# WebSocket должен использовать wss://
|
|
# Убедитесь что nginx прокси настроен:
|
|
|
|
location /ws {
|
|
proxy_pass http://localhost:8000;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection "upgrade";
|
|
}
|
|
```
|
|
|
|
### Проблема: CORS ошибки
|
|
|
|
**Если используете разные домены:**
|
|
|
|
Обновите `backend/.env`:
|
|
```bash
|
|
CORS_ORIGINS=https://yourdomain.com,https://api.yourdomain.com
|
|
```
|
|
|
|
Перезапустите backend:
|
|
```bash
|
|
sudo systemctl restart ai-review
|
|
```
|
|
|
|
---
|
|
|
|
## ✅ Проверка
|
|
|
|
### 1. Откройте DevTools (F12)
|
|
|
|
### 2. Network tab
|
|
|
|
Проверьте запросы:
|
|
- ✅ URL должны использовать текущий host
|
|
- ✅ Не должно быть `localhost` в production
|
|
|
|
### 3. Console
|
|
|
|
Не должно быть ошибок типа:
|
|
- ❌ `Failed to fetch`
|
|
- ❌ `ERR_CONNECTION_REFUSED`
|
|
- ❌ `Mixed Content` (http на https странице)
|
|
|
|
---
|
|
|
|
## 📝 Пример логов
|
|
|
|
### ✅ Правильно (на сервере 185.152.81.243):
|
|
|
|
```
|
|
GET http://185.152.81.243:8000/api/repositories 200 OK
|
|
WS ws://185.152.81.243:8000/ws/reviews [connected]
|
|
```
|
|
|
|
### ❌ Неправильно:
|
|
|
|
```
|
|
GET http://localhost:8000/api/repositories [failed]
|
|
WS ws://localhost:8000/ws/reviews [failed]
|
|
```
|
|
|
|
---
|
|
|
|
## 🎉 Готово!
|
|
|
|
Теперь приложение работает на любом домене/IP без изменений кода!
|
|
|
|
**Автоматически подстраивается под:**
|
|
- ✅ localhost
|
|
- ✅ IP адрес
|
|
- ✅ Домен
|
|
- ✅ HTTP/HTTPS
|
|
- ✅ WS/WSS
|
|
|
|
**Больше не нужно менять код при деплое!** 🚀
|
|
|