\Исправлены адреса подключения для прокси и добавлено автоопределение IP контейнера\
Browse files
app.py
CHANGED
@@ -10,6 +10,7 @@ import http.client
|
|
10 |
import socketserver
|
11 |
from http.server import HTTPServer, BaseHTTPRequestHandler
|
12 |
import threading
|
|
|
13 |
|
14 |
def main():
|
15 |
processes = []
|
@@ -40,18 +41,31 @@ def main():
|
|
40 |
api_server_env["LOG_STDOUT"] = "true"
|
41 |
api_server_env["WORKERS_MAX"] = "4" # Устанавливаем значение для WORKERS_MAX
|
42 |
api_server_env["WORKER_QUIT_TIMEOUT_SECONDES"] = "30" # Добавляем timeout для воркеров
|
|
|
43 |
api_server_process = subprocess.Popen([str(api_binary)], env=api_server_env)
|
44 |
processes.append(api_server_process)
|
45 |
|
46 |
# Даем время API серверу запуститься
|
47 |
time.sleep(3)
|
48 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
49 |
# Запускаем Playground UI на порту 3000
|
50 |
print("Starting Playground UI on port 3000...")
|
51 |
playground_env = os.environ.copy()
|
52 |
playground_env["AGENT_SERVER_URL"] = "http://localhost:8080" # Подключаемся к локальному API серверу
|
53 |
playground_env["NODE_ENV"] = "production" # Убедимся, что запускаем в production режиме
|
54 |
playground_env["PORT"] = "3000" # Указываем порт через переменную окружения
|
|
|
55 |
|
56 |
# Проверяем наличие standalone режима
|
57 |
standalone_path = playground_dir / ".next" / "standalone" / "server.js"
|
@@ -73,7 +87,7 @@ def main():
|
|
73 |
processes.append(playground_process)
|
74 |
|
75 |
# Даем время Playground UI запуститься
|
76 |
-
time.sleep(
|
77 |
|
78 |
# Создаем эффективный прокси-сервер
|
79 |
class ProxyHandler(BaseHTTPRequestHandler):
|
@@ -104,7 +118,7 @@ def main():
|
|
104 |
def _handle_request(self, method):
|
105 |
try:
|
106 |
# Определяем, какой сервер должен обработать запрос
|
107 |
-
target_host =
|
108 |
|
109 |
# API endpoints идут на порт 8080 (API сервер)
|
110 |
if self.path.startswith('/health') or \
|
@@ -120,6 +134,8 @@ def main():
|
|
120 |
else:
|
121 |
# Все остальные запросы (включая / и UI assets) идут на порт 3000 (Playground)
|
122 |
target_port = 3000
|
|
|
|
|
123 |
|
124 |
# Пробуем подключиться к целевому серверу
|
125 |
conn = http.client.HTTPConnection(target_host, target_port, timeout=30)
|
@@ -198,8 +214,15 @@ def main():
|
|
198 |
<div class="error">
|
199 |
<p><strong>Детали ошибки:</strong> {str(e)}</p>
|
200 |
<p>Целевой порт: {target_port}</p>
|
|
|
201 |
</div>
|
202 |
<p>Система пытается запустить все компоненты. Попробуйте обновить страницу через минуту.</p>
|
|
|
|
|
|
|
|
|
|
|
|
|
203 |
</body>
|
204 |
</html>
|
205 |
"""
|
|
|
10 |
import socketserver
|
11 |
from http.server import HTTPServer, BaseHTTPRequestHandler
|
12 |
import threading
|
13 |
+
import socket
|
14 |
|
15 |
def main():
|
16 |
processes = []
|
|
|
41 |
api_server_env["LOG_STDOUT"] = "true"
|
42 |
api_server_env["WORKERS_MAX"] = "4" # Устанавливаем значение для WORKERS_MAX
|
43 |
api_server_env["WORKER_QUIT_TIMEOUT_SECONDES"] = "30" # Добавляем timeout для воркеров
|
44 |
+
api_server_env["PORT"] = "8080" # Явно указываем порт
|
45 |
api_server_process = subprocess.Popen([str(api_binary)], env=api_server_env)
|
46 |
processes.append(api_server_process)
|
47 |
|
48 |
# Даем время API серверу запуститься
|
49 |
time.sleep(3)
|
50 |
|
51 |
+
# Пробуем получить IP-адрес для локальной сети
|
52 |
+
container_ip = "127.0.0.1" # По умолчанию
|
53 |
+
try:
|
54 |
+
# Получаем hostname контейнера
|
55 |
+
hostname = socket.gethostname()
|
56 |
+
# Получаем IP-адрес по hostname
|
57 |
+
container_ip = socket.gethostbyname(hostname)
|
58 |
+
print(f"Detected container IP: {container_ip}")
|
59 |
+
except Exception as e:
|
60 |
+
print(f"Failed to get container IP, using localhost: {e}")
|
61 |
+
|
62 |
# Запускаем Playground UI на порту 3000
|
63 |
print("Starting Playground UI on port 3000...")
|
64 |
playground_env = os.environ.copy()
|
65 |
playground_env["AGENT_SERVER_URL"] = "http://localhost:8080" # Подключаемся к локальному API серверу
|
66 |
playground_env["NODE_ENV"] = "production" # Убедимся, что запускаем в production режиме
|
67 |
playground_env["PORT"] = "3000" # Указываем порт через переменную окружения
|
68 |
+
playground_env["HOST"] = "0.0.0.0" # Указываем привязку ко всем интерфейсам
|
69 |
|
70 |
# Проверяем наличие standalone режима
|
71 |
standalone_path = playground_dir / ".next" / "standalone" / "server.js"
|
|
|
87 |
processes.append(playground_process)
|
88 |
|
89 |
# Даем время Playground UI запуститься
|
90 |
+
time.sleep(10) # Увеличиваем время ожидания
|
91 |
|
92 |
# Создаем эффективный прокси-сервер
|
93 |
class ProxyHandler(BaseHTTPRequestHandler):
|
|
|
118 |
def _handle_request(self, method):
|
119 |
try:
|
120 |
# Определяем, какой сервер должен обработать запрос
|
121 |
+
target_host = container_ip # Используем IP контейнера вместо localhost
|
122 |
|
123 |
# API endpoints идут на порт 8080 (API сервер)
|
124 |
if self.path.startswith('/health') or \
|
|
|
134 |
else:
|
135 |
# Все остальные запросы (включая / и UI assets) идут на порт 3000 (Playground)
|
136 |
target_port = 3000
|
137 |
+
|
138 |
+
print(f"Proxying {method} {self.path} to {target_host}:{target_port}")
|
139 |
|
140 |
# Пробуем подключиться к целевому серверу
|
141 |
conn = http.client.HTTPConnection(target_host, target_port, timeout=30)
|
|
|
214 |
<div class="error">
|
215 |
<p><strong>Детали ошибки:</strong> {str(e)}</p>
|
216 |
<p>Целевой порт: {target_port}</p>
|
217 |
+
<p>Целевой хост: {target_host}</p>
|
218 |
</div>
|
219 |
<p>Система пытается запустить все компоненты. Попробуйте обновить страницу через минуту.</p>
|
220 |
+
<p>Технические детали:</p>
|
221 |
+
<pre>
|
222 |
+
Container IP: {container_ip}
|
223 |
+
Method: {method}
|
224 |
+
Path: {self.path}
|
225 |
+
</pre>
|
226 |
</body>
|
227 |
</html>
|
228 |
"""
|