Add configurable TCP ports and hosts for web interface and inter-process communication

- Add network configuration settings: web_host, web_port, backend_host, backend_web_port, backend_worker_port
- Update web.py to use configurable host and port for Flask app
- Update backend.py to use configurable ports for socket servers
- Update worker processes to use configurable backend worker port
- Add network configuration section to admin panel
- Update command line arguments to accept network settings
- Maintain backward compatibility with default values
parent 53c252b3
Pipeline #189 canceled with stages
...@@ -37,7 +37,10 @@ from vidai.config import ( ...@@ -37,7 +37,10 @@ from vidai.config import (
get_optimize, set_optimize, get_ffmpeg, set_ffmpeg, get_flash, set_flash, get_optimize, set_optimize, get_ffmpeg, set_ffmpeg, get_flash, set_flash,
get_host, set_host, get_port, set_port, get_debug, set_debug, get_allowed_dir, set_allowed_dir, get_host, set_host, get_port, set_port, get_debug, set_debug, get_allowed_dir, set_allowed_dir,
get_comm_type, set_comm_type, get_cluster_host, set_cluster_host, get_cluster_port, get_comm_type, set_comm_type, get_cluster_host, set_cluster_host, get_cluster_port,
set_cluster_port, get_cluster_token, set_cluster_token, is_cluster_client, set_cluster_client set_cluster_port, get_cluster_token, set_cluster_token, is_cluster_client, set_cluster_client,
get_web_host, set_web_host, get_web_port, set_web_port,
get_backend_host, set_backend_host, get_backend_web_port, set_backend_web_port,
get_backend_worker_port, set_backend_worker_port
) )
def main(): def main():
...@@ -63,6 +66,11 @@ Examples: ...@@ -63,6 +66,11 @@ Examples:
default_host = get_host() default_host = get_host()
default_port = get_port() default_port = get_port()
default_debug = get_debug() default_debug = get_debug()
default_web_host = get_web_host()
default_web_port = get_web_port()
default_backend_host = get_backend_host()
default_backend_web_port = get_backend_web_port()
default_backend_worker_port = get_backend_worker_port()
parser.add_argument( parser.add_argument(
'--model', '--model',
...@@ -131,6 +139,39 @@ Examples: ...@@ -131,6 +139,39 @@ Examples:
help=f'Port to bind the server to (default: {default_port})' help=f'Port to bind the server to (default: {default_port})'
) )
parser.add_argument(
'--web-host',
default=default_web_host,
help=f'Web interface host (default: {default_web_host})'
)
parser.add_argument(
'--web-port',
type=int,
default=default_web_port,
help=f'Web interface port (default: {default_web_port})'
)
parser.add_argument(
'--backend-host',
default=default_backend_host,
help=f'Backend host (default: {default_backend_host})'
)
parser.add_argument(
'--backend-web-port',
type=int,
default=default_backend_web_port,
help=f'Backend web communication port (default: {default_backend_web_port})'
)
parser.add_argument(
'--backend-worker-port',
type=int,
default=default_backend_worker_port,
help=f'Backend worker communication port (default: {default_backend_worker_port})'
)
parser.add_argument( parser.add_argument(
'--debug', '--debug',
action='store_true', action='store_true',
...@@ -178,6 +219,11 @@ Examples: ...@@ -178,6 +219,11 @@ Examples:
set_comm_type(args.comm_type) set_comm_type(args.comm_type)
set_host(args.host) set_host(args.host)
set_port(args.port) set_port(args.port)
set_web_host(args.web_host)
set_web_port(args.web_port)
set_backend_host(args.backend_host)
set_backend_web_port(args.backend_web_port)
set_backend_worker_port(args.backend_worker_port)
set_debug(args.debug) set_debug(args.debug)
set_cluster_host(args.cluster_host) set_cluster_host(args.cluster_host)
set_cluster_port(args.cluster_port) set_cluster_port(args.cluster_port)
......
...@@ -167,7 +167,8 @@ def backend_process() -> None: ...@@ -167,7 +167,8 @@ def backend_process() -> None:
web_server.start(handle_web_message) web_server.start(handle_web_message)
else: else:
# Start web server on TCP # Start web server on TCP
web_server = SocketServer(host='localhost', port=5001, comm_type='tcp') from .config import get_backend_web_port
web_server = SocketServer(host='localhost', port=get_backend_web_port(), comm_type='tcp')
web_server.start(handle_web_message) web_server.start(handle_web_message)
try: try:
......
...@@ -272,7 +272,13 @@ def get_all_settings() -> dict: ...@@ -272,7 +272,13 @@ def get_all_settings() -> dict:
'db_mysql_user': config.get('db_mysql_user', 'vidai'), 'db_mysql_user': config.get('db_mysql_user', 'vidai'),
'db_mysql_password': config.get('db_mysql_password', ''), 'db_mysql_password': config.get('db_mysql_password', ''),
'db_mysql_database': config.get('db_mysql_database', 'vidai'), 'db_mysql_database': config.get('db_mysql_database', 'vidai'),
'db_mysql_charset': config.get('db_mysql_charset', 'utf8mb4') 'db_mysql_charset': config.get('db_mysql_charset', 'utf8mb4'),
# Network settings
'web_host': config.get('web_host', '0.0.0.0'),
'web_port': int(config.get('web_port', '5000')),
'backend_host': config.get('backend_host', 'localhost'),
'backend_web_port': int(config.get('backend_web_port', '5001')),
'backend_worker_port': int(config.get('backend_worker_port', '5002'))
} }
...@@ -372,4 +378,30 @@ def set_db_mysql_config(host: str, port: int, user: str, password: str, database ...@@ -372,4 +378,30 @@ def set_db_mysql_config(host: str, port: int, user: str, password: str, database
set_config('db_mysql_user', user) set_config('db_mysql_user', user)
set_config('db_mysql_password', password) set_config('db_mysql_password', password)
set_config('db_mysql_database', database) set_config('db_mysql_database', database)
set_config('db_mysql_charset', charset) set_config('db_mysql_charset', charset)
\ No newline at end of file
# Network settings
def set_web_host(host: str) -> None:
"""Set web interface host."""
set_config('web_host', host)
def set_web_port(port: int) -> None:
"""Set web interface port."""
set_config('web_port', str(port))
def set_backend_host(host: str) -> None:
"""Set backend host."""
set_config('backend_host', host)
def set_backend_web_port(port: int) -> None:
"""Set backend web communication port."""
set_config('backend_web_port', str(port))
def set_backend_worker_port(port: int) -> None:
"""Set backend worker communication port."""
set_config('backend_worker_port', str(port))
\ No newline at end of file
...@@ -50,11 +50,12 @@ os.makedirs('static', exist_ok=True) ...@@ -50,11 +50,12 @@ os.makedirs('static', exist_ok=True)
SESSION_COOKIE = 'vidai_session' SESSION_COOKIE = 'vidai_session'
# Communicator to backend # Communicator to backend
from .config import get_backend_host, get_backend_web_port
comm_type = get_comm_type() comm_type = get_comm_type()
if comm_type == 'unix': if comm_type == 'unix':
comm = SocketCommunicator(socket_path='/tmp/vidai_web.sock', comm_type='unix') comm = SocketCommunicator(socket_path='/tmp/vidai_web.sock', comm_type='unix')
else: else:
comm = SocketCommunicator(host='localhost', port=5001, comm_type='tcp') comm = SocketCommunicator(host=get_backend_host(), port=get_backend_web_port(), comm_type='tcp')
comm.connect() comm.connect()
def get_session_id() -> Optional[str]: def get_session_id() -> Optional[str]:
...@@ -806,6 +807,14 @@ def admin_config(): ...@@ -806,6 +807,14 @@ def admin_config():
charset=request.form.get('db_mysql_charset', 'utf8mb4') charset=request.form.get('db_mysql_charset', 'utf8mb4')
) )
# Network configuration
from .config import set_web_host, set_web_port, set_backend_host, set_backend_web_port, set_backend_worker_port
set_web_host(request.form.get('web_host', '0.0.0.0'))
set_web_port(int(request.form.get('web_port', '5000')))
set_backend_host(request.form.get('backend_host', 'localhost'))
set_backend_web_port(int(request.form.get('backend_web_port', '5001')))
set_backend_worker_port(int(request.form.get('backend_worker_port', '5002')))
settings = get_all_settings() settings = get_all_settings()
html = ''' html = '''
<!DOCTYPE html> <!DOCTYPE html>
...@@ -1030,6 +1039,28 @@ def admin_config(): ...@@ -1030,6 +1039,28 @@ def admin_config():
}); });
</script> </script>
</div> </div>
<div class="section">
<h3>Network Configuration</h3>
<form method="post">
<label>Web Interface Host:</label>
<input type="text" name="web_host" value="{{ settings.get('web_host', '0.0.0.0') }}">
<label>Web Interface Port:</label>
<input type="number" name="web_port" value="{{ settings.get('web_port', 5000) }}" min="1" max="65535">
<label>Backend Host:</label>
<input type="text" name="backend_host" value="{{ settings.get('backend_host', 'localhost') }}">
<label>Backend Web Port:</label>
<input type="number" name="backend_web_port" value="{{ settings.get('backend_web_port', 5001) }}" min="1" max="65535">
<label>Backend Worker Port:</label>
<input type="number" name="backend_worker_port" value="{{ settings.get('backend_worker_port', 5002) }}" min="1" max="65535">
<button type="submit">Save Network Configuration</button>
</form>
</div>
</div> </div>
</body> </body>
</html> </html>
...@@ -1452,7 +1483,8 @@ def serve_static(filename): ...@@ -1452,7 +1483,8 @@ def serve_static(filename):
return send_from_directory('static', filename) return send_from_directory('static', filename)
if __name__ == "__main__": if __name__ == "__main__":
app.run(host='0.0.0.0', debug=True) from .config import get_web_host, get_web_port, get_debug
app.run(host=get_web_host(), port=get_web_port(), debug=get_debug())
@app.route('/', methods=['GET', 'POST']) @app.route('/', methods=['GET', 'POST'])
def index(): def index():
......
...@@ -178,7 +178,8 @@ def worker_process(backend_type: str): ...@@ -178,7 +178,8 @@ def worker_process(backend_type: str):
if comm_type == 'unix': if comm_type == 'unix':
comm = SocketCommunicator(socket_path='/tmp/vidai_workers.sock', comm_type='unix') comm = SocketCommunicator(socket_path='/tmp/vidai_workers.sock', comm_type='unix')
else: else:
comm = SocketCommunicator(host='localhost', port=5002, comm_type='tcp') from .config import get_backend_worker_port
comm = SocketCommunicator(host='localhost', port=get_backend_worker_port(), comm_type='tcp')
comm.connect() comm.connect()
# Register with backend # Register with backend
......
...@@ -51,7 +51,8 @@ def worker_process(backend_type: str): ...@@ -51,7 +51,8 @@ def worker_process(backend_type: str):
if comm_type == 'unix': if comm_type == 'unix':
comm = SocketCommunicator(socket_path='/tmp/vidai_workers.sock', comm_type='unix') comm = SocketCommunicator(socket_path='/tmp/vidai_workers.sock', comm_type='unix')
else: else:
comm = SocketCommunicator(host='localhost', port=5002, comm_type='tcp') from .config import get_backend_worker_port
comm = SocketCommunicator(host='localhost', port=get_backend_worker_port(), comm_type='tcp')
comm.connect() comm.connect()
# Register with backend # Register with backend
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment