From 990199ec894a33bf15cda7025716d3d9d35b2c31 Mon Sep 17 00:00:00 2001 From: Mr Chen Date: Tue, 12 Nov 2024 01:00:06 +0800 Subject: [PATCH] update --- new_cli.sh | 5 +- web/admin/__init__.py | 100 ++++++++------------------------ web/admin/dashboard/__init__.py | 1 - web/admin/dashboard/ssh.py | 37 ------------ web/admin/ssh.py | 39 +++++++++++++ web/setting.py | 27 ++++----- 6 files changed, 80 insertions(+), 129 deletions(-) delete mode 100644 web/admin/dashboard/ssh.py create mode 100644 web/admin/ssh.py diff --git a/new_cli.sh b/new_cli.sh index 77c21ddf6..97b66ee1d 100755 --- a/new_cli.sh +++ b/new_cli.sh @@ -60,7 +60,7 @@ mw_start_debug(){ port=$(cat ${DIR}/data/port.pl) fi # gunicorn -b :${port} -k gevent -w 1 app:app - cd ${DIR}/web && gunicorn -b :${port} -w 1 app:app + cd ${DIR}/web && gunicorn -b :${port} -k eventlet -w 1 app:app } mw_start_panel(){ @@ -68,7 +68,8 @@ mw_start_panel(){ if [ -f ${DIR}/data/port.pl ];then port=$(cat ${DIR}/data/port.pl) fi - cd ${DIR}/web && gunicorn -b :${port} -w 1 app:app + # cd ${DIR}/web && gunicorn -b :${port} -k geventwebsocket.gunicorn.workers.GeventWebSocketWorker -w 1 app:app + cd ${DIR}/web && gunicorn -b :${port} -k eventlet -w 1 app:app } mw_start_bgtask(){ diff --git a/web/admin/__init__.py b/web/admin/__init__.py index 20495c45d..e7f47b7f6 100644 --- a/web/admin/__init__.py +++ b/web/admin/__init__.py @@ -17,36 +17,27 @@ import logging from datetime import timedelta from flask import Flask +from flask import request +from flask import Response from flask_socketio import SocketIO, emit, send from flask import Flask, abort, current_app, session, url_for from flask import Blueprint, render_template from flask import render_template_string -from flask import request -from flask import Response + from flask_migrate import Migrate from flask_caching import Cache from werkzeug.local import LocalProxy -# from admin import model from admin import setup -import thisdb - -from admin.model import db as sys_db - import core.mw as mw import config import utils.config as utils_config - -root_dir = mw.getRunDir() - -socketio = SocketIO(manage_session=False, async_mode='threading', - logger=False, engineio_logger=False, debug=False, - ping_interval=25, ping_timeout=120) +import thisdb app = Flask(__name__, template_folder='templates/default') @@ -79,6 +70,13 @@ app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True setup.init() +# webssh +socketio = SocketIO() +socketio.init_app(app) +from .ssh import websshRun +websshRun() + + app.config['BASIC_AUTH_OPEN'] = False try: basic_auth = model.getOptionByJson('basic_auth', default={'open':False}) @@ -158,68 +156,11 @@ def inject_global_variables(): return dict(config=g_config, data=data) -# from flasgger import Swagger -# api = Api(app, version='1.0', title='API', description='API 文档') -# Swagger(app) - -# @app.route('/colors//') -# def colors(palette): -# """ -# 根据调色板名称返回颜色列表 -# --- -# parameters: -# - name: palette -# in: path -# type: string -# enum: ['all', 'rgb', 'cmyk'] -# required: true -# default: all -# definitions: -# Palette: -# type: object -# properties: -# palette_name: -# type: array -# items: -# $ref: '#/definitions/Color' -# Color: -# type: string -# responses: -# 200: -# description: 返回的颜色列表,可按调色板过滤 -# schema: -# $ref: '#/definitions/Palette' -# examples: -# rgb: ['red', 'green', 'blue'] -# """ -# all_colors = { -# 'cmyk': ['cyan', 'magenta', 'yellow', 'black'], -# 'rgb': ['red', 'green', 'blue'] -# } -# if palette == 'all': -# result = all_colorselse -# result = {palette: all_colors.get(palette)} -# return jsonify(result) - - - - -# Log the startup -app.logger.info('########################################################') -app.logger.info('Starting %s v%s...', config.APP_NAME, config.APP_VERSION) -app.logger.info('########################################################') -app.logger.debug("Python syspath: %s", sys.path) - - - -# OK -socketio.init_app(app, cors_allowed_origins="*") - -from gevent.pywsgi import WSGIServer -from geventwebsocket.handler import WebSocketHandler -http_server = WSGIServer(('0.0.0.0', config.DEFAULT_SERVER_PORT), app, handler_class=WebSocketHandler) -http_server.serve_forever() -socketio.run(app, host=HOST, port=PORT) +# from gevent.pywsgi import WSGIServer +# from geventwebsocket.handler import WebSocketHandler +# http_server = WSGIServer(('0.0.0.0', config.DEFAULT_SERVER_PORT), app, handler_class=WebSocketHandler) +# http_server.serve_forever() +# socketio.run(app, host='0.0.0.0', port=PORT) # def create_app(app_name = None): # @@ -230,4 +171,11 @@ socketio.run(app, host=HOST, port=PORT) # cli_mode = False # if app_name.endswith('-cli'): # cli_mode = True -# return app \ No newline at end of file +# return app + + +# Log the startup +app.logger.info('########################################################') +app.logger.info('Starting %s v%s...', config.APP_NAME, config.APP_VERSION) +app.logger.info('########################################################') +app.logger.debug("Python syspath: %s", sys.path) \ No newline at end of file diff --git a/web/admin/dashboard/__init__.py b/web/admin/dashboard/__init__.py index 259b242db..77a962a50 100644 --- a/web/admin/dashboard/__init__.py +++ b/web/admin/dashboard/__init__.py @@ -11,4 +11,3 @@ from .dashboard import * from .login import * -from .ssh import * diff --git a/web/admin/dashboard/ssh.py b/web/admin/dashboard/ssh.py deleted file mode 100644 index 86bfd30b0..000000000 --- a/web/admin/dashboard/ssh.py +++ /dev/null @@ -1,37 +0,0 @@ -# coding:utf-8 - -# --------------------------------------------------------------------------------- -# MW-Linux面板 -# --------------------------------------------------------------------------------- -# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. -# --------------------------------------------------------------------------------- -# Author: midoks -# --------------------------------------------------------------------------------- - -from flask import request - -from admin import socketio -from admin.common import isLogined - - -@socketio.on('webssh_websocketio') -def webssh_websocketio(data): - if not isLogined(): - emit('server_response', {'data': '会话丢失,请重新登陆面板!\r\n'}) - return - import utils.ssh.ssh_terminal as ssh_terminal - shell_client = ssh_terminal.ssh_terminal.instance() - shell_client.run(request.sid, data) - return - - -@socketio.on('webssh') -def webssh(data): - if not isLogined(): - emit('server_response', {'data': '会话丢失,请重新登陆面板!\r\n'}) - return None - - import utils.ssh.ssh_local as ssh_local - shell = ssh_local.ssh_local.instance() - shell.run(data) - return \ No newline at end of file diff --git a/web/admin/ssh.py b/web/admin/ssh.py new file mode 100644 index 000000000..3da737368 --- /dev/null +++ b/web/admin/ssh.py @@ -0,0 +1,39 @@ +# coding:utf-8 + +# --------------------------------------------------------------------------------- +# MW-Linux面板 +# --------------------------------------------------------------------------------- +# copyright (c) 2018-∞(https://github.com/midoks/mdserver-web) All rights reserved. +# --------------------------------------------------------------------------------- +# Author: midoks +# --------------------------------------------------------------------------------- + + +from flask_socketio import SocketIO, emit, send +from flask import request + +from admin import app,socketio +from .common import isLogined + +def websshRun(): + @socketio.on('webssh_websocketio') + def webssh_websocketio(data): + if not isLogined(): + emit('server_response', {'data': '会话丢失,请重新登陆面板!\r\n'}) + return + import utils.ssh.ssh_terminal as ssh_terminal + shell_client = ssh_terminal.ssh_terminal.instance() + shell_client.run(request.sid, data) + return + + + @socketio.on('webssh') + def webssh(data): + if not isLogined(): + emit('server_response', {'data': '会话丢失,请重新登陆面板!\r\n'}) + return None + + import utils.ssh.ssh_local as ssh_local + shell = ssh_local.ssh_local.instance() + shell.run(data) + return diff --git a/web/setting.py b/web/setting.py index d914c71a9..332e17387 100755 --- a/web/setting.py +++ b/web/setting.py @@ -33,25 +33,25 @@ if not os.path.exists(log_dir): os.mkdir(log_dir) # default port -mw_port = '7200' +panel_port = '7200' default_port_file = panel_dir+'/data/port.pl' if os.path.exists(default_port_file): - mw_port = mw.readFile(default_port_file) - mw_port.strip() -# else: -# import firewall_api -# import common -# common.initDB() -# mw_port = str(random.randint(10000, 65530)) -# firewall_api.firewall_api().addAcceptPortArgs(mw_port, 'WEB面板', 'port') -# mw.writeFile('data/port.pl', mw_port) + panel_port = mw.readFile(default_port_file) + panel_port.strip() +else: + from utils.firewall import Firewall as MwFirewall + import common + common.initDB() + mw_port = str(random.randint(10000, 65530)) + MwFirewall.instance().addAcceptPort(panel_port, 'WEB面板', 'port') + mw.writeFile('data/port.pl', panel_port) bind = [] default_ipv6_file = panel_dir+'/data/ipv6.pl' if os.path.exists(default_ipv6_file): - bind.append('[0:0:0:0:0:0:0:0]:%s' % mw_port) + bind.append('[0:0:0:0:0:0:0:0]:%s' % panel_port) else: - bind.append('0.0.0.0:%s' % mw_port) + bind.append('0.0.0.0:%s' % panel_port) if workers > 2: workers = 1 @@ -61,6 +61,7 @@ backlog = 512 reload = False daemon = True # worker_class = 'geventwebsocket.gunicorn.workers.GeventWebSocketWorker' +worker_class = 'eventlet' timeout = 600 keepalive = 60 preload_app = True @@ -69,4 +70,4 @@ access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"' loglevel = 'info' errorlog = log_dir + '/panel_error.log' accesslog = log_dir + '/panel.log' -pidfile = log_dir + '/mw.pid' +pidfile = log_dir + '/panel.pid'