diff --git a/bbit_ai/app/app.py b/bbit_ai/app/app.py index f934c73..31f9723 100644 --- a/bbit_ai/app/app.py +++ b/bbit_ai/app/app.py @@ -43,7 +43,7 @@ async def ai_lab(): app = FastAPI(title="BBIT_AI", lifespan=lifespan) origins = [ "http://localhost:8091", # Vite dev 默认端口 - "https://ai.ronsunny.cn:8090", + "https://ai.bbitcn.net", "*", # ⚠️ 生产环境不要用 ] diff --git a/bbit_ai/app/config/emqx.py b/bbit_ai/app/config/emqx.py index f38d407..5f25072 100644 --- a/bbit_ai/app/config/emqx.py +++ b/bbit_ai/app/config/emqx.py @@ -17,8 +17,8 @@ from routers.Iot import pending_commands from routers.WS import ws_manager # ================= 配置区域 ================= -MQTT_BROKER = "ai.ronsunny.cn" -MQTT_PORT = 8093 +MQTT_BROKER = "mqtt.bbitcn.net" +MQTT_PORT = 8883 MQTT_PASSWORD = "123456" TLS_CONTEXT = ssl.create_default_context() diff --git a/bbit_ai/app/config/minIO.py b/bbit_ai/app/config/minIO.py index 4ed84d9..dee2f13 100644 --- a/bbit_ai/app/config/minIO.py +++ b/bbit_ai/app/config/minIO.py @@ -5,7 +5,7 @@ from minio.commonconfig import CopySource # MinIO 客户端初始化 minio_client = Minio( - "ai.ronsunny.cn:9000", + "storage.bbitcn.net", access_key="minioadmin", secret_key="minioadmin", region="Chengdu", diff --git a/iot/EdgeAgent/bin/config.yaml b/iot/EdgeAgent/bin/config.yaml index 3790ef8..f18d2fc 100644 --- a/iot/EdgeAgent/bin/config.yaml +++ b/iot/EdgeAgent/bin/config.yaml @@ -1,5 +1,5 @@ -version_code: 27 -pid: 29412 +version_code: 29 +pid: 36856 need_update: false control_state: CONTROL_LOST -last_alive_at: 1771987569 +last_alive_at: 1781077623 diff --git a/iot/EdgeAgent/build/linux_amd64/main b/iot/EdgeAgent/build/linux_amd64/main index 546f8cb..9af138c 100644 Binary files a/iot/EdgeAgent/build/linux_amd64/main and b/iot/EdgeAgent/build/linux_amd64/main differ diff --git a/iot/EdgeAgent/build/linux_amd64/updater b/iot/EdgeAgent/build/linux_amd64/updater index c72906d..bb5eda0 100644 Binary files a/iot/EdgeAgent/build/linux_amd64/updater and b/iot/EdgeAgent/build/linux_amd64/updater differ diff --git a/iot/EdgeAgent/build/linux_arm64/main b/iot/EdgeAgent/build/linux_arm64/main index 74767ed..4ddd75a 100644 Binary files a/iot/EdgeAgent/build/linux_arm64/main and b/iot/EdgeAgent/build/linux_arm64/main differ diff --git a/iot/EdgeAgent/build/linux_arm64/updater b/iot/EdgeAgent/build/linux_arm64/updater index bb7fb29..a1d98bc 100644 Binary files a/iot/EdgeAgent/build/linux_arm64/updater and b/iot/EdgeAgent/build/linux_arm64/updater differ diff --git a/iot/EdgeAgent/build/win/config.yaml b/iot/EdgeAgent/build/win/config.yaml index d3dc0eb..0fe63bf 100644 --- a/iot/EdgeAgent/build/win/config.yaml +++ b/iot/EdgeAgent/build/win/config.yaml @@ -1,5 +1,5 @@ -version_code: 27 -pid: 24516 +version_code: 29 +pid: 10956 need_update: false control_state: CONNECTED -last_alive_at: 1771987537 +last_alive_at: 1781081105 diff --git a/iot/EdgeAgent/build/win/main.exe b/iot/EdgeAgent/build/win/main.exe index 279748b..1200658 100644 Binary files a/iot/EdgeAgent/build/win/main.exe and b/iot/EdgeAgent/build/win/main.exe differ diff --git a/iot/EdgeAgent/build/win/updater.exe b/iot/EdgeAgent/build/win/updater.exe index 3cd8f4f..6256882 100644 Binary files a/iot/EdgeAgent/build/win/updater.exe and b/iot/EdgeAgent/build/win/updater.exe differ diff --git a/iot/EdgeAgent/pkg/config/config.go b/iot/EdgeAgent/pkg/config/config.go index 3249420..db630b4 100644 --- a/iot/EdgeAgent/pkg/config/config.go +++ b/iot/EdgeAgent/pkg/config/config.go @@ -13,17 +13,17 @@ const ( // 版本号 APP_VERSION = 29 - BASE_URL = "https://ai.ronsunny.cn:8090" + BASE_URL = "https://ai.bbitcn.net" //BASE_URL = "http://127.0.0.1:13011" LOG_FILE_DIC = "./logs" LOG_CHECK_INTERVAL_HOURS = 10 // 文件轮询检查间隔(秒) - MQTT_BROKER = "tls://ai.ronsunny.cn:8093" + MQTT_BROKER = "ssl://mqtt.bbitcn.net:8883" PASSWORD = "123456" - DOCKER_REGISTRY = "ai.ronsunny.cn:13011" + DOCKER_REGISTRY = "docker.bbitcn.net" DOCKER_USERNAME = "iot_device" DOCKER_PASSWORD = "Bbit000000" - DOCKER_IMAGE = "ai.ronsunny.cn:13011/bbit_iot/ce_sentinel" + DOCKER_IMAGE = "docker.bbitcn.net/bbit_iot/ce_sentinel" DOCKER_CONTAINER_NAME = "BBIT_Project" DOCKER_TIME_OUT = 30 * time.Second diff --git a/ktor/src/main/kotlin/ink/snowflake/server/Application.kt b/ktor/src/main/kotlin/ink/snowflake/server/Application.kt index 7a5047f..c647aa0 100644 --- a/ktor/src/main/kotlin/ink/snowflake/server/Application.kt +++ b/ktor/src/main/kotlin/ink/snowflake/server/Application.kt @@ -31,7 +31,7 @@ const val VIDEO_INPUT_PATH = "C:/tmp/" * 服务器地址 * ADB 秦朗FRP地址 */ -const val SERVER_PATH_FRP = "s3.ronsunny.cn" // 171.212.101.201 +const val SERVER_PATH_FRP = "171.212.101.201" // s3.ronsunny.cn /** * 局域网IP 用于连接PostgreSQL和Radis diff --git a/ktor/src/main/kotlin/ink/snowflake/server/utils/plugins/CORS.kt b/ktor/src/main/kotlin/ink/snowflake/server/utils/plugins/CORS.kt index 82209f8..c23f22d 100644 --- a/ktor/src/main/kotlin/ink/snowflake/server/utils/plugins/CORS.kt +++ b/ktor/src/main/kotlin/ink/snowflake/server/utils/plugins/CORS.kt @@ -13,7 +13,6 @@ fun Application.configureCORS() { anyHost() allowHost("localhost:8089") allowHost("127.0.0.1:8089") - allowHost("ai.ronsunny.cn:8089") // 进一步配置 CORS allowMethod(HttpMethod.Get) diff --git a/ktor/src/main/resources/application.yaml b/ktor/src/main/resources/application.yaml index a7debad..7513f50 100644 --- a/ktor/src/main/resources/application.yaml +++ b/ktor/src/main/resources/application.yaml @@ -30,8 +30,8 @@ ktor: password: "7ZYPc75xCViqSrCg" oss: - endpoint: "ai.ronsunny.cn" - port: 9000 + endpoint: "storage.bbitcn.net" + port: 443 secure: true region: "Chengdu" access-key: "minioadmin" diff --git a/readme.md b/readme.md index eda16f5..d8230a6 100644 --- a/readme.md +++ b/readme.md @@ -13,12 +13,12 @@ - 开发语言:**Java/Kotlin** - **FastAPI**:实验室AI模块后端程序 - 开发语言:**Python** - - **RabbitMQ**:消息队列 - + - ### 中间件 - 牧安云哨IoT中间件 - 开发语言:**Go** + - **RabbitMQ**:消息队列 - ### 人工智能 @@ -53,406 +53,46 @@ - **树莓派**:Raspberry Pi 5 16G - **Jetson**:NVIDIA Jetson Nano 8G - -## 二、端口使用 - -| 键 | 值 | -| ------------------------- | --------------- | -| **公网域名** | ai.ronsunny.cn | -| **公网IP** | 171.212.101.200 | -| **内网地址** | 10.10.12.101 | -| **虚拟机管理地址**,root: | 10.10.12.100 | - -| 协议 | 公网端口 | 内网端口 | docker端口 | docker服务/Host | 技术栈 | 功能作用 | -| ----- | --------- | -------- | ---------- | -------------------- | -------------------- | ------------------------------------------ | -| https | **13011** | 13011 | 13011 | Harbor | Harbor | Harbor**管理界面**,admin:Bbit000000 | -| | | | 8091 | ce_vue | Vue | Vue前端服务-AI实验室 | -| | | 8089 | | | Ktor | 实验室业务后端,使用systemctl启动 | -| | | | 13011 | ce_pybackend | FastAPI | 实验室AI后端 | -| | | 5432 | 5432 | ce_postgres | PostgreSQL | PostgreSQL数据库,postgres:123456 | -| | | 6379 | 6379 | ce_redis | Redis | Radis数据库,无验证 | -| | | | 2379 | ce_etcd | Etcd | Etcd,Key-Value 存储,给ce_milvus使用 | -| https | **9000** | 9000 | 9000 | ce_minio | MinIO | MinIO数据访问 | -| | | 9001 | 9001 | ce_minio | MinIO | MinIO**管理界面**,minioadmin:minioadmin | -| | | 19530 | 19530 | ce_milvus | Milvus | Minvus数据访问 | -| | | 9091 | 9091 | ce_milvus | Milvus | Minvus**管理界面**,需要加/webui,无需登录 | -| | | 3000 | 3000 | ce_attu | Attu | Minvus Attu**管理界面**,无需密码 | -| https | **8090** | 8090 | 8090 | ce_kong | Kong | Kong网关 | -| | | 8001 | 8001 | ce_kong | Kong | Kong Admin API | -| | | 8002 | 8002 | ce_kong | Kong | Kong**管理界面**,无需登录 | -| | | 8444 | 8444 | ce_kong | Kong | Kong Admin API 的 HTTPS 端口 | -| | | 8088 | | | ws-scrcpy | Android远程框架 | -| http | **5672** | 5672 | 5672 | ce_rabbitmq | RabbitMQ | RabbitMQ 客户端连接端口 | -| | | 15672 | 15672 | ce_rabbitmq | RabbitMQ | RabbitMQ**管理界面**,admin:123456 | -| | | 9323 | 9323 | | Docker | Docker debug端口 | -| | | 3001 | 3001 | ce_grafana | Grafana | Grafana**管理界面**,admin:123456 | -| | | 9090 | 9090 | ce_prometheus | Prometheus | Prometheus监控/**管理界面**,无需登录 | -| | | | 9121 | ce_redis_exporter | Prometheus | Prometheus监控Radis的工具 | -| | | | 9187 | ce_postgres_exporter | Prometheus | Prometheus监控PostgreSQL的工具 | -| | | 9100 | host | ce_node_exporter | Prometheus | Prometheus监控主机的工具 | -| | | 8000 | 8000 | ce_bot_server | xiaozhi-esp32-server | 小智AI服务ws端口 | -| | | 8003 | 8003 | ce_bot_server | xiaozhi-esp32-server | 小智AI服务http端口 | -| | | 8005 | 8002 | ce_bot_web | xiaozhi-esp32-server | 小智**管理界面**,admin:Bbit000000 | -| | | 8092 | 8092 | ce_bot_test | xiaozhi-esp32-server | 小智服务器测试页面 | -| | | 8004 | 8004 | ce_bot_mcp | mcp-endpoint-server | 小智MCP接入点 | -| https | **8094** | 8094 | 8080 | CVAT | CVAT | CVAT**管理界面**,bbit:bbit | -| | | 18083 | 18083 | ce_emqx | EMQX | EMQX**管理界面**,admin:Bbit000000 | -| | | 8093 | 1883 | ce_emqx | EMQX | MQTT TCP 端口 | -| https | **8093** | 8883 | 8883 | ce_emqx | EMQX | MQTT TCP TLS 端口 | -| | | 8083 | 8083 | ce_emqx | EMQX | MQTT WS 端口 | -| | | 8084 | 8084 | ce_emqx | EMQX | MQTT WS TLS 端口 | -| | | 3000 | | ce_gitea | Gitea | 管理页面:bbit:12345678 | -| | | | | | | | -| | | | | | | | -| | | | | | | | -| | | | | | | | - - - -## 三、新部署 - -### 3.1 ktor - -1. 将Ktor程序运行installDist打包程序。 - -2. 将程序覆盖于服务器/opt/final/ktor文件夹 - -3. 重启服务 - ``` - sudo systemctl restart ktor.service - - sudo systemctl status ktor.service - ``` - -### 3.2 FastAPI - -1. 打包镜像:运行Dockerfile - ``` - docker build -t ce_pybackend . - ``` - -2. 打标签 - ``` - docker tag ce_pybackend:latest s1.ronsunny.cn:13011/bbit_ai/ce_pybackend:latest - docker tag ce_pybackend:latest s1.ronsunny.cn:13011/bbit_ai/ce_pybackend:1.5 - ``` - -3. 推送镜像 - ``` - docker push s1.ronsunny.cn:13011/bbit_ai/ce_pybackend:1.5 - docker push s1.ronsunny.cn:13011/bbit_ai/ce_pybackend:latest - ``` - -4. (服务器)重启Compose - ``` - docker-compose pull backend - - docker compose up -d - ``` - -### 3.3 Vue - -1. 打包项目 - ``` - pnpm build:antd - ``` - -2. 打包镜像:运行Dockerfile - - ``` - docker build -t ce_vue . - ``` - -3. 打标签 - ``` - docker tag ce_vue:latest s1.ronsunny.cn:13011/bbit_ai/ce_vue:latest - docker tag ce_vue:latest s1.ronsunny.cn:13011/bbit_ai/ce_vue:1.1.0 - ``` - -4. 推送镜像 - ``` - docker push s1.ronsunny.cn:13011/bbit_ai/ce_vue:1.1.0 - docker push s1.ronsunny.cn:13011/bbit_ai/ce_vue:latest - ``` - -5. (服务器)重启Compose - ``` - docker-compose pull vue - docker compose up -d - ``` - -### 3.4 更新并重启Compose - -``` -docker compose down -docker compose pull vue backend -docker compose up -d - -docker image prune -f -``` - -## 四、配置 - -- 安装顺序 - - 1. 安装docker - 2. 运行基本环境infra-compose.yaml - 3. 安装Harbor - 4. 推送镜像 - 5. 运行前后端程序docker-compose.yaml - -- Harbor - - 1. 添加用户 - - 2. 添加仓库 - - 3. 添加仓库用户使用权限 - - 4. (2x客户端)登录 - ``` - docker login ai.ronsunny.cn:13011 - ``` - -- Prometheus - - 1. 设置docker metrics配置文件 - ``` - { - "registry-mirrors": [ - "https://docker.m.daocloud.io", - "https://mirror.baidubce.com", - "https://docker.nju.edu.cn" - ], - "metrics-addr": "10.10.10.9:9323", - "experimental": true, - "insecure-registries": ["s1.ronsunny.cn:13011"] - } - ``` - - 2. 重启docker - ``` - sudo systemctl restart docker - ``` - -- RabbitMQ - - 1. 添加用户 - 2. 添加Vhost - -- [Grafana][https://grafana.com/grafana/dashboards/] - - 1. 创建Prometheus数据源 - - 2. 增加配置 - - | 项目 | 代码 | 描述 | - | ----------- | ----- | ---- | - | MinIO | 13502 | | - | Docker | 9621 | | - | PostgreSQL | 9628 | | - | 主机 | 1860 | | - | RabbitMQ | 10991 | | - | Redis | 11835 | | - | Prometheus | 19268 | | - | 主机 中文版 | 8919 | | - | Kong | 7424 | | - -- MinIO - - ``` - Minio 交换机路由配置 - 交换机video_exchange - 路由/sca - 队列/sca_queue - ``` - - - -## 五、其他 - -docker 权限 - -sudo groupadd docker - -sudo usermod -aG docker kaijihar - -newgrp docker - -### 旧部署 - -后端 - -ktor - -1. 将Ktor程序运行installDist打包程序。 - -2. 将程序覆盖于服务器/opt/final/ktor文件夹 - -3. 将项目目录server/service的ktor.service文件置于服务器/etc/systemd/system/目录 - -4. 输入命令使服务开机自启 - ```shell - sudo systemctl enable ktor.service - sudo systemctl status ktor.service - - - sudo systemctl restart ktor.service - ``` - -python - -1. 打包Docker - ``` - docker build -t ce_pybackend . - ``` - -2. 保存Image为文件 - ``` - docker save -o ce-pybackend.tar ce_pybackend - ``` - -3. 将保存好的Image`ce-pybackend.tar`上传到服务器 - -4. 删除服务器的旧版镜像 - ``` - docker rmi ce_pybackend:latest - ``` - -5. **读取上传的新镜像** - - ``` - docker load -i ce_pybackend.tar - ``` - -其他命令: - -- 测试运行docker - ``` - docker run -d -p 13011:13011 ce_pybackend - ``` - -- 调试运行项目 - ``` - uvicorn app:app --reload --host 0.0.0.0 --port 13011 - ``` - -- docker日志查看 - ``` - docker logs -f ce_pybackend - ``` - -前端 - -直接在wsl中build,不要install - -1. 在vue目录运行docker打包命令 - ```shell - pnpm build:docker - ``` - -2. 将Image保存为文件 - ```shell - docker save -o vue.tar ce_vue - ``` - -3. 将保存好的Image`vue.tar`上传到服务器 - -4. 停掉之前的docker compose - - ``` - docker-compose down - ``` - -5. 删除之前的Image - - ```shell - docker rmi ce_vue:latest - ``` - -6. 在服务器读取Image - ```shell - docker load -i vue.tar - ``` - -7. 重新运行 - - ``` - docker compose up -d - ``` - -### docker - -#### 内网地址 - -windows:host.docker.internal - -Linux:ip addr show docker0 查看 - -#### 相关命令 - -查看所有镜像 - -``` -docker images -``` - -删除镜像 - -``` -docker rm -``` - -删除容器 - -``` -docker rmi 镜像名:Tag -``` - -删除无用镜像 - -``` -docker image prune -``` - -### Vue项目使用 - -- 本地运行dist文件夹 - -```shell -npm install -g http-server -cd dist -http-server -p 8080 -``` - -- VBen项目运行方法 - -1. 下载最新node - -2. 开发 - - ```shell - # 进入项目目录 - cd vue-vben-admin - - # 使用项目指定的pnpm版本进行依赖安装 - npm i -g corepack - - # 安装依赖 - pnpm install - # 启动项目 - pnpm dev - ``` - -3. 本地部署 - ```shell - 构建 - pnpm build - - 预览 - pnpm preview - ``` - - - -[https://grafana.com/grafana/dashboards/]: \ No newline at end of file +## 二、服务分布 + +- 网关服务器 + - 公网IP:116.198.221.236 + - 内网IP:10.1.5.101 + - ssh端口:22000 + - 账号:root +- 显卡服务器 + - 内网IP:10.10.12.101 + +| 域名x.bbitcn.net | 对外 | 对内 | 内网端口 | docker端口 | Docker服务名/Host | 技术栈 | 功能作用 | +| ---------------- | ----------- | ----------- | -------- | ---------- | ----------------- | ---------- | ---------------------------------------- | +| docker | / | / | 13011 | 13011 | Harbor | Harbor | Harbor**管理界面**,admin:Bbit000000 | +| storeage | / | / | 9000 | 9000 | ce_minio | MinIO | MinIO数据访问 | +| | | | 9001 | 9001 | ce_minio | MinIO | MinIO**管理界面**,minioadmin:minioadmin | +| remote | / | / | 8088 | | | ws-scrcpy | Android网页远程框架 | +| ai | / | / | 8091 | 8091 | ce_vue | Vue3 | Vue前端服务-AI实验室 | +| | /api | /api | 8089 | | | Ktor | 实验室业务后端 | +| | /ai | / | 13011 | | ce_pybackend | FastAPI | 实验室AI后端 | +| | /iot | /iot | 13011 | | ce_pybackend | FastAPI | 实验室AI后端-IOT接口 | +| | /api/public | /api/public | 13011 | | ce_pybackend | FastAPI | 实验室AI后端-公开接口 | +| invoice | / | / | 8070 | | | | 农产品发票管理平台 | +| github | / | / | 3000 | 3000 | ce_gitea | Gitea | Git托管仓库 | +| chat | / | / | 8095 | 80 | | Dify | Dify前端 | +| mqtt | tls | tcp | 8883 | 8883 | ce_emqx | EMQX | MQTT TCP TLS 端口 | +| | | | 8083 | 8083 | ce_emqx | EMQX | MQTT WS 端口 | +| | | | 8084 | 8084 | ce_emqx | EMQX | MQTT WS TLS 端口 | +| | | | 18083 | 18083 | ce_emqx | EMQX | EMQX**管理界面**,admin:Bbit000000 | +| | | | 1883 | 1883 | ce_emqx | EMQX | MQTT TCP 端口 | +| | | | 5672 | 5672 | ce_rabbitmq | RabbitMQ | RabbitMQ 客户端连接端口 | +| | | | 15672 | 15672 | ce_rabbitmq | RabbitMQ | RabbitMQ**管理界面**,admin:123456 | +| | | | 5432 | 5432 | ce_postgres | PostgreSQL | PostgreSQL数据库,postgres:123456 | +| | | | 6379 | 6379 | ce_redis | Redis | Radis数据库,无验证 | +| | | | | 2379 | ce_etcd | Etcd | Etcd,Key-Value 存储,供ce_milvus | +| | | | 19530 | 19530 | ce_milvus | Milvus | Minvus数据访问 | +| | | /webui | 9091 | 9091 | ce_milvus | Milvus | Minvus**管理界面**,无需登录 | +| | | | 3002 | 3000 | ce_attu | Attu | Minvus Attu**管理界面**,无需密码 | + +- 暂时未部署项目 + - CVAT + - Vben Admin Demo + - Prometheus + - Grafana \ No newline at end of file diff --git a/vue2/apps/web-antd/.env.production b/vue2/apps/web-antd/.env.production index 9a0bd31..053d5dc 100644 --- a/vue2/apps/web-antd/.env.production +++ b/vue2/apps/web-antd/.env.production @@ -1,10 +1,8 @@ VITE_BASE=/ # 接口地址 -#VITE_GLOB_API_URL=https://ai.ronsunny.cn:8090/api -#VITE_GLOB_API_URL_PY=https://ai.ronsunny.cn:8090/ai -VITE_GLOB_API_URL=https://171.212.101.200:8090/api -VITE_GLOB_API_URL_PY=https://171.212.101.200:8090/ai +VITE_GLOB_API_URL=https://ai.bbitcn.net/api +VITE_GLOB_API_URL_PY=https://ai.bbitcn.net/ai # 是否开启压缩,可以设置为 none, brotli, gzip VITE_COMPRESS=none diff --git a/vue2/apps/web-antd/src/api/ws.ts b/vue2/apps/web-antd/src/api/ws.ts index 6d9983a..ec0bb74 100644 --- a/vue2/apps/web-antd/src/api/ws.ts +++ b/vue2/apps/web-antd/src/api/ws.ts @@ -17,7 +17,7 @@ type WsOptions = { path: (() => string) | string; reconnectInterval?: number; }; -const BASE_WS_URL = 'wss://ai.ronsunny.cn:8090/ai/'; +const BASE_WS_URL = 'wss://ai.bbitcn.net/ai/'; // const BASE_WS_URL = 'ws://127.0.0.1:13011/'; export function createAutoReconnectWs(options: WsOptions) { let ws: null | WebSocket = null; diff --git a/vue2/apps/web-antd/src/preferences.ts b/vue2/apps/web-antd/src/preferences.ts index b9963db..41ca5ce 100644 --- a/vue2/apps/web-antd/src/preferences.ts +++ b/vue2/apps/web-antd/src/preferences.ts @@ -65,6 +65,6 @@ export const overridesPreferences = defineOverridesPreferences({ }, logo: { enable: true, - source: 'https://ai.ronsunny.cn:9000/system/default/favicon.ico', + source: 'https://storage.bbitcn.net/system/default/favicon.ico', }, }); diff --git a/vue2/apps/web-antd/src/views/remote/index.vue b/vue2/apps/web-antd/src/views/remote/index.vue index 123c75e..c2385f0 100644 --- a/vue2/apps/web-antd/src/views/remote/index.vue +++ b/vue2/apps/web-antd/src/views/remote/index.vue @@ -127,7 +127,7 @@ const disconnectAll = async () => {