From c393a7b75a664094d40f5ca8e7740f0d7275992d Mon Sep 17 00:00:00 2001 From: qiaofeng1227 <76487013@qq.com> Date: Thu, 18 May 2023 11:45:59 +0800 Subject: [PATCH] new need --- appmanage/Dockerfile | 2 +- appmanage/api/model/app.py | 6 ++ appmanage/api/model/config.py | 5 +- appmanage/api/service/manage.py | 101 ++++++++++++++++++++------------ 4 files changed, 71 insertions(+), 43 deletions(-) diff --git a/appmanage/Dockerfile b/appmanage/Dockerfile index ef28a3a5..d6cf741e 100644 --- a/appmanage/Dockerfile +++ b/appmanage/Dockerfile @@ -10,7 +10,7 @@ COPY static ./static COPY requirements.txt main.py ./ RUN apt update -# Install supervisord +# Install supervisords RUN apt install -y supervisor COPY config/supervisord.conf /etc/supervisor/conf.d/supervisord.conf COPY config/cmd.sh /cmd.sh diff --git a/appmanage/api/model/app.py b/appmanage/api/model/app.py index 92d8f260..f889a766 100644 --- a/appmanage/api/model/app.py +++ b/appmanage/api/model/app.py @@ -10,5 +10,11 @@ class App(BaseModel): status: str status_reason: StatusReason = None official_app: bool + app_version: str + create_time: str + volume_data = [] + config_path = str image_url: str + app_https: bool + app_replace_url: bool config: Config = None diff --git a/appmanage/api/model/config.py b/appmanage/api/model/config.py index 5b2c27b3..8a767f4d 100644 --- a/appmanage/api/model/config.py +++ b/appmanage/api/model/config.py @@ -5,7 +5,6 @@ class Config(BaseModel): compose_file: str url: str admin_url: str - user_name: str - password: str + admin_username: str + admin_password: str default_domain: str - set_domain: str diff --git a/appmanage/api/service/manage.py b/appmanage/api/service/manage.py index 10e14c10..869c185b 100644 --- a/appmanage/api/service/manage.py +++ b/appmanage/api/service/manage.py @@ -297,7 +297,13 @@ def get_apps_from_compose(): user_name = "" password = "" official_app = False - + app_version = "" + create_time = "" + volume_data = [] + config_path = app_path + app_https = False + app_replace_url = False + default_domain = "" if customer_name in ['w9appmanage', 'w9nginxproxymanager','w9redis','w9portainer'] and app_path == '/data/apps/stackhub/docker/' + customer_name: continue # get code @@ -319,47 +325,67 @@ def get_apps_from_compose(): image_url = get_Image_url(app_name) # get env info path = app_path + "/.env" - # get port and url try: - http_port = list(docker.read_env( - path, "APP_HTTP_PORT").values())[0] - port = int(http_port) - easy_url = "http://" + ip + ":" + str(port) - url = get_url(app_name, easy_url) - admin_url = get_admin_url(app_name, url) + domain = list(docker.read_env(path, "APP_URL").values())[0] + if "appname.example.com" in domain or ip in domain: + default_domain = "" + else: + default_domain = domain except IndexError: + pass + try: + app_version = list(docker.read_env(path, "APP_VERSION").values())[0] + volume_data = ["/var/lib/docker/volumes"] + user_name = list(docker.read_env(path, "APP_USER").values())[0] + password = list(docker.read_env(path, "POWER_PASSWORD").values())[0] + + except IndexError: + pass + try: + replace = list(docker.read_env(path, "APP_URL_REPLACE").values())[0] + if replace == "true": + app_replace_url = True + https = list(docker.read_env(path, "APP_HTTPS_ACCESS").values())[0] + if https == "true": + app_https = True + except IndexError: + pass + if user_name != "": + try: + http_port = list(docker.read_env(path, "APP_HTTP_PORT").values())[0] + port = int(http_port) + if app_https: + easy_url = "https://" + ip + ":" + str(port) + else: + easy_url = "http://" + ip + ":" + str(port) + url = easy_url + admin_url = get_admin_url(customer_name, url) + except IndexError: + pass + else: try: db_port = list(docker.read_env(path, "APP_DB.*_PORT").values())[0] port = int(db_port) except IndexError: pass - # get user_name - try: - user_name = list(docker.read_env(path, "APP_USER").values())[0] - except IndexError: - pass - # get password - try: - password = list(docker.read_env(path, "POWER_PASSWORD").values())[0] - except IndexError: - pass else: app_name = customer_name app_id = customer_name + "_" + customer_name if status in ['running', 'exited']: config = Config(port=port, compose_file=volume, url=url, admin_url=admin_url, - user_name=user_name, password=password, default_domain="", set_domain="") + app_username=user_name, app_password=password, default_domain=default_domain) else: config = None if status == "failed": status_reason = StatusReason(Code=const.ERROR_SERVER_SYSTEM, Message="system original error", Detail="unknown error") else: status_reason = None - - app = App(app_id=app_id, app_name=app_name, customer_name=customer_name, trade_mark=trade_mark, status=status, - status_reason=status_reason, official_app=official_app, image_url=image_url, - config=config) + app = App(app_id=id, app_name=app_name, customer_name=customer_name, trade_mark=trade_mark, + app_version=app_version,create_time=create_time,volume_data=volume_data,config_path=config_path, + status=status, status_reason=status_reason, official_app=official_app, image_url=image_url, + app_https=app_https,app_replace_url=app_https,config=config) + app_list.append(app.dict()) return app_list @@ -466,7 +492,10 @@ def get_rq_app(id, status, code, message, detail): customer_name = id.split('_')[1] # 当app还在RQ时,可能文件夹还没创建,无法获取trade_mark trade_mark = "" - + app_version = "" + create_time = "" + volume_data = [] + config_path = "" image_url = get_Image_url(app_name) config = None if status == "installing" : @@ -475,8 +504,9 @@ def get_rq_app(id, status, code, message, detail): status_reason = StatusReason(Code=code, Message=message, Detail=detail) app = App(app_id=id, app_name=app_name, customer_name=customer_name, trade_mark=trade_mark, + app_version=app_version,create_time=create_time,volume_data=volume_data,config_path=config_path, status=status, status_reason=status_reason, official_app=True, image_url=image_url, - config=config) + app_https=False,app_replace_url=False,config=config) return app.dict() def get_Image_url(app_name): @@ -486,23 +516,16 @@ def get_Image_url(app_name): def get_url(app_name, easy_url): url = easy_url - if app_name == "joomla": - url = easy_url + "/administrator" - elif app_name == "other": - url = easy_url + "/administrator" - else: - url = easy_url return url - -def get_admin_url(app_name, url): +def get_admin_url(customer_name, url): admin_url = "" - if app_name == "wordpress": - admin_url = url + "/wp-admin" - elif app_name == "other": - admin_url = url + "/admin" - else: - admin_url = "" + path = "/data/apps/" + customer_name + try: + admin_path = list(docker.read_env(path, "APP_ADMIN_PATH").values())[0] + admin_url = url + admin_path + except IndexError: + pass return admin_url