# 🌐 Настройка 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 **Больше не нужно менять код при деплое!** 🚀