|
|
|
|
|
import os
|
|
|
import socket
|
|
|
import uvicorn
|
|
|
from blackbox_server import app
|
|
|
|
|
|
try:
|
|
|
from config import SERVER_CONFIG
|
|
|
except Exception:
|
|
|
SERVER_CONFIG = {"host": "0.0.0.0", "port": 8090}
|
|
|
|
|
|
|
|
|
def find_free_port(start_port: int, max_tries: int = 50) -> int:
|
|
|
"""Find an available TCP port starting from start_port."""
|
|
|
for port in range(start_port, start_port + max_tries):
|
|
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
|
|
|
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
|
try:
|
|
|
s.bind(("0.0.0.0", port))
|
|
|
return port
|
|
|
except OSError:
|
|
|
continue
|
|
|
return start_port
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
host = SERVER_CONFIG.get("host", "0.0.0.0")
|
|
|
base_port = int(os.getenv("PORT") or SERVER_CONFIG.get("port", 8090))
|
|
|
port = find_free_port(base_port)
|
|
|
if port != base_port:
|
|
|
print(f"⚠️ Port {base_port} in use. Switching to free port {port}.")
|
|
|
print(f"🚀 Starting Blackbox Reverse OpenAI API Server on {host}:{port} ...")
|
|
|
uvicorn.run(app, host=host, port=port, reload=False, log_level="info")
|
|
|
|
|
|
|
|
|
|