From e783b70609076aef992ea2da080d13cce90c4f09 Mon Sep 17 00:00:00 2001 From: Meng Sen Date: Mon, 1 Sep 2025 11:57:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=E5=BA=94=E7=94=A8=20Termix?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Meng Sen --- apps/termix/README.md | 47 ++++++++++++++ apps/termix/data.yml | 14 +++++ apps/termix/latest/data.yml | 17 +++++ apps/termix/latest/docker-compose.yml | 23 +++++++ apps/termix/latest/envs/default.env | 2 + apps/termix/latest/envs/global.env | 2 + apps/termix/latest/scripts/init.sh | 17 +++++ apps/termix/latest/scripts/uninstall.sh | 10 +++ apps/termix/latest/scripts/upgrade.sh | 17 +++++ apps/termix/logo.png | Bin 0 -> 9840 bytes apps/termix/logo.svg | 80 ++++++++++++++++++++++++ 11 files changed, 229 insertions(+) create mode 100644 apps/termix/README.md create mode 100644 apps/termix/data.yml create mode 100644 apps/termix/latest/data.yml create mode 100644 apps/termix/latest/docker-compose.yml create mode 100644 apps/termix/latest/envs/default.env create mode 100644 apps/termix/latest/envs/global.env create mode 100644 apps/termix/latest/scripts/init.sh create mode 100644 apps/termix/latest/scripts/uninstall.sh create mode 100644 apps/termix/latest/scripts/upgrade.sh create mode 100644 apps/termix/logo.png create mode 100644 apps/termix/logo.svg diff --git a/apps/termix/README.md b/apps/termix/README.md new file mode 100644 index 000000000..243afa071 --- /dev/null +++ b/apps/termix/README.md @@ -0,0 +1,47 @@ +# Termix + +服务器管理平台 + +![Termix](https://file.lifebus.top/imgs/termix_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Termix 是一个基于 Web 的服务器管理平台,具有 SSH 终端、隧道和文件编辑功能。 + +## 特性 + +### SSH 终端访问 + +功能齐全的终端,支持分屏(最多 4 个面板)和选项卡系统 + +### SSH 隧道管理 + +通过自动重新连接和运行状况监控创建和管理 SSH 隧道 + +### 远程文件编辑器 + +使用语法突出显示、文件管理功能(上传、删除、重命名、删除文件)直接在远程服务器上编辑文件 + +### SSH 主机管理器 + +使用标签和文件夹保存、组织和管理您的 SSH 连接 + +### 服务器统计信息 + +查看任何 SSH 服务器上的 CPU、内存和 HDD 使用情况 + +### 用户身份验证 + +通过管理控制和 OIDC 支持进行安全用户管理,并计划提供更多身份验证类型 + +### 现代 UI + +使用 React、Tailwind CSS 和 Shadcn 构建的干净界面 + + + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/termix/data.yml b/apps/termix/data.yml new file mode 100644 index 000000000..e946bb50b --- /dev/null +++ b/apps/termix/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: termix + name: Termix + tags: + - WebSite + - Local + shortDescZh: 服务器管理平台 + shortDescEn: Server management platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://docs.termix.site/ + github: https://github.com/LukeGus/Termix/ + document: https://docs.termix.site/ diff --git a/apps/termix/latest/data.yml b/apps/termix/latest/data.yml new file mode 100644 index 000000000..6a8ce7fb5 --- /dev/null +++ b/apps/termix/latest/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: "/home/termix" + edit: true + envKey: TERMIX_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number diff --git a/apps/termix/latest/docker-compose.yml b/apps/termix/latest/docker-compose.yml new file mode 100644 index 000000000..0fefeb8d0 --- /dev/null +++ b/apps/termix/latest/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true + +services: + termix: + image: ghcr.io/lukegus/termix:latest + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + volumes: + - ${TERMIX_ROOT_PATH}/data:/app/data + environment: + - TZ=Asia/Shanghai + - PORT=8080 diff --git a/apps/termix/latest/envs/default.env b/apps/termix/latest/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/apps/termix/latest/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/apps/termix/latest/envs/global.env b/apps/termix/latest/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/apps/termix/latest/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/apps/termix/latest/scripts/init.sh b/apps/termix/latest/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/termix/latest/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/termix/latest/scripts/uninstall.sh b/apps/termix/latest/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/apps/termix/latest/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/termix/latest/scripts/upgrade.sh b/apps/termix/latest/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/termix/latest/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/apps/termix/logo.png b/apps/termix/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..42b51d50198a748cbd3430d04d122b810788a5c8 GIT binary patch literal 9840 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 + + + + + + + + + >_ + + + + + + + + +