From a2ec907bcc6d7535bdc5ee813a348edd3ba5e9c6 Mon Sep 17 00:00:00 2001 From: Meng Sen Date: Mon, 20 Jan 2025 11:24:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8F=91=E5=B8=83=E5=BA=94=E7=94=A8=20Beszel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Meng Sen --- apps/beszel-agent/0.9.1/data.yml | 33 ++++++++ apps/beszel-agent/0.9.1/docker-compose.yml | 23 ++++++ apps/beszel-agent/0.9.1/envs/default.env | 2 + apps/beszel-agent/0.9.1/envs/global.env | 2 + apps/beszel-agent/0.9.1/scripts/init.sh | 17 ++++ apps/beszel-agent/0.9.1/scripts/uninstall.sh | 10 +++ apps/beszel-agent/0.9.1/scripts/upgrade.sh | 17 ++++ apps/beszel-agent/README.md | 77 +++++++++++++++++++ apps/beszel-agent/data.yml | 14 ++++ apps/beszel-agent/logo.png | Bin 0 -> 30399 bytes apps/beszel/0.9.1/data.yml | 41 ++++++++++ apps/beszel/0.9.1/docker-compose.yml | 22 ++++++ apps/beszel/0.9.1/envs/default.env | 2 + apps/beszel/0.9.1/envs/global.env | 2 + apps/beszel/0.9.1/scripts/init.sh | 17 ++++ apps/beszel/0.9.1/scripts/uninstall.sh | 10 +++ apps/beszel/0.9.1/scripts/upgrade.sh | 17 ++++ apps/beszel/README.md | 52 +++++++++++++ apps/beszel/data.yml | 14 ++++ apps/beszel/logo.png | Bin 0 -> 30399 bytes 20 files changed, 372 insertions(+) create mode 100644 apps/beszel-agent/0.9.1/data.yml create mode 100644 apps/beszel-agent/0.9.1/docker-compose.yml create mode 100644 apps/beszel-agent/0.9.1/envs/default.env create mode 100644 apps/beszel-agent/0.9.1/envs/global.env create mode 100644 apps/beszel-agent/0.9.1/scripts/init.sh create mode 100644 apps/beszel-agent/0.9.1/scripts/uninstall.sh create mode 100644 apps/beszel-agent/0.9.1/scripts/upgrade.sh create mode 100644 apps/beszel-agent/README.md create mode 100644 apps/beszel-agent/data.yml create mode 100644 apps/beszel-agent/logo.png create mode 100644 apps/beszel/0.9.1/data.yml create mode 100644 apps/beszel/0.9.1/docker-compose.yml create mode 100644 apps/beszel/0.9.1/envs/default.env create mode 100644 apps/beszel/0.9.1/envs/global.env create mode 100644 apps/beszel/0.9.1/scripts/init.sh create mode 100644 apps/beszel/0.9.1/scripts/uninstall.sh create mode 100644 apps/beszel/0.9.1/scripts/upgrade.sh create mode 100644 apps/beszel/README.md create mode 100644 apps/beszel/data.yml create mode 100644 apps/beszel/logo.png diff --git a/apps/beszel-agent/0.9.1/data.yml b/apps/beszel-agent/0.9.1/data.yml new file mode 100644 index 000000000..9322ebb29 --- /dev/null +++ b/apps/beszel-agent/0.9.1/data.yml @@ -0,0 +1,33 @@ +additionalProperties: + formFields: + - default: "host" + edit: true + envKey: NETWORK_MODE + labelEn: Drive path + labelZh: 网络模式 + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: 45876 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: KEY + labelZh: 公钥 (Hub端生成) + labelEn: Public key (Generated by Hub) + required: true + type: text diff --git a/apps/beszel-agent/0.9.1/docker-compose.yml b/apps/beszel-agent/0.9.1/docker-compose.yml new file mode 100644 index 000000000..97a77b79f --- /dev/null +++ b/apps/beszel-agent/0.9.1/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true + +services: + beszel-agent: + image: henrygd/beszel-agent:0.9.1 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + network_mode: ${NETWORK_MODE:-host} + ports: + - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + volumes: + - /var/run/docker.sock:/var/run/docker.sock + environment: + - TZ=Asia/Shanghai + - LOG_LEVEL=info + - PORT=${PANEL_APP_PORT_HTTP:-45876} diff --git a/apps/beszel-agent/0.9.1/envs/default.env b/apps/beszel-agent/0.9.1/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/apps/beszel-agent/0.9.1/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/apps/beszel-agent/0.9.1/envs/global.env b/apps/beszel-agent/0.9.1/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/apps/beszel-agent/0.9.1/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/apps/beszel-agent/0.9.1/scripts/init.sh b/apps/beszel-agent/0.9.1/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/beszel-agent/0.9.1/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/beszel-agent/0.9.1/scripts/uninstall.sh b/apps/beszel-agent/0.9.1/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/apps/beszel-agent/0.9.1/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/beszel-agent/0.9.1/scripts/upgrade.sh b/apps/beszel-agent/0.9.1/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/beszel-agent/0.9.1/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/beszel-agent/README.md b/apps/beszel-agent/README.md new file mode 100644 index 000000000..7e9ad66f9 --- /dev/null +++ b/apps/beszel-agent/README.md @@ -0,0 +1,77 @@ +# Beszel - 代理 (Agent) + +轻量级的服务器监控平台,包含 Docker 统计信息、历史数据和警报功能 + +![Beszel](https://file.lifebus.top/imgs/beszel_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) + +## 特性 + +### 轻量级 + +比主要解决方案更小,资源占用更少。 + +### 简单 + +易于设置,无需公网暴露。 + +### Docker 统计 + +跟踪每个容器的 CPU、内存和网络使用历史。 + +### 警报 + +可配置 CPU、内存、磁盘、带宽、温度和状态的警报。 + +### 多用户 + +用户管理自己的系统。管理员可以在用户之间共享系统。 + +### OAuth / OIDC + +支持多种 OAuth2 提供程序。可以禁用密码验证。 + +### 自动备份 + +从磁盘或 S3 兼容的存储保存和恢复数据。 + +### REST API + +在您自己的脚本和应用程序中使用或更新您的数据。 + +### 架构 + +Beszel 由两个主要组件组成:中心 (hub) 和 代理 (agent)。 + ++ 中心 (hub): 一个基于 PocketBase 构建的 Web 应用程序,提供用于查看和管理连接系统的仪表板。 ++ 代理 (agent): 在您要监控的每个系统上运行,创建一个最小的 SSH 服务器以将系统指标传递到中心。 + +### 安装说明 + +#### 主机网络模式 + +代理必须使用主机网络模式才能访问网络接口指标,这将自动暴露端口。如果需要,可以使用环境变量更改端口。 + +#### 磁盘监控 + +您可以使用 Beszel 监控磁盘、分区或远程挂载。 + +> 使用 lsblk 命令查找分区的名称和挂载点。 + +在容器的 /extra-filesystems 目录中挂载目标文件系统中的文件夹。 + +```yml +services: + beszel-agent: + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - /<挂载点>/.beszel:/extra-filesystems/<挂载点>:ro +``` + ++ 挂载点: 挂载点的名称。 ++ ro: 只读模式 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/beszel-agent/data.yml b/apps/beszel-agent/data.yml new file mode 100644 index 000000000..710362000 --- /dev/null +++ b/apps/beszel-agent/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: beszel-agent + name: Beszel Agent + tags: + - WebSite + - Local + shortDescZh: 轻量级的服务器监控平台,包含 Docker 统计信息、历史数据和警报功能 + shortDescEn: A lightweight server monitoring platform with Docker statistics, historical data, and alerting capabilities + type: website + crossVersionUpdate: true + limit: 0 + website: https://beszel.dev/ + github: https://github.com/henrygd/beszel/ + document: https://beszel.dev/ diff --git a/apps/beszel-agent/logo.png b/apps/beszel-agent/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..24e6e7a743c6e56881d238b07d64a09cfe16b6c5 GIT binary patch literal 30399 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 literal 0 HcmV?d00001 diff --git a/apps/beszel/0.9.1/data.yml b/apps/beszel/0.9.1/data.yml new file mode 100644 index 000000000..5baca7595 --- /dev/null +++ b/apps/beszel/0.9.1/data.yml @@ -0,0 +1,41 @@ +additionalProperties: + formFields: + - default: "/home/beszel" + edit: true + envKey: BESZEL_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8090 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "false" + edit: true + envKey: DISABLE_PASSWORD_AUTH + labelZh: 密码验证功能 + labelEn: Disable password authentication + required: true + type: select + values: + - label: 禁用 + value: "true" + - label: 启用 + value: "false" + - default: "false" + edit: true + envKey: USER_CREATION + labelZh: 第三方用户注册功能 + labelEn: Third-party user registration + required: true + type: select + values: + - label: 禁用 + value: "true" + - label: 启用 + value: "false" diff --git a/apps/beszel/0.9.1/docker-compose.yml b/apps/beszel/0.9.1/docker-compose.yml new file mode 100644 index 000000000..56970413f --- /dev/null +++ b/apps/beszel/0.9.1/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true + +services: + beszel: + image: henrygd/beszel:0.9.1 + container_name: ${CONTAINER_NAME} + labels: + createdBy: "Apps" + restart: always + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8090 + env_file: + - ${GLOBAL_ENV_FILE:-/etc/1panel/envs/global.env} + - ${ENV_FILE:-/etc/1panel/envs/default.env} + volumes: + - ${BESZEL_ROOT_PATH}/data:/beszel_data + environment: + - TZ=Asia/Shanghai diff --git a/apps/beszel/0.9.1/envs/default.env b/apps/beszel/0.9.1/envs/default.env new file mode 100644 index 000000000..cd05f46e6 --- /dev/null +++ b/apps/beszel/0.9.1/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/apps/beszel/0.9.1/envs/global.env b/apps/beszel/0.9.1/envs/global.env new file mode 100644 index 000000000..e10989fe4 --- /dev/null +++ b/apps/beszel/0.9.1/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/apps/beszel/0.9.1/scripts/init.sh b/apps/beszel/0.9.1/scripts/init.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/beszel/0.9.1/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/beszel/0.9.1/scripts/uninstall.sh b/apps/beszel/0.9.1/scripts/uninstall.sh new file mode 100644 index 000000000..c86c4fbca --- /dev/null +++ b/apps/beszel/0.9.1/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/beszel/0.9.1/scripts/upgrade.sh b/apps/beszel/0.9.1/scripts/upgrade.sh new file mode 100644 index 000000000..07fb8c3fe --- /dev/null +++ b/apps/beszel/0.9.1/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/beszel/README.md b/apps/beszel/README.md new file mode 100644 index 000000000..0852f4d79 --- /dev/null +++ b/apps/beszel/README.md @@ -0,0 +1,52 @@ +# Beszel - 服务端 (Hub) + +轻量级的服务器监控平台,包含 Docker 统计信息、历史数据和警报功能 + +![Beszel](https://file.lifebus.top/imgs/beszel_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) + +## 特性 + +### 轻量级 + +比主要解决方案更小,资源占用更少。 + +### 简单 + +易于设置,无需公网暴露。 + +### Docker 统计 + +跟踪每个容器的 CPU、内存和网络使用历史。 + +### 警报 + +可配置 CPU、内存、磁盘、带宽、温度和状态的警报。 + +### 多用户 + +用户管理自己的系统。管理员可以在用户之间共享系统。 + +### OAuth / OIDC + +支持多种 OAuth2 提供程序。可以禁用密码验证。 + +### 自动备份 + +从磁盘或 S3 兼容的存储保存和恢复数据。 + +### REST API + +在您自己的脚本和应用程序中使用或更新您的数据。 + +### 架构 + +Beszel 由两个主要组件组成:中心 (hub) 和 代理 (agent)。 + ++ 中心 (hub): 一个基于 PocketBase 构建的 Web 应用程序,提供用于查看和管理连接系统的仪表板。 ++ 代理 (agent): 在您要监控的每个系统上运行,创建一个最小的 SSH 服务器以将系统指标传递到中心。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/apps/beszel/data.yml b/apps/beszel/data.yml new file mode 100644 index 000000000..052179e3f --- /dev/null +++ b/apps/beszel/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: beszel + name: Beszel Hub + tags: + - WebSite + - Local + shortDescZh: 轻量级的服务器监控平台,包含 Docker 统计信息、历史数据和警报功能 + shortDescEn: A lightweight server monitoring platform with Docker statistics, historical data, and alerting capabilities + type: website + crossVersionUpdate: true + limit: 0 + website: https://beszel.dev/ + github: https://github.com/henrygd/beszel/ + document: https://beszel.dev/ diff --git a/apps/beszel/logo.png b/apps/beszel/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..24e6e7a743c6e56881d238b07d64a09cfe16b6c5 GIT binary patch literal 30399 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 literal 0 HcmV?d00001