Download bt-source/panel/class/projectModel/bt_docker/dk_setup.py from SZFSPC/apple: direct link, hf CLI and curl.
- Browser
- Download file 9.82 kB
-
https://huggingface.co/spaces/SZFSPC/apple/resolve/main/bt-source/panel/class/projectModel/bt_docker/dk_setup.py
- Command line
-
hf download hf://spaces/SZFSPC/apple/bt-source/panel/class/projectModel/bt_docker/dk_setup.py
-
curl -L -o dk_setup.py https://huggingface.co/spaces/SZFSPC/apple/resolve/main/bt-source/panel/class/projectModel/bt_docker/dk_setup.py
9.82 kB
| # coding: utf-8 | |
| # ------------------------------------------------------------------- | |
| # 宝塔Linux面板 | |
| # ------------------------------------------------------------------- | |
| # Copyright (c) 2015-2099 宝塔软件(http://bt.cn) All rights reserved. | |
| # ------------------------------------------------------------------- | |
| # Author: zouhw <zhw@bt.cn> | |
| # ------------------------------------------------------------------- | |
| # ------------------------------ | |
| # Docker模型 | |
| # ------------------------------ | |
| import os | |
| import json | |
| import public | |
| import projectModel.bt_docker.dk_public as dp | |
| class main: | |
| def get_config(self, args): | |
| import projectModel.bt_docker.dk_public as dp | |
| # 获取加速配置 | |
| registry_mirrors = self.get_registry_mirrors(args) | |
| if not registry_mirrors["status"]: | |
| return registry_mirrors | |
| else: | |
| if not isinstance(registry_mirrors['msg'], list): | |
| registry_mirrors['msg'] = [registry_mirrors['msg']] | |
| service_status = self.get_service_status() | |
| return public.returnMsg( | |
| True, { | |
| "registry_mirrors": registry_mirrors['msg'], | |
| "service_status": service_status, | |
| "installed": self.check_docker_program(), | |
| "monitor_status": self.get_monitor_status(), | |
| "monitor_save_date": dp.docker_conf()['SAVE'] | |
| }) | |
| def set_monitor_save_date(self, args): | |
| """ | |
| :param save_date: int 例如30 表示 30天 | |
| :param args: | |
| :return: | |
| """ | |
| import re | |
| conf_path = "{}/data/docker.conf".format(public.get_panel_path()) | |
| docker_conf = public.readFile(conf_path) | |
| try: | |
| save_date = int(args.save_date) | |
| except: | |
| return public.returnMsg(False, "监控保存时间需要为正整数!") | |
| if save_date > 999: | |
| return public.returnMsg(False, "监控数据不能保留超过999天!") | |
| if not docker_conf: | |
| docker_conf = "SAVE={}".format(save_date) | |
| public.writeFile(conf_path, docker_conf) | |
| return public.returnMsg(True, "设置成功!") | |
| docker_conf = re.sub("SAVE\s*=\s*\d+", "SAVE={}".format(save_date), | |
| docker_conf) | |
| public.writeFile(conf_path, docker_conf) | |
| dp.write_log("设置监控时间为[{}]天!".format(save_date)) | |
| return public.returnMsg(True, "设置成功!") | |
| def get_service_status(self): | |
| import projectModel.bt_docker.dk_public as dp | |
| sock = '/var/run/docker.pid' | |
| if os.path.exists(sock): | |
| try: | |
| client = dp.docker_client() | |
| if client: | |
| return True | |
| else: | |
| return False | |
| except: | |
| return False | |
| else: | |
| return False | |
| # docker服务状态设置 | |
| def docker_service(self, args): | |
| """ | |
| :param act start/stop/restart | |
| :param args: | |
| :return: | |
| """ | |
| import public | |
| act_dict = {'start': 'start', 'stop': 'stop', 'restart': 'restart'} | |
| if args.act not in act_dict: | |
| return public.returnMsg(False, '没有办法做到这一点!') | |
| exec_str = 'systemctl {} docker'.format(args.act) | |
| if args.act == "stop": | |
| exec_str += "&& systemctl {} docker.socket".format(args.act) | |
| public.ExecShell(exec_str) | |
| dp.write_log("将 Docker 服务状态设置为 [{}] 成功".format(act_dict[args.act])) | |
| return public.returnMsg(True, | |
| "将状态设置为 [{}] 成功".format(act_dict[args.act])) | |
| # 获取加速配置 | |
| def get_registry_mirrors(self, args): | |
| try: | |
| if not os.path.exists('/etc/docker/daemon.json'): | |
| return public.returnMsg(True, []) | |
| if public.readFile('/etc/docker/daemon.json') == '': | |
| return public.returnMsg(True, []) | |
| conf = json.loads(public.readFile('/etc/docker/daemon.json')) | |
| if "registry-mirrors" not in conf: | |
| return public.returnMsg(True, []) | |
| return public.returnMsg(True, conf['registry-mirrors']) | |
| except: | |
| return public.returnMsg( | |
| False, '失败!失败原因:{}'.format(public.get_error_info())) | |
| # 设置加速配置 | |
| def set_registry_mirrors(self, args): | |
| """ | |
| :param registry_mirrors_address registry.docker-cn.com\nhub-mirror.c.163.com | |
| :param args: | |
| :return: | |
| """ | |
| import re | |
| try: | |
| conf = {} | |
| if os.path.exists('/etc/docker/daemon.json'): | |
| conf = json.loads(public.readFile('/etc/docker/daemon.json')) | |
| if not args.registry_mirrors_address.strip(): | |
| # return public.returnMsg(False, '加速地址不能为空!') | |
| if 'registry-mirrors' not in conf: | |
| return public.returnMsg(True, '设置成功') | |
| del (conf['registry-mirrors']) | |
| else: | |
| registry_mirrors = args.registry_mirrors_address.strip().split( | |
| '\n') | |
| for i in registry_mirrors: | |
| if not re.search('https?://', i): | |
| return public.returnMsg( | |
| False, | |
| '加速地址[{}]格式错误<br>参考:https://mirror.ccs.tencentyun.com' | |
| .format(i)) | |
| tmp_registry = registry_mirrors | |
| if isinstance(registry_mirrors, list) and registry_mirrors: | |
| tmp_registry = registry_mirrors[0] | |
| conf['registry-mirrors'] = public.xsssec2(tmp_registry) | |
| if isinstance(conf['registry-mirrors'], str): | |
| conf['registry-mirrors'] = [conf['registry-mirrors']] | |
| public.writeFile('/etc/docker/daemon.json', | |
| json.dumps(conf, indent=2)) | |
| dp.write_log("设置Docker加速成功!") | |
| return public.returnMsg(True, '设置成功') | |
| except: | |
| return public.returnMsg( | |
| False, '设置失败!失败原因:{}'.format(public.get_error_info())) | |
| def get_monitor_status(self): | |
| """ | |
| :return: | |
| """ | |
| # 进程是否存在 | |
| res = public.process_exists( | |
| "python", | |
| cmdline= | |
| "/www/server/panel/class/projectModel/bt_docker/dk_monitor.py") | |
| if res: | |
| return res | |
| res = public.process_exists( | |
| "python3", | |
| cmdline= | |
| "/www/server/panel/class/projectModel/bt_docker/dk_monitor.py") | |
| if res: | |
| return res | |
| return res | |
| def set_docker_monitor(self, args): | |
| """ | |
| 开启docker监控获取docker相取资源信息 | |
| :param act: start/stop | |
| :return: | |
| """ | |
| import time | |
| import projectModel.bt_docker.dk_public as dp | |
| python = "/www/server/panel/pyenv/bin/python" | |
| if not os.path.exists(python): | |
| python = "/www/server/panel/pyenv/bin/python3" | |
| cmd_line = "/www/server/panel/class/projectModel/bt_docker/dk_monitor.py" | |
| if args.act == "start": | |
| shell = "nohup {} {} &".format(python, cmd_line) | |
| public.ExecShell(shell) | |
| time.sleep(1) | |
| if self.get_monitor_status(): | |
| dp.write_log("Docker监控启动成功!") | |
| return public.returnMsg(True, "启动监控成功!") | |
| return public.returnMsg(False, "启动监控失败!") | |
| else: | |
| pid = dp.get_process_id( | |
| "python", | |
| "/www/server/panel/class/projectModel/bt_docker/dk_monitor.py") | |
| if not pid: | |
| pid = dp.get_process_id( | |
| "python3", | |
| "/www/server/panel/class/projectModel/bt_docker/dk_monitor.py" | |
| ) | |
| public.ExecShell("kill -9 {}".format(pid)) | |
| dp.write_log("Docker监控成功停止!") | |
| return public.returnMsg(True, "Docker监控成功停止!") | |
| def check_docker_program(self): | |
| """ | |
| 检查docker和docker-compose是否已经安装 | |
| :return: | |
| """ | |
| docker = "/usr/bin/docker" | |
| docker_compose = "/usr/bin/docker-compose" | |
| if not os.path.exists(docker_compose): | |
| dk_compose_list = ["/usr/libexec/docker/cli-plugins/docker-compose", "/usr/local/docker-compose"] | |
| for i in dk_compose_list: | |
| if os.path.exists(i): | |
| public.ExecShell("ln -sf {} {}".format(i, docker_compose)) | |
| if not os.path.exists(docker) or not os.path.exists(docker_compose): | |
| return False | |
| return True | |
| def install_docker_program(self, args): | |
| """ | |
| 安装docker和docker-compose | |
| :param args: | |
| :return: | |
| """ | |
| import time | |
| mmsg = "Install Docker service" | |
| # Docker_Install_File = "/www/server/panel/install/docker_install.sh" | |
| # execstr = "wget -O {} http://download.bt.cn/install/0/docker_install.sh -T 5" | |
| execstr = "/bin/bash /www/server/panel/install/install_soft.sh 0 install docker_install" | |
| public.M('tasks').add('id,name,type,status,addtime,execstr', | |
| (None, mmsg, 'execshell', '0', | |
| time.strftime('%Y-%m-%d %H:%M:%S'), execstr)) | |
| public.httpPost( | |
| public.GetConfigValue('home') + '/api/panel/plugin_total', { | |
| "pid": "1111111", | |
| 'p_name': "Docker商用模块" | |
| }, 3) | |
| return public.returnMsg(True, "安装任务已添加到队列中!") | |