diff --git a/apps/docker-copilot/README.md b/apps/docker-copilot/README.md new file mode 100644 index 000000000..38963e600 --- /dev/null +++ b/apps/docker-copilot/README.md @@ -0,0 +1,18 @@ +# DockerCopilot + +## 介绍 + +一个主打便捷的docker容器管理工具,现在已经支持所有平台。 +已经实现: +1. 一键更新容器 +2. 指定镜像和tag更新 +3. 启动、停止、重启容器 +4. 重命名容器 +5. 删除无TAG镜像 +6. 删除未使用镜像 +7. 更新进度查看 +8. 备份容器设置 +9. 恢复容器设置 + +## 开发环境 +go版本:1.21+ \ No newline at end of file diff --git a/apps/docker-copilot/data.yml b/apps/docker-copilot/data.yml new file mode 100644 index 000000000..56daa4cb9 --- /dev/null +++ b/apps/docker-copilot/data.yml @@ -0,0 +1,22 @@ +name: Docker-Copilot +tags: + - 实用工具 +title: DockerCopilot +description: docker容器管理工具 +additionalProperties: + key: docker-copilot + name: Docker-Copilot + tags: + - Tools + shortDescZh: 一键更新容器 + shortDescEn: DockerCopilot Application + description: + zh: 便捷的docker容器管理工具。 + en: DockerCopilot is a convenient docker container management tool. + type: website + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://github.com/onlyLTY/dockerCopilot + github: https://github.com/onlyLTY/dockerCopilot + document: https://github.com/onlyLTY/dockerCopilot diff --git a/apps/docker-copilot/latest/data.yml b/apps/docker-copilot/latest/data.yml new file mode 100644 index 000000000..c39e1494d --- /dev/null +++ b/apps/docker-copilot/latest/data.yml @@ -0,0 +1,19 @@ +additionalProperties: + formFields: + - default: "12712" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Service Port 12712 + labelZh: 服务端口 12712 + required: true + rule: paramPort + type: number + - default: "copilot" + edit: true + envKey: SECRET_KEY + labelEn: secretKey + labelZh: 密码,不少于八位且非纯数字 + random: true + required: true + rule: paramComplexity + type: password \ No newline at end of file diff --git a/apps/docker-copilot/latest/docker-compose.yml b/apps/docker-copilot/latest/docker-compose.yml new file mode 100644 index 000000000..f34024a02 --- /dev/null +++ b/apps/docker-copilot/latest/docker-compose.yml @@ -0,0 +1,21 @@ +services: + dockercopilot: + image: 0nlylty/dockercopilot:latest + container_name: ${CONTAINER_NAME} + restart: always + ports: + - ${PANEL_APP_PORT_HTTP}:12712 + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./data:/data + networks: + - 1panel-network + environment: + - TZ=Asia/Shanghai + - DOCKER_HOST=unix:///var/run/docker.sock + - secretKey=${SECRET_KEY} + labels: + createdBy: Apps +networks: + 1panel-network: + external: true diff --git a/apps/docker-copilot/logo.png b/apps/docker-copilot/logo.png new file mode 100644 index 000000000..fc09bd9b7 Binary files /dev/null and b/apps/docker-copilot/logo.png differ diff --git a/apps/glance-agent/README.md b/apps/glance-agent/README.md new file mode 100644 index 000000000..cd1f1da26 --- /dev/null +++ b/apps/glance-agent/README.md @@ -0,0 +1,216 @@ +# Glance Python 远程服务器监控 Agent + +## 项目简介 +本项目为 Glance Dashboard 提供远程服务器监控数据采集,使用 Python3 + FastAPI 实现,兼容 Glance `server-stats` 组件前端展示。支持 Docker 部署,适合多服务器统一监控。 + +## 功能特性 +- 采集主机名、平台、启动时间、CPU 负载/温度、内存、磁盘等信息 +- 提供 `/api/sysinfo/all` HTTP API,返回 Glance 兼容 JSON +- 支持 Docker 镜像和 docker-compose 一键部署 +- 可多实例部署,适配多服务器场景 +- **主机名自动识别**:容器内自动优先读取宿主机 `/etc/hostname`,无需手动配置 + +## API 说明 +- 路径:`/api/sysinfo/all` +- 方法:GET +- 返回: +```json +{ + "Hostname": "server1", + "Platform": "Linux-5.15.0-1051-azure-x86_64-with-glibc2.29", + "BootTime": 1710000000, + "HostInfoIsAvailable": true, + "CPU": { + "Load1Percent": 12.5, + "Load15Percent": 8.2, + "TemperatureC": 45.0, + "LoadIsAvailable": true, + "TemperatureIsAvailable": true + }, + "Memory": { + "IsAvailable": true, + "UsedPercent": 55.3, + "UsedMB": 2048, + "TotalMB": 4096, + "SwapIsAvailable": true, + "SwapUsedMB": 256, + "SwapTotalMB": 1024, + "SwapUsedPercent": 25.0 + }, + "Mountpoints": [ + { + "Name": "/dev/sda1", + "Path": "/", + "UsedMB": 10240, + "TotalMB": 20480, + "UsedPercent": 50.0 + } + ] +} +``` + +## Glance 集成方法 + +1. 将 `agent/custom-api-example.yaml` 内容合并到 Glance 的主配置文件(如 `glance.yml`)对应 widgets 区域。 +2. 每台服务器部署一个 agent,配置对应的 API 地址。 +3. 前端展示效果与本地 server-stats 一致。 + +### custom-api 配置示例 +```yaml +- type: custom-api + title: 远程服务器A + url: http://192.168.1.200:8000/api/sysinfo/all ## 请修改为实际的IP地址 + cache: 15s + template: | +
+
+
+
+ {{ .JSON.String "Hostname" }} +
+
+ {{ if .JSON.Bool "HostInfoIsAvailable" }} + uptime + {{ else }}unknown uptime{{ end }} +
+
+
+
+
PLATFORM
+
+ {{ if .JSON.Bool "HostInfoIsAvailable" }} + {{ .JSON.String "Platform" }} + {{ else }}Unknown{{ end }} +
+
+ + + + +
+
+
+ +
+
+
CPU
+ {{ if and (.JSON.Bool "CPU.TemperatureIsAvailable") (ge (.JSON.Float "CPU.TemperatureC") 80.0) }} + + + + {{ end }} +
+ {{ if .JSON.Bool "CPU.LoadIsAvailable" }} + {{ .JSON.Float "CPU.Load1Percent" }} % + {{ else }}n/a{{ end }} +
+
+
+
+
+
1M AVG
+
+
{{ .JSON.Float "CPU.Load1Percent" }} %
+
+
+
15M AVG
+
+
{{ .JSON.Float "CPU.Load15Percent" }} %
+
+ {{ if .JSON.Bool "CPU.TemperatureIsAvailable" }} +
+
TEMP C
+
+
{{ .JSON.Float "CPU.TemperatureC" }} °
+
+ {{ end }} +
+
+ {{ if .JSON.Bool "CPU.LoadIsAvailable" }} +
+
+ {{ end }} +
+
+
+ +
+
+
RAM
+
+ {{ if .JSON.Bool "Memory.IsAvailable" }} + {{ .JSON.Float "Memory.UsedPercent" }} % + {{ else }}n/a{{ end }} +
+
+
+
+
+
RAM
+
+
+ {{ .JSON.Float "Memory.UsedGB" }}GB / {{ .JSON.Float "Memory.TotalGB" }}GB +
+
+ {{ if .JSON.Bool "Memory.SwapIsAvailable" }} +
+
SWAP
+
+
+ {{ .JSON.Float "Memory.SwapUsedGB" }}GB / {{ .JSON.Float "Memory.SwapTotalGB" }}GB +
+
+ {{ end }} +
+
+ {{ if .JSON.Bool "Memory.IsAvailable" }} +
+ {{ if .JSON.Bool "Memory.SwapIsAvailable" }} +
+ {{ end }} + {{ end }} +
+
+
+ +
+
+
DISK
+
+ {{ if gt (.JSON.Array "Mountpoints" | len) 0 }} + {{ (index (.JSON.Array "Mountpoints") 0).Float "UsedPercent" }} % + {{ else }}n/a{{ end }} +
+
+
+
+
    + {{ range .JSON.Array "Mountpoints" }} +
  • +
    {{ if .String "Name" }}{{ .String "Name" }}{{ else }}{{ .String "Path" }}{{ end }}
    +
    +
    + {{ .Float "UsedGB" }}GB / {{ .Float "TotalGB" }}GB +
    +
  • + {{ end }} +
+
+
+ {{ if gt (.JSON.Array "Mountpoints" | len) 0 }} +
+ {{ if gt (.JSON.Array "Mountpoints" | len) 1 }} +
+ {{ end }} + {{ end }} +
+
+
+
+
+ +``` + +## 参考 +- [Glance-Monitor](https://github.com/arch3rPro/Glance-Monitor) +- [Document文档](https://github.com/arch3rPro/Glance-Monitor/blob/main/server-status-agent/README.md) diff --git a/apps/glance-agent/data.yml b/apps/glance-agent/data.yml new file mode 100644 index 000000000..2bc82b2a7 --- /dev/null +++ b/apps/glance-agent/data.yml @@ -0,0 +1,24 @@ +name: Glance-Agent +tags: + - 实用工具 + - 监控 + - Dashboard + - Other +title: glance-agent +description: 为Glance Dashboard提供远程服务器监控数据采集API接口 +additionalProperties: + key: glance-agent + name: Glance-Agent + tags: + - 实用工具 + - 监控 + - Dashboard + - Other + shortDescZh: 远程服务器监控数据采集agent + shortDescEn: Remote server monitoring data collection agent + type: tools + crossVersionUpdate: true + website: https://github.com/arch3rPro/Glance-Monitor + github: https://github.com/arch3rPro/Glance-Monitor + document: https://github.com/arch3rPro/Glance-Monitor/blob/main/server-status-agent/README.md + diff --git a/apps/glance-agent/latest/data.yml b/apps/glance-agent/latest/data.yml new file mode 100644 index 000000000..e4858c95b --- /dev/null +++ b/apps/glance-agent/latest/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: "12080" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Service Port 8000 + labelZh: 服务端口 8000 + required: true + rule: paramPort + type: number diff --git a/apps/glance-agent/latest/docker-compose.yml b/apps/glance-agent/latest/docker-compose.yml new file mode 100644 index 000000000..1acffa25b --- /dev/null +++ b/apps/glance-agent/latest/docker-compose.yml @@ -0,0 +1,18 @@ +services: + agent-image: + image: vuldocker/glance-agent:latest + container_name: ${CONTAINER_NAME} + restart: unless-stopped + ports: + - ${PANEL_APP_PORT_HTTP}:8000 + volumes: + - /etc/hostname:/host/etc/hostname:ro + networks: + - 1panel-network + environment: + - TZ=Asia/Shanghai + labels: + createdBy: Apps +networks: + 1panel-network: + external: true diff --git a/apps/glance-agent/logo.png b/apps/glance-agent/logo.png new file mode 100644 index 000000000..950a5c7cc Binary files /dev/null and b/apps/glance-agent/logo.png differ diff --git a/apps/linkwarden/README.md b/apps/linkwarden/README.md new file mode 100644 index 000000000..6e80e170e --- /dev/null +++ b/apps/linkwarden/README.md @@ -0,0 +1,46 @@ +# Linkwarden + +Linkwarden 是一个自托管、开源的协作书签管理工具,支持网页归档、团队协作、全文搜索等功能。 + +## 主要特性 + +- 📸 自动捕获每个网页的屏幕截图、PDF、单个 html 文件和可读视图。 +- 🏛️ 将你的网页发送到 Wayback Machine ( archive.org ) 获取快照。(可选) +- ✨ 本地 AI 标记可根据链接内容自动标记链接(可选)。 +- 📂 按集合、子集合、名称、描述和多个标签组织链接。 +- 👥 协作收集集合中的链接。 +- 🎛️自定义每个成员的权限。 +- 🌐 与世界分享您收集的链接和保存的格式。 +- 📌 将您最喜欢的链接固定到仪表板。 +- 🔍 全文搜索、过滤和排序,方便检索。 +- 📱 响应式设计并支持大多数现代浏览器。 +- 🌓 支持暗/亮模式。 +- 🧩 浏览器扩展程序。在此加星标! +- 🔄 浏览器同步(使用Floccus!) +- ⬇️ 导入和导出您的书签。 +- 🔐 SSO 集成。(仅限企业用户和自托管用户) +- 📦可安装的渐进式 Web 应用程序 (PWA)。 +- 🍎 iOS 快捷方式将链接保存到 Linkwarden。 +- 🔑 API 密钥。 +- ✅ 批量操作。 +- 👥 用户管理。 +- 🌐 支持其他语言(i18n)。 +- 📁 图像和 PDF 上传。 +- 🎨 链接和收藏的自定义图标。 +- 🔔 RSS 订阅。 + +## 官网与文档 + +- 官网:https://linkwarden.app +- 文档:https://docs.linkwarden.app +- 源码:https://github.com/linkwarden/linkwarden + +## 1Panel 部署说明 + +1. 在 1Panel 应用商店搜索 Linkwarden 并安装 +2. 安装完成后,访问 `http://服务器IP:端口` 进行初始化设置 +3. 数据默认持久化在 `data` 目录下 + +## 相关截图 + +![dashboard](https://raw.githubusercontent.com/linkwarden/linkwarden/main/assets/dashboard.png) \ No newline at end of file diff --git a/apps/linkwarden/data.yml b/apps/linkwarden/data.yml new file mode 100644 index 000000000..140bee237 --- /dev/null +++ b/apps/linkwarden/data.yml @@ -0,0 +1,24 @@ +name: linkwarden +tags: + - 工具 + - 书签 + - 协作 + - 开源 +title: Linkwarden +description: Linkwarden 是一个自托管、开源的协作书签管理工具,支持网页归档、团队协作、全文搜索等功能。 +additionalProperties: + key: linkwarden + name: Linkwarden + tags: + - 工具 + - 书签 + - 协作 + - 开源 + shortDescZh: Linkwarden 书签归档与协作工具 + shortDescEn: Linkwarden - Collaborative Bookmark Manager + type: website + crossVersionUpdate: true + website: https://linkwarden.app + github: https://github.com/linkwarden/linkwarden + document: https://docs.linkwarden.app + diff --git a/apps/linkwarden/latest/.env.sample b/apps/linkwarden/latest/.env.sample new file mode 100644 index 000000000..dbcd3ab90 --- /dev/null +++ b/apps/linkwarden/latest/.env.sample @@ -0,0 +1,4 @@ +NEXTAUTH_URL=http://localhost:3000/api/v1/auth +NEXTAUTH_SECRET=${NEXTAUTH_SECRET} +MEILI_MASTER_KEY=${MEILI_MASTER_KEY} +POSTGRES_PASSWORD=${POSTGRES_PASSWORD} \ No newline at end of file diff --git a/apps/linkwarden/latest/data.yml b/apps/linkwarden/latest/data.yml new file mode 100644 index 000000000..b31f5a528 --- /dev/null +++ b/apps/linkwarden/latest/data.yml @@ -0,0 +1,34 @@ +additionalProperties: + formFields: + - default: "3000" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Service Port 3000 + labelZh: 服务端口 3000 + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: NEXTAUTH_SECRET + labelEn: NEXTAuth Secret + labelZh: NEXTAuth 密钥 + required: true + rule: paramComplexity + type: password + - default: "" + edit: true + envKey: POSTGRES_PASSWORD + labelEn: Postgres Password + labelZh: Postgres 数据库密码 + required: true + rule: paramComplexity + type: password + - default: "" + edit: true + envKey: MEILI_MASTER_KEY + labelEn: Meilisearch Master Key + labelZh: Meilisearch 主密钥 + required: true + rule: paramComplexity + type: password diff --git a/apps/linkwarden/latest/docker-compose.yml b/apps/linkwarden/latest/docker-compose.yml new file mode 100644 index 000000000..9e943afb3 --- /dev/null +++ b/apps/linkwarden/latest/docker-compose.yml @@ -0,0 +1,47 @@ +services: + linkwarden: + image: ghcr.io/linkwarden/linkwarden:latest + container_name: ${CONTAINER_NAME} + restart: always + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + volumes: + - ./data:/data/data + networks: + - 1panel-network + environment: + - DATABASE_URL=postgresql://postgres:${POSTGRES_PASSWORD}@postgres:5432/postgres + - NEXTAUTH_URL=http://localhost:3000/api/v1/auth + - NEXTAUTH_SECRET=${NEXTAUTH_SECRET} + depends_on: + - postgres + - meilisearch + labels: + createdBy: Apps + meilisearch: + image: getmeili/meilisearch:v1.12.8 + container_name: ${CONTAINER_NAME}-Meilisearch + restart: always + volumes: + - ./meili_data:/meili_data + networks: + - 1panel-network + environment: + - MEILI_MASTER_KEY=${MEILI_MASTER_KEY} + labels: + createdBy: Apps + postgres: + image: postgres:16-alpine + container_name: ${CONTAINER_NAME}-Postgres + restart: always + volumes: + - ./pgdata:/var/lib/postgresql/data + networks: + - 1panel-network + environment: + - POSTGRES_PASSWORD=${POSTGRES_PASSWORD} + labels: + createdBy: Apps +networks: + 1panel-network: + external: true diff --git a/apps/linkwarden/logo.png b/apps/linkwarden/logo.png new file mode 100644 index 000000000..843f681eb Binary files /dev/null and b/apps/linkwarden/logo.png differ