From b45696c83de14711fdfed3ba3cc27c0e89e92303 Mon Sep 17 00:00:00 2001 From: arch3rPro Date: Wed, 27 Aug 2025 17:38:54 +0000 Subject: [PATCH] feat: add app Beszel-Agent --- README.md | 9 +++++ apps/beszel-agent/0.12.4/.env.sample | 4 +++ apps/beszel-agent/0.12.4/data.yml | 24 +++++++++++++ apps/beszel-agent/0.12.4/docker-compose.yml | 13 +++++++ apps/beszel-agent/0.12.4/envs/default.env | 2 ++ apps/beszel-agent/0.12.4/envs/global.env | 2 ++ apps/beszel-agent/0.12.4/scripts/init.sh | 17 ++++++++++ apps/beszel-agent/0.12.4/scripts/uninstall.sh | 10 ++++++ apps/beszel-agent/0.12.4/scripts/upgrade.sh | 17 ++++++++++ apps/beszel-agent/README.md | 16 +++++++++ apps/beszel-agent/data.yml | 32 ++++++++++++++++++ apps/beszel-agent/latest/.env.sample | 4 +++ apps/beszel-agent/latest/data.yml | 24 +++++++++++++ apps/beszel-agent/latest/docker-compose.yml | 13 +++++++ apps/beszel-agent/logo.png | Bin 0 -> 7902 bytes 15 files changed, 187 insertions(+) create mode 100644 apps/beszel-agent/0.12.4/.env.sample create mode 100644 apps/beszel-agent/0.12.4/data.yml create mode 100644 apps/beszel-agent/0.12.4/docker-compose.yml create mode 100644 apps/beszel-agent/0.12.4/envs/default.env create mode 100644 apps/beszel-agent/0.12.4/envs/global.env create mode 100644 apps/beszel-agent/0.12.4/scripts/init.sh create mode 100644 apps/beszel-agent/0.12.4/scripts/uninstall.sh create mode 100644 apps/beszel-agent/0.12.4/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/latest/.env.sample create mode 100644 apps/beszel-agent/latest/data.yml create mode 100644 apps/beszel-agent/latest/docker-compose.yml create mode 100644 apps/beszel-agent/logo.png diff --git a/README.md b/README.md index abad143..a3e8550 100644 --- a/README.md +++ b/README.md @@ -802,6 +802,15 @@ AI驱动的开源代码知识库与文档协作平台,支持多模型、多数 + +Beszel-Agent +
Beszel-Agent +
+ +⚡ 轻量级服务器监控代理,支持实时性能数据收集 + +0.12.4 • [官网链接](https://github.com/henrygd/beszel) + diff --git a/apps/beszel-agent/0.12.4/.env.sample b/apps/beszel-agent/0.12.4/.env.sample new file mode 100644 index 0000000..51ec4a6 --- /dev/null +++ b/apps/beszel-agent/0.12.4/.env.sample @@ -0,0 +1,4 @@ +CONTAINER_NAME="beszel-agent" +DOCKER_SOCK_PATH="/var/run/docker.sock" +KEY="ssh-xxx" +PANEL_APP_PORT_HTTP=40332 diff --git a/apps/beszel-agent/0.12.4/data.yml b/apps/beszel-agent/0.12.4/data.yml new file mode 100644 index 0000000..faa6543 --- /dev/null +++ b/apps/beszel-agent/0.12.4/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: "45876" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: "/var/run/docker.sock" + edit: true + envKey: DOCKER_SOCK_PATH + labelEn: Docker Socket Path + labelZh: Docker 套接字路径 + required: true + type: text + - default: "ssh-ed25519 xxxxxx" + edit: true + envKey: KEY + labelEn: Key + labelZh: 密钥 + required: true + type: password diff --git a/apps/beszel-agent/0.12.4/docker-compose.yml b/apps/beszel-agent/0.12.4/docker-compose.yml new file mode 100644 index 0000000..08a1da3 --- /dev/null +++ b/apps/beszel-agent/0.12.4/docker-compose.yml @@ -0,0 +1,13 @@ +services: + beszel-agent: + image: henrygd/beszel-agent:0.12.4 + container_name: ${CONTAINER_NAME} + restart: always + network_mode: host + volumes: + - ${DOCKER_SOCK_PATH}:/var/run/docker.sock + environment: + - PORT=${PANEL_APP_PORT_HTTP} + - KEY=${KEY} + labels: + createdBy: "Apps" \ No newline at end of file diff --git a/apps/beszel-agent/0.12.4/envs/default.env b/apps/beszel-agent/0.12.4/envs/default.env new file mode 100644 index 0000000..cd05f46 --- /dev/null +++ b/apps/beszel-agent/0.12.4/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/apps/beszel-agent/0.12.4/envs/global.env b/apps/beszel-agent/0.12.4/envs/global.env new file mode 100644 index 0000000..e10989f --- /dev/null +++ b/apps/beszel-agent/0.12.4/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/apps/beszel-agent/0.12.4/scripts/init.sh b/apps/beszel-agent/0.12.4/scripts/init.sh new file mode 100644 index 0000000..07fb8c3 --- /dev/null +++ b/apps/beszel-agent/0.12.4/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.12.4/scripts/uninstall.sh b/apps/beszel-agent/0.12.4/scripts/uninstall.sh new file mode 100644 index 0000000..c86c4fb --- /dev/null +++ b/apps/beszel-agent/0.12.4/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.12.4/scripts/upgrade.sh b/apps/beszel-agent/0.12.4/scripts/upgrade.sh new file mode 100644 index 0000000..07fb8c3 --- /dev/null +++ b/apps/beszel-agent/0.12.4/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 0000000..3f58785 --- /dev/null +++ b/apps/beszel-agent/README.md @@ -0,0 +1,16 @@ +# Beszel + +**Beszel** 是一个轻量级服务器监控平台,包含 Docker 统计、历史数据和警报功能。 + +它具有友好的 Web 界面、简单的配置,开箱即用。它支持自动备份、多用户、OAuth 身份验证和 API 访问。 + +## 主要功能: + +- **轻量级**:比领先的解决方案更小、资源密集程度更低。 +- **简单**:易于设置,无需公开互联网曝光。 +- **Docker 统计**:跟踪每个容器的 CPU、内存和网络使用历史记录。 +- **警报**:可配置 CPU、内存、磁盘、带宽、温度和状态的警报。 +- **多用户**:用户管理自己的系统。管理员可以跨用户共享系统。 +- **OAuth / OIDC**:支持众多 OAuth2 提供商。密码验证可禁用。 +- **自动备份**:从磁盘或 S3 兼容存储保存和恢复数据。 +- **REST API**:在您自己的脚本和应用程序中使用或更新您的数据。 diff --git a/apps/beszel-agent/data.yml b/apps/beszel-agent/data.yml new file mode 100644 index 0000000..f1b30db --- /dev/null +++ b/apps/beszel-agent/data.yml @@ -0,0 +1,32 @@ +name: Beszel-Agent +tags: + - 实用工具 +title: 轻量易用的服务器监控(客户端) +description: 轻量易用的服务器监控(客户端) +additionalProperties: + key: beszel-agent + name: Beszel-Agent + tags: + - Tool + shortDescZh: 轻量易用的服务器监控(客户端) + shortDescEn: Simple, lightweight server monitoring + description: + en: Simple, lightweight server monitoring + ja: シンプルで軽量なサーバー監視 + ms: Pemantauan pelayan yang ringkas dan ringan + pt-br: Monitoramento de servidor simples e leve + ru: Простое и легкое мониторинг сервера + ko: 간단하고 가벼운 서버 모니터링 + zh-Hant: 簡單輕量的伺服器監控 + zh: 轻量易用的服务器监控 + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://beszel.dev/ + github: https://github.com/henrygd/beszel + document: https://beszel.dev/guide/what-is-beszel + architectures: + - amd64 + - arm64 + - arm/v7 diff --git a/apps/beszel-agent/latest/.env.sample b/apps/beszel-agent/latest/.env.sample new file mode 100644 index 0000000..51ec4a6 --- /dev/null +++ b/apps/beszel-agent/latest/.env.sample @@ -0,0 +1,4 @@ +CONTAINER_NAME="beszel-agent" +DOCKER_SOCK_PATH="/var/run/docker.sock" +KEY="ssh-xxx" +PANEL_APP_PORT_HTTP=40332 diff --git a/apps/beszel-agent/latest/data.yml b/apps/beszel-agent/latest/data.yml new file mode 100644 index 0000000..faa6543 --- /dev/null +++ b/apps/beszel-agent/latest/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: "45876" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: "/var/run/docker.sock" + edit: true + envKey: DOCKER_SOCK_PATH + labelEn: Docker Socket Path + labelZh: Docker 套接字路径 + required: true + type: text + - default: "ssh-ed25519 xxxxxx" + edit: true + envKey: KEY + labelEn: Key + labelZh: 密钥 + required: true + type: password diff --git a/apps/beszel-agent/latest/docker-compose.yml b/apps/beszel-agent/latest/docker-compose.yml new file mode 100644 index 0000000..87b8cae --- /dev/null +++ b/apps/beszel-agent/latest/docker-compose.yml @@ -0,0 +1,13 @@ +services: + beszel-agent: + image: henrygd/beszel-agent:latest + container_name: ${CONTAINER_NAME} + restart: always + network_mode: host + volumes: + - ${DOCKER_SOCK_PATH}:/var/run/docker.sock + environment: + - PORT=${PANEL_APP_PORT_HTTP} + - KEY=${KEY} + labels: + createdBy: "Apps" \ No newline at end of file diff --git a/apps/beszel-agent/logo.png b/apps/beszel-agent/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..319e7ab370341f89ea0acb7ea2be8a98cdf54901 GIT binary patch literal 7902 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 IM6N<$g0_^{p8x;= literal 0 HcmV?d00001