From 87c8a69636d0ed8de2c5fb8d497cb3aecf341c62 Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Sat, 24 May 2025 11:55:45 +0800 Subject: [PATCH 01/53] =?UTF-8?q?feat(localApps):=20=E6=B7=BB=E5=8A=A0=20S?= =?UTF-8?q?yncthing=20=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 Syncthing 1.29.5 和 latest 版本的配置文件 - 添加 Syncthing应用的基本信息、端口配置和 Docker Compose 配置 - 包含 Syncthing 的 README 文件 --- syncthing/1.29.5/data.yml | 28 +++++++ syncthing/1.29.5/docker-compose.yml | 26 +++++++ syncthing/README.md | 114 ++++++++++++++++++++++++++++ syncthing/data.yml | 19 +++++ syncthing/latest/data.yml | 28 +++++++ syncthing/latest/docker-compose.yml | 26 +++++++ syncthing/logo.png | Bin 0 -> 5098 bytes 7 files changed, 241 insertions(+) create mode 100644 syncthing/1.29.5/data.yml create mode 100644 syncthing/1.29.5/docker-compose.yml create mode 100644 syncthing/README.md create mode 100644 syncthing/data.yml create mode 100644 syncthing/latest/data.yml create mode 100644 syncthing/latest/docker-compose.yml create mode 100644 syncthing/logo.png diff --git a/syncthing/1.29.5/data.yml b/syncthing/1.29.5/data.yml new file mode 100644 index 000000000..2d922eeb8 --- /dev/null +++ b/syncthing/1.29.5/data.yml @@ -0,0 +1,28 @@ +additionalProperties: + formFields: + - default: "8384" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + + - default: "22000" + edit: true + envKey: PANEL_APP_PORT_SYNC + labelZh: 同步端口 + labelEn: Sync Port + required: true + rule: paramPort + type: number + + - default: "21027" + edit: true + envKey: PANEL_APP_PORT_DISCOVERY + labelZh: 服务发现端口 + labelEn: Discovery Port + required: true + rule: paramPort + type: number \ No newline at end of file diff --git a/syncthing/1.29.5/docker-compose.yml b/syncthing/1.29.5/docker-compose.yml new file mode 100644 index 000000000..5255f9a6e --- /dev/null +++ b/syncthing/1.29.5/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true + +services: + syncthing: + container_name: ${CONTAINER_NAME} + environment: + - PUID=0 + - PGID=0 + - TZ=Asia/Shanghai + - HOME=/data + image: linuxserver/syncthing:1.29.5 + labels: + createdBy: "Apps" + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8384 + - ${PANEL_APP_PORT_SYNC}:22000/tcp + - ${PANEL_APP_PORT_SYNC}:22000/udp + - ${PANEL_APP_PORT_DISCOVERY}:21027/udp + restart: always + volumes: + - ./data/config:/config + - ./data/data:/data diff --git a/syncthing/README.md b/syncthing/README.md new file mode 100644 index 000000000..6cf9fc2db --- /dev/null +++ b/syncthing/README.md @@ -0,0 +1,114 @@ +[![Syncthing][14]][15] + +--- + +[![MPLv2 License](https://img.shields.io/badge/license-MPLv2-blue.svg?style=flat-square)](https://www.mozilla.org/MPL/2.0/) +[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/88/badge)](https://bestpractices.coreinfrastructure.org/projects/88) +[![Go Report Card](https://goreportcard.com/badge/github.com/syncthing/syncthing)](https://goreportcard.com/report/github.com/syncthing/syncthing) + +## Goals + +Syncthing is a **continuous file synchronization program**. It synchronizes +files between two or more computers. We strive to fulfill the goals below. +The goals are listed in order of importance, the most important one being +the first. This is the summary version of the goal list - for more +commentary, see the full [Goals document][13]. + +Syncthing should be: + +1. **Safe From Data Loss** + + Protecting the user's data is paramount. We take every reasonable + precaution to avoid corrupting the user's files. + +2. **Secure Against Attackers** + + Again, protecting the user's data is paramount. Regardless of our other + goals we must never allow the user's data to be susceptible to + eavesdropping or modification by unauthorized parties. + +3. **Easy to Use** + + Syncthing should be approachable, understandable and inclusive. + +4. **Automatic** + + User interaction should be required only when absolutely necessary. + +5. **Universally Available** + + Syncthing should run on every common computer. We are mindful that the + latest technology is not always available to any given individual. + +6. **For Individuals** + + Syncthing is primarily about empowering the individual user with safe, + secure and easy to use file synchronization. + +7. **Everything Else** + + There are many things we care about that don't make it on to the list. It + is fine to optimize for these values, as long as they are not in conflict + with the stated goals above. + +## Getting Started + +Take a look at the [getting started guide][2]. + +There are a few examples for keeping Syncthing running in the background +on your system in [the etc directory][3]. There are also several [GUI +implementations][11] for Windows, Mac and Linux. + +## Docker + +To run Syncthing in Docker, see [the Docker README][16]. + +## Vote on features/bugs + +We'd like to encourage you to [vote][12] on issues that matter to you. +This helps the team understand what are the biggest pain points for our users, and could potentially influence what is being worked on next. + +## Getting in Touch + +The first and best point of contact is the [Forum][8]. +If you've found something that is clearly a +bug, feel free to report it in the [GitHub issue tracker][10]. + +## Building + +Building Syncthing from source is easy. After extracting the source bundle from +a release or checking out git, you just need to run `go run build.go` and the +binaries are created in `./bin`. There's [a guide][5] with more details on the +build process. + +## Signed Releases + +As of v0.10.15 and onwards release binaries are GPG signed with the key +D26E6ED000654A3E, available from https://syncthing.net/security.html and +most key servers. + +There is also a built in automatic upgrade mechanism (disabled in some +distribution channels) which uses a compiled in ECDSA signature. macOS +binaries are also properly code signed. + +## Documentation + +Please see the Syncthing [documentation site][6] [[source]][17]. + +All code is licensed under the [MPLv2 License][7]. + +[1]: https://docs.syncthing.net/specs/bep-v1.html +[2]: https://docs.syncthing.net/intro/getting-started.html +[3]: https://github.com/syncthing/syncthing/blob/main/etc +[5]: https://docs.syncthing.net/dev/building.html +[6]: https://docs.syncthing.net/ +[7]: https://github.com/syncthing/syncthing/blob/main/LICENSE +[8]: https://forum.syncthing.net/ +[10]: https://github.com/syncthing/syncthing/issues +[11]: https://docs.syncthing.net/users/contrib.html#gui-wrappers +[12]: https://www.bountysource.com/teams/syncthing/issues +[13]: https://github.com/syncthing/syncthing/blob/main/GOALS.md +[14]: https://github.com/syncthing/syncthing/raw/main/assets/logo-text-128.png +[15]: https://syncthing.net/ +[16]: https://github.com/syncthing/syncthing/blob/main/README-Docker.md +[17]: https://github.com/syncthing/docs diff --git a/syncthing/data.yml b/syncthing/data.yml new file mode 100644 index 000000000..321a6c169 --- /dev/null +++ b/syncthing/data.yml @@ -0,0 +1,19 @@ +name: Syncthing +tags: + - 工具 +title: 开源的文件同步客户端与服务器软件 +description: 开源的文件同步客户端与服务器软件,采用Go语言编写。它可以在本地网络上的设备之间或通过Internet在远程设备之间同步文件,使用了其独有的对等自由块交换协议 +additionalProperties: + key: syncthing + name: Syncthing + tags: + - Tool + shortDescZh: 开源的文件同步客户端与服务器软件 + shortDescEn: Open source file synchronization client and server software + type: tool + crossVersionUpdate: true + limit: 1 + recommend: 0 + website: https://syncthing.net + github: https://github.com/syncthing/syncthing + document: https://docs.syncthing.net diff --git a/syncthing/latest/data.yml b/syncthing/latest/data.yml new file mode 100644 index 000000000..2d922eeb8 --- /dev/null +++ b/syncthing/latest/data.yml @@ -0,0 +1,28 @@ +additionalProperties: + formFields: + - default: "8384" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + + - default: "22000" + edit: true + envKey: PANEL_APP_PORT_SYNC + labelZh: 同步端口 + labelEn: Sync Port + required: true + rule: paramPort + type: number + + - default: "21027" + edit: true + envKey: PANEL_APP_PORT_DISCOVERY + labelZh: 服务发现端口 + labelEn: Discovery Port + required: true + rule: paramPort + type: number \ No newline at end of file diff --git a/syncthing/latest/docker-compose.yml b/syncthing/latest/docker-compose.yml new file mode 100644 index 000000000..251fa8664 --- /dev/null +++ b/syncthing/latest/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true + +services: + syncthing: + container_name: ${CONTAINER_NAME} + environment: + - PUID=0 + - PGID=0 + - TZ=Asia/Shanghai + - HOME=/data + image: linuxserver/syncthing:latest + labels: + createdBy: "Apps" + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8384 + - ${PANEL_APP_PORT_SYNC}:22000/tcp + - ${PANEL_APP_PORT_SYNC}:22000/udp + - ${PANEL_APP_PORT_DISCOVERY}:21027/udp + restart: always + volumes: + - ./data/config:/config + - ./data/data:/data diff --git a/syncthing/logo.png b/syncthing/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d2526bb6bf82a999c855d2b26e689f4589447deb GIT binary patch literal 5098 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 M07*qoM6N<$f_@6&od5s; literal 0 HcmV?d00001 From db2a5e611572540eed5a8f17cea9dc387a40f09a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 24 May 2025 04:04:29 +0000 Subject: [PATCH 02/53] chore(deps): update linuxserver/syncthing docker tag to v1.29.6 --- syncthing/1.29.5/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syncthing/1.29.5/docker-compose.yml b/syncthing/1.29.5/docker-compose.yml index 5255f9a6e..88f51b9c6 100644 --- a/syncthing/1.29.5/docker-compose.yml +++ b/syncthing/1.29.5/docker-compose.yml @@ -10,7 +10,7 @@ services: - PGID=0 - TZ=Asia/Shanghai - HOME=/data - image: linuxserver/syncthing:1.29.5 + image: linuxserver/syncthing:1.29.6 labels: createdBy: "Apps" networks: From cecf3dceecef8bdd40b6e409f9dc723e54debe5e Mon Sep 17 00:00:00 2001 From: github-action update-app-version Date: Sat, 24 May 2025 04:04:43 +0000 Subject: [PATCH 03/53] Update app version [skip ci] --- syncthing/{1.29.5 => 1.29.6}/data.yml | 0 syncthing/{1.29.5 => 1.29.6}/docker-compose.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename syncthing/{1.29.5 => 1.29.6}/data.yml (100%) rename syncthing/{1.29.5 => 1.29.6}/docker-compose.yml (100%) diff --git a/syncthing/1.29.5/data.yml b/syncthing/1.29.6/data.yml similarity index 100% rename from syncthing/1.29.5/data.yml rename to syncthing/1.29.6/data.yml diff --git a/syncthing/1.29.5/docker-compose.yml b/syncthing/1.29.6/docker-compose.yml similarity index 100% rename from syncthing/1.29.5/docker-compose.yml rename to syncthing/1.29.6/docker-compose.yml From 18529222164dd6164b7d1cd17b00be90d6f6d821 Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Sat, 24 May 2025 12:09:19 +0800 Subject: [PATCH 04/53] =?UTF-8?q?feat(apps):=20=E6=B7=BB=E5=8A=A0=E6=80=9D?= =?UTF-8?q?=E6=BA=90=E7=AC=94=E8=AE=B0=20SiYuan=20=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增思源笔记 SiYuan 应用的配置文件和文档 - 创建 data.yml、docker-compose.yml 和 README.md 文件 - 配置应用的基本信息、环境变量和端口映射 - 提供详细的 Docker 部署和使用说明 --- siyuan/3.1.29/data.yml | 19 ++ siyuan/3.1.29/docker-compose.yml | 23 ++ siyuan/README.md | 439 +++++++++++++++++++++++++++++++ siyuan/data.yml | 19 ++ siyuan/latest/data.yml | 19 ++ siyuan/latest/docker-compose.yml | 24 ++ siyuan/logo.png | Bin 0 -> 1589 bytes 7 files changed, 543 insertions(+) create mode 100644 siyuan/3.1.29/data.yml create mode 100644 siyuan/3.1.29/docker-compose.yml create mode 100644 siyuan/README.md create mode 100644 siyuan/data.yml create mode 100644 siyuan/latest/data.yml create mode 100644 siyuan/latest/docker-compose.yml create mode 100644 siyuan/logo.png diff --git a/siyuan/3.1.29/data.yml b/siyuan/3.1.29/data.yml new file mode 100644 index 000000000..a1398d86b --- /dev/null +++ b/siyuan/3.1.29/data.yml @@ -0,0 +1,19 @@ +additionalProperties: + formFields: + - default: "6806" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + + - default: "" + edit: true + envKey: AuthCode + labelZh: 授权码 + labelEn: Access Auth Code + required: true + rule: paramComplexity + type: password \ No newline at end of file diff --git a/siyuan/3.1.29/docker-compose.yml b/siyuan/3.1.29/docker-compose.yml new file mode 100644 index 000000000..8e7defd95 --- /dev/null +++ b/siyuan/3.1.29/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true +services: + siyuan: + command: + - --workspace=/siyuan/workspace/ + - --accessAuthCode=${AuthCode} + container_name: ${CONTAINER_NAME} + environment: + - RUN_IN_CONTAINER=true + - TZ=Asia/Shanghai + image: b3log/siyuan:v3.1.29 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:6806 + restart: always + user: "0:0" + volumes: + - ./data:/siyuan/workspace diff --git a/siyuan/README.md b/siyuan/README.md new file mode 100644 index 000000000..f7585356e --- /dev/null +++ b/siyuan/README.md @@ -0,0 +1,439 @@ +

+SiYuan +
+重构你的思维 +

+ + + +
+ + + +
+ + + +
+ + +

+Twitter Follow +Chat on Discord +

+siyuan-note%2Fsiyuan | Trendshift +

+SiYuan - A privacy-first personal knowledge management software | Product Hunt +

+ +

+English | 日本語 +

+ +--- + +## 目录 + +* [💡 简介](#-简介) +* [🔮 特性](#-特性) +* [🏗️ 架构和生态](#️-架构和生态) +* [🌟 星标历史](#-星标历史) +* [🗺️ 路线图](#️-路线图) +* [🚀 下载安装](#-下载安装) + * [应用市场](#应用市场) + * [安装包](#安装包) + * [Docker 部署](#docker-部署) + * [Unraid 部署](#unraid-部署) + * [宝塔面板 部署](#宝塔面板部署) + * [内部预览版](#内部预览版) +* [🏘️ 社区](#️-社区) +* [🛠️ 开发指南](#️-开发指南) +* [❓ 常见问题和解答](#-常见问题和解答) + * [思源是如何存储数据的?](#思源是如何存储数据的) + * [支持通过第三方同步盘进行数据同步吗?](#支持通过第三方同步盘进行数据同步吗) + * [思源是开源的吗?](#思源是开源的吗) + * [如何升级到新版本?](#如何升级到新版本) + * [有的块(比如在列表项中的段落块)找不到块标怎么办?](#有的块比如在列表项中的段落块找不到块标怎么办) + * [数据仓库密钥遗失怎么办?](#数据仓库密钥遗失怎么办) + * [使用需要付费吗?](#使用需要付费吗) +* [🙏 鸣谢](#-鸣谢) + * [贡献者列表](#贡献者列表) + +--- + +## 💡 简介 + +思源笔记是一款隐私优先的个人知识管理系统,支持细粒度块级引用和 Markdown 所见即所得。 + +![feature0.png](https://b3logfile.com/file/2024/01/feature0-1orBRlI.png) + +![feature51.png](https://b3logfile.com/file/2024/02/feature5-1-uYYjAqy.png) + +欢迎到[思源笔记官方讨论区](https://ld246.com/domain/siyuan)了解更多。同时也欢迎关注 B3log 开源社区微信公众号 `B3log开源`: + +![b3logos.jpg](https://b3logfile.com/file/2020/08/b3logos-032af045.jpg) + +## 🔮 特性 + +大部分功能是免费的,即使是在商业环境下使用。 + +* 内容块 + * 块级引用和双向链接 + * 自定义属性 + * SQL 查询嵌入 + * 协议 `siyuan://` +* 编辑器 + * Block 风格 + * Markdown 所见即所得 + * 列表大纲 + * 块缩放聚焦 + * 百万字大文档编辑 + * 数学公式、图表、流程图、甘特图、时序图、五线谱等 + * 网页剪藏 + * PDF 标注双链 +* 导出 + * 块引用和嵌入块 + * 带 assets 文件夹的标准 Markdown + * PDF、Word 和 HTML + * 复制到微信公众号、知乎和语雀 +* 数据库 + * 表格视图 +* 闪卡间隔重复 +* 接入 OpenAI 接口支持人工智能写作和问答聊天 +* Tesseract OCR +* 模板片段 +* JavaScript/CSS 代码片段 +* Android/iOS/鸿蒙 App +* Docker 部署 +* [API](API_zh_CN.md) +* 社区集市 + +部分功能需要付费会员才能使用,更多细节请参考[定价](https://b3log.org/siyuan/pricing.html)。 + +## 🏗️ 架构和生态 + +![思源笔记架构设计](https://b3logfile.com/file/2023/05/SiYuan_Arch-Sgu8vXT.png "思源笔记架构设计") + +| Project | Description | Forks | Stars | +|----------------------------------------------------------|--------------|---------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| +| [lute](https://github.com/88250/lute) | 编辑器引擎 | ![GitHub forks](https://img.shields.io/github/forks/88250/lute) | ![GitHub Repo stars](https://img.shields.io/github/stars/88250/lute) | +| [chrome](https://github.com/siyuan-note/siyuan-chrome) | Chrome/Edge 扩展 | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-chrome) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-chrome) | +| [bazaar](https://github.com/siyuan-note/bazaar) | 社区集市 | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/bazaar) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/bazaar) | +| [dejavu](https://github.com/siyuan-note/dejavu) | 数据仓库 | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/dejavu) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/dejavu) | +| [petal](https://github.com/siyuan-note/petal) | 插件 API | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/petal) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/petal) | +| [android](https://github.com/siyuan-note/siyuan-android) | Android App | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-android) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-android) | +| [ios](https://github.com/siyuan-note/siyuan-ios) | iOS App | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-ios) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-ios) | +| [harmony](https://github.com/siyuan-note/siyuan-harmony) | 鸿蒙 App | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-harmony) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-harmony) | +| [riff](https://github.com/siyuan-note/riff) | 间隔重复 | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/riff) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/riff) | + +## 🌟 星标历史 + + + + + + Star History Chart + + + +## 🗺️ 路线图 + +* [思源笔记开发计划和进度](https://github.com/orgs/siyuan-note/projects/1) +* [思源笔记版本变更和公告](CHANGELOG.md) + +## 🚀 下载安装 + +桌面端和移动端建议优先考虑通过应用市场安装,这样以后升级版本时可以一键更新。 + +### 应用市场 + +移动端: + +* [App Store](https://apps.apple.com/cn/app/siyuan/id1583226508) +* [Google Play](https://play.google.com/store/apps/details?id=org.b3log.siyuan) +* [F-Droid](https://f-droid.org/packages/org.b3log.siyuan) +* [华为应用市场](https://appgallery.huawei.com/app/C105558879) +* [小米应用商店](https://app.mi.com/details?id=org.b3log.siyuan) +* [酷安](https://www.coolapk.com/apk/292664) + +桌面端: + +* [Microsoft Store](https://apps.microsoft.com/detail/9p7hpmxp73k4) + +### 安装包 + +* [B3log](https://b3log.org/siyuan/download.html) +* [GitHub](https://github.com/siyuan-note/siyuan/releases) + +### Docker 部署 + +
+Docker 部署文档 + +#### 概述 + +在服务器上伺服思源最简单的方案是通过 Docker 部署。 + +* 镜像名称 `b3log/siyuan` +* [镜像地址](https://hub.docker.com/r/b3log/siyuan) + +#### 文件结构 + +整体程序位于 `/opt/siyuan/` 下,基本上就是 Electron 安装包 resources 文件夹下的结构: + +* appearance:图标、主题、多语言 +* guide:帮助文档 +* stage:界面和静态资源 +* kernel:内核程序 + +#### 启动入口 + +入口点在构建 Docker 镜像时设置:`ENTRYPOINT ["/opt/siyuan/entrypoint.sh"]`。该脚本允许更改将在容器内运行的用户的 `PUID` 和 `PGID`。这对于解决从主机挂载目录时的权限问题尤为重要。`PUID` 和 `PGID` 可以作为环境变量传递,这样在访问主机挂载的目录时就能更容易地确保正确的权限。 + +使用 `docker run b3log/siyuan` 运行容器时,请带入以下参数: + +* `--workspace`:指定工作空间文件夹路径,在宿主机上通过 `-v` 挂载到容器中 +* `--accessAuthCode`:指定访问授权码 + +更多的参数可参考 `--help`。下面是一条启动命令示例: + +```bash +docker run -d \ + -v workspace_dir_host:workspace_dir_container \ + -p 6806:6806 \ + -e PUID=1001 -e PGID=1002 \ + b3log/siyuan \ + --workspace=workspace_dir_container \ + --accessAuthCode=xxx +``` + +* `PUID`: 自定义用户 ID(可选,如果未提供,默认为 `1000`) +* `PGID`: 自定义组 ID(可选,如果未提供,默认为 `1000`) +* `workspace_dir_host`:宿主机上的工作空间文件夹路径 +* `workspace_dir_container`:容器内工作空间文件夹路径,和后面 `--workspace` 指定成一样的 + * 另外,也可以通过 `SIYUAN_WORKSPACE_PATH` 环境变量设置路径。如果两者都设置了,命令行的值将优先。 +* `accessAuthCode`:访问授权码,请**务必修改**,否则任何人都可以读写你的数据 + * 另外,也可以通过 `SIYUAN_ACCESS_AUTH_CODE` 环境变量设置授权码。如果两者都设置了,命令行的值将优先。 + +为了简化,建议将 workspace 文件夹路径在宿主机和容器上配置为一致的,比如将 `workspace_dir_host` 和 `workspace_dir_container` 都配置为 `/siyuan/workspace`,对应的启动命令示例: + +```bash +docker run -d \ + -v /siyuan/workspace:/siyuan/workspace \ + -p 6806:6806 \ + -e PUID=1001 -e PGID=1002 \ + b3log/siyuan \ + --workspace=/siyuan/workspace/ \ + --accessAuthCode=xxx +``` + +#### Docker Compose + +对于使用 Docker Compose 运行思源的用户,可以通过环境变量 `PUID` 和 `PGID` 来自定义用户和组的 ID。下面是一个 Docker Compose 配置示例: + +```yaml +version: "3.9" +services: + main: + image: b3log/siyuan + command: ['--workspace=/siyuan/workspace/', '--accessAuthCode=${AuthCode}'] + ports: + - 6806:6806 + volumes: + - /siyuan/workspace:/siyuan/workspace + restart: unless-stopped + environment: + # A list of time zone identifiers can be found at https://en.wikipedia.org/wiki/List_of_tz_database_time_zones + - TZ=${YOUR_TIME_ZONE} + - PUID=${YOUR_USER_PUID} # 自定义用户 ID + - PGID=${YOUR_USER_PGID} # 自定义组 ID +``` + +在此设置中: + +* PUID “和 ”PGID "是动态设置并传递给容器的 +* 如果没有提供这些变量,将使用默认的 `1000` + +在环境中指定 `PUID` 和 `PGID` 后,就无需在组成文件中明确设置 `user` 指令(`user: '1000:1000'`)。容器将在启动时根据这些环境变量动态调整用户和组。 + +#### 用户权限 + +在图片中,“entrypoint.sh ”脚本确保以指定的 “PUID ”和 “PGID ”创建 “siyuan ”用户和组。因此,当主机创建工作区文件夹时,请注意设置文件夹的用户和组所有权,使其与计划使用的 `PUID` 和 `PGID` 匹配。例如 + +```bash +chown -R 1001:1002 /siyuan/workspace +``` + +如果使用自定义的 `PUID` 和 `PGID` 值,入口点脚本将确保在容器内创建正确的用户和组,并相应调整挂载卷的所有权。无需在 `docker run` 或 `docker-compose` 中手动传递 `-u`,因为环境变量会处理自定义。 + +#### 隐藏端口 + +使用 NGINX 反向代理可以隐藏 6806 端口,请注意: + +* 配置 WebSocket 反代 `/ws` + +#### 注意 + +* 请务必确认挂载卷的正确性,否则容器删除后数据会丢失 +* 不要使用 URL 重写进行重定向,否则鉴权可能会有问题,建议配置反向代理 + +#### 限制 + +* 不支持桌面端和移动端应用连接,仅支持在浏览器上使用 +* 不支持导出 PDF、HTML 和 Word 格式 +* 不支持导入 Markdown 文件 + +
+ +### Unraid 部署 + +
+Unraid 部署文档 + +注意:首先终端运行 `chown -R 1000:1000 /mnt/user/appdata/siyuan` + +模板参考: + +``` +Web UI: 6806 +Container Port: 6806 +Container Path: /home/siyuan +Host path: /mnt/user/appdata/siyuan +PUID: 1000 +PGID: 1000 +Publish parameters: --accessAuthCode=******(访问授权码) +``` + +
+ +### 宝塔面板部署 + +
+宝塔面板 部署文档 + +#### 前提 + +* 仅适用于宝塔面板9.2.0及以上版本 +* 安装宝塔面板,前往[宝塔面板](https://www.bt.cn/new/download.html)官网,选择正式版的脚本下载安装 + +#### 部署 + +1. 登录宝塔面板,在左侧菜单栏中点击 `Docker` +2. 首次会提示安装 `Docker` 和 `Docker Compose` 服务,点击立即安装,若已安装请忽略 +3. 安装完成后在 `Docker-应用商店-实用工具` 中找到 `思源笔记`,点击`安装`,也可以在搜索框直接搜索 +4. 设置域名等基本信息,点击 `确定` + * 名称:应用名称,默认 `siyuan_随机字符` + * 版本选择:默认 `latest` + * 域名:如你需要通过域名访问,请在此处填写你的域名 + * 允许外部访问:如你需通过 `IP+Port` 直接访问,请勾选,如你已经设置了域名,请不要勾选此处 + * 端口:默认 `6806`,可自行修改 + * 访问授权码:默认随机生成 + * 内存限制:0为不限制,根据实际需要设置 +5. 提交后面板会自动进行应用初始化,大概需要`1-3`分钟,初始化完成后即可访问 + +#### 访问思源笔记 + +* 如果你填写了域名,请在浏览器输入域名访问 +* 如你选择了 `IP+端口`,请在浏览器地输入 `http://<宝塔面板IP>:6806` 访问 + +
+ +### 内部预览版 + +我们会在有重大更新前发布内部预览版,请访问 [https://github.com/siyuan-note/insider](https://github.com/siyuan-note/insider)。 + +## 🏘️ 社区 + +* [中文讨论区](https://ld246.com/domain/siyuan) +* [用户社区汇总](https://ld246.com/article/1640266171309) +* [Awesome SiYuan](https://github.com/siyuan-note/awesome) + +## 🛠️ 开发指南 + +见:[开发指南](https://github.com/siyuan-note/siyuan/blob/master/.github/CONTRIBUTING_zh_CN.md)。 + +## ❓ 常见问题和解答 + +### 思源是如何存储数据的? + +数据保存在工作空间文件夹下,在工作空间 data 文件夹下: + +* `assets` 用于保存所有插入的资源文件 +* `emojis` 用于保存自定义图标表情图片 +* `snippets` 用于保存代码片段 +* `storage` 用于保存查询条件、布局和闪卡数据等 +* `templates` 用于保存模板片段 +* `widgets` 用于保存挂件 +* `plugins` 用于保存插件 +* `public` 用于保存公开的数据 +* 其余文件夹就是用户自己创建的笔记本文件夹,笔记本文件夹下 `.sy` 后缀的文件用于保存文档数据,数据格式为 JSON + +### 支持通过第三方同步盘进行数据同步吗? + +不支持通过第三方同步盘进行数据同步,否则可能会导致数据损坏。 + +虽然不支持第三方同步盘,但是支持对接第三方云端存储(会员特权)。 + +另外,也可以考虑手动导出导入 Data 实现数据同步: + +* 桌面端:设置 - 导出 - 导出 Data / 导入 Data +* 移动端:右侧栏 - 关于 - 导出 Data / 导入 Data + +### 思源是开源的吗? + +思源笔记是完全开源的,欢迎参与贡献: + +* [界面和内核](https://github.com/siyuan-note/siyuan) +* [Android 端](https://github.com/siyuan-note/siyuan-android) +* [iOS 端](https://github.com/siyuan-note/siyuan-ios) +* [鸿蒙端](https://github.com/siyuan-note/siyuan-harmony) +* [Chrome 剪藏扩展](https://github.com/siyuan-note/siyuan-chrome) + +更多细节请参考[开发指南](https://github.com/siyuan-note/siyuan/blob/master/.github/CONTRIBUTING_zh_CN.md)。 + +### 如何升级到新版本? + +* 如果是通过应用商店安装的,请通过应用商店更新 +* 如果是桌面端通过安装包安装的,可打开 设置 - 关于 - 自动下载更新安装包 选项,这样思源会自动下载最新版安装包并提示安装 +* 如果是通过手动安装包安装的,请再次下载安装包安装 + +可在 设置 - 关于 - 当前版本检查更新,也可以通过关注[官方下载](https://b3log.org/siyuan/download.html)或者 [GitHub Releases](https://github.com/siyuan-note/siyuan/releases) 来获取新版本。 + +**注意**:切勿将工作空间放置于安装目录下,因为更新版本会清空安装目录下的所有文件 + +### 有的块(比如在列表项中的段落块)找不到块标怎么办? + +在列表项下的第一个子块是省略块标的。可以将光标移到这个块中,然后通过 Ctrl+/ 触发它的块标菜单。 + +### 数据仓库密钥遗失怎么办? + +* 如果之前在多个设备上正确初始化过数据仓库密钥的话,那么该密钥在所有设备上都是相同的,可以在 设置 - 关于 - 数据仓库密钥 - 复制密钥字符串 找回 +* 如果之前没有正确配置(比如多个设备上密钥不一致)或者所有设备均不可用,已经无法获得密钥字符串,则可通过如下步骤重置密钥: + + 1. 手动备份好数据,可通过 导出 Data 或者直接在文件系统上复制 工作空间/data/ 文件夹 + 2. 设置 - 关于 - 数据仓库密钥 - 重置数据仓库 + 3. 重新初始化数据仓库密钥,在一台设备上初始化密钥以后,其他设备导入密钥 + 4. 云端使用新的同步目录,旧的同步目录已经无法使用,可以删除 + 5. 已有的云端快照已经无法使用,可以删除 + +### 使用需要付费吗? + +大部分功能是免费的,即使是在商业环境下使用。 + +会员特权需要付费后才能使用,请参考[定价](https://b3log.org/siyuan/pricing.html)。 + +如果你没有会员特权需求但又想支持开发,欢迎进行捐赠:[靠爱发电 - 链滴](https://ld246.com/sponsor) + +## 🙏 鸣谢 + +思源的诞生离不开众多的开源项目和贡献者,请参考项目源代码 kernel/go.mod、app/package.json 和项目首页。 + +思源的成长离不开用户的反馈和宣传推广,感谢所有人对思源的帮助 ❤️ + +### 贡献者列表 + +欢迎加入我们,一起为思源贡献代码。 + + + + \ No newline at end of file diff --git a/siyuan/data.yml b/siyuan/data.yml new file mode 100644 index 000000000..1c55ac6d5 --- /dev/null +++ b/siyuan/data.yml @@ -0,0 +1,19 @@ +name: 思源笔记 SiYuan +tags: + - 工具 +title: 一款隐私优先的个人知识管理系统 +description: 思源笔记是一款隐私优先的个人知识管理系统,支持细粒度块级引用和 Markdown 所见即所得。 +additionalProperties: + key: siyuan + name: 思源笔记 SiYuan + tags: + - Tool + shortDescZh: 一款隐私优先的个人知识管理系统 + shortDescEn: A privacy-first personal knowledge management system + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://b3log.org/siyuan + github: https://github.com/siyuan-note/siyuan + document: https://github.com/siyuan-note/siyuan diff --git a/siyuan/latest/data.yml b/siyuan/latest/data.yml new file mode 100644 index 000000000..a1398d86b --- /dev/null +++ b/siyuan/latest/data.yml @@ -0,0 +1,19 @@ +additionalProperties: + formFields: + - default: "6806" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + + - default: "" + edit: true + envKey: AuthCode + labelZh: 授权码 + labelEn: Access Auth Code + required: true + rule: paramComplexity + type: password \ No newline at end of file diff --git a/siyuan/latest/docker-compose.yml b/siyuan/latest/docker-compose.yml new file mode 100644 index 000000000..996ecc6ec --- /dev/null +++ b/siyuan/latest/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + siyuan: + command: + - --workspace=/siyuan/workspace/ + - --accessAuthCode=${AuthCode} + container_name: ${CONTAINER_NAME} + environment: + - RUN_IN_CONTAINER=true + - TZ=Asia/Shanghai + image: b3log/siyuan:latest + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:6806 + restart: always + user: "0:0" + volumes: + - ./data:/siyuan/workspace + diff --git a/siyuan/logo.png b/siyuan/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..913307599b3813fbabfe99553990ba0e158b7b3e GIT binary patch literal 1589 zcmb_cYfuwc6y6OhtZ!DM1BkkAREA2(1BfIgA(8M>U>Tqqt0|8VO$bRaL=!MzCbcyv z3069aicQE+K}JO@^-;BARYGh{r*R}|Wn_M#xl~@V#BA;VW_;2i>-)Br>B=BNM-Vra*Z^*JR?U^u8^<`v3TBu zI6cP)pp6vJPS|decB3V=kBPteM z%#LKluw$9g5h#<+VA1Go8Y7xYXK?6j4xNF%H;gv{jnfpa;baMu-jn%WTui3bmT+h^ zolY02i;7fh*3uYkHk(Fg(wI!DFN0cIrqbr?sj5=S7{osqLTRZ)BQMd))hcuhGrvH+ zUdzQW+87D#J&UhA+K2jlj}IM^s(fwH`07Vf4|4zj`ZiT4$kEq7y>m8$oF8ra0Qhcd(Y5EjsrnvcUz{8u*Tjr1VL3vNPk)0uv`LIx%ln#G0w9Lh*p7qVGZQ zz2}NwcDSCE%5~J3F5Ld2>r{z%m?sy>$Jr`?}Y)WM7GT z%@UOp#btlR7+>yGM_=8AJHM|HGtXGbEFko4yPIXC00|EsACSQAhcml|0R88WHo}WE zz${=2crY!ubzUWukkfOLRdIH!8xc-+4-?@UXj2W|KrsikpX+EcBa^^07cLRu#n5%q z$zsD+GU%Ku*4+K5Wtf@+eMM^in3rg_4|&^6d5CblebC$XWf4#V@3GUCs8vi3zah~k0u*QN{=S6kDl1|KFMmHF&i<$s#%HY>Gfc{((|MNW*CFc?ayM#s?75xIm@hQ?j6qa7B~0 z0S+rp0g~~RAw@H`|7_5#tBafc|f5dKj7;L?gi zm@K5d|Al4#!lcYq-M*N?!g}^r-G4s~Bxn4u>+n=C4KTd?(Y(K_Me&V3*C}-b(7_{b zO6k9mMy|gq2#Gyaw&D0VH^Y=1$Tp5QJ`G#ZIt&K+o!n9>EFrmhMxtxbJHx1itY{H1 zJ!i2>J)o#CyA7{*w?3U$0wI2Ni+PFGygo0PWs-prA-16NsXG_7tiA3fGfgSrjbK|x zvr4}iepHS3W9Di6S|WT2l-|*li3nl)74ILxg1tm|8q^1BgKcrxLniMFb95U#}QgkyTH>Io*zX{D2J^&T2c&)6Fwd=a)}w)RSJQ411EUB?okG%5`{Z z?FwMPGhF}nwoF&Syc9`H`wb2Lj}DyFuF1{;NeKr v2Q7^vK5gxJ6We@94ur(Bl$3u@kF2(PM>dMOrkqx?#-@F0VutYWl04Jj5piwf literal 0 HcmV?d00001 From db3615df78d74283d8961a7715412b1f885ea114 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 24 May 2025 04:09:50 +0000 Subject: [PATCH 05/53] chore(deps): update b3log/siyuan docker tag to v3.1.30 --- siyuan/3.1.29/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/siyuan/3.1.29/docker-compose.yml b/siyuan/3.1.29/docker-compose.yml index 8e7defd95..a34b991a9 100644 --- a/siyuan/3.1.29/docker-compose.yml +++ b/siyuan/3.1.29/docker-compose.yml @@ -10,7 +10,7 @@ services: environment: - RUN_IN_CONTAINER=true - TZ=Asia/Shanghai - image: b3log/siyuan:v3.1.29 + image: b3log/siyuan:v3.1.30 labels: createdBy: Apps networks: From 958ecd6090bfe3aede143f95eca0cc3e89cb8245 Mon Sep 17 00:00:00 2001 From: github-action update-app-version Date: Sat, 24 May 2025 04:10:03 +0000 Subject: [PATCH 06/53] Update app version [skip ci] --- siyuan/{3.1.29 => 3.1.30}/data.yml | 0 siyuan/{3.1.29 => 3.1.30}/docker-compose.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename siyuan/{3.1.29 => 3.1.30}/data.yml (100%) rename siyuan/{3.1.29 => 3.1.30}/docker-compose.yml (100%) diff --git a/siyuan/3.1.29/data.yml b/siyuan/3.1.30/data.yml similarity index 100% rename from siyuan/3.1.29/data.yml rename to siyuan/3.1.30/data.yml diff --git a/siyuan/3.1.29/docker-compose.yml b/siyuan/3.1.30/docker-compose.yml similarity index 100% rename from siyuan/3.1.29/docker-compose.yml rename to siyuan/3.1.30/docker-compose.yml From 7715e26ab9ca59ebcccc2d13551e0734783910b4 Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Sat, 24 May 2025 12:12:52 +0800 Subject: [PATCH 07/53] =?UTF-8?q?feat(localApps):=20=E6=B7=BB=E5=8A=A0=20S?= =?UTF-8?q?un=20Panel=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 Sun Panel 应用的配置文件和文档 - 创建多个版本的 data.yml 和 docker-compose.yml 文件 - 添加 Sun Panel 的README文档,介绍其功能和使用方法 --- sun-panel/1.7.0/data.yml | 10 +++ sun-panel/1.7.0/docker-compose.yml | 20 +++++ sun-panel/README.md | 111 ++++++++++++++++++++++++++++ sun-panel/data.yml | 19 +++++ sun-panel/latest/data.yml | 10 +++ sun-panel/latest/docker-compose.yml | 20 +++++ sun-panel/logo.png | Bin 0 -> 63259 bytes 7 files changed, 190 insertions(+) create mode 100644 sun-panel/1.7.0/data.yml create mode 100644 sun-panel/1.7.0/docker-compose.yml create mode 100644 sun-panel/README.md create mode 100644 sun-panel/data.yml create mode 100644 sun-panel/latest/data.yml create mode 100644 sun-panel/latest/docker-compose.yml create mode 100644 sun-panel/logo.png diff --git a/sun-panel/1.7.0/data.yml b/sun-panel/1.7.0/data.yml new file mode 100644 index 000000000..68eaa2957 --- /dev/null +++ b/sun-panel/1.7.0/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: "3002" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number \ No newline at end of file diff --git a/sun-panel/1.7.0/docker-compose.yml b/sun-panel/1.7.0/docker-compose.yml new file mode 100644 index 000000000..f1da6be11 --- /dev/null +++ b/sun-panel/1.7.0/docker-compose.yml @@ -0,0 +1,20 @@ +networks: + 1panel-network: + external: true +services: + sun-panel: + container_name: ${CONTAINER_NAME} + environment: + - TZ=Asia/Shanghai + image: hslr/sun-panel:1.7.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3002 + restart: always + volumes: + - ./data/conf:/app/conf + - ./data/database:/app/database + - ./data/uploads:/app/uploads diff --git a/sun-panel/README.md b/sun-panel/README.md new file mode 100644 index 000000000..6dc959f2a --- /dev/null +++ b/sun-panel/README.md @@ -0,0 +1,111 @@ +[[ 简体中文 ]](https://sun-panel-doc.enianteam.com/zh_cn/introduce/project.html) | +[[ English ]](https://sun-panel-doc.enianteam.com/introduce/project.html) + +
+ + + +# Sun-Panel + +[![Github](https://img.shields.io/badge/Github-123456?logo=github&labelColor=242424)](https://github.com/hslr-s/sun-panel) +[![Gitee](https://img.shields.io/badge/Gitee-123456?logo=gitee&labelColor=c71d23)](https://gitee.com/hslr/sun-panel) +[![docker](https://img.shields.io/badge/docker-123456?logo=docker&logoColor=fff&labelColor=1c7aed)](https://hub.docker.com/r/hslr/sun-panel) +[![Bilibili](https://img.shields.io/badge/Bilibili-123456?logo=bilibili&logoColor=fff&labelColor=fb7299)](https://space.bilibili.com/27407696/channel/collectiondetail?sid=2023810) +[![YouTube](https://img.shields.io/badge/YouTube-123456?logo=youtube&labelColor=ff0000)](https://www.youtube.com/channel/UCKwbFmKU25R602z6P2fgPYg) +
+[![GitHub User's stars](https://img.shields.io/github/stars/hslr-s%2Fsun-panel?style=flat&logo=github)](https://github.com/hslr-s/sun-panel) +[![github downloads](https://img.shields.io/github/downloads/hslr-s/sun-panel/total.svg?logo=github)](https://github.com/hslr-s/sun-panel/releases) +[![docker pulls](https://img.shields.io/docker/pulls/hslr/sun-panel.svg?logo=docker)](https://hub.docker.com/r/hslr/sun-panel) + +[[ 中文文档 ]](https://sun-panel-doc.enianteam.com/zh_cn) | +[[ Document ]](https://sun-panel-doc.enianteam.com) | +[[ Demo ]](http://sunpaneldemo.enianteam.com) + +A server, NAS navigation panel, Homepage, Browser homepage. +
+一个服务器、NAS导航面板、Homepage、浏览器首页。 + +
+ + +![](./doc/images/main-dark.png) + +> [!IMPORTANT] +> In order to maintain the livelihood, the author added some [`PRO`] (https://pro.sun-panel.top) function, so the project temporarily entered a closed source state.; At present, the latest version of the open source is `v1.3.0`, [Please see the latest version of closed source](https://github.com/hslr-s/sun-panel/releases).; When the modular technology is developed, the separation of the PRO and the programs will be opened again, and the closed source will have no effect on ordinary users.; Let's look forward to open source again, and at the same time, we are welcome to supervise and review the security of the program. +> +> 作者为了维持生计,增加了一些 [`PRO`](https://pro.sun-panel.top) 功能,所以项目暂时进入闭源状态。目前开源最新版本为`v1.3.0`,[闭源最新版本请查看](https://github.com/hslr-s/sun-panel/releases)。待开发出模块化技术,然后对PRO和主程序进行分离会再次开源,闭源对普通用户没有任何影响。我们一起期待再次开源吧,同时也欢迎各位大佬对程序的安全性进行监督和审查。 + +## 😎 Features + +- 🍉 Clean interface, powerful functionality, low resource consumption +- 🍊 Easy to use, visual operation, zero-code usage +- 🍠 One-click switch between internal and external network modes +- 🍵 Supports Docker deployment (compatible with Arm systems) +- 🎪 Supports multi-account isolation +- 🎏 Supports viewing system status +- 🫙 Supports custom JS, CSS +- 🍻 Simple usage without the need to connect to an external database +- 🍾 Rich icon styles for free combination, supports [Iconify icon library](https://icon-sets.iconify.design/) +- 🚁 Supports opening small windows in the webpage (some third-party websites may block this feature) + +## 🖼️ Preview Screenshots + +**Various styles, freely combined** + +![](./doc/images/icon-small-new.png) +![](./doc/images/transparent-info.png) +![](./doc/images/transparent-small.png) +![](./doc/images/solid-color-info.png) +![](./doc/images/full-color-small.jpg) + +**Built-in small windows** + +![](./doc/images/window-ssh.png) +![](./doc/images/window-xunlei.png) + + + +## 🐳 Deployment tutorial +[Deployment Tutorial](https://sun-panel-doc.enianteam.com/usage/quick_deploy.html) + +## 🍵 Donate + +> Open-source development is not easy. If you feel that my project has helped you, you are welcome to [donate](./doc/donate.md) or buy me a cup of tea☕ (please leave your nickname or name in the note if possible). Your support is my motivation, thank you. + + + + + + + +| | | +| ------------ | ------------ | +| | | + +## 🏖️ Communication group & community + +Author:**[红烧猎人](https://blog.enianteam.com/u/sun/content/11)** + +[Github Discussions](https://github.com/hslr-s/sun-panel/discussions) + +QQ交流群,进不去可以点上方连接联系作者 + + + +## ❤️ Thanks + +- [Roc](https://github.com/RocCheng) +- [jackloves111](https://github.com/jackloves111) +- [Rock.L](https://github.com/gitlyp) + + +--- + +[![Star History Chart](https://api.star-history.com/svg?repos=hslr-s/sun-panel&type=Date)](https://star-history.com/#hslr-s/sun-panel&Date) + + +- 账户密码 +``` +username: admin@sun.cc +password: 12345678 +``` \ No newline at end of file diff --git a/sun-panel/data.yml b/sun-panel/data.yml new file mode 100644 index 000000000..046ac083e --- /dev/null +++ b/sun-panel/data.yml @@ -0,0 +1,19 @@ +name: Sun Panel +tags: + - 工具 +title: 开源的文件同步客户端与服务器软件 +description: 开源的文件同步客户端与服务器软件,采用Go语言编写。它可以在本地网络上的设备之间或通过Internet在远程设备之间同步文件,使用了其独有的对等自由块交换协议 +additionalProperties: + key: sun-panel + name: Sun Panel + tags: + - Tool + shortDescZh: 一个服务器、NAS导航面板、Homepage、浏览器首页 + shortDescEn: A server, NAS navigation panel, Homepage, Browser homepage + type: website + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://syncthing.net + github: https://github.com/syncthing/syncthing + document: https://docs.syncthing.net diff --git a/sun-panel/latest/data.yml b/sun-panel/latest/data.yml new file mode 100644 index 000000000..0c5623fdf --- /dev/null +++ b/sun-panel/latest/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: "3002" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number diff --git a/sun-panel/latest/docker-compose.yml b/sun-panel/latest/docker-compose.yml new file mode 100644 index 000000000..7c08a6b68 --- /dev/null +++ b/sun-panel/latest/docker-compose.yml @@ -0,0 +1,20 @@ +networks: + 1panel-network: + external: true +services: + sun-panel: + container_name: ${CONTAINER_NAME} + environment: + - TZ=Asia/Shanghai + image: hslr/sun-panel:latest + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3002 + restart: always + volumes: + - ./data/conf:/app/conf + - ./data/database:/app/database + - ./data/uploads:/app/uploads diff --git a/sun-panel/logo.png b/sun-panel/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a3aac61dc6e6d09a25c44bc024669d4a2b0c8d59 GIT binary patch literal 63259 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 literal 0 HcmV?d00001 From c498423ab1b1f0739e9da2f716b7f0a3c5f34403 Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Sat, 24 May 2025 12:14:50 +0800 Subject: [PATCH 08/53] =?UTF-8?q?feat(localApps):=20=E6=B7=BB=E5=8A=A0=20S?= =?UTF-8?q?yncthing=20=E5=8F=91=E7=8E=B0=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 Syncthing 发现服务器应用配置文件和 Docker Compose 文件 - 添加 Syncthing 发现服务器的 README 文档 - 配置文件包括端口设置、环境变量和卷挂载等信息 - Docker Compose 文件定义了网络和服务配置 - README 文档提供了 Syncthing 的基本介绍、使用指南和相关链接 --- syncthing-discosrv/1.29.6/data.yml | 10 ++ syncthing-discosrv/1.29.6/docker-compose.yml | 21 ++++ syncthing-discosrv/README.md | 114 +++++++++++++++++++ syncthing-discosrv/data.yml | 19 ++++ syncthing-discosrv/latest/data.yml | 10 ++ syncthing-discosrv/latest/docker-compose.yml | 21 ++++ syncthing-discosrv/logo.png | Bin 0 -> 5098 bytes 7 files changed, 195 insertions(+) create mode 100644 syncthing-discosrv/1.29.6/data.yml create mode 100644 syncthing-discosrv/1.29.6/docker-compose.yml create mode 100644 syncthing-discosrv/README.md create mode 100644 syncthing-discosrv/data.yml create mode 100644 syncthing-discosrv/latest/data.yml create mode 100644 syncthing-discosrv/latest/docker-compose.yml create mode 100644 syncthing-discosrv/logo.png diff --git a/syncthing-discosrv/1.29.6/data.yml b/syncthing-discosrv/1.29.6/data.yml new file mode 100644 index 000000000..e186af1d2 --- /dev/null +++ b/syncthing-discosrv/1.29.6/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: "8443" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 发现服务器端口 + labelEn: Discovery server port + required: true + rule: paramPort + type: number \ No newline at end of file diff --git a/syncthing-discosrv/1.29.6/docker-compose.yml b/syncthing-discosrv/1.29.6/docker-compose.yml new file mode 100644 index 000000000..838dd63a1 --- /dev/null +++ b/syncthing-discosrv/1.29.6/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + 1panel-network: + external: true + +services: + syncthing_discosrv: + container_name: ${CONTAINER_NAME} + environment: + - PUID=1001 + - PGID=1001 + - TZ=Asia/Shanghai + image: syncthing/discosrv:1.29.6 + labels: + createdBy: "Apps" + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8443 + restart: always + volumes: + - ./data:/var/stdiscosrv diff --git a/syncthing-discosrv/README.md b/syncthing-discosrv/README.md new file mode 100644 index 000000000..6cf9fc2db --- /dev/null +++ b/syncthing-discosrv/README.md @@ -0,0 +1,114 @@ +[![Syncthing][14]][15] + +--- + +[![MPLv2 License](https://img.shields.io/badge/license-MPLv2-blue.svg?style=flat-square)](https://www.mozilla.org/MPL/2.0/) +[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/88/badge)](https://bestpractices.coreinfrastructure.org/projects/88) +[![Go Report Card](https://goreportcard.com/badge/github.com/syncthing/syncthing)](https://goreportcard.com/report/github.com/syncthing/syncthing) + +## Goals + +Syncthing is a **continuous file synchronization program**. It synchronizes +files between two or more computers. We strive to fulfill the goals below. +The goals are listed in order of importance, the most important one being +the first. This is the summary version of the goal list - for more +commentary, see the full [Goals document][13]. + +Syncthing should be: + +1. **Safe From Data Loss** + + Protecting the user's data is paramount. We take every reasonable + precaution to avoid corrupting the user's files. + +2. **Secure Against Attackers** + + Again, protecting the user's data is paramount. Regardless of our other + goals we must never allow the user's data to be susceptible to + eavesdropping or modification by unauthorized parties. + +3. **Easy to Use** + + Syncthing should be approachable, understandable and inclusive. + +4. **Automatic** + + User interaction should be required only when absolutely necessary. + +5. **Universally Available** + + Syncthing should run on every common computer. We are mindful that the + latest technology is not always available to any given individual. + +6. **For Individuals** + + Syncthing is primarily about empowering the individual user with safe, + secure and easy to use file synchronization. + +7. **Everything Else** + + There are many things we care about that don't make it on to the list. It + is fine to optimize for these values, as long as they are not in conflict + with the stated goals above. + +## Getting Started + +Take a look at the [getting started guide][2]. + +There are a few examples for keeping Syncthing running in the background +on your system in [the etc directory][3]. There are also several [GUI +implementations][11] for Windows, Mac and Linux. + +## Docker + +To run Syncthing in Docker, see [the Docker README][16]. + +## Vote on features/bugs + +We'd like to encourage you to [vote][12] on issues that matter to you. +This helps the team understand what are the biggest pain points for our users, and could potentially influence what is being worked on next. + +## Getting in Touch + +The first and best point of contact is the [Forum][8]. +If you've found something that is clearly a +bug, feel free to report it in the [GitHub issue tracker][10]. + +## Building + +Building Syncthing from source is easy. After extracting the source bundle from +a release or checking out git, you just need to run `go run build.go` and the +binaries are created in `./bin`. There's [a guide][5] with more details on the +build process. + +## Signed Releases + +As of v0.10.15 and onwards release binaries are GPG signed with the key +D26E6ED000654A3E, available from https://syncthing.net/security.html and +most key servers. + +There is also a built in automatic upgrade mechanism (disabled in some +distribution channels) which uses a compiled in ECDSA signature. macOS +binaries are also properly code signed. + +## Documentation + +Please see the Syncthing [documentation site][6] [[source]][17]. + +All code is licensed under the [MPLv2 License][7]. + +[1]: https://docs.syncthing.net/specs/bep-v1.html +[2]: https://docs.syncthing.net/intro/getting-started.html +[3]: https://github.com/syncthing/syncthing/blob/main/etc +[5]: https://docs.syncthing.net/dev/building.html +[6]: https://docs.syncthing.net/ +[7]: https://github.com/syncthing/syncthing/blob/main/LICENSE +[8]: https://forum.syncthing.net/ +[10]: https://github.com/syncthing/syncthing/issues +[11]: https://docs.syncthing.net/users/contrib.html#gui-wrappers +[12]: https://www.bountysource.com/teams/syncthing/issues +[13]: https://github.com/syncthing/syncthing/blob/main/GOALS.md +[14]: https://github.com/syncthing/syncthing/raw/main/assets/logo-text-128.png +[15]: https://syncthing.net/ +[16]: https://github.com/syncthing/syncthing/blob/main/README-Docker.md +[17]: https://github.com/syncthing/docs diff --git a/syncthing-discosrv/data.yml b/syncthing-discosrv/data.yml new file mode 100644 index 000000000..25c06fded --- /dev/null +++ b/syncthing-discosrv/data.yml @@ -0,0 +1,19 @@ +name: Syncthing-discosrv +tags: + - 工具 +title: syncthing 发现服务器 +description: syncthing 发现服务器 +additionalProperties: + key: syncthing-discosrv + name: Syncthing-discosrv + tags: + - Tool + shortDescZh: syncthing 发现服务器 + shortDescEn: discovery server for the syncthing + type: tool + crossVersionUpdate: true + limit: 1 + recommend: 0 + website: https://syncthing.net + github: https://github.com/syncthing/syncthing + document: https://docs.syncthing.net diff --git a/syncthing-discosrv/latest/data.yml b/syncthing-discosrv/latest/data.yml new file mode 100644 index 000000000..e186af1d2 --- /dev/null +++ b/syncthing-discosrv/latest/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: "8443" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 发现服务器端口 + labelEn: Discovery server port + required: true + rule: paramPort + type: number \ No newline at end of file diff --git a/syncthing-discosrv/latest/docker-compose.yml b/syncthing-discosrv/latest/docker-compose.yml new file mode 100644 index 000000000..9b31ff623 --- /dev/null +++ b/syncthing-discosrv/latest/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + 1panel-network: + external: true + +services: + syncthing_discosrv: + container_name: ${CONTAINER_NAME} + environment: + - PUID=1001 + - PGID=1001 + - TZ=Asia/Shanghai + image: syncthing/discosrv:latest + labels: + createdBy: "Apps" + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8443 + restart: always + volumes: + - ./data:/var/stdiscosrv diff --git a/syncthing-discosrv/logo.png b/syncthing-discosrv/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d2526bb6bf82a999c855d2b26e689f4589447deb GIT binary patch literal 5098 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 M07*qoM6N<$f_@6&od5s; literal 0 HcmV?d00001 From edd836cc51d482d7da3322c3304fd34dc8eae133 Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Sat, 24 May 2025 12:16:02 +0800 Subject: [PATCH 09/53] =?UTF-8?q?feat(localApps):=20=E6=B7=BB=E5=8A=A0=20S?= =?UTF-8?q?yncthing=20=E4=B8=AD=E7=BB=A7=E6=9C=8D=E5=8A=A1=E5=99=A8?= =?UTF-8?q?=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 Syncthing 中继服务器的配置文件和 Docker Compose 文件 - 添加 Syncthing 中继服务器的说明文档 - 创建 Syncthing 中继服务器的数据配置文件 --- syncthing-relaysrv/1.29.6/data.yml | 10 ++ syncthing-relaysrv/1.29.6/docker-compose.yml | 21 ++++ syncthing-relaysrv/README.md | 114 +++++++++++++++++++ syncthing-relaysrv/data.yml | 19 ++++ syncthing-relaysrv/latest/data.yml | 10 ++ syncthing-relaysrv/latest/docker-compose.yml | 21 ++++ syncthing-relaysrv/logo.png | Bin 0 -> 5098 bytes 7 files changed, 195 insertions(+) create mode 100644 syncthing-relaysrv/1.29.6/data.yml create mode 100644 syncthing-relaysrv/1.29.6/docker-compose.yml create mode 100644 syncthing-relaysrv/README.md create mode 100644 syncthing-relaysrv/data.yml create mode 100644 syncthing-relaysrv/latest/data.yml create mode 100644 syncthing-relaysrv/latest/docker-compose.yml create mode 100644 syncthing-relaysrv/logo.png diff --git a/syncthing-relaysrv/1.29.6/data.yml b/syncthing-relaysrv/1.29.6/data.yml new file mode 100644 index 000000000..ae79aa587 --- /dev/null +++ b/syncthing-relaysrv/1.29.6/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: "22067" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 中继服务器端口 + labelEn: Relay server port + required: true + rule: paramPort + type: number \ No newline at end of file diff --git a/syncthing-relaysrv/1.29.6/docker-compose.yml b/syncthing-relaysrv/1.29.6/docker-compose.yml new file mode 100644 index 000000000..95faa190d --- /dev/null +++ b/syncthing-relaysrv/1.29.6/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + 1panel-network: + external: true +services: + syncthing_relaysrv: + container_name: ${CONTAINER_NAME} + environment: + - PUID=1001 + - PGID=1001 + - pools="" + image: syncthing/relaysrv:1.29.6 + labels: + createdBy: "Apps" + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:22067 # 中继服务器的数据连接端口(必须开启) + # - 22070:22070 # 用于公用的中继服务器池,显示数据传输、客户端数量等状态,可不开启 + restart: always + volumes: + - ./data:/var/strelaysrv diff --git a/syncthing-relaysrv/README.md b/syncthing-relaysrv/README.md new file mode 100644 index 000000000..6cf9fc2db --- /dev/null +++ b/syncthing-relaysrv/README.md @@ -0,0 +1,114 @@ +[![Syncthing][14]][15] + +--- + +[![MPLv2 License](https://img.shields.io/badge/license-MPLv2-blue.svg?style=flat-square)](https://www.mozilla.org/MPL/2.0/) +[![CII Best Practices](https://bestpractices.coreinfrastructure.org/projects/88/badge)](https://bestpractices.coreinfrastructure.org/projects/88) +[![Go Report Card](https://goreportcard.com/badge/github.com/syncthing/syncthing)](https://goreportcard.com/report/github.com/syncthing/syncthing) + +## Goals + +Syncthing is a **continuous file synchronization program**. It synchronizes +files between two or more computers. We strive to fulfill the goals below. +The goals are listed in order of importance, the most important one being +the first. This is the summary version of the goal list - for more +commentary, see the full [Goals document][13]. + +Syncthing should be: + +1. **Safe From Data Loss** + + Protecting the user's data is paramount. We take every reasonable + precaution to avoid corrupting the user's files. + +2. **Secure Against Attackers** + + Again, protecting the user's data is paramount. Regardless of our other + goals we must never allow the user's data to be susceptible to + eavesdropping or modification by unauthorized parties. + +3. **Easy to Use** + + Syncthing should be approachable, understandable and inclusive. + +4. **Automatic** + + User interaction should be required only when absolutely necessary. + +5. **Universally Available** + + Syncthing should run on every common computer. We are mindful that the + latest technology is not always available to any given individual. + +6. **For Individuals** + + Syncthing is primarily about empowering the individual user with safe, + secure and easy to use file synchronization. + +7. **Everything Else** + + There are many things we care about that don't make it on to the list. It + is fine to optimize for these values, as long as they are not in conflict + with the stated goals above. + +## Getting Started + +Take a look at the [getting started guide][2]. + +There are a few examples for keeping Syncthing running in the background +on your system in [the etc directory][3]. There are also several [GUI +implementations][11] for Windows, Mac and Linux. + +## Docker + +To run Syncthing in Docker, see [the Docker README][16]. + +## Vote on features/bugs + +We'd like to encourage you to [vote][12] on issues that matter to you. +This helps the team understand what are the biggest pain points for our users, and could potentially influence what is being worked on next. + +## Getting in Touch + +The first and best point of contact is the [Forum][8]. +If you've found something that is clearly a +bug, feel free to report it in the [GitHub issue tracker][10]. + +## Building + +Building Syncthing from source is easy. After extracting the source bundle from +a release or checking out git, you just need to run `go run build.go` and the +binaries are created in `./bin`. There's [a guide][5] with more details on the +build process. + +## Signed Releases + +As of v0.10.15 and onwards release binaries are GPG signed with the key +D26E6ED000654A3E, available from https://syncthing.net/security.html and +most key servers. + +There is also a built in automatic upgrade mechanism (disabled in some +distribution channels) which uses a compiled in ECDSA signature. macOS +binaries are also properly code signed. + +## Documentation + +Please see the Syncthing [documentation site][6] [[source]][17]. + +All code is licensed under the [MPLv2 License][7]. + +[1]: https://docs.syncthing.net/specs/bep-v1.html +[2]: https://docs.syncthing.net/intro/getting-started.html +[3]: https://github.com/syncthing/syncthing/blob/main/etc +[5]: https://docs.syncthing.net/dev/building.html +[6]: https://docs.syncthing.net/ +[7]: https://github.com/syncthing/syncthing/blob/main/LICENSE +[8]: https://forum.syncthing.net/ +[10]: https://github.com/syncthing/syncthing/issues +[11]: https://docs.syncthing.net/users/contrib.html#gui-wrappers +[12]: https://www.bountysource.com/teams/syncthing/issues +[13]: https://github.com/syncthing/syncthing/blob/main/GOALS.md +[14]: https://github.com/syncthing/syncthing/raw/main/assets/logo-text-128.png +[15]: https://syncthing.net/ +[16]: https://github.com/syncthing/syncthing/blob/main/README-Docker.md +[17]: https://github.com/syncthing/docs diff --git a/syncthing-relaysrv/data.yml b/syncthing-relaysrv/data.yml new file mode 100644 index 000000000..05f8e1112 --- /dev/null +++ b/syncthing-relaysrv/data.yml @@ -0,0 +1,19 @@ +name: Syncthing-relaysrv +tags: + - 工具 +title: syncthing 中继服务器 +description: syncthing 中继服务器 +additionalProperties: + key: syncthing-relaysrv + name: Syncthing-relaysrv + tags: + - Tool + shortDescZh: syncthing 中继服务器 + shortDescEn: the relay server for the syncthing + type: tool + crossVersionUpdate: true + limit: 1 + recommend: 0 + website: https://syncthing.net + github: https://github.com/syncthing/syncthing + document: https://docs.syncthing.net diff --git a/syncthing-relaysrv/latest/data.yml b/syncthing-relaysrv/latest/data.yml new file mode 100644 index 000000000..ae79aa587 --- /dev/null +++ b/syncthing-relaysrv/latest/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: "22067" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 中继服务器端口 + labelEn: Relay server port + required: true + rule: paramPort + type: number \ No newline at end of file diff --git a/syncthing-relaysrv/latest/docker-compose.yml b/syncthing-relaysrv/latest/docker-compose.yml new file mode 100644 index 000000000..dafe4b46b --- /dev/null +++ b/syncthing-relaysrv/latest/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + 1panel-network: + external: true +services: + syncthing_relaysrv: + container_name: ${CONTAINER_NAME} + environment: + - PUID=1001 + - PGID=1001 + - pools="" + image: syncthing/relaysrv:latest + labels: + createdBy: "Apps" + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:22067 # 中继服务器的数据连接端口(必须开启) + # - 22070:22070 # 用于公用的中继服务器池,显示数据传输、客户端数量等状态,可不开启 + restart: always + volumes: + - ./data:/var/strelaysrv diff --git a/syncthing-relaysrv/logo.png b/syncthing-relaysrv/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d2526bb6bf82a999c855d2b26e689f4589447deb GIT binary patch literal 5098 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 M07*qoM6N<$f_@6&od5s; literal 0 HcmV?d00001 From f26e6258071c59de262ad58fc59bdfc4299657aa Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Sat, 24 May 2025 12:17:09 +0800 Subject: [PATCH 10/53] =?UTF-8?q?feat(localApps):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E8=BF=85=E9=9B=B7=E8=BF=9C=E7=A8=8B=E4=B8=8B=E8=BD=BD=E6=9C=8D?= =?UTF-8?q?=E5=8A=A1=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增迅雷远程下载服务应用配置和文档 - 添加 3.20.2 和 latest 版本的 Docker Compose 文件 - 创建 README.md 文件,详细介绍迅雷远程下载服务的使用方法和环境变量参数 - 在 data.yml 中配置应用的基本信息、标签和环境变量 --- xunlei/3.20.2/data.yml | 27 ++++++++++ xunlei/3.20.2/docker-compose.yml | 30 +++++++++++ xunlei/README.md | 86 +++++++++++++++++++++++++++++++ xunlei/data.yml | 19 +++++++ xunlei/latest/data.yml | 27 ++++++++++ xunlei/latest/docker-compose.yml | 30 +++++++++++ xunlei/logo.png | Bin 0 -> 7710 bytes 7 files changed, 219 insertions(+) create mode 100644 xunlei/3.20.2/data.yml create mode 100644 xunlei/3.20.2/docker-compose.yml create mode 100644 xunlei/README.md create mode 100644 xunlei/data.yml create mode 100644 xunlei/latest/data.yml create mode 100644 xunlei/latest/docker-compose.yml create mode 100644 xunlei/logo.png diff --git a/xunlei/3.20.2/data.yml b/xunlei/3.20.2/data.yml new file mode 100644 index 000000000..4b3110e7e --- /dev/null +++ b/xunlei/3.20.2/data.yml @@ -0,0 +1,27 @@ +additionalProperties: + formFields: + - default: "40163" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + + - default: "xunlei" + edit: true + envKey: XL_DASHBOARD_USERNAME + labelZh: 控制台用户名 + labelEn: Dashboard Username + required: true + type: text + + - default: "xunlei" + edit: true + envKey: XL_DASHBOARD_PASSWORD + labelZh: 控制台密码 + labelEn: Dashboard Password + required: true + rule: paramComplexity + type: password diff --git a/xunlei/3.20.2/docker-compose.yml b/xunlei/3.20.2/docker-compose.yml new file mode 100644 index 000000000..52ad30da5 --- /dev/null +++ b/xunlei/3.20.2/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true + +services: + xunlei: + container_name: ${CONTAINER_NAME} + environment: + - XL_DASHBOARD_PORT=${PANEL_APP_PORT_HTTP} + - XL_DASHBOARD_IP=0.0.0.0 + - XL_DASHBOARD_USERNAME=${XL_DASHBOARD_USERNAME} + - XL_DASHBOARD_PASSWORD=${XL_DASHBOARD_PASSWORD} + - XL_DIR_DOWNLOAD=/xunlei/downloads + - XL_DIR_DATA=/xunlei/data + - XL_UID=0 + - XL_GID=0 + - XL_PREVENT_UPDATE=true + - XL_DEBUG=false + image: cnk3x/xunlei:v3.20.2 + labels: + createdBy: "Apps" + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + privileged: true + restart: always + volumes: + - ./data/data:/xunlei/data + - ./data/downloads:/xunlei/downloads diff --git a/xunlei/README.md b/xunlei/README.md new file mode 100644 index 000000000..aefc0d58c --- /dev/null +++ b/xunlei/README.md @@ -0,0 +1,86 @@ +# 迅雷远程下载服务(非官方) + +[![GitHub Stars][1]][2] [![Docker Pulls][3]][5] [![Docker Version][4]][5] + +[1]: https://img.shields.io/github/stars/cnk3x/xunlei?style=flat +[2]: https://star-history.com/#cnk3x/xunlei&Date +[3]: https://img.shields.io/docker/pulls/cnk3x/xunlei.svg +[4]: https://img.shields.io/docker/v/cnk3x/xunlei +[5]: https://hub.docker.com/r/cnk3x/xunlei + +从迅雷群晖套件中提取出来用于其他设备的迅雷远程下载服务程序。仅供研究学习测试。 \ +本程序仅提供 Linux 模拟和容器化运行环境,未对原版迅雷程序进行任何修改。 + +## 使用 + +### Docker + +#### 镜像 + +```plain +cnk3x/xunlei:latest +registry.cn-shenzhen.aliyuncs.com/cnk3x/xunlei:latest +ghcr.io/cnk3x/xunlei:latest +``` + +**常规**的容器,还是要在特权模式下运行。 + +如果 docker 的存储驱动如果是 btrfs 或者 overlayfs,可以支持的非特权运行。 + +#### 环境变量参数 + +```bash +XL_DASHBOARD_PORT #网页访问的端口,默认 2345 +XL_DASHBOARD_IP #网页访问的端口,默认 0.0.0.0(代表所有IP) +XL_DASHBOARD_USERNAME #网页访问的用户名 +XL_DASHBOARD_PASSWORD #网页访问的密码 +XL_DIR_DOWNLOAD #下载保存默认文件夹,默认 /xunlei/downloads,多个文件夹用冒号:分隔 +XL_DIR_DATA #程序数据保存文件夹,默认 /xunlei/data +XL_UID #运行迅雷的用户ID +XL_GID #运行迅雷的用户组ID +XL_PREVENT_UPDATE #是否阻止更新,默认 true, 可选值 true/false, 1/0 +XL_CHROOT #隔离运行主目录, 指定该值且不为`/`则以隔离模式运行, 用于在容器内隔离环境,容器内默认为 /xunlei,隔离模式运行需要特权模式(--privileged),可以将该值设置为`/`来以非特权模式运行。非特权模式运行有条件,可以尝试失败后使用特权模式重新运行。 +XL_DEBUG #调试模式, 可选值 true/false, 1/0 +``` + +#### 在容器中运行 + +```bash +# docker run -d \ +# -v <数据目录>:/xunlei/data \ +# -v <默认下载保存目录>:/xunlei/downloads \ +# -p <访问端口>:2345 \ +# --privileged \ +# cnk3x/xunlei + +# example +docker run --privileged -v /mnt/sdb1/configs/xunlei:/xunlei/data -v /mnt/sdb1/downloads:/xunlei/downloads -p 2345:2345 cnk3x/xunlei + +# 如果你的docker存储驱动是 overlayfs 或者 btrfs等, 可以不用特权运行 +docker run -e XL_CHROOT=/ -v /mnt/sdb1/configs/xunlei:/xunlei/data -v /mnt/sdb1/downloads:/xunlei/downloads -p 2345:2345 cnk3x/xunlei + +``` + +也可以直接运行 + +```plain +$ bin/xlp-amd64 --help + +Flags: + -p, --dashboard_port 网页访问的端口 (env: XL_DASHBOARD_PORT) (default 2345) + -i, --dashboard_ip 网页访问绑定IP,默认绑定所有IP (env: XL_DASHBOARD_IP) + -u, --dashboard_username 网页访问的用户名 (env: XL_DASHBOARD_USERNAME) + -k, --dashboard_password 网页访问的密码 (env: XL_DASHBOARD_PASSWORD) + --dir_download 下载保存文件夹,可多次指定,需确保有权限访问 (env: XL_DIR_DOWNLOAD) (default [/xunlei/downloads]) + --dir_data 程序数据保存文件夹,其下'.drive'文件夹中,存储了登录的账号,下载进度等信息 (env: XL_DIR_DATA) (default "/xunlei/data") + --uid 运行迅雷的用户ID (env: XL_UID, UID) + --gid 运行迅雷的用户组ID (env: XL_GID, GID) + --prevent_update 阻止更新 (env: XL_PREVENT_UPDATE) (default true) + -r, --chroot CHROOT主目录, 指定该值且不为/则以chroot模式运行, 用于在容器内隔离环境 (env: XL_CHROOT) (default "/") + --debug 是否开启调试日志 (env: XL_DEBUG) + -v, --version 显示版本信息 +``` + +## Used By + +[kubespider](https://github.com/opennaslab/kubespider/blob/main/docs/zh/user_guide/thunder_install_config/README.md) \ No newline at end of file diff --git a/xunlei/data.yml b/xunlei/data.yml new file mode 100644 index 000000000..45842f6e2 --- /dev/null +++ b/xunlei/data.yml @@ -0,0 +1,19 @@ +name: 迅雷 +tags: + - 实用工具 +title: 提取自群晖平台的迅雷下载套件 +description: 提取自群晖平台的迅雷下载套件 +additionalProperties: + key: xunlei + name: 迅雷 + tags: + - Tool + shortDescZh: 提取自群晖平台的迅雷下载套件 + shortDescEn: Thunder download kit extracted from Synology platform + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://www.xunlei.com + github: https://github.com/cnk3x/xunlei/tree/docker + document: https://github.com/cnk3x/xunlei/tree/docker diff --git a/xunlei/latest/data.yml b/xunlei/latest/data.yml new file mode 100644 index 000000000..4f6015888 --- /dev/null +++ b/xunlei/latest/data.yml @@ -0,0 +1,27 @@ +additionalProperties: + formFields: + - default: "40163" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + + - default: "xunlei" + edit: true + envKey: XL_DASHBOARD_USERNAME + labelEn: Dashboard Username + labelZh: 控制台用户名 + required: true + type: text + + - default: "xunlei" + edit: true + envKey: XL_DASHBOARD_PASSWORD + labelEn: Dashboard Password + labelZh: 控制台密码 + required: true + rule: paramComplexity + type: password diff --git a/xunlei/latest/docker-compose.yml b/xunlei/latest/docker-compose.yml new file mode 100644 index 000000000..1d054bd4c --- /dev/null +++ b/xunlei/latest/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true + +services: + xunlei: + container_name: ${CONTAINER_NAME} + environment: + - XL_DASHBOARD_PORT=${PANEL_APP_PORT_HTTP} + - XL_DASHBOARD_IP=0.0.0.0 + - XL_DASHBOARD_USERNAME=${XL_DASHBOARD_USERNAME} + - XL_DASHBOARD_PASSWORD=${XL_DASHBOARD_PASSWORD} + - XL_DIR_DOWNLOAD=/xunlei/downloads + - XL_DIR_DATA=/xunlei/data + - XL_UID=0 + - XL_GID=0 + - XL_PREVENT_UPDATE=true + - XL_DEBUG=false + image: cnk3x/xunlei:latest + labels: + createdBy: "Apps" + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + privileged: true + restart: always + volumes: + - ./data/data:/xunlei/data + - ./data/downloads:/xunlei/downloads diff --git a/xunlei/logo.png b/xunlei/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..4d35c4e89313c620f38ae86bc1ddcc83cf56c6d5 GIT binary patch literal 7710 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 Date: Sat, 24 May 2025 12:18:17 +0800 Subject: [PATCH 11/53] =?UTF-8?q?feat(localApps):=20=E6=B7=BB=E5=8A=A0=20Z?= =?UTF-8?q?eroTier-One=20=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 ZeroTier-One 应用的配置文件和 Docker 组成文件 - 添加应用说明文档,详细介绍使用方法和注意事项 - 配置 Prometheus 指标访问和采集方法 --- zerotier-one/1.14.2/data.yml | 10 ++ zerotier-one/1.14.2/docker-compose.yml | 15 +++ zerotier-one/README.md | 180 +++++++++++++++++++++++++ zerotier-one/data.yml | 19 +++ zerotier-one/latest/data.yml | 10 ++ zerotier-one/latest/docker-compose.yml | 15 +++ zerotier-one/logo.png | Bin 0 -> 6167 bytes 7 files changed, 249 insertions(+) create mode 100644 zerotier-one/1.14.2/data.yml create mode 100644 zerotier-one/1.14.2/docker-compose.yml create mode 100644 zerotier-one/README.md create mode 100644 zerotier-one/data.yml create mode 100644 zerotier-one/latest/data.yml create mode 100644 zerotier-one/latest/docker-compose.yml create mode 100644 zerotier-one/logo.png diff --git a/zerotier-one/1.14.2/data.yml b/zerotier-one/1.14.2/data.yml new file mode 100644 index 000000000..3ad9832f7 --- /dev/null +++ b/zerotier-one/1.14.2/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: 9993 + disabled: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number diff --git a/zerotier-one/1.14.2/docker-compose.yml b/zerotier-one/1.14.2/docker-compose.yml new file mode 100644 index 000000000..8ec47fdca --- /dev/null +++ b/zerotier-one/1.14.2/docker-compose.yml @@ -0,0 +1,15 @@ +services: + zerotier-one: + container_name: ${CONTAINER_NAME} + restart: always + network_mode: host + devices: + - /dev/net/tun + cap_add: + - NET_ADMIN + - SYS_ADMIN + volumes: + - ./data:/var/lib/zerotier-one + image: zerotier/zerotier:1.14.2 + labels: + createdBy: "Apps" diff --git a/zerotier-one/README.md b/zerotier-one/README.md new file mode 100644 index 000000000..6ecc9a160 --- /dev/null +++ b/zerotier-one/README.md @@ -0,0 +1,180 @@ +# 使用说明 + +例子:容器管理界面连接容器终端,执行命令加入网络 +``` +zerotier-cli join [网络ID] +``` + +# 原始相关 + +ZeroTier - Global Area Networking +====== + +*This document is written for a software developer audience. For information on using ZeroTier, see the: [Website](https://www.zerotier.com), [Documentation Site](https://docs.zerotier.com), and [Discussion Forum](https://discuss.zerotier.com).* + +ZeroTier is a smart programmable Ethernet switch for planet Earth. It allows all networked devices, VMs, containers, and applications to communicate as if they all reside in the same physical data center or cloud region. + +This is accomplished by combining a cryptographically addressed and secure peer to peer network (termed VL1) with an Ethernet emulation layer somewhat similar to VXLAN (termed VL2). Our VL2 Ethernet virtualization layer includes advanced enterprise SDN features like fine grained access control rules for network micro-segmentation and security monitoring. + +All ZeroTier traffic is encrypted end-to-end using secret keys that only you control. Most traffic flows peer to peer, though we offer free (but slow) relaying for users who cannot establish peer to peer connections. + +The goals and design principles of ZeroTier are inspired by among other things the original [Google BeyondCorp](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43231.pdf) paper and the [Jericho Forum](https://en.wikipedia.org/wiki/Jericho_Forum) with its notion of "deperimeterization." + +Visit [ZeroTier's site](https://www.zerotier.com/) for more information and [pre-built binary packages](https://www.zerotier.com/download/). Apps for Android and iOS are available for free in the Google Play and Apple app stores. + +ZeroTier is licensed under the [BSL version 1.1](https://mariadb.com/bsl11/). See [LICENSE.txt](https://github.com/zerotier/ZeroTierOne/blob/dev/LICENSE.txt) and the [ZeroTier pricing page](https://www.zerotier.com/pricing) for details. ZeroTier is free to use internally in businesses and academic institutions and for non-commercial purposes. Certain types of commercial use such as building closed-source apps and devices based on ZeroTier or offering ZeroTier network controllers and network management as a SaaS service require a commercial license. + +A small amount of third party code is also included in ZeroTier and is not subject to our BSL license. See [AUTHORS.md](https://github.com/zerotier/ZeroTierOne/blob/dev/AUTHORS.md) for a list of third party code, where it is included, and the licenses that apply to it. All of the third party code in ZeroTier is liberally licensed (MIT, BSD, Apache, public domain, etc.). + +### Getting Started + +Everything in the ZeroTier world is controlled by two types of identifier: 40-bit/10-digit *ZeroTier addresses* and 64-bit/16-digit *network IDs*. These identifiers are easily distinguished by their length. A ZeroTier address identifies a node or "device" (laptop, phone, server, VM, app, etc.) while a network ID identifies a virtual Ethernet network that can be joined by devices. + +ZeroTier addresses can be thought of as port numbers on an enormous planet-wide enterprise Ethernet smart switch supporting VLANs. Network IDs are VLAN IDs to which these ports may be assigned. A single port can be assigned to more than one VLAN. + +A ZeroTier address looks like `8056c2e21c` and a network ID looks like `8056c2e21c000001`. Network IDs are composed of the ZeroTier address of that network's primary controller and an arbitrary 24-bit ID that identifies the network on this controller. Network controllers are roughly analogous to SDN controllers in SDN protocols like [OpenFlow](https://en.wikipedia.org/wiki/OpenFlow), though as with the analogy between VXLAN and VL2 this should not be read to imply that the protocols or design are the same. You can use our convenient and inexpensive SaaS hosted controllers at [my.zerotier.com](https://my.zerotier.com/) or [run your own controller](controller/) if you don't mind messing around with JSON configuration files or writing scripts to do so. + +### Project Layout + +The base path contains the ZeroTier One service main entry point (`one.cpp`), self test code, makefiles, etc. + + - `artwork/`: icons, logos, etc. + - `attic/`: old stuff and experimental code that we want to keep around for reference. + - `controller/`: the reference network controller implementation, which is built and included by default on desktop and server build targets. + - `debian/`: files for building Debian packages on Linux. + - `doc/`: manual pages and other documentation. + - `ext/`: third party libraries, binaries that we ship for convenience on some platforms (Mac and Windows), and installation support files. + - `include/`: include files for the ZeroTier core. + - `java/`: a JNI wrapper used with our Android mobile app. (The whole Android app is not open source but may be made so in the future.) + - `node/`: the ZeroTier virtual Ethernet switch core, which is designed to be entirely separate from the rest of the code and able to be built as a stand-alone OS-independent library. Note to developers: do not use C++11 features in here, since we want this to build on old embedded platforms that lack C++11 support. C++11 can be used elsewhere. + - `osdep/`: code to support and integrate with OSes, including platform-specific stuff only built for certain targets. + - `rule-compiler/`: JavaScript rules language compiler for defining network-level rules. + - `service/`: the ZeroTier One service, which wraps the ZeroTier core and provides VPN-like connectivity to virtual networks for desktops, laptops, servers, VMs, and containers. + - `windows/`: Visual Studio solution files, Windows service code, and the Windows task bar app UI. + - `zeroidc/`: OIDC implementation used by ZeroTier service to log into SSO-enabled networks. (This part is written in Rust, and more Rust will be appearing in this repository in the future.) + +### Build and Platform Notes + +To build on Mac and Linux just type `make`. On FreeBSD and OpenBSD `gmake` (GNU make) is required and can be installed from packages or ports. For Windows there is a Visual Studio solution in `windows/`. + + - **Mac** + - Xcode command line tools for macOS 10.13 or newer are required. + - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. + - **Linux** + - The minimum compiler versions required are GCC/G++ 4.9.3 or CLANG/CLANG++ 3.4.2. (Install `clang` on CentOS 7 as G++ is too old.) + - Linux makefiles automatically detect and prefer clang/clang++ if present as it produces smaller and slightly faster binaries in most cases. You can override by supplying CC and CXX variables on the make command line. + - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. + - **Windows** + - Visual Studio 2022 on Windows 10 or newer. + - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. + - **FreeBSD** + - GNU make is required. Type `gmake` to build. + - `binutils` is required. Type `pkg install binutils` to install. + - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. + - **OpenBSD** + - There is a limit of four network memberships on OpenBSD as there are only four tap devices (`/dev/tap0` through `/dev/tap3`). + - GNU make is required. Type `gmake` to build. + - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. + +Typing `make selftest` will build a *zerotier-selftest* binary which unit tests various internals and reports on a few aspects of the build environment. It's a good idea to try this on novel platforms or architectures. + +### Running + +Running *zerotier-one* with `-h` option will show help. + +On Linux and BSD, if you built from source, you can start the service with: + + sudo ./zerotier-one -d + +On most distributions, macOS, and Windows, the installer will start the service and set it up to start on boot. + +A home folder for your system will automatically be created. + +The service is controlled via the JSON API, which by default is available at 127.0.0.1 port 9993. We include a *zerotier-cli* command line utility to make API calls for standard things like joining and leaving networks. The *authtoken.secret* file in the home folder contains the secret token for accessing this API. See [service/README.md](service/README.md) for API documentation. + +Here's where home folders live (by default) on each OS: + + * **Linux**: `/var/lib/zerotier-one` + * **FreeBSD** / **OpenBSD**: `/var/db/zerotier-one` + * **Mac**: `/Library/Application Support/ZeroTier/One` + * **Windows**: `\ProgramData\ZeroTier\One` (That's the default. The base 'shared app data' folder might be different if Windows is installed with a non-standard drive letter assignment or layout.) + +### Basic Troubleshooting + +For most users, it just works. + +If you are running a local system firewall, we recommend adding a rules permitting zerotier. If you installed binaries for Windows this should be done automatically. Other platforms might require manual editing of local firewall rules depending on your configuration. + +See the [documentation site](https://docs.zerotier.com/zerotier/troubleshooting) for more information. + +The Mac firewall can be found under "Security" in System Preferences. Linux has a variety of firewall configuration systems and tools. + +On CentOS check `/etc/sysconfig/iptables` for IPTables rules. For other distributions consult your distribution's documentation. You'll also have to check the UIs or documentation for commercial third party firewall applications like Little Snitch (Mac), McAfee Firewall Enterprise (Windows), etc. if you are running any of those. Some corporate environments might have centrally managed firewall software, so you might also have to contact IT. + +ZeroTier One peers will automatically locate each other and communicate directly over a local wired LAN *if UDP port 9993 inbound is open*. If that port is filtered, they won't be able to see each others' LAN announcement packets. If you're experiencing poor performance between devices on the same physical network, check their firewall settings. Without LAN auto-location peers must attempt "loopback" NAT traversal, which sometimes fails and in any case requires that every packet traverse your external router twice. + +Users behind certain types of firewalls and "symmetric" NAT devices may not be able to connect to external peers directly at all. ZeroTier has limited support for port prediction and will *attempt* to traverse symmetric NATs, but this doesn't always work. If P2P connectivity fails you'll be bouncing UDP packets off our relay servers resulting in slower performance. Some NAT router(s) have a configurable NAT mode, and setting this to "full cone" will eliminate this problem. If you do this you may also see a magical improvement for things like VoIP phones, Skype, BitTorrent, WebRTC, certain games, etc., since all of these use NAT traversal techniques similar to ours. + +If a firewall between you and the Internet blocks ZeroTier's UDP traffic, you will fall back to last-resort TCP tunneling to rootservers over port 443 (https impersonation). This will work almost anywhere but is *very slow* compared to UDP or direct peer to peer connectivity. + +Additional help can be found in our [knowledge base](https://zerotier.atlassian.net/wiki/spaces/SD/overview). + +### Prometheus Metrics + +Prometheus Metrics are available at the `/metrics` API endpoint. This endpoint is protected by an API key stored in `metricstoken.secret` to prevent unwanted information leakage. Information that could be gleaned from the metrics include joined networks and peers your instance is talking to. + +Access control is via the ZeroTier control interface itself and `metricstoken.secret`. This can be sent as a bearer auth token, via the `X-ZT1-Auth` HTTP header field, or appended to the URL as `?auth=`. You can see the current metrics via `cURL` with the following command: + + // Linux + curl -H "X-ZT1-Auth: $(sudo cat /var/lib/zerotier-one/metricstoken.secret)" http://localhost:9993/metrics + + // macOS + curl -H "X-XT1-Auth: $(sudo cat /Library/Application\ Support/ZeroTier/One/metricstoken.secret)" http://localhost:9993/metrics + + // Windows PowerShell (Admin) + Invoke-RestMethod -Headers @{'X-ZT1-Auth' = "$(Get-Content C:\ProgramData\ZeroTier\One\metricstoken.secret)"; } -Uri http://localhost:9993/metrics + +To configure a scrape job in Prometheus on the machine ZeroTier is running on, add this to your Prometheus `scrape_config`: + + - job_name: zerotier-one + honor_labels: true + scrape_interval: 15s + metrics_path: /metrics + static_configs: + - targets: + - 127.0.0.1:9993 + labels: + group: zerotier-one + node_id: $YOUR_10_CHARACTER_NODE_ID + authorization: + credentials: $YOUR_METRICS_TOKEN_SECRET + +If neither of these methods are desirable, it is probably possible to distribute metrics via [Prometheus Proxy](https://github.com/pambrose/prometheus-proxy) or some other tool. Note: We have not tested this internally, but will probably work with the correct configuration. + +Metrics are also available on disk in ZeroTier's working directory: + + // Linux + /var/lib/zerotier-one/metrics.prom + + // macOS + /Library/Application\ Support/ZeroTier/One/metrics.prom + + //Windows + C:\ProgramData\ZeroTier\One\metrics.prom + +#### Available Metrics + +| Metric Name | Labels | Metric Type | Description | +| --- | --- | --- | --- | +| zt_packet | packet_type, direction | Counter | ZeroTier packet type counts | +| zt_packet_error | error_type, direction | Counter | ZeroTier packet errors| +| zt_data | protocol, direction | Counter | number of bytes ZeroTier has transmitted or received | +| zt_num_networks | | Gauge | number of networks this instance is joined to | +| zt_network_multicast_groups_subscribed | network_id | Gauge | number of multicast groups networks are subscribed to | +| zt_network_packets | network_id, direction | Counter | number of incoming/outgoing packets per network | +| zt_peer_latency | node_id | Histogram | peer latency (ms) | +| zt_peer_path_count | node_id, status | Gauge | number of paths to peer | +| zt_peer_packets | node_id, direction | Counter | number of packets to/from a peer | +| zt_peer_packet_errors | node_id | Counter | number of incoming packet errors from a peer | + +If there are other metrics you'd like to see tracked, ask us in an Issue or send us a Pull Request! diff --git a/zerotier-one/data.yml b/zerotier-one/data.yml new file mode 100644 index 000000000..e8c205070 --- /dev/null +++ b/zerotier-one/data.yml @@ -0,0 +1,19 @@ +name: ZeroTier-One +tags: + - 工具 +title: 多点虚拟化网络解决方案 +description: 多点虚拟化网络解决方案 +additionalProperties: + key: zerotier-one + name: ZeroTier-One + tags: + - Tool + shortDescZh: 多点虚拟化网络解决方案 + shortDescEn: A Smart Ethernet Switch for Earth + type: tool + crossVersionUpdate: true + limit: 1 + recommend: 0 + website: https://www.zerotier.com + github: https://github.com/zerotier/ZeroTierOne + document: https://docs.zerotier.com diff --git a/zerotier-one/latest/data.yml b/zerotier-one/latest/data.yml new file mode 100644 index 000000000..3ad9832f7 --- /dev/null +++ b/zerotier-one/latest/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: 9993 + disabled: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number diff --git a/zerotier-one/latest/docker-compose.yml b/zerotier-one/latest/docker-compose.yml new file mode 100644 index 000000000..06c1a3901 --- /dev/null +++ b/zerotier-one/latest/docker-compose.yml @@ -0,0 +1,15 @@ +services: + zerotier-one: + container_name: ${CONTAINER_NAME} + restart: always + network_mode: host + devices: + - /dev/net/tun + cap_add: + - NET_ADMIN + - SYS_ADMIN + volumes: + - ./data:/var/lib/zerotier-one + image: zerotier/zerotier:latest + labels: + createdBy: "Apps" diff --git a/zerotier-one/logo.png b/zerotier-one/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..67320019bb0e35633e781981855c8cf317b18308 GIT binary patch literal 6167 zcmV+y80hDTP)D_ zs~>Os@$vTY{~T|xukD{6U$1|5ynns(@#}v%zCJ#$*URfT9{Um7zt;h5U#}zV*nhMC zb^kif-Jfiamwr-S?Kt7`yW@Jjetv$w{VR#zKd!G!LyjTT_6+^o@!gMIaO|hXd>(lP zxyO)e$Xj0e!=+t6{!!y!pREn~QkOX7i2QkfI={_Fc|qjO+G>mw=>mC=K^i*N=JStY zzkj+KOhyq4Bto~0aSp)uY8pP$aXVw%DfF;%FVK`?`JYkhvI<2Mll2cd)d_Wcxz;s zAur}vL%e&$qq$faJ?G{37Zj;qdWNb+JsQDQh8bW&R#VlkHw{`J2}N`xd7n^!*v~Pk zcbUbDH3o4sn6{$}AQq&45a0+I>~tt0iHt8e#-Ql>lO+Xmq3ONN0(e<9meGAeNJ7Df;J7G-U|^kZH`a(qL$$v1N)Zz{3C@45g+oBQ#@S zX4v$UudZlX7mLjrbIj(#0@R6tg7C%k2dJIrvO$!^K1$L0rRsObi?$v!=|Manv=B2W z^14DSQ7{Drb+Koj{+$Ky0pty4$xzg8Su#%0&na3)xaUQ&i#UbZ8ocOU`jfYA9g-_v zLA-5Wtv~h$_%Fs8;P3U7^{4$AvccBH3zMi(*UmuVCEgye>At+|wxx)7& zdKj_w*U@$P-i5v`e|;rmxn4qEcJlzkASpcHxiYjQ&3ZtP8oJQm%dDiq&@e2y8#O}3 zqF}H74ykFb2%X(bKR`*IO0JA|X;Wy15CoYN&7I)?fZa~&au-@zG=f~ z4iZ|xe|am^LJ0|mC(yv0Ft!1 z%#a5!=a@?3l}|;8d2$iVnl`}C)S23gQlG3uql-mouu7;hHNzvWQ;Gi68e$=vCXxtJ z>p-X+a7~OVZfd_r4_#j)xtXpxt2LRH8M>N6vrx<~GOf*(7D5O~5n-rmXgZ`oC2r9i zNXrUt1u3vnympOQF2`0_MJ zmqX$-!n;Kf!Uvod%RNdw?|sTILV2OytLzpyXF1!fjQR_a5A4APC5{V=DZ(ZSNngn0 zu4!(-ameA=S$kLB@!3_}mi-u--hXUD?Ww}m1BE*X%cH|C51}Eft`IXb)`1(goD-Qu zZcB^X_v7)rue;Fe{rPx&-=ghuhj(j2X%=d1P#$LE1KBjlm``X{XYn;RjJw@*9Jfc8 zR*&`mxE&-$hyindOc}_^EfLGT3oR|1lLgd7%N>Vl&o32!Ki5B$AnWrxHbc?iEEYh% z0d6&TYt$W4`Vxv<+=PTGT-xoA5_h>Dx3(zH$J{n^yf}p`BO~sb4$BoDBpK*Co_d;tI_+#ak;sOrq$3iGB2q(N4{(@{;f?@)04fvoD1hS1? z&EDESVVE+#rLxy)x6zB(!b%JM)MWJPN5T6qYVel9|h>?3|G!B2ILHxmeFdXbG!n zvh<~%a<^&9Bjl~*1zZ*_4+&WT^6epABZkSSz%I(Pkj_HU5YY+h5q33s4{wW>3Ul1) za_hc-Tk3%3uu64AA^V0zGicrxE8lcF!zm1crarU~sI!`fISzvsExKGr*2vV#SeLP4 z_vVy5bXd%aj&9RB*`YQDTd46?&mHj;s{G76c;bu)?S^kW7Ik%>THyIgDgtoALU7p6 zT5%Z1;q_vCOxp|9YfRA8Mr*4?>oBAW=RW(*W*Rq=KnEO&I(m{Jo>U0^_L~WAX8)8S>Zt2-84DnCix1g)&jp7V=KU(Rz*< z7i>|t9R%MkWs8|ylr1T|e}B@)6Yh&mu~|z;g!Zw2@bKsepwCu_v8Wpo#HPdee9J8p zp$*6BdO0C}hp8+EO;JzpH5*+rj24!GTpB$caT?y~_Y`(0`jO)dPJv1yD#?ZEI;AqZ zsvnEDad<3V2XhB&TK1Q~NA+Lcg|$;K%58cz4b=998a2JBugN+`tjc_4*=I5{B5H$( z`1<32U&;*wQ#`c!_z{6kXy|;q7|c46jNzODE0|Q5K4~y^;oQ0f-{*+Yx;sUi@3m1R zMF_Mxzb(o$BR{xzsAJb;9~`Ig+cCuvuUAHQ!1;EPY92f>8opm<UxzEfNwFORw5O)HPsRWI3MT5DHnoYMU=2iA@J5kZgTdg{RW>6)@t@1 zA(TQ;>fmf7dIr2#?5I1Rtm6|EF!7LrG(1OsS%v-#3+-GzaJhB1eSp%~FzIFt8D#%X z9S4fa1nTCjhWml4TUZ?c5qkDxMiHR90FnqH$TwDT5qK2RpqZ~{NA$f?3e+(%`mISQ zhcDl zbYa0B;hQI=PdJw4vG`sSjz^TDC(0AbMRSY_%?J1i@F~rJ@L87zEcOO zX(ZD;d?y)g|2Y2Ck?-0qPqqd5)|bMXGMot;WP4?;wZ}XOpu(F{!z-}|@3s?kGJ9`b zXvMaLmFVx{(_#|vVNKMY6Yovyk6J@@@w=v>vq)!KS4Ln8l+i&cU@T5EIl&`&ptwXr zqr9(ez~Yb>JSbDgQ}*04h1RV)*%=`XN#%l4lQC+BY8pBc1lw~e4Sj1*SDmw_ONuaz z;N2~=9c|XDd4!KS7{#wtuhe2nX2XPrb=|}EEJYz8z1~;ux!APQQ8`Z`LZfWDvuL_= zSVL%(-KJ4CjA`Y<Jr|Zs)sQ4SklGNk^Yqf`RXlG;%szvqTio|>j z@1~S;&B>a8kDFzRCMb43(`Hd;#A(Q!74&l(q-*hL{-GG*IYB!CJX>i4SN)qpF&@VC z9zQs_aKc7}e$0Wg0?$Q13IJu>bWP*pEnbTXG!3886edQXsWz2-!)(9J<)+OB5!{Ai zJh@baK*?^n_>I@FexO2D62?#Cgti~b&T>nJkE24w6AIzHl_R-jwU39;0W6$E5BP_P z=$II9L)(FU{XiE8%Wu^<4`1j6Sla)y*(cnnDrr>KNp&tyeKd6X3#BnHBZ3IeoE68Qf=_DF2c^oz2~ez{H6-BNc8IPq9BlDZ!imkN!9GD~~2 zEMTX+&^OQZDrK=&C0g2n5oHZWr9uOHp;94y!!W*qmc?dw243y_{;8vI1vgohIISRB zQ*(9Oscrs`{YoxaP+g-Djk3nv-1?wF@1G}njQ`+M$Ow65;vpp#6(81Ts{u_*ZV&3I zVG{GmjIu{j9ZPdks@Q3`V=EQ|v}e6pRry*Vs(4ImKqR)z%2HU+p+~&X9_md@=KeaW`I)VcCP85OKg7}AN0pks!cD=Cxvvj zFAr2hhBH{y)^-_fW-rk}lnkL^LV#r;ZEHnQW#g0Aux&2h77_a@l?J5VCB=#Tobn)Z zflBa-8v3$Hxjjw|hE_F2xBxv=9lDxYf_(H?;$~vd@t_?#rVFdULnkVzGH9bHy>h0B z+m3H%((q_ARjMQ$@s*#rQlDyM#Rjz^bOK z-iruA#nxkiT+geQ(&ue4Rd1PEtXQu)8_a4bl*%*(6)HeVg&g7%H$BV{6V_4&vKo7i z_FT#wTKAt)^Nyjs$0z+Edp`N>p$`J!06KV2;QNrXYSC>z?5myfq(*)Z9Q)CKm&(DJ zg=IZ6Z|K8dQRUtdAr8)3UnWm2ncGnzRy#&&0N6oQCj9=H<7=c zN=L=0OLo;8JxfanPSKJs3AIc?mVl3Sr3di%4wu*S)3UC^%OIL@Xu;Fklhlu=8ihKP2=?9ExGY4+3Ynmwr+XS>bE{)q+yDaF?zh@SZ4F8H!GGZ0oFui93S(v zno#Fl$cIu+BDaB9M$jHrEZ>JKQrVm{?RtG;dn^L>i(JLO6@uevn4#&pbmehKFA7%f z86jX>BP%Z(MVS3}7FqcO;G{90nFsXC@LQS8W^ViNE+wc6o;`;asYhNi_!s@{)h9+al zIGU=bQ#<7%*4Hd0o-OQgK=QAyjn_pGUN@kIBMd~bg0NtlflWJ(H*bQ zC?E^2BME!kWQERpBX>t{VXa*!*ULQ|Lgi@o5jzgt^cmEq_7Z|Sj+~#+m~SatzWJHY z=NlE{{pXZQy+y=reWt(<#5il@Zl?6@h?f#7A;en>XJ^JZD-axsn$23eaIibw~(b(+U;XosL zbeM2v=9g5yV6p<6j)K4nAP_x(4{?E)jN#-w!rm5?i-cxDL|+dXuaP#gkI831ca(EW zo3!iHs6co1ec%*1)R%};1H$4MtO#3KpY}pQ`NS021tc7J=5nB%(QOf||1g}YX(4-x7|LP!pS3TmSmJ?h7|DbGZcVjRraJey?2^9b) z1G>>$|GwyxAdwFP-<3 zniF@5=~%TOTR5jqj7m`2o`n(jEd;3J__1$ugjHEJ82PA+Z?~ds39n~Fn%2y=$(L^y z-bFgiVPWRVD9P~Q6TcdLXG7ACBYmdMj@lHRn{nI+xqgggTNE~J{(MEol$(>dJzP!+ zV;h6_f#fa5D6B4))RPRrtEOy#Zv2>vR}idAYu{EWJiN=krK1ya9^Sf6Icl);CTB!y z1m$@($m)?D#nZhSSVB1}-Tv(Z5?2jAQSS{glgCd7MM5!{WlHiG7i(*!yjY&sypPW; z#kq058G0_D8z|@4>S}BGR{GIYwtJB8|MWvYJ*l$X80P&b8?;(J2pS=`=LF%kd@`8 z>{A;XvvNBkhX4K_E_s`S{aWo*?tk*SUGm$HCXPS7oW5W0@9(ew?scD#emcE8{oQ=` pV^uM{V{{W<+sGyNIoXr3L002ovPDHLkV1mW0(Z>J) literal 0 HcmV?d00001 From 0082e56eb67e5734cebf7287f731cb0e7842eba0 Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Sat, 24 May 2025 12:18:54 +0800 Subject: [PATCH 12/53] =?UTF-8?q?feat(localApps):=20=E6=B7=BB=E5=8A=A0=20Z?= =?UTF-8?q?erotier=20Planet=20=E5=BA=94=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 Zerotier Planet 应用的配置文件和 Docker Compose 文件 - 创建 Zerotier Planet 的数据定义文件,包括端口配置、环境变量等 - 编写 Zerotier Planet 的 README 文件,介绍应用功能和安装说明 - 添加 Zerotier Planet 应用的基本信息,如名称、标签、描述等 --- zerotier-planet/1.14.2/data.yml | 44 ++++++++++++++++++++++ zerotier-planet/1.14.2/docker-compose.yml | 26 +++++++++++++ zerotier-planet/README.md | 28 ++++++++++++++ zerotier-planet/data.yml | 18 +++++++++ zerotier-planet/logo.png | Bin 0 -> 9983 bytes 5 files changed, 116 insertions(+) create mode 100644 zerotier-planet/1.14.2/data.yml create mode 100644 zerotier-planet/1.14.2/docker-compose.yml create mode 100644 zerotier-planet/README.md create mode 100644 zerotier-planet/data.yml create mode 100644 zerotier-planet/logo.png diff --git a/zerotier-planet/1.14.2/data.yml b/zerotier-planet/1.14.2/data.yml new file mode 100644 index 000000000..182435866 --- /dev/null +++ b/zerotier-planet/1.14.2/data.yml @@ -0,0 +1,44 @@ +additionalProperties: + formFields: + - default: "3443" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + + - default: "9994" + edit: true + envKey: PANEL_APP_PORT_API + labelZh: API 端口 + labelEn: API Port + required: true + rule: paramPort + type: number + + - default: "3000" + edit: true + envKey: PANEL_APP_PORT_FILE + labelZh: 文件传输端口 + labelEn: File transfer port + required: true + rule: paramPort + type: number + + - default: "" + edit: true + envKey: IP_ADDR4 + labelZh: 公网 IPV4/IPV6 + labelEn: Public IPV4/IPV6 + required: false + type: text + + - default: "" + edit: true + envKey: IP_ADDR6 + labelZh: 公网 IPV4/IPV6 + labelEn: Public IPV6/IPV6 + required: false + type: text diff --git a/zerotier-planet/1.14.2/docker-compose.yml b/zerotier-planet/1.14.2/docker-compose.yml new file mode 100644 index 000000000..c91c6331c --- /dev/null +++ b/zerotier-planet/1.14.2/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + zerotier-planet: + container_name: ${CONTAINER_NAME} + environment: + - ZT_PORT=${PANEL_APP_PORT_API} + - API_PORT=${PANEL_APP_PORT_HTTP} + - FILE_SERVER_PORT=${PANEL_APP_PORT_FILE} + image: xubiaolin/zerotier-planet:1.14.2 + labels: + createdBy: "Apps" + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_API}:${PANEL_APP_PORT_API}/tcp + - ${PANEL_APP_PORT_API}:${PANEL_APP_PORT_API}/udp + - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + - ${PANEL_APP_PORT_FILE}:${PANEL_APP_PORT_FILE} + restart: always + volumes: + - ./data/file:/app/dist + - ./data/ztncui:/app/ztncui + - ./data/zerotier-one:/var/lib/zerotier-one + - ./data/config:/app/config diff --git a/zerotier-planet/README.md b/zerotier-planet/README.md new file mode 100644 index 000000000..8719fb2ec --- /dev/null +++ b/zerotier-planet/README.md @@ -0,0 +1,28 @@ +# Zerotier Planet 服务端 + +包含 ZeroTier One 和 ztncui 的 Docker 映像,用于在容器中设置具有 Web 用户界面的独立 ZeroTier 网络控制器。 + +## 简介 + +ZeroTier 这一类 P2P VPN 是在互联网的基础上将自己的所有设备组成一个私有的网络,可以理解为互联网连接的局域网。最常见的场景就是在公司可以用手机直接访问家里的 +NAS,而且是点对点直连,数据传输并不经由第三方服务器中转。 + +ZeroTier 在多设备之间建立了一个 Peer to Peer VPN(P2PVPN) 连接,如:在笔记本电脑、台式机、嵌入式设备、云资源和应用。这些设备只需要通过 +ZeroTier One ( ZeroTier 的客户端) 在不同设备之间建立直接连接,即使它们位于 NAT 之后。连接到虚拟 LAN 的任何计算机和设备通常通过 +NAT 或路由器设备与 Internet 连接,ZeroTier One 使用 STUN 和隧道来建立 NAT 后设备之间的 VPN 直连。 + +简单一点说,ZeroTier 就是通过 P2P 等方式实现形如交换机或路由器上 LAN 设备的内网互联。 + +### 专有名词 + +PLANET :行星服务器,Zerotier 根服务器 + +MOON :卫星服务器,用户自建的私有根服务器,起到代理加速的作用 + +LEAF :网络客户端,就是每台连接到网络节点。 + +## 安装说明 + +> 默认用户名:`admin` +> +> 默认密码:`password` diff --git a/zerotier-planet/data.yml b/zerotier-planet/data.yml new file mode 100644 index 000000000..398cd5a15 --- /dev/null +++ b/zerotier-planet/data.yml @@ -0,0 +1,18 @@ +name: zerotier-planet +tags: + - 工具 +title: 创建和管理虚拟软件定义网络 +description: 创建和管理虚拟软件定义网络 +additionalProperties: + key: zerotier-planet + name: Zerotier Planet + tags: + - Tool + shortDescZh: 创建和管理虚拟软件定义网络 + shortDescEn: Create and manage virtual software-defined networks + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.zerotier.com/ + github: https://github.com/zerotier/ZeroTierOne/ + document: https://docs.zerotier.com/ diff --git a/zerotier-planet/logo.png b/zerotier-planet/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..33e29b5c958de00e8d74a43f21fe4b16f1276b4a GIT binary patch literal 9983 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 jd*3`J2^Ri;SF Date: Sat, 24 May 2025 12:19:49 +0800 Subject: [PATCH 13/53] =?UTF-8?q?feat(localApps):=20=E6=B7=BB=E5=8A=A0=20M?= =?UTF-8?q?oviePilot=202.4.9=20=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 MoviePilot 应用配置文件和 Docker Compose 文件 - 添加 MoviePilot 的基本配置信息和端口设置 - 创建 MoviePilot 专属网络并设置端口映射- 定义 MoviePilot 的数据卷和环境变量 - 添加 MoviePilot 的 README 文件,介绍项目的基本信息和使用方法 --- movie-pilot/2.4.9/data.yml | 27 ++++++++++++ movie-pilot/2.4.9/docker-compose.yml | 36 ++++++++++++++++ movie-pilot/README.md | 61 +++++++++++++++++++++++++++ movie-pilot/data.yml | 19 +++++++++ movie-pilot/logo.png | Bin 0 -> 50749 bytes 5 files changed, 143 insertions(+) create mode 100644 movie-pilot/2.4.9/data.yml create mode 100644 movie-pilot/2.4.9/docker-compose.yml create mode 100644 movie-pilot/README.md create mode 100644 movie-pilot/data.yml create mode 100644 movie-pilot/logo.png diff --git a/movie-pilot/2.4.9/data.yml b/movie-pilot/2.4.9/data.yml new file mode 100644 index 000000000..340288384 --- /dev/null +++ b/movie-pilot/2.4.9/data.yml @@ -0,0 +1,27 @@ +additionalProperties: + formFields: + - default: "40180" + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI Port + required: true + rule: paramPort + type: number + + - default: "40181" + edit: true + envKey: PANEL_APP_PORT_API + labelZh: API 端口 + labelEn: API Port + required: true + rule: paramPort + type: number + + - default: "admin" + edit: true + envKey: SUPERUSER + labelZh: 管理员用户名 + labelEn: Superuser Username + required: true + type: text \ No newline at end of file diff --git a/movie-pilot/2.4.9/docker-compose.yml b/movie-pilot/2.4.9/docker-compose.yml new file mode 100644 index 000000000..b75c6bd6e --- /dev/null +++ b/movie-pilot/2.4.9/docker-compose.yml @@ -0,0 +1,36 @@ +networks: + 1panel-network: + external: true +services: + movie-pilot: + container_name: ${CONTAINER_NAME} + environment: + - NGINX_PORT=3000 + - PORT=3001 + - PUID=0 + - PGID=0 + - UMASK=022 + - TZ=Asia/Shanghai + - SUPERUSER=${SUPERUSER} + + image: jxxghp/moviepilot-v2:2.4.9 + labels: + createdBy: Apps + networks: + - 1panel-network + logging: + driver: json-file + options: + max-size: 5m + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + - ${PANEL_APP_PORT_API}:3001 + restart: always + stdin_open: true + tty: true + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ./data/config:/config + - ./data/ms-playwright:/moviepilot/.cache/ms-playwright + - ./data/download:/download + - ./data/media:/media diff --git a/movie-pilot/README.md b/movie-pilot/README.md new file mode 100644 index 000000000..0324ce466 --- /dev/null +++ b/movie-pilot/README.md @@ -0,0 +1,61 @@ +# MoviePilot + +![GitHub Repo stars](https://img.shields.io/github/stars/jxxghp/MoviePilot?style=for-the-badge) +![GitHub forks](https://img.shields.io/github/forks/jxxghp/MoviePilot?style=for-the-badge) +![GitHub contributors](https://img.shields.io/github/contributors/jxxghp/MoviePilot?style=for-the-badge) +![GitHub repo size](https://img.shields.io/github/repo-size/jxxghp/MoviePilot?style=for-the-badge) +![GitHub issues](https://img.shields.io/github/issues/jxxghp/MoviePilot?style=for-the-badge) +![Docker Pulls](https://img.shields.io/docker/pulls/jxxghp/moviepilot?style=for-the-badge) +![Docker Pulls V2](https://img.shields.io/docker/pulls/jxxghp/moviepilot-v2?style=for-the-badge) +![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20Synology-blue?style=for-the-badge) + + +基于 [NAStool](https://github.com/NAStool/nas-tools) 部分代码重新设计,聚焦自动化核心需求,减少问题同时更易于扩展和维护。 + +# 仅用于学习交流使用,请勿在任何国内平台宣传该项目! + +发布频道:https://t.me/moviepilot_channel + +## 主要特性 + +- 前后端分离,基于FastApi + Vue3,前端项目地址:[MoviePilot-Frontend](https://github.com/jxxghp/MoviePilot-Frontend),API:http://localhost:3001/docs +- 聚焦核心需求,简化功能和设置,部分设置项可直接使用默认值。 +- 重新设计了用户界面,更加美观易用。 + +## 安装使用 + +访问官方Wiki:https://wiki.movie-pilot.org + +## 参与开发 + +需要 `Python 3.12`、`Node JS v20.12.1` + +- 克隆主项目 [MoviePilot](https://github.com/jxxghp/MoviePilot) +```shell +git clone https://github.com/jxxghp/MoviePilot +``` +- 克隆资源项目 [MoviePilot-Resources](https://github.com/jxxghp/MoviePilot-Resources) ,将 `resources` 目录下对应平台及版本的库 `.so`/`.pyd`/`.bin` 文件复制到 `app/helper` 目录 +```shell +git clone https://github.com/jxxghp/MoviePilot-Resources +``` +- 安装后端依赖,设置`app`为源代码根目录,运行 `main.py` 启动后端服务,默认监听端口:`3001`,API文档地址:`http://localhost:3001/docs` +```shell +pip install -r requirements.txt +python3 main.py +``` +- 克隆前端项目 [MoviePilot-Frontend](https://github.com/jxxghp/MoviePilot-Frontend) +```shell +git clone https://github.com/jxxghp/MoviePilot-Frontend +``` +- 安装前端依赖,运行前端项目,访问:`http://localhost:5173` +```shell +yarn +yarn dev +``` +- 参考 [插件开发指引](https://wiki.movie-pilot.org/zh/plugindev) 在 `app/plugins` 目录下开发插件代码 + +## 贡献者 + + + + \ No newline at end of file diff --git a/movie-pilot/data.yml b/movie-pilot/data.yml new file mode 100644 index 000000000..c34ea946c --- /dev/null +++ b/movie-pilot/data.yml @@ -0,0 +1,19 @@ +name: MoviePilot +tags: + - 工具 +title: NAS媒体库自动化管理工具 +description: NAS媒体库自动化管理工具 +additionalProperties: + key: movie-pilot + name: MoviePilot + tags: + - WebSite + - Local + shortDescZh: NAS媒体库自动化管理工具 + shortDescEn: NAS media library automation management tool + type: website + crossVersionUpdate: false + limit: 0 + website: https://github.com/jxxghp/MoviePilot/ + github: https://github.com/jxxghp/MoviePilot/ + document: https://wiki.movie-pilot.org/ diff --git a/movie-pilot/logo.png b/movie-pilot/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..281913dcbb4f5a9c388ec904e013955b73b92792 GIT binary patch literal 50749 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 literal 0 HcmV?d00001 From 5db361f60bf07ac71932d20a0650d61677295c42 Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Sat, 24 May 2025 12:36:15 +0800 Subject: [PATCH 14/53] =?UTF-8?q?docs(README):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E9=A1=B9=E7=9B=AE=E7=9A=84=20README=20?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E6=A0=BC=E5=BC=8F=E5=92=8C=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 调整文档结构,优化标题层级 - 添加或更新项目示例图片 - 修正链接格式问题 - 统一列表符号使用短横线 --- movie-pilot/README.md | 22 +- siyuan/README.md | 137 +++--- sun-panel/README.md | 34 +- syncthing-discosrv/README.md | 17 +- syncthing-relaysrv/README.md | 17 +- syncthing/README.md | 17 +- xunlei/README.md | 4 + zerotier-one/1.14.2/docker-compose.yml | 2 +- zerotier-one/README.md | 240 ++++++---- zerotier-one/latest/docker-compose.yml | 2 +- zerotier-planet/README.md | 613 ++++++++++++++++++++++++- 11 files changed, 912 insertions(+), 193 deletions(-) diff --git a/movie-pilot/README.md b/movie-pilot/README.md index 0324ce466..22672a530 100644 --- a/movie-pilot/README.md +++ b/movie-pilot/README.md @@ -9,7 +9,6 @@ ![Docker Pulls V2](https://img.shields.io/docker/pulls/jxxghp/moviepilot-v2?style=for-the-badge) ![Platform](https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20Synology-blue?style=for-the-badge) - 基于 [NAStool](https://github.com/NAStool/nas-tools) 部分代码重新设计,聚焦自动化核心需求,减少问题同时更易于扩展和维护。 # 仅用于学习交流使用,请勿在任何国内平台宣传该项目! @@ -18,7 +17,8 @@ ## 主要特性 -- 前后端分离,基于FastApi + Vue3,前端项目地址:[MoviePilot-Frontend](https://github.com/jxxghp/MoviePilot-Frontend),API:http://localhost:3001/docs +- 前后端分离,基于FastApi + Vue3,前端项目地址:[MoviePilot-Frontend](https://github.com/jxxghp/MoviePilot-Frontend) + ,API:http://localhost:3001/docs - 聚焦核心需求,简化功能和设置,部分设置项可直接使用默认值。 - 重新设计了用户界面,更加美观易用。 @@ -30,28 +30,40 @@ 需要 `Python 3.12`、`Node JS v20.12.1` -- 克隆主项目 [MoviePilot](https://github.com/jxxghp/MoviePilot) +- 克隆主项目 [MoviePilot](https://github.com/jxxghp/MoviePilot) + ```shell git clone https://github.com/jxxghp/MoviePilot ``` -- 克隆资源项目 [MoviePilot-Resources](https://github.com/jxxghp/MoviePilot-Resources) ,将 `resources` 目录下对应平台及版本的库 `.so`/`.pyd`/`.bin` 文件复制到 `app/helper` 目录 + +- 克隆资源项目 [MoviePilot-Resources](https://github.com/jxxghp/MoviePilot-Resources) ,将 `resources` 目录下对应平台及版本的库 + `.so`/`.pyd`/`.bin` 文件复制到 `app/helper` 目录 + ```shell git clone https://github.com/jxxghp/MoviePilot-Resources ``` -- 安装后端依赖,设置`app`为源代码根目录,运行 `main.py` 启动后端服务,默认监听端口:`3001`,API文档地址:`http://localhost:3001/docs` + +- 安装后端依赖,设置`app`为源代码根目录,运行 `main.py` 启动后端服务,默认监听端口:`3001`,API文档地址: + `http://localhost:3001/docs` + ```shell pip install -r requirements.txt python3 main.py ``` + - 克隆前端项目 [MoviePilot-Frontend](https://github.com/jxxghp/MoviePilot-Frontend) + ```shell git clone https://github.com/jxxghp/MoviePilot-Frontend ``` + - 安装前端依赖,运行前端项目,访问:`http://localhost:5173` + ```shell yarn yarn dev ``` + - 参考 [插件开发指引](https://wiki.movie-pilot.org/zh/plugindev) 在 `app/plugins` 目录下开发插件代码 ## 贡献者 diff --git a/siyuan/README.md b/siyuan/README.md index f7585356e..b295aee4d 100644 --- a/siyuan/README.md +++ b/siyuan/README.md @@ -40,24 +40,24 @@ * [🌟 星标历史](#-星标历史) * [🗺️ 路线图](#️-路线图) * [🚀 下载安装](#-下载安装) - * [应用市场](#应用市场) - * [安装包](#安装包) - * [Docker 部署](#docker-部署) - * [Unraid 部署](#unraid-部署) - * [宝塔面板 部署](#宝塔面板部署) - * [内部预览版](#内部预览版) + * [应用市场](#应用市场) + * [安装包](#安装包) + * [Docker 部署](#docker-部署) + * [Unraid 部署](#unraid-部署) + * [宝塔面板 部署](#宝塔面板部署) + * [内部预览版](#内部预览版) * [🏘️ 社区](#️-社区) * [🛠️ 开发指南](#️-开发指南) * [❓ 常见问题和解答](#-常见问题和解答) - * [思源是如何存储数据的?](#思源是如何存储数据的) - * [支持通过第三方同步盘进行数据同步吗?](#支持通过第三方同步盘进行数据同步吗) - * [思源是开源的吗?](#思源是开源的吗) - * [如何升级到新版本?](#如何升级到新版本) - * [有的块(比如在列表项中的段落块)找不到块标怎么办?](#有的块比如在列表项中的段落块找不到块标怎么办) - * [数据仓库密钥遗失怎么办?](#数据仓库密钥遗失怎么办) - * [使用需要付费吗?](#使用需要付费吗) + * [思源是如何存储数据的?](#思源是如何存储数据的) + * [支持通过第三方同步盘进行数据同步吗?](#支持通过第三方同步盘进行数据同步吗) + * [思源是开源的吗?](#思源是开源的吗) + * [如何升级到新版本?](#如何升级到新版本) + * [有的块(比如在列表项中的段落块)找不到块标怎么办?](#有的块比如在列表项中的段落块找不到块标怎么办) + * [数据仓库密钥遗失怎么办?](#数据仓库密钥遗失怎么办) + * [使用需要付费吗?](#使用需要付费吗) * [🙏 鸣谢](#-鸣谢) - * [贡献者列表](#贡献者列表) + * [贡献者列表](#贡献者列表) --- @@ -78,26 +78,26 @@ 大部分功能是免费的,即使是在商业环境下使用。 * 内容块 - * 块级引用和双向链接 - * 自定义属性 - * SQL 查询嵌入 - * 协议 `siyuan://` + * 块级引用和双向链接 + * 自定义属性 + * SQL 查询嵌入 + * 协议 `siyuan://` * 编辑器 - * Block 风格 - * Markdown 所见即所得 - * 列表大纲 - * 块缩放聚焦 - * 百万字大文档编辑 - * 数学公式、图表、流程图、甘特图、时序图、五线谱等 - * 网页剪藏 - * PDF 标注双链 + * Block 风格 + * Markdown 所见即所得 + * 列表大纲 + * 块缩放聚焦 + * 百万字大文档编辑 + * 数学公式、图表、流程图、甘特图、时序图、五线谱等 + * 网页剪藏 + * PDF 标注双链 * 导出 - * 块引用和嵌入块 - * 带 assets 文件夹的标准 Markdown - * PDF、Word 和 HTML - * 复制到微信公众号、知乎和语雀 + * 块引用和嵌入块 + * 带 assets 文件夹的标准 Markdown + * PDF、Word 和 HTML + * 复制到微信公众号、知乎和语雀 * 数据库 - * 表格视图 + * 表格视图 * 闪卡间隔重复 * 接入 OpenAI 接口支持人工智能写作和问答聊天 * Tesseract OCR @@ -114,17 +114,17 @@ ![思源笔记架构设计](https://b3logfile.com/file/2023/05/SiYuan_Arch-Sgu8vXT.png "思源笔记架构设计") -| Project | Description | Forks | Stars | -|----------------------------------------------------------|--------------|---------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| -| [lute](https://github.com/88250/lute) | 编辑器引擎 | ![GitHub forks](https://img.shields.io/github/forks/88250/lute) | ![GitHub Repo stars](https://img.shields.io/github/stars/88250/lute) | +| Project | Description | Forks | Stars | +|----------------------------------------------------------|----------------|---------------------------------------------------------------------------------|--------------------------------------------------------------------------------------| +| [lute](https://github.com/88250/lute) | 编辑器引擎 | ![GitHub forks](https://img.shields.io/github/forks/88250/lute) | ![GitHub Repo stars](https://img.shields.io/github/stars/88250/lute) | | [chrome](https://github.com/siyuan-note/siyuan-chrome) | Chrome/Edge 扩展 | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-chrome) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-chrome) | -| [bazaar](https://github.com/siyuan-note/bazaar) | 社区集市 | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/bazaar) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/bazaar) | -| [dejavu](https://github.com/siyuan-note/dejavu) | 数据仓库 | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/dejavu) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/dejavu) | -| [petal](https://github.com/siyuan-note/petal) | 插件 API | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/petal) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/petal) | -| [android](https://github.com/siyuan-note/siyuan-android) | Android App | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-android) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-android) | -| [ios](https://github.com/siyuan-note/siyuan-ios) | iOS App | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-ios) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-ios) | -| [harmony](https://github.com/siyuan-note/siyuan-harmony) | 鸿蒙 App | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-harmony) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-harmony) | -| [riff](https://github.com/siyuan-note/riff) | 间隔重复 | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/riff) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/riff) | +| [bazaar](https://github.com/siyuan-note/bazaar) | 社区集市 | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/bazaar) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/bazaar) | +| [dejavu](https://github.com/siyuan-note/dejavu) | 数据仓库 | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/dejavu) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/dejavu) | +| [petal](https://github.com/siyuan-note/petal) | 插件 API | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/petal) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/petal) | +| [android](https://github.com/siyuan-note/siyuan-android) | Android App | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-android) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-android) | +| [ios](https://github.com/siyuan-note/siyuan-ios) | iOS App | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-ios) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-ios) | +| [harmony](https://github.com/siyuan-note/siyuan-harmony) | 鸿蒙 App | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/siyuan-harmony) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/siyuan-harmony) | +| [riff](https://github.com/siyuan-note/riff) | 间隔重复 | ![GitHub forks](https://img.shields.io/github/forks/siyuan-note/riff) | ![GitHub Repo stars](https://img.shields.io/github/stars/siyuan-note/riff) | ## 🌟 星标历史 @@ -188,7 +188,8 @@ #### 启动入口 -入口点在构建 Docker 镜像时设置:`ENTRYPOINT ["/opt/siyuan/entrypoint.sh"]`。该脚本允许更改将在容器内运行的用户的 `PUID` 和 `PGID`。这对于解决从主机挂载目录时的权限问题尤为重要。`PUID` 和 `PGID` 可以作为环境变量传递,这样在访问主机挂载的目录时就能更容易地确保正确的权限。 +入口点在构建 Docker 镜像时设置:`ENTRYPOINT ["/opt/siyuan/entrypoint.sh"]`。该脚本允许更改将在容器内运行的用户的 `PUID` 和 +`PGID`。这对于解决从主机挂载目录时的权限问题尤为重要。`PUID` 和 `PGID` 可以作为环境变量传递,这样在访问主机挂载的目录时就能更容易地确保正确的权限。 使用 `docker run b3log/siyuan` 运行容器时,请带入以下参数: @@ -211,11 +212,12 @@ docker run -d \ * `PGID`: 自定义组 ID(可选,如果未提供,默认为 `1000`) * `workspace_dir_host`:宿主机上的工作空间文件夹路径 * `workspace_dir_container`:容器内工作空间文件夹路径,和后面 `--workspace` 指定成一样的 - * 另外,也可以通过 `SIYUAN_WORKSPACE_PATH` 环境变量设置路径。如果两者都设置了,命令行的值将优先。 + * 另外,也可以通过 `SIYUAN_WORKSPACE_PATH` 环境变量设置路径。如果两者都设置了,命令行的值将优先。 * `accessAuthCode`:访问授权码,请**务必修改**,否则任何人都可以读写你的数据 - * 另外,也可以通过 `SIYUAN_ACCESS_AUTH_CODE` 环境变量设置授权码。如果两者都设置了,命令行的值将优先。 + * 另外,也可以通过 `SIYUAN_ACCESS_AUTH_CODE` 环境变量设置授权码。如果两者都设置了,命令行的值将优先。 -为了简化,建议将 workspace 文件夹路径在宿主机和容器上配置为一致的,比如将 `workspace_dir_host` 和 `workspace_dir_container` 都配置为 `/siyuan/workspace`,对应的启动命令示例: +为了简化,建议将 workspace 文件夹路径在宿主机和容器上配置为一致的,比如将 `workspace_dir_host` 和 +`workspace_dir_container` 都配置为 `/siyuan/workspace`,对应的启动命令示例: ```bash docker run -d \ @@ -229,14 +231,15 @@ docker run -d \ #### Docker Compose -对于使用 Docker Compose 运行思源的用户,可以通过环境变量 `PUID` 和 `PGID` 来自定义用户和组的 ID。下面是一个 Docker Compose 配置示例: +对于使用 Docker Compose 运行思源的用户,可以通过环境变量 `PUID` 和 `PGID` 来自定义用户和组的 ID。下面是一个 Docker Compose +配置示例: ```yaml version: "3.9" services: main: image: b3log/siyuan - command: ['--workspace=/siyuan/workspace/', '--accessAuthCode=${AuthCode}'] + command: [ '--workspace=/siyuan/workspace/', '--accessAuthCode=${AuthCode}' ] ports: - 6806:6806 volumes: @@ -258,13 +261,15 @@ services: #### 用户权限 -在图片中,“entrypoint.sh ”脚本确保以指定的 “PUID ”和 “PGID ”创建 “siyuan ”用户和组。因此,当主机创建工作区文件夹时,请注意设置文件夹的用户和组所有权,使其与计划使用的 `PUID` 和 `PGID` 匹配。例如 +在图片中,“entrypoint.sh ”脚本确保以指定的 “PUID ”和 “PGID ”创建 “siyuan ”用户和组。因此,当主机创建工作区文件夹时,请注意设置文件夹的用户和组所有权,使其与计划使用的 +`PUID` 和 `PGID` 匹配。例如 ```bash chown -R 1001:1002 /siyuan/workspace ``` -如果使用自定义的 `PUID` 和 `PGID` 值,入口点脚本将确保在容器内创建正确的用户和组,并相应调整挂载卷的所有权。无需在 `docker run` 或 `docker-compose` 中手动传递 `-u`,因为环境变量会处理自定义。 +如果使用自定义的 `PUID` 和 `PGID` 值,入口点脚本将确保在容器内创建正确的用户和组,并相应调整挂载卷的所有权。无需在 +`docker run` 或 `docker-compose` 中手动传递 `-u`,因为环境变量会处理自定义。 #### 隐藏端口 @@ -322,13 +327,13 @@ Publish parameters: --accessAuthCode=******(访问授权码) 2. 首次会提示安装 `Docker` 和 `Docker Compose` 服务,点击立即安装,若已安装请忽略 3. 安装完成后在 `Docker-应用商店-实用工具` 中找到 `思源笔记`,点击`安装`,也可以在搜索框直接搜索 4. 设置域名等基本信息,点击 `确定` - * 名称:应用名称,默认 `siyuan_随机字符` - * 版本选择:默认 `latest` - * 域名:如你需要通过域名访问,请在此处填写你的域名 - * 允许外部访问:如你需通过 `IP+Port` 直接访问,请勾选,如你已经设置了域名,请不要勾选此处 - * 端口:默认 `6806`,可自行修改 - * 访问授权码:默认随机生成 - * 内存限制:0为不限制,根据实际需要设置 + * 名称:应用名称,默认 `siyuan_随机字符` + * 版本选择:默认 `latest` + * 域名:如你需要通过域名访问,请在此处填写你的域名 + * 允许外部访问:如你需通过 `IP+Port` 直接访问,请勾选,如你已经设置了域名,请不要勾选此处 + * 端口:默认 `6806`,可自行修改 + * 访问授权码:默认随机生成 + * 内存限制:0为不限制,根据实际需要设置 5. 提交后面板会自动进行应用初始化,大概需要`1-3`分钟,初始化完成后即可访问 #### 访问思源笔记 @@ -394,10 +399,13 @@ Publish parameters: --accessAuthCode=******(访问授权码) ### 如何升级到新版本? * 如果是通过应用商店安装的,请通过应用商店更新 -* 如果是桌面端通过安装包安装的,可打开 设置 - 关于 - 自动下载更新安装包 选项,这样思源会自动下载最新版安装包并提示安装 +* 如果是桌面端通过安装包安装的,可打开 设置 - 关于 - 自动下载更新安装包 + 选项,这样思源会自动下载最新版安装包并提示安装 * 如果是通过手动安装包安装的,请再次下载安装包安装 -可在 设置 - 关于 - 当前版本检查更新,也可以通过关注[官方下载](https://b3log.org/siyuan/download.html)或者 [GitHub Releases](https://github.com/siyuan-note/siyuan/releases) 来获取新版本。 +可在 设置 - 关于 - 当前版本检查更新 +,也可以通过关注[官方下载](https://b3log.org/siyuan/download.html) +或者 [GitHub Releases](https://github.com/siyuan-note/siyuan/releases) 来获取新版本。 **注意**:切勿将工作空间放置于安装目录下,因为更新版本会清空安装目录下的所有文件 @@ -407,14 +415,15 @@ Publish parameters: --accessAuthCode=******(访问授权码) ### 数据仓库密钥遗失怎么办? -* 如果之前在多个设备上正确初始化过数据仓库密钥的话,那么该密钥在所有设备上都是相同的,可以在 设置 - 关于 - 数据仓库密钥 - 复制密钥字符串 找回 +* 如果之前在多个设备上正确初始化过数据仓库密钥的话,那么该密钥在所有设备上都是相同的,可以在 设置 - + 关于 - 数据仓库密钥 - 复制密钥字符串 找回 * 如果之前没有正确配置(比如多个设备上密钥不一致)或者所有设备均不可用,已经无法获得密钥字符串,则可通过如下步骤重置密钥: - 1. 手动备份好数据,可通过 导出 Data 或者直接在文件系统上复制 工作空间/data/ 文件夹 - 2. 设置 - 关于 - 数据仓库密钥 - 重置数据仓库 - 3. 重新初始化数据仓库密钥,在一台设备上初始化密钥以后,其他设备导入密钥 - 4. 云端使用新的同步目录,旧的同步目录已经无法使用,可以删除 - 5. 已有的云端快照已经无法使用,可以删除 + 1. 手动备份好数据,可通过 导出 Data 或者直接在文件系统上复制 工作空间/data/ 文件夹 + 2. 设置 - 关于 - 数据仓库密钥 - 重置数据仓库 + 3. 重新初始化数据仓库密钥,在一台设备上初始化密钥以后,其他设备导入密钥 + 4. 云端使用新的同步目录,旧的同步目录已经无法使用,可以删除 + 5. 已有的云端快照已经无法使用,可以删除 ### 使用需要付费吗? diff --git a/sun-panel/README.md b/sun-panel/README.md index 6dc959f2a..8472eb17d 100644 --- a/sun-panel/README.md +++ b/sun-panel/README.md @@ -9,7 +9,7 @@ [![Github](https://img.shields.io/badge/Github-123456?logo=github&labelColor=242424)](https://github.com/hslr-s/sun-panel) [![Gitee](https://img.shields.io/badge/Gitee-123456?logo=gitee&labelColor=c71d23)](https://gitee.com/hslr/sun-panel) -[![docker](https://img.shields.io/badge/docker-123456?logo=docker&logoColor=fff&labelColor=1c7aed)](https://hub.docker.com/r/hslr/sun-panel) +[![docker](https://img.shields.io/badge/docker-123456?logo=docker&logoColor=fff&labelColor=1c7aed)](https://hub.docker.com/r/hslr/sun-panel) [![Bilibili](https://img.shields.io/badge/Bilibili-123456?logo=bilibili&logoColor=fff&labelColor=fb7299)](https://space.bilibili.com/27407696/channel/collectiondetail?sid=2023810) [![YouTube](https://img.shields.io/badge/YouTube-123456?logo=youtube&labelColor=ff0000)](https://www.youtube.com/channel/UCKwbFmKU25R602z6P2fgPYg)
@@ -19,7 +19,7 @@ [[ 中文文档 ]](https://sun-panel-doc.enianteam.com/zh_cn) | [[ Document ]](https://sun-panel-doc.enianteam.com) | -[[ Demo ]](http://sunpaneldemo.enianteam.com) +[[ Demo ]](http://sunpaneldemo.enianteam.com) A server, NAS navigation panel, Homepage, Browser homepage.
@@ -31,9 +31,16 @@ A server, NAS navigation panel, Homepage, Browser homepage. ![](./doc/images/main-dark.png) > [!IMPORTANT] -> In order to maintain the livelihood, the author added some [`PRO`] (https://pro.sun-panel.top) function, so the project temporarily entered a closed source state.; At present, the latest version of the open source is `v1.3.0`, [Please see the latest version of closed source](https://github.com/hslr-s/sun-panel/releases).; When the modular technology is developed, the separation of the PRO and the programs will be opened again, and the closed source will have no effect on ordinary users.; Let's look forward to open source again, and at the same time, we are welcome to supervise and review the security of the program. -> -> 作者为了维持生计,增加了一些 [`PRO`](https://pro.sun-panel.top) 功能,所以项目暂时进入闭源状态。目前开源最新版本为`v1.3.0`,[闭源最新版本请查看](https://github.com/hslr-s/sun-panel/releases)。待开发出模块化技术,然后对PRO和主程序进行分离会再次开源,闭源对普通用户没有任何影响。我们一起期待再次开源吧,同时也欢迎各位大佬对程序的安全性进行监督和审查。 +> In order to maintain the livelihood, the author added some [`PRO`] (https://pro.sun-panel.top) function, so the +> project temporarily entered a closed source state.; At present, the latest version of the open source is +`v1.3.0`, [Please see the latest version of closed source](https://github.com/hslr-s/sun-panel/releases).; When the +> modular technology is developed, the separation of the PRO and the programs will be opened again, and the closed source +> will have no effect on ordinary users.; Let's look forward to open source again, and at the same time, we are welcome to +> supervise and review the security of the program. +> +> 作者为了维持生计,增加了一些 [`PRO`](https://pro.sun-panel.top) 功能,所以项目暂时进入闭源状态。目前开源最新版本为 +`v1.3.0`,[闭源最新版本请查看](https://github.com/hslr-s/sun-panel/releases) +> 。待开发出模块化技术,然后对PRO和主程序进行分离会再次开源,闭源对普通用户没有任何影响。我们一起期待再次开源吧,同时也欢迎各位大佬对程序的安全性进行监督和审查。 ## 😎 Features @@ -63,24 +70,24 @@ A server, NAS navigation panel, Homepage, Browser homepage. ![](./doc/images/window-ssh.png) ![](./doc/images/window-xunlei.png) - - ## 🐳 Deployment tutorial + [Deployment Tutorial](https://sun-panel-doc.enianteam.com/usage/quick_deploy.html) ## 🍵 Donate -> Open-source development is not easy. If you feel that my project has helped you, you are welcome to [donate](./doc/donate.md) or buy me a cup of tea☕ (please leave your nickname or name in the note if possible). Your support is my motivation, thank you. +> Open-source development is not easy. If you feel that my project has helped you, you are welcome +> to [donate](./doc/donate.md) or buy me a cup of tea☕ (please leave your nickname or name in the note if possible). Your +> support is my motivation, thank you. - -| | | -| ------------ | ------------ | -| | | +| | | +|----------------------------------------------------------|-----------------------------------------------------------| +| | | ## 🏖️ Communication group & community @@ -98,13 +105,12 @@ QQ交流群,进不去可以点上方连接联系作者 - [jackloves111](https://github.com/jackloves111) - [Rock.L](https://github.com/gitlyp) - --- [![Star History Chart](https://api.star-history.com/svg?repos=hslr-s/sun-panel&type=Date)](https://star-history.com/#hslr-s/sun-panel&Date) - - 账户密码 + ``` username: admin@sun.cc password: 12345678 diff --git a/syncthing-discosrv/README.md b/syncthing-discosrv/README.md index 6cf9fc2db..8f4c81f80 100644 --- a/syncthing-discosrv/README.md +++ b/syncthing-discosrv/README.md @@ -66,7 +66,8 @@ To run Syncthing in Docker, see [the Docker README][16]. ## Vote on features/bugs We'd like to encourage you to [vote][12] on issues that matter to you. -This helps the team understand what are the biggest pain points for our users, and could potentially influence what is being worked on next. +This helps the team understand what are the biggest pain points for our users, and could potentially influence what is +being worked on next. ## Getting in Touch @@ -98,17 +99,31 @@ Please see the Syncthing [documentation site][6] [[source]][17]. All code is licensed under the [MPLv2 License][7]. [1]: https://docs.syncthing.net/specs/bep-v1.html + [2]: https://docs.syncthing.net/intro/getting-started.html + [3]: https://github.com/syncthing/syncthing/blob/main/etc + [5]: https://docs.syncthing.net/dev/building.html + [6]: https://docs.syncthing.net/ + [7]: https://github.com/syncthing/syncthing/blob/main/LICENSE + [8]: https://forum.syncthing.net/ + [10]: https://github.com/syncthing/syncthing/issues + [11]: https://docs.syncthing.net/users/contrib.html#gui-wrappers + [12]: https://www.bountysource.com/teams/syncthing/issues + [13]: https://github.com/syncthing/syncthing/blob/main/GOALS.md + [14]: https://github.com/syncthing/syncthing/raw/main/assets/logo-text-128.png + [15]: https://syncthing.net/ + [16]: https://github.com/syncthing/syncthing/blob/main/README-Docker.md + [17]: https://github.com/syncthing/docs diff --git a/syncthing-relaysrv/README.md b/syncthing-relaysrv/README.md index 6cf9fc2db..8f4c81f80 100644 --- a/syncthing-relaysrv/README.md +++ b/syncthing-relaysrv/README.md @@ -66,7 +66,8 @@ To run Syncthing in Docker, see [the Docker README][16]. ## Vote on features/bugs We'd like to encourage you to [vote][12] on issues that matter to you. -This helps the team understand what are the biggest pain points for our users, and could potentially influence what is being worked on next. +This helps the team understand what are the biggest pain points for our users, and could potentially influence what is +being worked on next. ## Getting in Touch @@ -98,17 +99,31 @@ Please see the Syncthing [documentation site][6] [[source]][17]. All code is licensed under the [MPLv2 License][7]. [1]: https://docs.syncthing.net/specs/bep-v1.html + [2]: https://docs.syncthing.net/intro/getting-started.html + [3]: https://github.com/syncthing/syncthing/blob/main/etc + [5]: https://docs.syncthing.net/dev/building.html + [6]: https://docs.syncthing.net/ + [7]: https://github.com/syncthing/syncthing/blob/main/LICENSE + [8]: https://forum.syncthing.net/ + [10]: https://github.com/syncthing/syncthing/issues + [11]: https://docs.syncthing.net/users/contrib.html#gui-wrappers + [12]: https://www.bountysource.com/teams/syncthing/issues + [13]: https://github.com/syncthing/syncthing/blob/main/GOALS.md + [14]: https://github.com/syncthing/syncthing/raw/main/assets/logo-text-128.png + [15]: https://syncthing.net/ + [16]: https://github.com/syncthing/syncthing/blob/main/README-Docker.md + [17]: https://github.com/syncthing/docs diff --git a/syncthing/README.md b/syncthing/README.md index 6cf9fc2db..8f4c81f80 100644 --- a/syncthing/README.md +++ b/syncthing/README.md @@ -66,7 +66,8 @@ To run Syncthing in Docker, see [the Docker README][16]. ## Vote on features/bugs We'd like to encourage you to [vote][12] on issues that matter to you. -This helps the team understand what are the biggest pain points for our users, and could potentially influence what is being worked on next. +This helps the team understand what are the biggest pain points for our users, and could potentially influence what is +being worked on next. ## Getting in Touch @@ -98,17 +99,31 @@ Please see the Syncthing [documentation site][6] [[source]][17]. All code is licensed under the [MPLv2 License][7]. [1]: https://docs.syncthing.net/specs/bep-v1.html + [2]: https://docs.syncthing.net/intro/getting-started.html + [3]: https://github.com/syncthing/syncthing/blob/main/etc + [5]: https://docs.syncthing.net/dev/building.html + [6]: https://docs.syncthing.net/ + [7]: https://github.com/syncthing/syncthing/blob/main/LICENSE + [8]: https://forum.syncthing.net/ + [10]: https://github.com/syncthing/syncthing/issues + [11]: https://docs.syncthing.net/users/contrib.html#gui-wrappers + [12]: https://www.bountysource.com/teams/syncthing/issues + [13]: https://github.com/syncthing/syncthing/blob/main/GOALS.md + [14]: https://github.com/syncthing/syncthing/raw/main/assets/logo-text-128.png + [15]: https://syncthing.net/ + [16]: https://github.com/syncthing/syncthing/blob/main/README-Docker.md + [17]: https://github.com/syncthing/docs diff --git a/xunlei/README.md b/xunlei/README.md index aefc0d58c..37cd3cc73 100644 --- a/xunlei/README.md +++ b/xunlei/README.md @@ -3,9 +3,13 @@ [![GitHub Stars][1]][2] [![Docker Pulls][3]][5] [![Docker Version][4]][5] [1]: https://img.shields.io/github/stars/cnk3x/xunlei?style=flat + [2]: https://star-history.com/#cnk3x/xunlei&Date + [3]: https://img.shields.io/docker/pulls/cnk3x/xunlei.svg + [4]: https://img.shields.io/docker/v/cnk3x/xunlei + [5]: https://hub.docker.com/r/cnk3x/xunlei 从迅雷群晖套件中提取出来用于其他设备的迅雷远程下载服务程序。仅供研究学习测试。 \ diff --git a/zerotier-one/1.14.2/docker-compose.yml b/zerotier-one/1.14.2/docker-compose.yml index 8ec47fdca..a479177d2 100644 --- a/zerotier-one/1.14.2/docker-compose.yml +++ b/zerotier-one/1.14.2/docker-compose.yml @@ -11,5 +11,5 @@ services: volumes: - ./data:/var/lib/zerotier-one image: zerotier/zerotier:1.14.2 - labels: + labels: createdBy: "Apps" diff --git a/zerotier-one/README.md b/zerotier-one/README.md index 6ecc9a160..53d9d8de8 100644 --- a/zerotier-one/README.md +++ b/zerotier-one/README.md @@ -1,82 +1,117 @@ -# 使用说明 - -例子:容器管理界面连接容器终端,执行命令加入网络 -``` -zerotier-cli join [网络ID] -``` - -# 原始相关 - ZeroTier - Global Area Networking ====== -*This document is written for a software developer audience. For information on using ZeroTier, see the: [Website](https://www.zerotier.com), [Documentation Site](https://docs.zerotier.com), and [Discussion Forum](https://discuss.zerotier.com).* +*This document is written for a software developer audience. For information on using ZeroTier, see +the: [Website](https://www.zerotier.com), [Documentation Site](https://docs.zerotier.com), +and [Discussion Forum](https://discuss.zerotier.com).* -ZeroTier is a smart programmable Ethernet switch for planet Earth. It allows all networked devices, VMs, containers, and applications to communicate as if they all reside in the same physical data center or cloud region. +ZeroTier is a smart programmable Ethernet switch for planet Earth. It allows all networked devices, VMs, containers, and +applications to communicate as if they all reside in the same physical data center or cloud region. -This is accomplished by combining a cryptographically addressed and secure peer to peer network (termed VL1) with an Ethernet emulation layer somewhat similar to VXLAN (termed VL2). Our VL2 Ethernet virtualization layer includes advanced enterprise SDN features like fine grained access control rules for network micro-segmentation and security monitoring. +This is accomplished by combining a cryptographically addressed and secure peer to peer network (termed VL1) with an +Ethernet emulation layer somewhat similar to VXLAN (termed VL2). Our VL2 Ethernet virtualization layer includes advanced +enterprise SDN features like fine grained access control rules for network micro-segmentation and security monitoring. -All ZeroTier traffic is encrypted end-to-end using secret keys that only you control. Most traffic flows peer to peer, though we offer free (but slow) relaying for users who cannot establish peer to peer connections. +All ZeroTier traffic is encrypted end-to-end using secret keys that only you control. Most traffic flows peer to peer, +though we offer free (but slow) relaying for users who cannot establish peer to peer connections. -The goals and design principles of ZeroTier are inspired by among other things the original [Google BeyondCorp](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43231.pdf) paper and the [Jericho Forum](https://en.wikipedia.org/wiki/Jericho_Forum) with its notion of "deperimeterization." +The goals and design principles of ZeroTier are inspired by among other things the +original [Google BeyondCorp](https://static.googleusercontent.com/media/research.google.com/en//pubs/archive/43231.pdf) +paper and the [Jericho Forum](https://en.wikipedia.org/wiki/Jericho_Forum) with its notion of "deperimeterization." -Visit [ZeroTier's site](https://www.zerotier.com/) for more information and [pre-built binary packages](https://www.zerotier.com/download/). Apps for Android and iOS are available for free in the Google Play and Apple app stores. +Visit [ZeroTier's site](https://www.zerotier.com/) for more information +and [pre-built binary packages](https://www.zerotier.com/download/). Apps for Android and iOS are available for free in +the Google Play and Apple app stores. -ZeroTier is licensed under the [BSL version 1.1](https://mariadb.com/bsl11/). See [LICENSE.txt](https://github.com/zerotier/ZeroTierOne/blob/dev/LICENSE.txt) and the [ZeroTier pricing page](https://www.zerotier.com/pricing) for details. ZeroTier is free to use internally in businesses and academic institutions and for non-commercial purposes. Certain types of commercial use such as building closed-source apps and devices based on ZeroTier or offering ZeroTier network controllers and network management as a SaaS service require a commercial license. +ZeroTier is licensed under the [BSL version 1.1](https://mariadb.com/bsl11/). See [LICENSE.txt](LICENSE.txt) and +the [ZeroTier pricing page](https://www.zerotier.com/pricing) for details. ZeroTier is free to use internally in +businesses and academic institutions and for non-commercial purposes. Certain types of commercial use such as building +closed-source apps and devices based on ZeroTier or offering ZeroTier network controllers and network management as a +SaaS service require a commercial license. -A small amount of third party code is also included in ZeroTier and is not subject to our BSL license. See [AUTHORS.md](https://github.com/zerotier/ZeroTierOne/blob/dev/AUTHORS.md) for a list of third party code, where it is included, and the licenses that apply to it. All of the third party code in ZeroTier is liberally licensed (MIT, BSD, Apache, public domain, etc.). +A small amount of third party code is also included in ZeroTier and is not subject to our BSL license. +See [AUTHORS.md](AUTHORS.md) for a list of third party code, where it is included, and the licenses that apply to it. +All of the third party code in ZeroTier is liberally licensed (MIT, BSD, Apache, public domain, etc.). ### Getting Started -Everything in the ZeroTier world is controlled by two types of identifier: 40-bit/10-digit *ZeroTier addresses* and 64-bit/16-digit *network IDs*. These identifiers are easily distinguished by their length. A ZeroTier address identifies a node or "device" (laptop, phone, server, VM, app, etc.) while a network ID identifies a virtual Ethernet network that can be joined by devices. +Everything in the ZeroTier world is controlled by two types of identifier: 40-bit/10-digit *ZeroTier addresses* and +64-bit/16-digit *network IDs*. These identifiers are easily distinguished by their length. A ZeroTier address identifies +a node or "device" (laptop, phone, server, VM, app, etc.) while a network ID identifies a virtual Ethernet network that +can be joined by devices. -ZeroTier addresses can be thought of as port numbers on an enormous planet-wide enterprise Ethernet smart switch supporting VLANs. Network IDs are VLAN IDs to which these ports may be assigned. A single port can be assigned to more than one VLAN. +ZeroTier addresses can be thought of as port numbers on an enormous planet-wide enterprise Ethernet smart switch +supporting VLANs. Network IDs are VLAN IDs to which these ports may be assigned. A single port can be assigned to more +than one VLAN. -A ZeroTier address looks like `8056c2e21c` and a network ID looks like `8056c2e21c000001`. Network IDs are composed of the ZeroTier address of that network's primary controller and an arbitrary 24-bit ID that identifies the network on this controller. Network controllers are roughly analogous to SDN controllers in SDN protocols like [OpenFlow](https://en.wikipedia.org/wiki/OpenFlow), though as with the analogy between VXLAN and VL2 this should not be read to imply that the protocols or design are the same. You can use our convenient and inexpensive SaaS hosted controllers at [my.zerotier.com](https://my.zerotier.com/) or [run your own controller](controller/) if you don't mind messing around with JSON configuration files or writing scripts to do so. +A ZeroTier address looks like `8056c2e21c` and a network ID looks like `8056c2e21c000001`. Network IDs are composed of +the ZeroTier address of that network's primary controller and an arbitrary 24-bit ID that identifies the network on this +controller. Network controllers are roughly analogous to SDN controllers in SDN protocols +like [OpenFlow](https://en.wikipedia.org/wiki/OpenFlow), though as with the analogy between VXLAN and VL2 this should +not be read to imply that the protocols or design are the same. You can use our convenient and inexpensive SaaS hosted +controllers at [my.zerotier.com](https://my.zerotier.com/) or [run your own controller](controller/) if you don't mind +messing around with JSON configuration files or writing scripts to do so. ### Project Layout The base path contains the ZeroTier One service main entry point (`one.cpp`), self test code, makefiles, etc. - - `artwork/`: icons, logos, etc. - - `attic/`: old stuff and experimental code that we want to keep around for reference. - - `controller/`: the reference network controller implementation, which is built and included by default on desktop and server build targets. - - `debian/`: files for building Debian packages on Linux. - - `doc/`: manual pages and other documentation. - - `ext/`: third party libraries, binaries that we ship for convenience on some platforms (Mac and Windows), and installation support files. - - `include/`: include files for the ZeroTier core. - - `java/`: a JNI wrapper used with our Android mobile app. (The whole Android app is not open source but may be made so in the future.) - - `node/`: the ZeroTier virtual Ethernet switch core, which is designed to be entirely separate from the rest of the code and able to be built as a stand-alone OS-independent library. Note to developers: do not use C++11 features in here, since we want this to build on old embedded platforms that lack C++11 support. C++11 can be used elsewhere. - - `osdep/`: code to support and integrate with OSes, including platform-specific stuff only built for certain targets. - - `rule-compiler/`: JavaScript rules language compiler for defining network-level rules. - - `service/`: the ZeroTier One service, which wraps the ZeroTier core and provides VPN-like connectivity to virtual networks for desktops, laptops, servers, VMs, and containers. - - `windows/`: Visual Studio solution files, Windows service code, and the Windows task bar app UI. - - `zeroidc/`: OIDC implementation used by ZeroTier service to log into SSO-enabled networks. (This part is written in Rust, and more Rust will be appearing in this repository in the future.) +- `artwork/`: icons, logos, etc. +- `attic/`: old stuff and experimental code that we want to keep around for reference. +- `controller/`: the reference network controller implementation, which is built and included by default on desktop and + server build targets. +- `debian/`: files for building Debian packages on Linux. +- `doc/`: manual pages and other documentation. +- `ext/`: third party libraries, binaries that we ship for convenience on some platforms (Mac and Windows), and + installation support files. +- `include/`: include files for the ZeroTier core. +- `java/`: a JNI wrapper used with our Android mobile app. (The whole Android app is not open source but may be made so + in the future.) +- `node/`: the ZeroTier virtual Ethernet switch core, which is designed to be entirely separate from the rest of the + code and able to be built as a stand-alone OS-independent library. Note to developers: do not use C++11 features in + here, since we want this to build on old embedded platforms that lack C++11 support. C++11 can be used elsewhere. +- `osdep/`: code to support and integrate with OSes, including platform-specific stuff only built for certain targets. +- `rule-compiler/`: JavaScript rules language compiler for defining network-level rules. +- `service/`: the ZeroTier One service, which wraps the ZeroTier core and provides VPN-like connectivity to virtual + networks for desktops, laptops, servers, VMs, and containers. +- `windows/`: Visual Studio solution files, Windows service code, and the Windows task bar app UI. +- `zeroidc/`: OIDC implementation used by ZeroTier service to log into SSO-enabled networks. (This part is written in + Rust, and more Rust will be appearing in this repository in the future.) + +### Contributing + +Please do pull requests off of the `dev` branch. + +Releases are done by merging `dev` into `main` and then tagging and doing builds. ### Build and Platform Notes -To build on Mac and Linux just type `make`. On FreeBSD and OpenBSD `gmake` (GNU make) is required and can be installed from packages or ports. For Windows there is a Visual Studio solution in `windows/`. +To build on Mac and Linux just type `make`. On FreeBSD and OpenBSD `gmake` (GNU make) is required and can be installed +from packages or ports. For Windows there is a Visual Studio solution in `windows/`. - - **Mac** - - Xcode command line tools for macOS 10.13 or newer are required. - - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. - - **Linux** - - The minimum compiler versions required are GCC/G++ 4.9.3 or CLANG/CLANG++ 3.4.2. (Install `clang` on CentOS 7 as G++ is too old.) - - Linux makefiles automatically detect and prefer clang/clang++ if present as it produces smaller and slightly faster binaries in most cases. You can override by supplying CC and CXX variables on the make command line. - - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. - - **Windows** - - Visual Studio 2022 on Windows 10 or newer. - - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. - - **FreeBSD** - - GNU make is required. Type `gmake` to build. - - `binutils` is required. Type `pkg install binutils` to install. - - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. - - **OpenBSD** - - There is a limit of four network memberships on OpenBSD as there are only four tap devices (`/dev/tap0` through `/dev/tap3`). - - GNU make is required. Type `gmake` to build. - - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. +- **Mac** + - Xcode command line tools for macOS 10.13 or newer are required. + - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. +- **Linux** + - The minimum compiler versions required are GCC/G++ 8.x or CLANG/CLANG++ 5.x. + - Linux makefiles automatically detect and prefer clang/clang++ if present as it produces smaller and slightly + faster binaries in most cases. You can override by supplying CC and CXX variables on the make command line. + - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. +- **Windows** + - Visual Studio 2022 on Windows 10 or newer. + - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. +- **FreeBSD** + - GNU make is required. Type `gmake` to build. + - `binutils` is required. Type `pkg install binutils` to install. + - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. +- **OpenBSD** + - There is a limit of four network memberships on OpenBSD as there are only four tap devices (`/dev/tap0` through + `/dev/tap3`). + - GNU make is required. Type `gmake` to build. + - Rust for x86_64 and ARM64 targets *if SSO is enabled in the build*. -Typing `make selftest` will build a *zerotier-selftest* binary which unit tests various internals and reports on a few aspects of the build environment. It's a good idea to try this on novel platforms or architectures. +Typing `make selftest` will build a *zerotier-selftest* binary which unit tests various internals and reports on a few +aspects of the build environment. It's a good idea to try this on novel platforms or architectures. ### Running @@ -90,51 +125,78 @@ On most distributions, macOS, and Windows, the installer will start the service A home folder for your system will automatically be created. -The service is controlled via the JSON API, which by default is available at 127.0.0.1 port 9993. We include a *zerotier-cli* command line utility to make API calls for standard things like joining and leaving networks. The *authtoken.secret* file in the home folder contains the secret token for accessing this API. See [service/README.md](service/README.md) for API documentation. +The service is controlled via the JSON API, which by default is available at `127.0.0.1:9993`. It also listens on +`0.0.0.0:9993` which is only usable if `allowManagementFrom` is properly configured in `local.conf`. We include a +*zerotier-cli* command line utility to make API calls for standard things like joining and leaving networks. The +*authtoken.secret* file in the home folder contains the secret token for accessing this API. +See [service/README.md](service/README.md) for API documentation. Here's where home folders live (by default) on each OS: - * **Linux**: `/var/lib/zerotier-one` - * **FreeBSD** / **OpenBSD**: `/var/db/zerotier-one` - * **Mac**: `/Library/Application Support/ZeroTier/One` - * **Windows**: `\ProgramData\ZeroTier\One` (That's the default. The base 'shared app data' folder might be different if Windows is installed with a non-standard drive letter assignment or layout.) +* **Linux**: `/var/lib/zerotier-one` +* **FreeBSD** / **OpenBSD**: `/var/db/zerotier-one` +* **Mac**: `/Library/Application Support/ZeroTier/One` +* **Windows**: `\ProgramData\ZeroTier\One` (That's the default. The base 'shared app data' folder might be different if + Windows is installed with a non-standard drive letter assignment or layout.) ### Basic Troubleshooting For most users, it just works. -If you are running a local system firewall, we recommend adding a rules permitting zerotier. If you installed binaries for Windows this should be done automatically. Other platforms might require manual editing of local firewall rules depending on your configuration. +If you are running a local system firewall, we recommend adding a rules permitting zerotier. If you installed binaries +for Windows this should be done automatically. Other platforms might require manual editing of local firewall rules +depending on your configuration. See the [documentation site](https://docs.zerotier.com/zerotier/troubleshooting) for more information. -The Mac firewall can be found under "Security" in System Preferences. Linux has a variety of firewall configuration systems and tools. +The Mac firewall can be found under "Security" in System Preferences. Linux has a variety of firewall configuration +systems and tools. -On CentOS check `/etc/sysconfig/iptables` for IPTables rules. For other distributions consult your distribution's documentation. You'll also have to check the UIs or documentation for commercial third party firewall applications like Little Snitch (Mac), McAfee Firewall Enterprise (Windows), etc. if you are running any of those. Some corporate environments might have centrally managed firewall software, so you might also have to contact IT. +On CentOS check `/etc/sysconfig/iptables` for IPTables rules. For other distributions consult your distribution's +documentation. You'll also have to check the UIs or documentation for commercial third party firewall applications like +Little Snitch (Mac), McAfee Firewall Enterprise (Windows), etc. if you are running any of those. Some corporate +environments might have centrally managed firewall software, so you might also have to contact IT. -ZeroTier One peers will automatically locate each other and communicate directly over a local wired LAN *if UDP port 9993 inbound is open*. If that port is filtered, they won't be able to see each others' LAN announcement packets. If you're experiencing poor performance between devices on the same physical network, check their firewall settings. Without LAN auto-location peers must attempt "loopback" NAT traversal, which sometimes fails and in any case requires that every packet traverse your external router twice. +ZeroTier One peers will automatically locate each other and communicate directly over a local wired LAN *if UDP port +9993 inbound is open*. If that port is filtered, they won't be able to see each others' LAN announcement packets. If +you're experiencing poor performance between devices on the same physical network, check their firewall settings. +Without LAN auto-location peers must attempt "loopback" NAT traversal, which sometimes fails and in any case requires +that every packet traverse your external router twice. -Users behind certain types of firewalls and "symmetric" NAT devices may not be able to connect to external peers directly at all. ZeroTier has limited support for port prediction and will *attempt* to traverse symmetric NATs, but this doesn't always work. If P2P connectivity fails you'll be bouncing UDP packets off our relay servers resulting in slower performance. Some NAT router(s) have a configurable NAT mode, and setting this to "full cone" will eliminate this problem. If you do this you may also see a magical improvement for things like VoIP phones, Skype, BitTorrent, WebRTC, certain games, etc., since all of these use NAT traversal techniques similar to ours. +Users behind certain types of firewalls and "symmetric" NAT devices may not be able to connect to external peers +directly at all. ZeroTier has limited support for port prediction and will *attempt* to traverse symmetric NATs, but +this doesn't always work. If P2P connectivity fails you'll be bouncing UDP packets off our relay servers resulting in +slower performance. Some NAT router(s) have a configurable NAT mode, and setting this to "full cone" will eliminate this +problem. If you do this you may also see a magical improvement for things like VoIP phones, Skype, BitTorrent, WebRTC, +certain games, etc., since all of these use NAT traversal techniques similar to ours. -If a firewall between you and the Internet blocks ZeroTier's UDP traffic, you will fall back to last-resort TCP tunneling to rootservers over port 443 (https impersonation). This will work almost anywhere but is *very slow* compared to UDP or direct peer to peer connectivity. +If a firewall between you and the Internet blocks ZeroTier's UDP traffic, you will fall back to last-resort TCP +tunneling to rootservers over port 443 (https impersonation). This will work almost anywhere but is *very slow* compared +to UDP or direct peer to peer connectivity. Additional help can be found in our [knowledge base](https://zerotier.atlassian.net/wiki/spaces/SD/overview). ### Prometheus Metrics -Prometheus Metrics are available at the `/metrics` API endpoint. This endpoint is protected by an API key stored in `metricstoken.secret` to prevent unwanted information leakage. Information that could be gleaned from the metrics include joined networks and peers your instance is talking to. +Prometheus Metrics are available at the `/metrics` API endpoint. This endpoint is protected by an API key stored in +`metricstoken.secret` to prevent unwanted information leakage. Information that could be gleaned from the metrics +include joined networks and peers your instance is talking to. -Access control is via the ZeroTier control interface itself and `metricstoken.secret`. This can be sent as a bearer auth token, via the `X-ZT1-Auth` HTTP header field, or appended to the URL as `?auth=`. You can see the current metrics via `cURL` with the following command: +Access control is via the ZeroTier control interface itself and `metricstoken.secret`. This can be sent as a bearer auth +token, via the `X-ZT1-Auth` HTTP header field, or appended to the URL as `?auth=`. You can see the current +metrics via `cURL` with the following command: // Linux curl -H "X-ZT1-Auth: $(sudo cat /var/lib/zerotier-one/metricstoken.secret)" http://localhost:9993/metrics // macOS - curl -H "X-XT1-Auth: $(sudo cat /Library/Application\ Support/ZeroTier/One/metricstoken.secret)" http://localhost:9993/metrics + curl -H "X-ZT1-Auth: $(sudo cat /Library/Application\ Support/ZeroTier/One/metricstoken.secret)" http://localhost:9993/metrics // Windows PowerShell (Admin) Invoke-RestMethod -Headers @{'X-ZT1-Auth' = "$(Get-Content C:\ProgramData\ZeroTier\One\metricstoken.secret)"; } -Uri http://localhost:9993/metrics -To configure a scrape job in Prometheus on the machine ZeroTier is running on, add this to your Prometheus `scrape_config`: +To configure a scrape job in Prometheus on the machine ZeroTier is running on, add this to your Prometheus +`scrape_config`: - job_name: zerotier-one honor_labels: true @@ -149,32 +211,34 @@ To configure a scrape job in Prometheus on the machine ZeroTier is running on, a authorization: credentials: $YOUR_METRICS_TOKEN_SECRET -If neither of these methods are desirable, it is probably possible to distribute metrics via [Prometheus Proxy](https://github.com/pambrose/prometheus-proxy) or some other tool. Note: We have not tested this internally, but will probably work with the correct configuration. +If neither of these methods are desirable, it is probably possible to distribute metrics +via [Prometheus Proxy](https://github.com/pambrose/prometheus-proxy) or some other tool. Note: We have not tested this +internally, but will probably work with the correct configuration. Metrics are also available on disk in ZeroTier's working directory: - // Linux - /var/lib/zerotier-one/metrics.prom +// Linux +/var/lib/zerotier-one/metrics.prom - // macOS - /Library/Application\ Support/ZeroTier/One/metrics.prom +// macOS +/Library/Application\ Support/ZeroTier/One/metrics.prom - //Windows - C:\ProgramData\ZeroTier\One\metrics.prom +//Windows +C:\ProgramData\ZeroTier\One\metrics.prom #### Available Metrics -| Metric Name | Labels | Metric Type | Description | -| --- | --- | --- | --- | -| zt_packet | packet_type, direction | Counter | ZeroTier packet type counts | -| zt_packet_error | error_type, direction | Counter | ZeroTier packet errors| -| zt_data | protocol, direction | Counter | number of bytes ZeroTier has transmitted or received | -| zt_num_networks | | Gauge | number of networks this instance is joined to | -| zt_network_multicast_groups_subscribed | network_id | Gauge | number of multicast groups networks are subscribed to | -| zt_network_packets | network_id, direction | Counter | number of incoming/outgoing packets per network | -| zt_peer_latency | node_id | Histogram | peer latency (ms) | -| zt_peer_path_count | node_id, status | Gauge | number of paths to peer | -| zt_peer_packets | node_id, direction | Counter | number of packets to/from a peer | -| zt_peer_packet_errors | node_id | Counter | number of incoming packet errors from a peer | +| Metric Name | Labels | Metric Type | Description | +|----------------------------------------|------------------------|-------------|-------------------------------------------------------| +| zt_packet | packet_type, direction | Counter | ZeroTier packet type counts | +| zt_packet_error | error_type, direction | Counter | ZeroTier packet errors | +| zt_data | protocol, direction | Counter | number of bytes ZeroTier has transmitted or received | +| zt_num_networks | | Gauge | number of networks this instance is joined to | +| zt_network_multicast_groups_subscribed | network_id | Gauge | number of multicast groups networks are subscribed to | +| zt_network_packets | network_id, direction | Counter | number of incoming/outgoing packets per network | +| zt_peer_latency | node_id | Histogram | peer latency (ms) | +| zt_peer_path_count | node_id, status | Gauge | number of paths to peer | +| zt_peer_packets | node_id, direction | Counter | number of packets to/from a peer | +| zt_peer_packet_errors | node_id | Counter | number of incoming packet errors from a peer | If there are other metrics you'd like to see tracked, ask us in an Issue or send us a Pull Request! diff --git a/zerotier-one/latest/docker-compose.yml b/zerotier-one/latest/docker-compose.yml index 06c1a3901..4adde27d7 100644 --- a/zerotier-one/latest/docker-compose.yml +++ b/zerotier-one/latest/docker-compose.yml @@ -11,5 +11,5 @@ services: volumes: - ./data:/var/lib/zerotier-one image: zerotier/zerotier:latest - labels: + labels: createdBy: "Apps" diff --git a/zerotier-planet/README.md b/zerotier-planet/README.md index 8719fb2ec..4f609f627 100644 --- a/zerotier-planet/README.md +++ b/zerotier-planet/README.md @@ -1,28 +1,607 @@ -# Zerotier Planet 服务端 +# 交流群 -包含 ZeroTier One 和 ztncui 的 Docker 映像,用于在容器中设置具有 Web 用户界面的独立 ZeroTier 网络控制器。 +**Telegram** -## 简介 +- TG交流群:https://t.me/+JduuWfhSEPdlNDk1 -ZeroTier 这一类 P2P VPN 是在互联网的基础上将自己的所有设备组成一个私有的网络,可以理解为互联网连接的局域网。最常见的场景就是在公司可以用手机直接访问家里的 -NAS,而且是点对点直连,数据传输并不经由第三方服务器中转。 +**QQ Group** -ZeroTier 在多设备之间建立了一个 Peer to Peer VPN(P2PVPN) 连接,如:在笔记本电脑、台式机、嵌入式设备、云资源和应用。这些设备只需要通过 -ZeroTier One ( ZeroTier 的客户端) 在不同设备之间建立直接连接,即使它们位于 NAT 之后。连接到虚拟 LAN 的任何计算机和设备通常通过 -NAT 或路由器设备与 Internet 连接,ZeroTier One 使用 STUN 和隧道来建立 NAT 后设备之间的 VPN 直连。 +- 1群:692635772 +- 2群:785620313 +- 3群:316239544 +- 4群:1027678459 -简单一点说,ZeroTier 就是通过 P2P 等方式实现形如交换机或路由器上 LAN 设备的内网互联。 +# 微信公众号 -### 专有名词 +![二维码](assets/wechat.png) -PLANET :行星服务器,Zerotier 根服务器 +# 功能特性 -MOON :卫星服务器,用户自建的私有根服务器,起到代理加速的作用 +- ✅ 支持 Linux/AMD64、Linux/ARM64 架构 +- 🐳 Docker 容器化部署 +- 📥 支持 URL 下载 planet、moon 配置 +- 🌐 可作为 Moon 或 Planet 服务器搭建 -LEAF :网络客户端,就是每台连接到网络节点。 +# 目录 -## 安装说明 +- [0: 广告](#0-广告) +- [1:ZeroTier 介绍](#1zerotier-介绍) +- [2:为什么要自建PLANET 服务器](#2为什么要自建planet-服务器) +- [3:开始安装](#3开始安装) + - [3.1:准备条件](#31准备条件) + - [3.1.1 安装git](#311-安装git) + - [3.1.2 安装docker](#312-安装docker) + - [3.1.3 启动docker](#313-启动docker) + - [3.1.4 配置docker加速镜像(可选,不配也可以)](#314-配置docker加速镜像可选不配也可以) + - [3.2:下载项目源码](#32下载项目源码) + - [3.3:执行安装脚本](#33执行安装脚本) + - [3.4 下载 `planet` 文件](#34-下载-planet-文件) + - [3.5 新建网络](#35-新建网络) + - [3.5.1 创建网络](#351-创建网络) + - [3.5.2 分配网络IP:](#352-分配网络ip) +- [4.客户端配置](#4客户端配置) + - [4.1 Windows 配置](#41-windows-配置) + - [4.2 加入网络](#42-加入网络) + - [4.2 Linux 客户端](#42-linux-客户端) + - [4.3 安卓客户端配置](#43-安卓客户端配置) + - [4.4 MacOS 客户端配置](#44-macos-客户端配置) + - [4.5 OpenWRT 客户端配置](#45-openwrt-客户端配置) +- [参考链接](#参考链接) +- [5. 管理面板SSL配置](#5-管理面板ssl配置) +- [6. 卸载](#6-卸载) +- [7: Q\&A:](#7-qa) + - [1. 为什么我ping不通目标机器?](#1-为什么我ping不通目标机器) + - [2. IOS客户端怎么用?](#2-ios客户端怎么用) + - [3. 为什么看不到官方的Planet](#3-为什么看不到官方的planet) + - [4. 我更换了IP需要怎么处理?](#4-我更换了ip需要怎么处理) + - [5. PVE lxc 容器没有创建网卡](#5-pve-lxc-容器没有创建网卡) + - [6. 管理后台忘记密码怎么办:](#6-管理后台忘记密码怎么办) + - [7. 为什么连不上planet](#7-为什么连不上planet) + - [8. 如何判断是直连还是中转](#8-如何判断是直连还是中转) + - [9. 为什么我的zerotier传输不稳定](#9-为什么我的zerotier传输不稳定) + - [10.支持域名吗?](#10支持域名吗) + - [11. ARM服务器可以搭建吗](#11-arm服务器可以搭建吗) + - [12. 支持docker-compose启动部署吗](#12-支持docker-compose启动部署吗) +- [开发计划](#开发计划) +- [风险声明](#风险声明) +- [类似项目](#类似项目) +- [捐助和支持](#捐助和支持) +- [鸣谢](#鸣谢) + +# 0: 广告 + +## 托管方案一:自运营容器服务 + +**寻找便捷的解决方案?** + +我们提供专业的托管服务: + +- 免费试用3天 +- 年费仅需99¥ +- 高速带宽:300Mbit +- 流量政策: + - 每月100G转发流量 + - P2P连接后不计流量 + - 超出后每10元100G +- 优质线路:宁波电信机房 +- 联系方式: + - Telegram:[https://t.me/uxkram](https://t.me/uxkram) + - 或加入QQ群咨询群主 + +测速图如下: + +图片名称 + +## 0.2 托管方案二:雨云容器服务 + +[![通过雨云一键部署](https://rainyun-apps.cn-nb1.rains3.com/materials/deploy-on-rainyun-cn.svg)](https://app.rainyun.com/apps/rca/store/6215?ref=220429) + +### 0.3 微信公众号广告:欢迎关注公众号获取最新动态和技术分享 + +图片名称 + +# 1:ZeroTier 介绍 + +`ZeroTier` 是一款强大的 P2P VPN +工具,它能让你在互联网上搭建属于自己的虚拟局域网。通过它,你可以轻松实现远程访问家中设备的需求 - 比如在公司用手机直接访问家里的 +NAS。最重要的是,设备之间是点对点直连的,无需经过中转服务器,既保证了速度,又提升了安全性。 + +它的工作原理是这样的:通过 `ZeroTier One` 客户端,在不同设备(如笔记本、手机、服务器等)之间建立 P2P 连接,即使这些设备都在 NAT +后面也没问题。它使用了 STUN 等技术,可以穿透大多数类型的 NAT,实现设备间的直接通信。如果实在无法直连,才会通过中转服务器进行通信。 + +简单来说,`ZeroTier` 就像是一个跨越互联网的"虚拟交换机",让分布在世界各地的设备,都能像在同一个局域网内一样方便地相互访问。 + +![zerotier](assets/zerotier-network.png) + +**ZeroTier 网络中的关键概念** + +`PLANET`(行星服务器):ZeroTier 网络的核心根服务器,负责网络发现和初始连接。相当于整个网络的"中枢"。 + +`MOON`(卫星服务器):用户可以自建的私有根服务器。它可以作为区域性的代理节点,帮助就近的设备更快地建立连接,提升网络性能。 + +`LEAF`(叶子节点):所有接入 ZeroTier 网络的终端设备,如电脑、手机、服务器等。这些设备通过 PLANET 和 MOON 的协调来相互发现和通信。 + +本教程将指导您搭建一个私有的 PLANET 服务器,让您完全掌控自己的 ZeroTier 网络。 + +# 2:为什么要自建PLANET 服务器 + +自建 PLANET 服务器有以下几个重要原因: + +1. 提升网络稳定性:官方服务器位于海外,国内用户访问延迟高且不稳定。自建服务器可以大幅提升连接质量。 + +2. 加快连接速度:本地化的 PLANET 服务器可以更快地帮助设备建立 P2P 连接。 + +3. 增强网络控制:自建服务器让您完全掌控网络配置,可以根据需求进行优化调整。 + +4. 提高安全性:私有化部署意味着网络流量不经过第三方服务器,更加安全可靠。 + +5. 降低依赖:避免因官方服务器故障或网络波动影响您的业务正常运行。 + +# 3:开始安装 + +## 3.1:环境准备 + +在开始安装之前,请确保您的服务器满足以下条件: + +- 服务器要求: + - 拥有公网IP地址 + - 需开放以下端口: + - 3443/tcp (管理面板,根据实际情况调整) + - 9994/tcp (ZeroTier通信,根据实际情况调整) + - 9994/udp (ZeroTier通信,根据实际情况调整) + +- 软件依赖: + - Docker (容器运行环境) + - Git (获取项目代码) + +- 系统要求: + - 推荐使用较新的Linux发行版: + - Debian 12 + - Ubuntu 20.04+ + - Rocky Linux + - 其他同类系统 + +### 3.1.1 安装git + +```bash +#debian/ubuntu等 +apt update && apt install git -y + +#centos等 +yum update && yum install git -y +``` + +### 3.1.2 安装docker + +```bash +curl -fsSL https://get.docker.com |bash +``` + +如果网络问题,导致无法安装,可以使用国内镜像安装: +请参考:[安装Docker](https://help.aliyun.com/zh/ecs/use-cases/install-and-use-docker#33f11a5f1800n) + +### 3.1.3 启动docker + +```bash +service docker start +``` + +### 3.1.4 配置docker加速镜像(可选,不配也可以) + +``` +sudo tee /etc/docker/daemon.json < zerotier-cli.bat join 网络id(就是在网页里面创建的那个网络) +200 join OK +PS C:\Windows\system32> +``` + +登录管理后台可以看到有个个新的客户端,勾选`Authorized`就行 + +![ui](assets/join_net.png) + +IP assignment 里面会出现zerotier的内网ip + +![ip](./assets/allow_devices.png) + +执行如下命令: + +``` +PS C:\Windows\system32> zerotier-cli.bat peers +200 peers + +fcbaeb9b6c 1.8.7 PLANET 52 DIRECT 16 8994 1.1.1.1/9993 +fe92971aad 1.8.7 LEAF 14 DIRECT -1 4150 2.2.2.2/9993 +PS C:\Windows\system32> +``` + +可以看到有一个 PLANTET 和 LEAF 角色,连接方式均为 DIRECT(直连) + +到这里就加入网络成功了 + +## 4.2 Linux 客户端 + +步骤如下: + +1. 安装linux客户端软件 +2. 进入目录 `/var/lib/zerotier-one` +3. 替换目录下的 `planet` 文件 +4. 重启 `zerotier-one` 服务(`service zerotier-one restart`) +5. 加入网络 `zerotier-cli join` 网络 `id` +6. 管理后台同意加入请求 +7. `zerotier-cli peers` 可以看到` planet` 角色 + +## 4.3 安卓客户端配置 + +[Zerotier 非官方安卓客户端](https://github.com/kaaass/ZerotierFix) + +## 4.4 MacOS 客户端配置 + +步骤如下: + +1. 进入 `/Library/Application\ Support/ZeroTier/One/` 目录,并替换目录下的 `planet` 文件 +2. 重启 ZeroTier-One:`cat /Library/Application\ Support/ZeroTier/One/zerotier-one.pid | sudo xargs kill` +3. 加入网络 `zerotier-cli join` 网络 `id` +4. 管理后台同意加入请求 +5. `zerotier-cli peers` 可以看到` planet` 角色 + +## 4.5 OpenWRT 客户端配置 + +步骤如下: + +1. 安装zerotier客户端 +2. 进入目录 `/etc/config/zero/planet` +3. 替换目录下的 `planet` 文件 +4. 在openwrt网页后台先关闭zerotier服务,在开启zerotier服务 +5. 在openwrt网页后台加入网络 +6. 管理后台同意加入请求 +7. 执行 `ln -s /etc/config/zero /var/lib/zerotier-one ` +8. `zerotier-cli peers` 可以看到` planet` 角色 + +## 4.6 iOS 客户端配置 + +方案一: +越狱后安装ZeroTie,然后替换`planet`文件 + +方案二: +使用Wireguard接入到ZeroTier网络 + +# 5. 管理面板SSL配置 + +管理面板的SSL支持需要自行配置,参考Nginx配置如下: + +``` +upstream zerotier { + server 127.0.0.1:3443; +} + +server { + + listen 443 ssl; + + server_name {CUSTOME_DOMAIN}; #替换自己的域名 + + # ssl证书地址 + ssl_certificate pem和或者crt文件的路径; + ssl_certificate_key key文件的路径; + + # ssl验证相关配置 + ssl_session_timeout 5m; #缓存有效期 + ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法 + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议 + ssl_prefer_server_ciphers on; #使用服务器端的首选算法 + + + location / { + proxy_pass http://zerotier; + proxy_set_header HOST $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + } +} + +server { + listen 80; + server_name {CUSTOME_DOMAIN}; #替换自己的域名 + return 301 https://$server_name$request_uri; +} +``` + +# 6. 卸载 + +```bash +docker rm -f zerotier-planet +``` + +# 7: Q&A: + +## 1. 为什么我ping不通目标机器? + +请检查防火墙设置,`Windows` 系统需要允许 `ICMP` 入站,`Linux` 同理 + +## 2. IOS客户端怎么用? + +iOS 客户端插件在这里,设备需要越狱: https://github.com/lemon4ex/ZeroTieriOSFix + +## 3. 为什么看不到官方的Planet + +该项目剔除了官方服务器,只保留了自定义的Planet节点 + +## 4. 我更换了IP需要怎么处理? + +如果IP更换了,则需要重新部署,相当于全新部署 + +## 5. PVE lxc 容器没有创建网卡 + +需要修改lxc容器的配置,同时lxc容器需要取消勾选`无特权` + +配置文件位置在`/etc/pve/lxc/{ID}.conf` + +在Proxmox7.0之前的版本添加以下内容: + +``` +lxc.cgroup.devices.allow: c 10:200 rwm +lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file +``` + +在Proxmox7.0之后的版本添加以下内容: + +``` +lxc.cgroup2.devices.allow: c 10:200 rwm +lxc.mount.entry: /dev/net/tun dev/net/tun none bind,create=file +``` + +## 6. 管理后台忘记密码怎么办: + +执行`./deploy.sh`,选择重置密码即可 + +## 7. 为什么连不上planet + +请检查防火墙,如果是阿里云、腾讯云用户,需要在对应平台后台防火墙放行端口。linux机器上也要放行,如果安装了ufw等防火墙工具。 + +## 8. 如何判断是直连还是中转 + +管理员权限执行终端,运行`zerotier-cli peers` + +``` + +69c0d507d0 - LEAF -1 RELAY +93caa675b0 1.12.2 PLANET -894 DIRECT 4142 4068 110.42.99.46/9994 +ab403e2074 1.10.2 LEAF -1 RELAY +``` + +如果你的ztaddr是REPLAY, 就说明是中转 + +## 9. 为什么我的zerotier传输不稳定 + +由于zerotier使用的是udp协议,部分地区可能对udp进行了qos, 可以考虑使用openvpn。 + +## 10.支持域名吗? + +暂不支持 + +## 11. ARM服务器可以搭建吗 + +可以 + +## 12. 支持docker-compose启动部署吗 + +参考docker-compose文件如下 + +``` +version: '3' + +services: + myztplanet: + image: xubiaolin/zerotier-planet:latest + container_name: ztplanet + ports: + - 9994:9994 + - 9994:9994/udp + - 3443:3443 + - 3000:3000 + environment: + - IP_ADDR4=[IPV4IP ADDRESS] + - IP_ADDR6= + - ZT_PORT=9994 + - API_PORT=3443 + - FILE_SERVER_PORT=3000 + volumes: + - ./data/zerotier/dist:/app/dist + - ./data/zerotier/ztncui:/app/ztncui + - ./data/zerotier/one:/var/lib/zerotier-one + - ./data/zerotier/config:/app/config + restart: unless-stopped + +``` + +# 开发计划 + +🥰您的捐助可以让开发计划的速度更快🥰 + +- [ ] 多planet支持 +- [x] 3443端口自定义支持 +- [ ] planet和controller分离部署 + +# 风险声明 + +本项目仅供学习和研究使用,不鼓励用于商业用途。我们不对任何因使用本项目而导致的任何损失负责。 + +# 类似项目 + +- [wireguard一键脚本](https://github.com/xubiaolin/wireguard-onekey) + +# 捐助和支持 + +如果觉得本项目对您有帮助,欢迎通过扫描下方赞赏码捐助项目 :) + +donate + +# 鸣谢 + +感谢以下网友投喂,你们的支持和鼓励是我不懈更新的动力 + +按时间顺序排序: + +- 随性 +- 我 +- 你好 +- Calvin +- 小猪猪的饲养员 +- 情若犹在 +- 天天星期天 +- 啊乐 +- 夏末秋至 +- **忠 +- 岸芷汀兰 +- Kimi Chen +- 匿名 +- 阳光报告旷课 +- 濂溪先生 +- Water +- 匿名 +- 匿名 +- 陆 +- 精钢葫芦娃 +- 唯 +- 王小新 +- 匿名 +- Duck不必 + +# 参考链接 + +[ZeroTier-虚拟局域网详解](https://www.glimmer.ltd/2021/3299983056/) + +[五分钟自建 ZeroTier 的 Planet/Controller](https://v2ex.com/t/799623) -> 默认用户名:`admin` -> -> 默认密码:`password` From 0a8871dbfb0a6fb8dd17d43dd839f66125c20823 Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Sat, 24 May 2025 14:42:19 +0800 Subject: [PATCH 15/53] =?UTF-8?q?feat(localApps):=20=E6=B7=BB=E5=8A=A0=20q?= =?UTF-8?q?Bittorrent-ee=20=E5=BA=94=E7=94=A8=E9=85=8D=E7=BD=AE-=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=20qBittorrent-ee=20=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E7=9A=84=20data.yml=20=E5=92=8C=20docker-compose.yml=20?= =?UTF-8?q?=E6=96=87=E4=BB=B6=20-=20=E6=B7=BB=E5=8A=A0=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E6=8F=8F=E8=BF=B0=E3=80=81=E9=85=8D=E7=BD=AE=E9=A1=B9=E3=80=81?= =?UTF-8?q?=E7=AB=AF=E5=8F=A3=E6=98=A0=E5=B0=84=E7=AD=89=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=20-=20=E5=8C=85=E5=90=AB=20x86-64=E3=80=81arm64=E3=80=81armhf?= =?UTF-8?q?=20=E5=A4=9A=E6=9E=B6=E6=9E=84=E6=94=AF=E6=8C=81=20-=20?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E4=B8=AD=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E4=BA=86=E6=8E=A8=E8=8D=90=E7=9A=84=E7=8E=AF=E5=A2=83=E5=8F=98?= =?UTF-8?q?=E9=87=8F=E5=92=8C=E6=9D=83=E9=99=90=E7=AE=A1=E7=90=86=20-=20?= =?UTF-8?q?=E9=99=84=E5=B8=A6=E8=AF=A6=E7=BB=86=E7=9A=84=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=E5=92=8C=E7=A4=BA=E4=BE=8B=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- qBittorrent-ee/5.1.0.10/data.yml | 20 ++ qBittorrent-ee/5.1.0.10/docker-compose.yml | 26 +++ qBittorrent-ee/README.md | 242 +++++++++++++++++++++ qBittorrent-ee/data.yml | 19 ++ qBittorrent-ee/latest/data.yml | 20 ++ qBittorrent-ee/latest/docker-compose.yml | 26 +++ qBittorrent-ee/logo.png | Bin 0 -> 5426 bytes 7 files changed, 353 insertions(+) create mode 100644 qBittorrent-ee/5.1.0.10/data.yml create mode 100644 qBittorrent-ee/5.1.0.10/docker-compose.yml create mode 100644 qBittorrent-ee/README.md create mode 100644 qBittorrent-ee/data.yml create mode 100644 qBittorrent-ee/latest/data.yml create mode 100644 qBittorrent-ee/latest/docker-compose.yml create mode 100644 qBittorrent-ee/logo.png diff --git a/qBittorrent-ee/5.1.0.10/data.yml b/qBittorrent-ee/5.1.0.10/data.yml new file mode 100644 index 000000000..aed19682c --- /dev/null +++ b/qBittorrent-ee/5.1.0.10/data.yml @@ -0,0 +1,20 @@ +additionalProperties: + formFields: + - default: 40118 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: WebUI Port + labelZh: 网页端口 + required: true + rule: paramPort + type: number + + - default: 40119 + edit: true + envKey: PANEL_APP_PORT_PEER + labelEn: Peer Port + labelZh: BT端口 + required: true + rule: paramPort + type: number + diff --git a/qBittorrent-ee/5.1.0.10/docker-compose.yml b/qBittorrent-ee/5.1.0.10/docker-compose.yml new file mode 100644 index 000000000..64a11c28e --- /dev/null +++ b/qBittorrent-ee/5.1.0.10/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true + +services: + qbittorrent: + container_name: ${CONTAINER_NAME} + environment: + - PUID=1000 + - PGID=1000 + - TZ=Asia/Shanghai + - WEBUIPORT=${PANEL_APP_PORT_HTTP} + - ENABLE_DOWNLOADS_PERM_FIX=true + image: superng6/qbittorrentee:5.1.0.10 + labels: + createdBy: "Apps" + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_PEER}:6881 + - ${PANEL_APP_PORT_PEER}:6881/udp + - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + restart: always + volumes: + - ./data/config:/config + - ./data/downloads:/downloads diff --git a/qBittorrent-ee/README.md b/qBittorrent-ee/README.md new file mode 100644 index 000000000..ba39042e8 --- /dev/null +++ b/qBittorrent-ee/README.md @@ -0,0 +1,242 @@ +## 支持群晖、威联通等x64、arm64、arm32平台nas + +博客:https://sleele.com/2020/01/09/docker-qbittorrent增强版,反迅雷吸血 +GitHub:https://github.com/SuperNG6/Docker-qBittorrent-Enhanced-Edition + +[https://hub.docker.com/r/superng6/qbittorrentee](https://hub.docker.com/r/superng6/qbittorrentee) + +### 感谢以下项目: + +[https://github.com/qbittorrent/qBittorrent](https://github.com/qbittorrent/qBittorrent) +[https://github.com/c0re100/qBittorrent-Enhanced-Edition](https://github.com/c0re100/qBittorrent-Enhanced-Edition) +[https://github.com/ngosang/trackerslist]( https://github.com/ngosang/trackerslist) + +### 其他项目 Docker qBittorrent 中国优化版 + +https://github.com/SuperNG6/docker-qbittorrent +https://hub.docker.com/r/superng6/qbittorrent + +# 本镜像的一些优点 + +- 全平台架构`x86-64`、`arm64`、`armhf` +- 静态编译qbittorrentee +- 做了usermapping,使用你自己的账户权限来运行,这点对于群辉来说尤其重要 +- 纯qBittorrent-Enhanced-Edition,没有包含多于的服务 +- 默认上海时区 Asia/Shanghai +- qBittorrent-Enhanced-Edition屏蔽吸血客户端 +- 内置优化过的conf文件,减少手工设置 +- 默认中文 +- 内置400条tracker方便在连接GitHub出错时使用 +- 自动向所有tracker服务器汇报,加快下载速度,提升连接数 +- 提供了自定义用户名密码功能 + +# Architecture + +### qBittorrent Enhanced Edition latest + +| Architecture | Tag | +|--------------|--------| +| x86-64 | latest | +| arm64 | latest | +| armhf | latest | + +# Changelogs + +## 2025/03/11 + + 1、更新 base image,增加curl + 2、新增 ENABLE_DOWNLOADS_PERM_FIX变量(默认`ENABLE_DOWNLOADS_PERM_FIX=true`): + 当`=true`时,则对`/downloads`文件夹进行权限修复; + 当`=false`时,则不对`/downloads`文件夹进行权限修复; + +## 2025/02/18 + + 1、更新 base image + 2、回退 s6-overlay V2,V3太复杂了 + 3、默认对/config /downloads 执行chown权限设置,避免部分小白遇到读写问题 + +## 2024/09/10 + + 1、更新 base image + 2、更新 s6-overlay V3 @ssfdust + 3、增加 healtcheck script @ssfdust + + 新增环境变量 @ssfdust + WEB_PASSWORD=veryscrect web密码环境变量 + WEB_PASSWORD_FILE=/path/to/secrets web密码文件环境变量 + WEB_PBKDF2_PASSWORD=@Bytes(...) web密码密文环境变量 + WEB_PBKDF2_PASSWORD_FILE=/path/to/secrets web密码密文文件环境变量 + + 4、感谢 @ssfdust PR + +## 2021/04/15 + + 1、增加了大量历史版本,详情请见 docker hub tags + https://hub.docker.com/r/superng6/qbittorrentee/tags?page=1&ordering=last_updated + +## 2021/02/07 + + 1、qBittorrent Enhanced Edition update to v4.3.3.10 + +## 2020/11/30 + + 1、自动同步更新最新版本qBittorrent Enhanced Edition + +## 2020/11/06 + + 1、qBittorrent Enhanced Edition update to v4.3.0.10 + 2、x86-64、arm64、armhf由自编译转为官方静态编译版 + 3、减小镜像体积 + +## 2020/09/08 + + 1、qBittorrent Enhanced Edition update to v4.2.5.16 + +## 2020/09/07 + + 1、qBittorrent Enhanced Edition update to v4.2.5.15 + 2、libtorrent update to 1.2.10-0f0afec8c (Fix #127) + 3、Optional Button for re-enable Torrent IP Filter (Tools>Enable Torrent IP Filter). + +## 2020/08/21 + + 1、更新LIBTORRENT v1.2.8,QBITTORRENT v4.2.5.13 + 2、更新base image + 3、没别的更新了,已经很完善了 + +## 2020/01/13 + + 1、构建全平台架构镜像`x86-64`、`arm64`、`armhf` + 2、设置磁盘缓存,默认参数`x86-64:512M`、`arm64:128M`、`armhf:64M` + +## 2020/01/12 + + 1、默认缓存设置参数为 x86-64:512M、arm64:64M,提升下载性能 + 2、除了自动更新tracker外,内置400多条tracker,默认启用,以便于在GitHub连接有问题时使用 + +## 2020/01/06 + + 1、修改conf,优化参数,减少手动设置 + 2、自动下载并更新tracker list + 3、默认中文 + 4、基于qBittorrent-Enhanced-Edition 4.1.9.15 最新版的SSL有问题 + +# 内外网访问 + +webui端口不一致的情况下,请手动关闭如下选项(默认配置已关闭,如未关闭请手动关闭) +https://cdn.jsdelivr.net/gh/SuperNG6/pic@master/uPic/2021-02-02/CIwC4l.png +该操作等价于修改配置文件中的如下选项 + +```` +WebUI\CSRFProtection=false +WebUI\ClickjackingProtection=false +WebUI\HostHeaderValidation=false +```` + +## 关于群晖 + +群晖用户请使用你当前的用户SSH进系统,输入 ``id 你的用户id`` 获取到你的UID和GID并输入进去 + +![rNyFsw](https://cdn.jsdelivr.net/gh/SuperNG6/pic@master/uPic/rNyFsw.jpg) + +### 权限管理设置 + +对你的``docker配置文件夹的根目录``进行如图操作,``你的下载文件夹的根目录``进行相似操作,去掉``管理``这个权限,只给``写入``, +``读取``权限 +![HEmuK1](https://cdn.jsdelivr.net/gh/SuperNG6/pic@master/uPic/HEmuK1.jpg) + +### docker命令行设置: + +1. 创建qbittorrent容器 + +```` +docker create \ + --name=qbittorrentee \ + -e WEBUIPORT=8080 \ + -e PUID=1026 \ + -e PGID=100 \ + -e TZ=Asia/Shanghai \ + -e ENABLE_DOWNLOADS_PERM_FIX=true \ + -p 6881:6881 \ + -p 6881:6881/udp \ + -p 8080:8080 \ + -v /配置文件位置:/config \ + -v /下载位置:/downloads \ + --restart unless-stopped \ + superng6/qbittorrentee:latest +```` + +### docker-compose + +```` +version: "3" +services: + qbittorrentee: + image: superng6/qbittorrentee + container_name: qbittorrentee + environment: + - PUID=1026 + - PGID=100 + - TZ=Asia/Shanghai + - WEBUIPORT=8080 + - ENABLE_DOWNLOADS_PERM_FIX=true + volumes: + - ./qbittorrentee/config:/config + - ./qbittorrentee/downloads:/downloads + ports: + - 6881:6881 + - 6881:6881/udp + - 8080:8080 + restart: unless-stopped +```` + +### 变量: + +| 参数 | 说明 | +|-------------------------------------|:-----------------------------------------------------------------------------------------| +| `--name=qbittorrentee` | 容器名 | +| `-p 8080:8080` | web访问端口 [IP:8080](IP:8080);(默认用户名:admin;默认密码为随机生成,首次启动容器请查看日志);此端口需与容器端口和环境变量保持一致,否则无法访问 | +| `-p 6881:6881` | BT下载监听端口 | +| `-p 6881:6881/udp` | BT下载DHT监听端口 +| `-v /配置文件位置:/config` | qBittorrent配置文件位置 | +| `-v /下载位置:/downloads` | qBittorrent下载位置 | +| `-e WEBUIPORT=8080` | web访问端口环境变量 | +| `-e ENABLE_DOWNLOADS_PERM_FIX=true` | /downloads文件夹权限修复 | +| `-e TZ=Asia/Shanghai` | 系统时区设置,默认为Asia/Shanghai | + +### 群晖docker设置: + +1. 卷 + +| 参数 | 说明 | +|---------------------|:------------------| +| `本地文件夹1:/downloads` | qBittorrent下载位置 | +| `本地文件夹2:/config` | qBittorrent配置文件位置 | + +2. 端口 + +| 参数 | 说明 | +|------------------|:-----------------------------------------------------------------------------------| +| `本地端口1:6881` | BT下载监听端口 | +| `本地端口2:6881/udp` | BT下载DHT监听端口 | +| `本地端口3:8080` | web访问端口 [IP:8080](IP:8080);(默认用户名:admin;默认密码:adminadmin);此端口需与容器端口和环境变量保持一致,否则无法访问 | + +3. 环境变量: + +| 参数 | 说明 | +|-------------------------------------|:-------------------------------| +| `TZ=Asia/Shanghai` | 系统时区设置,默认为Asia/Shanghai | +| `WEBUIPORT=8080` | web访问端口环境变量 | +| `-e ENABLE_DOWNLOADS_PERM_FIX=true` | /downloads文件夹权限修复,默认开启,false关闭 | + +### 搜索: + +#### 开启:视图-搜索引擎: + +##### 说明: + +1. 自带 [http://plugins.qbittorrent.org/](http://plugins.qbittorrent.org/) 部分搜索插件 +2. 全新安装默认只开启官方自带部分和一个中文搜索插件。其它可到 视图-搜索引擎-界面右侧搜索-搜索插件-启动栏(双击)开启 +3. 一些搜索插件网站需过墙才能用 +4. jackett搜索插件需配置jackett.json(位置config/qBittorrent/data/nova3/engines) + ,插件需配合jackett服务的api_key。可自行搭建docker版jackett(例如linuxserver/jackett)。 diff --git a/qBittorrent-ee/data.yml b/qBittorrent-ee/data.yml new file mode 100644 index 000000000..42fa48492 --- /dev/null +++ b/qBittorrent-ee/data.yml @@ -0,0 +1,19 @@ +name: qBittorrent-ee +tags: + - 工具 +title: qBittorrent增强版,防吸血 +description: qBittorrent enhanced version, anti-blood*ing +additionalProperties: + key: qBittorrent-ee + name: qBittorrent-ee + tags: + - Tool + shortDescZh: qBittorrent增强版,防吸血 + shortDescEn: qBittorrent enhanced version, anti-blood*ing + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://github.com/SuperNG6/Docker-qBittorrent-Enhanced-Edition + github: https://github.com/SuperNG6/Docker-qBittorrent-Enhanced-Edition + document: https://github.com/SuperNG6/Docker-qBittorrent-Enhanced-Edition diff --git a/qBittorrent-ee/latest/data.yml b/qBittorrent-ee/latest/data.yml new file mode 100644 index 000000000..aed19682c --- /dev/null +++ b/qBittorrent-ee/latest/data.yml @@ -0,0 +1,20 @@ +additionalProperties: + formFields: + - default: 40118 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: WebUI Port + labelZh: 网页端口 + required: true + rule: paramPort + type: number + + - default: 40119 + edit: true + envKey: PANEL_APP_PORT_PEER + labelEn: Peer Port + labelZh: BT端口 + required: true + rule: paramPort + type: number + diff --git a/qBittorrent-ee/latest/docker-compose.yml b/qBittorrent-ee/latest/docker-compose.yml new file mode 100644 index 000000000..83ee5c05d --- /dev/null +++ b/qBittorrent-ee/latest/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true + +services: + qbittorrent: + container_name: ${CONTAINER_NAME} + environment: + - PUID=1000 + - PGID=1000 + - TZ=Asia/Shanghai + - WEBUIPORT=${PANEL_APP_PORT_HTTP} + - ENABLE_DOWNLOADS_PERM_FIX=true + image: superng6/qbittorrentee:latest + labels: + createdBy: "Apps" + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_PEER}:6881 + - ${PANEL_APP_PORT_PEER}:6881/udp + - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + restart: always + volumes: + - ./data/config:/config + - ./data/downloads:/downloads diff --git a/qBittorrent-ee/logo.png b/qBittorrent-ee/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8d9d88edd3e78fb87a4f6e2b6a8fccb31225a19c GIT binary patch literal 5426 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 Date: Sat, 24 May 2025 15:04:10 +0800 Subject: [PATCH 16/53] =?UTF-8?q?refactor:=20=E5=88=A0=E9=99=A4=20qBittorr?= =?UTF-8?q?ent-ee=20=E5=BA=94=E7=94=A8=E6=A8=A1=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 删除了 qBittorrent-ee应用的多个版本配置文件和文档: - 移除 5.1.0.10 和 latest 版本的 data.yml 和 docker-compose.yml - 删除应用基本信息文件 data.yml - 移除 README.md 文档 此次更改将 qBittorrent-ee 应用从项目中完全移除。 --- qBittorrent-ee/5.1.0.10/data.yml | 20 -- qBittorrent-ee/5.1.0.10/docker-compose.yml | 26 --- qBittorrent-ee/README.md | 242 --------------------- qBittorrent-ee/data.yml | 19 -- qBittorrent-ee/latest/data.yml | 20 -- qBittorrent-ee/latest/docker-compose.yml | 26 --- qBittorrent-ee/logo.png | Bin 5426 -> 0 bytes 7 files changed, 353 deletions(-) delete mode 100644 qBittorrent-ee/5.1.0.10/data.yml delete mode 100644 qBittorrent-ee/5.1.0.10/docker-compose.yml delete mode 100644 qBittorrent-ee/README.md delete mode 100644 qBittorrent-ee/data.yml delete mode 100644 qBittorrent-ee/latest/data.yml delete mode 100644 qBittorrent-ee/latest/docker-compose.yml delete mode 100644 qBittorrent-ee/logo.png diff --git a/qBittorrent-ee/5.1.0.10/data.yml b/qBittorrent-ee/5.1.0.10/data.yml deleted file mode 100644 index aed19682c..000000000 --- a/qBittorrent-ee/5.1.0.10/data.yml +++ /dev/null @@ -1,20 +0,0 @@ -additionalProperties: - formFields: - - default: 40118 - edit: true - envKey: PANEL_APP_PORT_HTTP - labelEn: WebUI Port - labelZh: 网页端口 - required: true - rule: paramPort - type: number - - - default: 40119 - edit: true - envKey: PANEL_APP_PORT_PEER - labelEn: Peer Port - labelZh: BT端口 - required: true - rule: paramPort - type: number - diff --git a/qBittorrent-ee/5.1.0.10/docker-compose.yml b/qBittorrent-ee/5.1.0.10/docker-compose.yml deleted file mode 100644 index 64a11c28e..000000000 --- a/qBittorrent-ee/5.1.0.10/docker-compose.yml +++ /dev/null @@ -1,26 +0,0 @@ -networks: - 1panel-network: - external: true - -services: - qbittorrent: - container_name: ${CONTAINER_NAME} - environment: - - PUID=1000 - - PGID=1000 - - TZ=Asia/Shanghai - - WEBUIPORT=${PANEL_APP_PORT_HTTP} - - ENABLE_DOWNLOADS_PERM_FIX=true - image: superng6/qbittorrentee:5.1.0.10 - labels: - createdBy: "Apps" - networks: - - 1panel-network - ports: - - ${PANEL_APP_PORT_PEER}:6881 - - ${PANEL_APP_PORT_PEER}:6881/udp - - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} - restart: always - volumes: - - ./data/config:/config - - ./data/downloads:/downloads diff --git a/qBittorrent-ee/README.md b/qBittorrent-ee/README.md deleted file mode 100644 index ba39042e8..000000000 --- a/qBittorrent-ee/README.md +++ /dev/null @@ -1,242 +0,0 @@ -## 支持群晖、威联通等x64、arm64、arm32平台nas - -博客:https://sleele.com/2020/01/09/docker-qbittorrent增强版,反迅雷吸血 -GitHub:https://github.com/SuperNG6/Docker-qBittorrent-Enhanced-Edition - -[https://hub.docker.com/r/superng6/qbittorrentee](https://hub.docker.com/r/superng6/qbittorrentee) - -### 感谢以下项目: - -[https://github.com/qbittorrent/qBittorrent](https://github.com/qbittorrent/qBittorrent) -[https://github.com/c0re100/qBittorrent-Enhanced-Edition](https://github.com/c0re100/qBittorrent-Enhanced-Edition) -[https://github.com/ngosang/trackerslist]( https://github.com/ngosang/trackerslist) - -### 其他项目 Docker qBittorrent 中国优化版 - -https://github.com/SuperNG6/docker-qbittorrent -https://hub.docker.com/r/superng6/qbittorrent - -# 本镜像的一些优点 - -- 全平台架构`x86-64`、`arm64`、`armhf` -- 静态编译qbittorrentee -- 做了usermapping,使用你自己的账户权限来运行,这点对于群辉来说尤其重要 -- 纯qBittorrent-Enhanced-Edition,没有包含多于的服务 -- 默认上海时区 Asia/Shanghai -- qBittorrent-Enhanced-Edition屏蔽吸血客户端 -- 内置优化过的conf文件,减少手工设置 -- 默认中文 -- 内置400条tracker方便在连接GitHub出错时使用 -- 自动向所有tracker服务器汇报,加快下载速度,提升连接数 -- 提供了自定义用户名密码功能 - -# Architecture - -### qBittorrent Enhanced Edition latest - -| Architecture | Tag | -|--------------|--------| -| x86-64 | latest | -| arm64 | latest | -| armhf | latest | - -# Changelogs - -## 2025/03/11 - - 1、更新 base image,增加curl - 2、新增 ENABLE_DOWNLOADS_PERM_FIX变量(默认`ENABLE_DOWNLOADS_PERM_FIX=true`): - 当`=true`时,则对`/downloads`文件夹进行权限修复; - 当`=false`时,则不对`/downloads`文件夹进行权限修复; - -## 2025/02/18 - - 1、更新 base image - 2、回退 s6-overlay V2,V3太复杂了 - 3、默认对/config /downloads 执行chown权限设置,避免部分小白遇到读写问题 - -## 2024/09/10 - - 1、更新 base image - 2、更新 s6-overlay V3 @ssfdust - 3、增加 healtcheck script @ssfdust - - 新增环境变量 @ssfdust - WEB_PASSWORD=veryscrect web密码环境变量 - WEB_PASSWORD_FILE=/path/to/secrets web密码文件环境变量 - WEB_PBKDF2_PASSWORD=@Bytes(...) web密码密文环境变量 - WEB_PBKDF2_PASSWORD_FILE=/path/to/secrets web密码密文文件环境变量 - - 4、感谢 @ssfdust PR - -## 2021/04/15 - - 1、增加了大量历史版本,详情请见 docker hub tags - https://hub.docker.com/r/superng6/qbittorrentee/tags?page=1&ordering=last_updated - -## 2021/02/07 - - 1、qBittorrent Enhanced Edition update to v4.3.3.10 - -## 2020/11/30 - - 1、自动同步更新最新版本qBittorrent Enhanced Edition - -## 2020/11/06 - - 1、qBittorrent Enhanced Edition update to v4.3.0.10 - 2、x86-64、arm64、armhf由自编译转为官方静态编译版 - 3、减小镜像体积 - -## 2020/09/08 - - 1、qBittorrent Enhanced Edition update to v4.2.5.16 - -## 2020/09/07 - - 1、qBittorrent Enhanced Edition update to v4.2.5.15 - 2、libtorrent update to 1.2.10-0f0afec8c (Fix #127) - 3、Optional Button for re-enable Torrent IP Filter (Tools>Enable Torrent IP Filter). - -## 2020/08/21 - - 1、更新LIBTORRENT v1.2.8,QBITTORRENT v4.2.5.13 - 2、更新base image - 3、没别的更新了,已经很完善了 - -## 2020/01/13 - - 1、构建全平台架构镜像`x86-64`、`arm64`、`armhf` - 2、设置磁盘缓存,默认参数`x86-64:512M`、`arm64:128M`、`armhf:64M` - -## 2020/01/12 - - 1、默认缓存设置参数为 x86-64:512M、arm64:64M,提升下载性能 - 2、除了自动更新tracker外,内置400多条tracker,默认启用,以便于在GitHub连接有问题时使用 - -## 2020/01/06 - - 1、修改conf,优化参数,减少手动设置 - 2、自动下载并更新tracker list - 3、默认中文 - 4、基于qBittorrent-Enhanced-Edition 4.1.9.15 最新版的SSL有问题 - -# 内外网访问 - -webui端口不一致的情况下,请手动关闭如下选项(默认配置已关闭,如未关闭请手动关闭) -https://cdn.jsdelivr.net/gh/SuperNG6/pic@master/uPic/2021-02-02/CIwC4l.png -该操作等价于修改配置文件中的如下选项 - -```` -WebUI\CSRFProtection=false -WebUI\ClickjackingProtection=false -WebUI\HostHeaderValidation=false -```` - -## 关于群晖 - -群晖用户请使用你当前的用户SSH进系统,输入 ``id 你的用户id`` 获取到你的UID和GID并输入进去 - -![rNyFsw](https://cdn.jsdelivr.net/gh/SuperNG6/pic@master/uPic/rNyFsw.jpg) - -### 权限管理设置 - -对你的``docker配置文件夹的根目录``进行如图操作,``你的下载文件夹的根目录``进行相似操作,去掉``管理``这个权限,只给``写入``, -``读取``权限 -![HEmuK1](https://cdn.jsdelivr.net/gh/SuperNG6/pic@master/uPic/HEmuK1.jpg) - -### docker命令行设置: - -1. 创建qbittorrent容器 - -```` -docker create \ - --name=qbittorrentee \ - -e WEBUIPORT=8080 \ - -e PUID=1026 \ - -e PGID=100 \ - -e TZ=Asia/Shanghai \ - -e ENABLE_DOWNLOADS_PERM_FIX=true \ - -p 6881:6881 \ - -p 6881:6881/udp \ - -p 8080:8080 \ - -v /配置文件位置:/config \ - -v /下载位置:/downloads \ - --restart unless-stopped \ - superng6/qbittorrentee:latest -```` - -### docker-compose - -```` -version: "3" -services: - qbittorrentee: - image: superng6/qbittorrentee - container_name: qbittorrentee - environment: - - PUID=1026 - - PGID=100 - - TZ=Asia/Shanghai - - WEBUIPORT=8080 - - ENABLE_DOWNLOADS_PERM_FIX=true - volumes: - - ./qbittorrentee/config:/config - - ./qbittorrentee/downloads:/downloads - ports: - - 6881:6881 - - 6881:6881/udp - - 8080:8080 - restart: unless-stopped -```` - -### 变量: - -| 参数 | 说明 | -|-------------------------------------|:-----------------------------------------------------------------------------------------| -| `--name=qbittorrentee` | 容器名 | -| `-p 8080:8080` | web访问端口 [IP:8080](IP:8080);(默认用户名:admin;默认密码为随机生成,首次启动容器请查看日志);此端口需与容器端口和环境变量保持一致,否则无法访问 | -| `-p 6881:6881` | BT下载监听端口 | -| `-p 6881:6881/udp` | BT下载DHT监听端口 -| `-v /配置文件位置:/config` | qBittorrent配置文件位置 | -| `-v /下载位置:/downloads` | qBittorrent下载位置 | -| `-e WEBUIPORT=8080` | web访问端口环境变量 | -| `-e ENABLE_DOWNLOADS_PERM_FIX=true` | /downloads文件夹权限修复 | -| `-e TZ=Asia/Shanghai` | 系统时区设置,默认为Asia/Shanghai | - -### 群晖docker设置: - -1. 卷 - -| 参数 | 说明 | -|---------------------|:------------------| -| `本地文件夹1:/downloads` | qBittorrent下载位置 | -| `本地文件夹2:/config` | qBittorrent配置文件位置 | - -2. 端口 - -| 参数 | 说明 | -|------------------|:-----------------------------------------------------------------------------------| -| `本地端口1:6881` | BT下载监听端口 | -| `本地端口2:6881/udp` | BT下载DHT监听端口 | -| `本地端口3:8080` | web访问端口 [IP:8080](IP:8080);(默认用户名:admin;默认密码:adminadmin);此端口需与容器端口和环境变量保持一致,否则无法访问 | - -3. 环境变量: - -| 参数 | 说明 | -|-------------------------------------|:-------------------------------| -| `TZ=Asia/Shanghai` | 系统时区设置,默认为Asia/Shanghai | -| `WEBUIPORT=8080` | web访问端口环境变量 | -| `-e ENABLE_DOWNLOADS_PERM_FIX=true` | /downloads文件夹权限修复,默认开启,false关闭 | - -### 搜索: - -#### 开启:视图-搜索引擎: - -##### 说明: - -1. 自带 [http://plugins.qbittorrent.org/](http://plugins.qbittorrent.org/) 部分搜索插件 -2. 全新安装默认只开启官方自带部分和一个中文搜索插件。其它可到 视图-搜索引擎-界面右侧搜索-搜索插件-启动栏(双击)开启 -3. 一些搜索插件网站需过墙才能用 -4. jackett搜索插件需配置jackett.json(位置config/qBittorrent/data/nova3/engines) - ,插件需配合jackett服务的api_key。可自行搭建docker版jackett(例如linuxserver/jackett)。 diff --git a/qBittorrent-ee/data.yml b/qBittorrent-ee/data.yml deleted file mode 100644 index 42fa48492..000000000 --- a/qBittorrent-ee/data.yml +++ /dev/null @@ -1,19 +0,0 @@ -name: qBittorrent-ee -tags: - - 工具 -title: qBittorrent增强版,防吸血 -description: qBittorrent enhanced version, anti-blood*ing -additionalProperties: - key: qBittorrent-ee - name: qBittorrent-ee - tags: - - Tool - shortDescZh: qBittorrent增强版,防吸血 - shortDescEn: qBittorrent enhanced version, anti-blood*ing - type: tool - crossVersionUpdate: true - limit: 0 - recommend: 0 - website: https://github.com/SuperNG6/Docker-qBittorrent-Enhanced-Edition - github: https://github.com/SuperNG6/Docker-qBittorrent-Enhanced-Edition - document: https://github.com/SuperNG6/Docker-qBittorrent-Enhanced-Edition diff --git a/qBittorrent-ee/latest/data.yml b/qBittorrent-ee/latest/data.yml deleted file mode 100644 index aed19682c..000000000 --- a/qBittorrent-ee/latest/data.yml +++ /dev/null @@ -1,20 +0,0 @@ -additionalProperties: - formFields: - - default: 40118 - edit: true - envKey: PANEL_APP_PORT_HTTP - labelEn: WebUI Port - labelZh: 网页端口 - required: true - rule: paramPort - type: number - - - default: 40119 - edit: true - envKey: PANEL_APP_PORT_PEER - labelEn: Peer Port - labelZh: BT端口 - required: true - rule: paramPort - type: number - diff --git a/qBittorrent-ee/latest/docker-compose.yml b/qBittorrent-ee/latest/docker-compose.yml deleted file mode 100644 index 83ee5c05d..000000000 --- a/qBittorrent-ee/latest/docker-compose.yml +++ /dev/null @@ -1,26 +0,0 @@ -networks: - 1panel-network: - external: true - -services: - qbittorrent: - container_name: ${CONTAINER_NAME} - environment: - - PUID=1000 - - PGID=1000 - - TZ=Asia/Shanghai - - WEBUIPORT=${PANEL_APP_PORT_HTTP} - - ENABLE_DOWNLOADS_PERM_FIX=true - image: superng6/qbittorrentee:latest - labels: - createdBy: "Apps" - networks: - - 1panel-network - ports: - - ${PANEL_APP_PORT_PEER}:6881 - - ${PANEL_APP_PORT_PEER}:6881/udp - - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} - restart: always - volumes: - - ./data/config:/config - - ./data/downloads:/downloads diff --git a/qBittorrent-ee/logo.png b/qBittorrent-ee/logo.png deleted file mode 100644 index 8d9d88edd3e78fb87a4f6e2b6a8fccb31225a19c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5426 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 Date: Sat, 24 May 2025 20:35:39 +0800 Subject: [PATCH 17/53] =?UTF-8?q?network(xunlei):=20=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E7=BD=91=E7=BB=9C=E6=A8=A1=E5=BC=8F=E5=92=8C=E7=AB=AF=E5=8F=A3?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除 networks 部分 - 将 network_mode 设置为 host - 注释掉 ports 部分 --- xunlei/3.20.2/docker-compose.yml | 13 ++++--------- xunlei/latest/docker-compose.yml | 13 ++++--------- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/xunlei/3.20.2/docker-compose.yml b/xunlei/3.20.2/docker-compose.yml index 52ad30da5..c60faebd4 100644 --- a/xunlei/3.20.2/docker-compose.yml +++ b/xunlei/3.20.2/docker-compose.yml @@ -1,7 +1,3 @@ -networks: - 1panel-network: - external: true - services: xunlei: container_name: ${CONTAINER_NAME} @@ -19,12 +15,11 @@ services: image: cnk3x/xunlei:v3.20.2 labels: createdBy: "Apps" - networks: - - 1panel-network - ports: - - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + network_mode: host + # ports: + # - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} privileged: true restart: always volumes: - ./data/data:/xunlei/data - - ./data/downloads:/xunlei/downloads + - ./data/downloads:/xunlei/downloads \ No newline at end of file diff --git a/xunlei/latest/docker-compose.yml b/xunlei/latest/docker-compose.yml index 1d054bd4c..567fbf924 100644 --- a/xunlei/latest/docker-compose.yml +++ b/xunlei/latest/docker-compose.yml @@ -1,7 +1,3 @@ -networks: - 1panel-network: - external: true - services: xunlei: container_name: ${CONTAINER_NAME} @@ -19,12 +15,11 @@ services: image: cnk3x/xunlei:latest labels: createdBy: "Apps" - networks: - - 1panel-network - ports: - - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + network_mode: host + # ports: + # - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} privileged: true restart: always volumes: - ./data/data:/xunlei/data - - ./data/downloads:/xunlei/downloads + - ./data/downloads:/xunlei/downloads \ No newline at end of file From 0a511f2b7c545dae493c9efc42ee332dd358701a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 01:11:59 +0000 Subject: [PATCH 18/53] chore(deps): update b3log/siyuan docker tag to v3.1.31 --- siyuan/3.1.30/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/siyuan/3.1.30/docker-compose.yml b/siyuan/3.1.30/docker-compose.yml index a34b991a9..394ac48c6 100644 --- a/siyuan/3.1.30/docker-compose.yml +++ b/siyuan/3.1.30/docker-compose.yml @@ -10,7 +10,7 @@ services: environment: - RUN_IN_CONTAINER=true - TZ=Asia/Shanghai - image: b3log/siyuan:v3.1.30 + image: b3log/siyuan:v3.1.31 labels: createdBy: Apps networks: From 490757e0cf73e9bdc6795029db067a6d3115c657 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 01:12:03 +0000 Subject: [PATCH 19/53] chore(deps): update jxxghp/moviepilot-v2 docker tag to v2.5.1 --- movie-pilot/2.4.9/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/movie-pilot/2.4.9/docker-compose.yml b/movie-pilot/2.4.9/docker-compose.yml index b75c6bd6e..72c52b114 100644 --- a/movie-pilot/2.4.9/docker-compose.yml +++ b/movie-pilot/2.4.9/docker-compose.yml @@ -13,7 +13,7 @@ services: - TZ=Asia/Shanghai - SUPERUSER=${SUPERUSER} - image: jxxghp/moviepilot-v2:2.4.9 + image: jxxghp/moviepilot-v2:2.5.1 labels: createdBy: Apps networks: From 4889922e1700457ce3eef42c9cc5bc61050c7dd5 Mon Sep 17 00:00:00 2001 From: github-action update-app-version Date: Fri, 30 May 2025 01:12:12 +0000 Subject: [PATCH 20/53] Update app version [skip ci] --- siyuan/{3.1.30 => 3.1.31}/data.yml | 0 siyuan/{3.1.30 => 3.1.31}/docker-compose.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename siyuan/{3.1.30 => 3.1.31}/data.yml (100%) rename siyuan/{3.1.30 => 3.1.31}/docker-compose.yml (100%) diff --git a/siyuan/3.1.30/data.yml b/siyuan/3.1.31/data.yml similarity index 100% rename from siyuan/3.1.30/data.yml rename to siyuan/3.1.31/data.yml diff --git a/siyuan/3.1.30/docker-compose.yml b/siyuan/3.1.31/docker-compose.yml similarity index 100% rename from siyuan/3.1.30/docker-compose.yml rename to siyuan/3.1.31/docker-compose.yml From a089a82c993a936be12103679bf9be1478a6aa66 Mon Sep 17 00:00:00 2001 From: github-action update-app-version Date: Fri, 30 May 2025 01:12:16 +0000 Subject: [PATCH 21/53] Update app version [skip ci] --- movie-pilot/{2.4.9 => 2.5.1}/data.yml | 0 movie-pilot/{2.4.9 => 2.5.1}/docker-compose.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename movie-pilot/{2.4.9 => 2.5.1}/data.yml (100%) rename movie-pilot/{2.4.9 => 2.5.1}/docker-compose.yml (100%) diff --git a/movie-pilot/2.4.9/data.yml b/movie-pilot/2.5.1/data.yml similarity index 100% rename from movie-pilot/2.4.9/data.yml rename to movie-pilot/2.5.1/data.yml diff --git a/movie-pilot/2.4.9/docker-compose.yml b/movie-pilot/2.5.1/docker-compose.yml similarity index 100% rename from movie-pilot/2.4.9/docker-compose.yml rename to movie-pilot/2.5.1/docker-compose.yml From 5141a42ca34ec77e6bd59de6924ead8f76a45113 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 30 May 2025 11:51:50 +0000 Subject: [PATCH 22/53] chore(deps): update jxxghp/moviepilot-v2 docker tag to v2.5.2 --- movie-pilot/2.5.1/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/movie-pilot/2.5.1/docker-compose.yml b/movie-pilot/2.5.1/docker-compose.yml index 72c52b114..bd31d8913 100644 --- a/movie-pilot/2.5.1/docker-compose.yml +++ b/movie-pilot/2.5.1/docker-compose.yml @@ -13,7 +13,7 @@ services: - TZ=Asia/Shanghai - SUPERUSER=${SUPERUSER} - image: jxxghp/moviepilot-v2:2.5.1 + image: jxxghp/moviepilot-v2:2.5.2 labels: createdBy: Apps networks: From b032c04b99ebf5f207c608156943e4dcf6d9018a Mon Sep 17 00:00:00 2001 From: github-action update-app-version Date: Fri, 30 May 2025 11:52:07 +0000 Subject: [PATCH 23/53] Update app version [skip ci] --- movie-pilot/{2.5.1 => 2.5.2}/data.yml | 0 movie-pilot/{2.5.1 => 2.5.2}/docker-compose.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename movie-pilot/{2.5.1 => 2.5.2}/data.yml (100%) rename movie-pilot/{2.5.1 => 2.5.2}/docker-compose.yml (100%) diff --git a/movie-pilot/2.5.1/data.yml b/movie-pilot/2.5.2/data.yml similarity index 100% rename from movie-pilot/2.5.1/data.yml rename to movie-pilot/2.5.2/data.yml diff --git a/movie-pilot/2.5.1/docker-compose.yml b/movie-pilot/2.5.2/docker-compose.yml similarity index 100% rename from movie-pilot/2.5.1/docker-compose.yml rename to movie-pilot/2.5.2/docker-compose.yml From 2d511bac1bf04728eb12d894d02221ba4e672a77 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 19:25:07 +0000 Subject: [PATCH 24/53] chore(deps): update linuxserver/syncthing docker tag to v1.29.7 --- syncthing/1.29.6/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syncthing/1.29.6/docker-compose.yml b/syncthing/1.29.6/docker-compose.yml index 88f51b9c6..aa7bdb3ed 100644 --- a/syncthing/1.29.6/docker-compose.yml +++ b/syncthing/1.29.6/docker-compose.yml @@ -10,7 +10,7 @@ services: - PGID=0 - TZ=Asia/Shanghai - HOME=/data - image: linuxserver/syncthing:1.29.6 + image: linuxserver/syncthing:1.29.7 labels: createdBy: "Apps" networks: From ad708703738d02a3553c45fb4c9fb395e7966a28 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 19:25:11 +0000 Subject: [PATCH 25/53] chore(deps): update syncthing/discosrv docker tag to v1.29.7 --- syncthing-discosrv/1.29.6/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syncthing-discosrv/1.29.6/docker-compose.yml b/syncthing-discosrv/1.29.6/docker-compose.yml index 838dd63a1..dcd37df93 100644 --- a/syncthing-discosrv/1.29.6/docker-compose.yml +++ b/syncthing-discosrv/1.29.6/docker-compose.yml @@ -9,7 +9,7 @@ services: - PUID=1001 - PGID=1001 - TZ=Asia/Shanghai - image: syncthing/discosrv:1.29.6 + image: syncthing/discosrv:1.29.7 labels: createdBy: "Apps" networks: From 8e972890c1f4ec46c2a304ada94103903c0d5ab5 Mon Sep 17 00:00:00 2001 From: github-action update-app-version Date: Mon, 2 Jun 2025 19:25:20 +0000 Subject: [PATCH 26/53] Update app version [skip ci] --- syncthing/{1.29.6 => 1.29.7}/data.yml | 0 syncthing/{1.29.6 => 1.29.7}/docker-compose.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename syncthing/{1.29.6 => 1.29.7}/data.yml (100%) rename syncthing/{1.29.6 => 1.29.7}/docker-compose.yml (100%) diff --git a/syncthing/1.29.6/data.yml b/syncthing/1.29.7/data.yml similarity index 100% rename from syncthing/1.29.6/data.yml rename to syncthing/1.29.7/data.yml diff --git a/syncthing/1.29.6/docker-compose.yml b/syncthing/1.29.7/docker-compose.yml similarity index 100% rename from syncthing/1.29.6/docker-compose.yml rename to syncthing/1.29.7/docker-compose.yml From 8db38c127e8c568732dbac3d3e46e6c610a594c6 Mon Sep 17 00:00:00 2001 From: github-action update-app-version Date: Mon, 2 Jun 2025 19:25:26 +0000 Subject: [PATCH 27/53] Update app version [skip ci] --- syncthing-discosrv/{1.29.6 => 1.29.7}/data.yml | 0 syncthing-discosrv/{1.29.6 => 1.29.7}/docker-compose.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename syncthing-discosrv/{1.29.6 => 1.29.7}/data.yml (100%) rename syncthing-discosrv/{1.29.6 => 1.29.7}/docker-compose.yml (100%) diff --git a/syncthing-discosrv/1.29.6/data.yml b/syncthing-discosrv/1.29.7/data.yml similarity index 100% rename from syncthing-discosrv/1.29.6/data.yml rename to syncthing-discosrv/1.29.7/data.yml diff --git a/syncthing-discosrv/1.29.6/docker-compose.yml b/syncthing-discosrv/1.29.7/docker-compose.yml similarity index 100% rename from syncthing-discosrv/1.29.6/docker-compose.yml rename to syncthing-discosrv/1.29.7/docker-compose.yml From c2cc2de1689c13331f1f293257a658d40ccf8d9e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 2 Jun 2025 21:40:23 +0000 Subject: [PATCH 28/53] chore(deps): update syncthing/relaysrv docker tag to v1.29.7 --- syncthing-relaysrv/1.29.6/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/syncthing-relaysrv/1.29.6/docker-compose.yml b/syncthing-relaysrv/1.29.6/docker-compose.yml index 95faa190d..58f1c0834 100644 --- a/syncthing-relaysrv/1.29.6/docker-compose.yml +++ b/syncthing-relaysrv/1.29.6/docker-compose.yml @@ -8,7 +8,7 @@ services: - PUID=1001 - PGID=1001 - pools="" - image: syncthing/relaysrv:1.29.6 + image: syncthing/relaysrv:1.29.7 labels: createdBy: "Apps" networks: From ef48cdf0ada3a8f0b50d61cf8b6d889a860ac21d Mon Sep 17 00:00:00 2001 From: github-action update-app-version Date: Mon, 2 Jun 2025 21:41:25 +0000 Subject: [PATCH 29/53] Update app version [skip ci] --- syncthing-relaysrv/{1.29.6 => 1.29.7}/data.yml | 0 syncthing-relaysrv/{1.29.6 => 1.29.7}/docker-compose.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename syncthing-relaysrv/{1.29.6 => 1.29.7}/data.yml (100%) rename syncthing-relaysrv/{1.29.6 => 1.29.7}/docker-compose.yml (100%) diff --git a/syncthing-relaysrv/1.29.6/data.yml b/syncthing-relaysrv/1.29.7/data.yml similarity index 100% rename from syncthing-relaysrv/1.29.6/data.yml rename to syncthing-relaysrv/1.29.7/data.yml diff --git a/syncthing-relaysrv/1.29.6/docker-compose.yml b/syncthing-relaysrv/1.29.7/docker-compose.yml similarity index 100% rename from syncthing-relaysrv/1.29.6/docker-compose.yml rename to syncthing-relaysrv/1.29.7/docker-compose.yml From dbef1010c22e25d065c24daa41477a6bed22ffdc Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 3 Jun 2025 14:20:22 +0000 Subject: [PATCH 30/53] chore(deps): update b3log/siyuan docker tag to v3.1.32 --- siyuan/3.1.31/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/siyuan/3.1.31/docker-compose.yml b/siyuan/3.1.31/docker-compose.yml index 394ac48c6..aba30efe8 100644 --- a/siyuan/3.1.31/docker-compose.yml +++ b/siyuan/3.1.31/docker-compose.yml @@ -10,7 +10,7 @@ services: environment: - RUN_IN_CONTAINER=true - TZ=Asia/Shanghai - image: b3log/siyuan:v3.1.31 + image: b3log/siyuan:v3.1.32 labels: createdBy: Apps networks: From 40a5d1181ebdd6fe829f61c4f444543f94fcd311 Mon Sep 17 00:00:00 2001 From: github-action update-app-version Date: Tue, 3 Jun 2025 14:20:35 +0000 Subject: [PATCH 31/53] Update app version [skip ci] --- siyuan/{3.1.31 => 3.1.32}/data.yml | 0 siyuan/{3.1.31 => 3.1.32}/docker-compose.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename siyuan/{3.1.31 => 3.1.32}/data.yml (100%) rename siyuan/{3.1.31 => 3.1.32}/docker-compose.yml (100%) diff --git a/siyuan/3.1.31/data.yml b/siyuan/3.1.32/data.yml similarity index 100% rename from siyuan/3.1.31/data.yml rename to siyuan/3.1.32/data.yml diff --git a/siyuan/3.1.31/docker-compose.yml b/siyuan/3.1.32/docker-compose.yml similarity index 100% rename from siyuan/3.1.31/docker-compose.yml rename to siyuan/3.1.32/docker-compose.yml From 04adf12d1dcd6a12d5637875b737417960998fe2 Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Fri, 6 Jun 2025 09:11:26 +0800 Subject: [PATCH 32/53] =?UTF-8?q?fix(syncthing-relaysrv):=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E4=B8=AD=E7=BB=A7=E6=9C=8D=E5=8A=A1=E5=99=A8=E8=BF=9E?= =?UTF-8?q?=E6=8E=A5=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 docker-compose.yml 文件中添加命令参数 -pools="" -listen=":22067" - 此修改解决了 Syncthing 客户端无法连接到 relayserver 的问题 - 更新了 1.29.6 和 latest 两个版本的配置文件 --- syncthing-relaysrv/1.29.6/docker-compose.yml | 1 + syncthing-relaysrv/latest/docker-compose.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/syncthing-relaysrv/1.29.6/docker-compose.yml b/syncthing-relaysrv/1.29.6/docker-compose.yml index 95faa190d..7655185d4 100644 --- a/syncthing-relaysrv/1.29.6/docker-compose.yml +++ b/syncthing-relaysrv/1.29.6/docker-compose.yml @@ -3,6 +3,7 @@ networks: external: true services: syncthing_relaysrv: + command: -pools="" -listen=":22067" container_name: ${CONTAINER_NAME} environment: - PUID=1001 diff --git a/syncthing-relaysrv/latest/docker-compose.yml b/syncthing-relaysrv/latest/docker-compose.yml index dafe4b46b..6dac02afa 100644 --- a/syncthing-relaysrv/latest/docker-compose.yml +++ b/syncthing-relaysrv/latest/docker-compose.yml @@ -3,6 +3,7 @@ networks: external: true services: syncthing_relaysrv: + command: -pools="" -listen=":22067" container_name: ${CONTAINER_NAME} environment: - PUID=1001 From b7a5613fb84b41a628bda70c1e3a06d2a8b62477 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 6 Jun 2025 01:12:02 +0000 Subject: [PATCH 33/53] chore(deps): update jxxghp/moviepilot-v2 docker tag to v2.5.3 --- movie-pilot/2.5.2/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/movie-pilot/2.5.2/docker-compose.yml b/movie-pilot/2.5.2/docker-compose.yml index bd31d8913..19654c2bd 100644 --- a/movie-pilot/2.5.2/docker-compose.yml +++ b/movie-pilot/2.5.2/docker-compose.yml @@ -13,7 +13,7 @@ services: - TZ=Asia/Shanghai - SUPERUSER=${SUPERUSER} - image: jxxghp/moviepilot-v2:2.5.2 + image: jxxghp/moviepilot-v2:2.5.3 labels: createdBy: Apps networks: From 532cd8682c3bfcf18e210f38077f191f1e4f8f6b Mon Sep 17 00:00:00 2001 From: github-action update-app-version Date: Fri, 6 Jun 2025 01:12:14 +0000 Subject: [PATCH 34/53] Update app version [skip ci] --- movie-pilot/{2.5.2 => 2.5.3}/data.yml | 0 movie-pilot/{2.5.2 => 2.5.3}/docker-compose.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename movie-pilot/{2.5.2 => 2.5.3}/data.yml (100%) rename movie-pilot/{2.5.2 => 2.5.3}/docker-compose.yml (100%) diff --git a/movie-pilot/2.5.2/data.yml b/movie-pilot/2.5.3/data.yml similarity index 100% rename from movie-pilot/2.5.2/data.yml rename to movie-pilot/2.5.3/data.yml diff --git a/movie-pilot/2.5.2/docker-compose.yml b/movie-pilot/2.5.3/docker-compose.yml similarity index 100% rename from movie-pilot/2.5.2/docker-compose.yml rename to movie-pilot/2.5.3/docker-compose.yml From 6e8ebd15da45e9843ba15a0b38b81cff742b3aeb Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 9 Jun 2025 17:07:11 +0000 Subject: [PATCH 35/53] chore(deps): update jxxghp/moviepilot-v2 docker tag to v2.5.4 --- movie-pilot/2.5.3/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/movie-pilot/2.5.3/docker-compose.yml b/movie-pilot/2.5.3/docker-compose.yml index 19654c2bd..243da57cd 100644 --- a/movie-pilot/2.5.3/docker-compose.yml +++ b/movie-pilot/2.5.3/docker-compose.yml @@ -13,7 +13,7 @@ services: - TZ=Asia/Shanghai - SUPERUSER=${SUPERUSER} - image: jxxghp/moviepilot-v2:2.5.3 + image: jxxghp/moviepilot-v2:2.5.4 labels: createdBy: Apps networks: From e005c181925e35d330f6569a469e4050deb20c4b Mon Sep 17 00:00:00 2001 From: github-action update-app-version Date: Mon, 9 Jun 2025 17:07:28 +0000 Subject: [PATCH 36/53] Update app version [skip ci] --- movie-pilot/{2.5.3 => 2.5.4}/data.yml | 0 movie-pilot/{2.5.3 => 2.5.4}/docker-compose.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename movie-pilot/{2.5.3 => 2.5.4}/data.yml (100%) rename movie-pilot/{2.5.3 => 2.5.4}/docker-compose.yml (100%) diff --git a/movie-pilot/2.5.3/data.yml b/movie-pilot/2.5.4/data.yml similarity index 100% rename from movie-pilot/2.5.3/data.yml rename to movie-pilot/2.5.4/data.yml diff --git a/movie-pilot/2.5.3/docker-compose.yml b/movie-pilot/2.5.4/docker-compose.yml similarity index 100% rename from movie-pilot/2.5.3/docker-compose.yml rename to movie-pilot/2.5.4/docker-compose.yml From 9fd59b61157f5673ef3d8ce23e158cb08ea9e296 Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Thu, 12 Jun 2025 00:36:28 +0800 Subject: [PATCH 37/53] =?UTF-8?q?refactor:=20=E5=88=A0=E9=99=A4=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E5=B7=B2=E5=BC=83=E7=94=A8=E6=88=96=E4=B8=8D=E5=86=8D?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E7=9A=84=20App=20=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除了 Siyuan、Sun-Panel、Syncthing 和 Xunlei 的配置文件- 删除了相应的 data.yml 和 docker-compose.yml 文件 - 此更改为大规模重构的一部分,旨在清理不再维护的 App 配置 --- siyuan/latest/data.yml | 19 ------------------- siyuan/latest/docker-compose.yml | 24 ------------------------ sun-panel/latest/data.yml | 10 ---------- sun-panel/latest/docker-compose.yml | 20 -------------------- syncthing/latest/data.yml | 28 ---------------------------- syncthing/latest/docker-compose.yml | 26 -------------------------- xunlei/latest/data.yml | 27 --------------------------- xunlei/latest/docker-compose.yml | 25 ------------------------- 8 files changed, 179 deletions(-) delete mode 100644 siyuan/latest/data.yml delete mode 100644 siyuan/latest/docker-compose.yml delete mode 100644 sun-panel/latest/data.yml delete mode 100644 sun-panel/latest/docker-compose.yml delete mode 100644 syncthing/latest/data.yml delete mode 100644 syncthing/latest/docker-compose.yml delete mode 100644 xunlei/latest/data.yml delete mode 100644 xunlei/latest/docker-compose.yml diff --git a/siyuan/latest/data.yml b/siyuan/latest/data.yml deleted file mode 100644 index a1398d86b..000000000 --- a/siyuan/latest/data.yml +++ /dev/null @@ -1,19 +0,0 @@ -additionalProperties: - formFields: - - default: "6806" - edit: true - envKey: PANEL_APP_PORT_HTTP - labelZh: WebUI 端口 - labelEn: WebUI port - required: true - rule: paramPort - type: number - - - default: "" - edit: true - envKey: AuthCode - labelZh: 授权码 - labelEn: Access Auth Code - required: true - rule: paramComplexity - type: password \ No newline at end of file diff --git a/siyuan/latest/docker-compose.yml b/siyuan/latest/docker-compose.yml deleted file mode 100644 index 996ecc6ec..000000000 --- a/siyuan/latest/docker-compose.yml +++ /dev/null @@ -1,24 +0,0 @@ -networks: - 1panel-network: - external: true -services: - siyuan: - command: - - --workspace=/siyuan/workspace/ - - --accessAuthCode=${AuthCode} - container_name: ${CONTAINER_NAME} - environment: - - RUN_IN_CONTAINER=true - - TZ=Asia/Shanghai - image: b3log/siyuan:latest - labels: - createdBy: Apps - networks: - - 1panel-network - ports: - - ${PANEL_APP_PORT_HTTP}:6806 - restart: always - user: "0:0" - volumes: - - ./data:/siyuan/workspace - diff --git a/sun-panel/latest/data.yml b/sun-panel/latest/data.yml deleted file mode 100644 index 0c5623fdf..000000000 --- a/sun-panel/latest/data.yml +++ /dev/null @@ -1,10 +0,0 @@ -additionalProperties: - formFields: - - default: "3002" - edit: true - envKey: PANEL_APP_PORT_HTTP - labelZh: WebUI 端口 - labelEn: WebUI port - required: true - rule: paramPort - type: number diff --git a/sun-panel/latest/docker-compose.yml b/sun-panel/latest/docker-compose.yml deleted file mode 100644 index 7c08a6b68..000000000 --- a/sun-panel/latest/docker-compose.yml +++ /dev/null @@ -1,20 +0,0 @@ -networks: - 1panel-network: - external: true -services: - sun-panel: - container_name: ${CONTAINER_NAME} - environment: - - TZ=Asia/Shanghai - image: hslr/sun-panel:latest - labels: - createdBy: Apps - networks: - - 1panel-network - ports: - - ${PANEL_APP_PORT_HTTP}:3002 - restart: always - volumes: - - ./data/conf:/app/conf - - ./data/database:/app/database - - ./data/uploads:/app/uploads diff --git a/syncthing/latest/data.yml b/syncthing/latest/data.yml deleted file mode 100644 index 2d922eeb8..000000000 --- a/syncthing/latest/data.yml +++ /dev/null @@ -1,28 +0,0 @@ -additionalProperties: - formFields: - - default: "8384" - edit: true - envKey: PANEL_APP_PORT_HTTP - labelZh: WebUI 端口 - labelEn: WebUI port - required: true - rule: paramPort - type: number - - - default: "22000" - edit: true - envKey: PANEL_APP_PORT_SYNC - labelZh: 同步端口 - labelEn: Sync Port - required: true - rule: paramPort - type: number - - - default: "21027" - edit: true - envKey: PANEL_APP_PORT_DISCOVERY - labelZh: 服务发现端口 - labelEn: Discovery Port - required: true - rule: paramPort - type: number \ No newline at end of file diff --git a/syncthing/latest/docker-compose.yml b/syncthing/latest/docker-compose.yml deleted file mode 100644 index 251fa8664..000000000 --- a/syncthing/latest/docker-compose.yml +++ /dev/null @@ -1,26 +0,0 @@ -networks: - 1panel-network: - external: true - -services: - syncthing: - container_name: ${CONTAINER_NAME} - environment: - - PUID=0 - - PGID=0 - - TZ=Asia/Shanghai - - HOME=/data - image: linuxserver/syncthing:latest - labels: - createdBy: "Apps" - networks: - - 1panel-network - ports: - - ${PANEL_APP_PORT_HTTP}:8384 - - ${PANEL_APP_PORT_SYNC}:22000/tcp - - ${PANEL_APP_PORT_SYNC}:22000/udp - - ${PANEL_APP_PORT_DISCOVERY}:21027/udp - restart: always - volumes: - - ./data/config:/config - - ./data/data:/data diff --git a/xunlei/latest/data.yml b/xunlei/latest/data.yml deleted file mode 100644 index 4f6015888..000000000 --- a/xunlei/latest/data.yml +++ /dev/null @@ -1,27 +0,0 @@ -additionalProperties: - formFields: - - default: "40163" - edit: true - envKey: PANEL_APP_PORT_HTTP - labelEn: Port - labelZh: 端口 - required: true - rule: paramPort - type: number - - - default: "xunlei" - edit: true - envKey: XL_DASHBOARD_USERNAME - labelEn: Dashboard Username - labelZh: 控制台用户名 - required: true - type: text - - - default: "xunlei" - edit: true - envKey: XL_DASHBOARD_PASSWORD - labelEn: Dashboard Password - labelZh: 控制台密码 - required: true - rule: paramComplexity - type: password diff --git a/xunlei/latest/docker-compose.yml b/xunlei/latest/docker-compose.yml deleted file mode 100644 index 567fbf924..000000000 --- a/xunlei/latest/docker-compose.yml +++ /dev/null @@ -1,25 +0,0 @@ -services: - xunlei: - container_name: ${CONTAINER_NAME} - environment: - - XL_DASHBOARD_PORT=${PANEL_APP_PORT_HTTP} - - XL_DASHBOARD_IP=0.0.0.0 - - XL_DASHBOARD_USERNAME=${XL_DASHBOARD_USERNAME} - - XL_DASHBOARD_PASSWORD=${XL_DASHBOARD_PASSWORD} - - XL_DIR_DOWNLOAD=/xunlei/downloads - - XL_DIR_DATA=/xunlei/data - - XL_UID=0 - - XL_GID=0 - - XL_PREVENT_UPDATE=true - - XL_DEBUG=false - image: cnk3x/xunlei:latest - labels: - createdBy: "Apps" - network_mode: host - # ports: - # - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} - privileged: true - restart: always - volumes: - - ./data/data:/xunlei/data - - ./data/downloads:/xunlei/downloads \ No newline at end of file From de6b248e294c0d2b6b882b35d30e1328bb1ee478 Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Thu, 12 Jun 2025 00:36:37 +0800 Subject: [PATCH 38/53] =?UTF-8?q?refactor(localApps):=20=E4=B8=BA=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E5=BA=94=E7=94=A8=E6=B7=BB=E5=8A=A0=20WebSite=20?= =?UTF-8?q?=E6=A0=87=E7=AD=BE=E5=B9=B6=E7=A7=BB=E9=99=A4=20Tool=20?= =?UTF-8?q?=E6=A0=87=E7=AD=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 siyuan、sun-panel、syncthing、xunlei 和 zerotier-planet 的 data.yml 文件中添加 WebSite 标签 - 从上述应用的 data.yml 文件中移除 Tool 标签 --- siyuan/data.yml | 1 + sun-panel/data.yml | 1 + syncthing/data.yml | 1 + xunlei/data.yml | 1 + zerotier-planet/data.yml | 1 + 5 files changed, 5 insertions(+) diff --git a/siyuan/data.yml b/siyuan/data.yml index 1c55ac6d5..d4e84ce1c 100644 --- a/siyuan/data.yml +++ b/siyuan/data.yml @@ -7,6 +7,7 @@ additionalProperties: key: siyuan name: 思源笔记 SiYuan tags: + - WebSite - Tool shortDescZh: 一款隐私优先的个人知识管理系统 shortDescEn: A privacy-first personal knowledge management system diff --git a/sun-panel/data.yml b/sun-panel/data.yml index 046ac083e..57def4072 100644 --- a/sun-panel/data.yml +++ b/sun-panel/data.yml @@ -7,6 +7,7 @@ additionalProperties: key: sun-panel name: Sun Panel tags: + - WebSite - Tool shortDescZh: 一个服务器、NAS导航面板、Homepage、浏览器首页 shortDescEn: A server, NAS navigation panel, Homepage, Browser homepage diff --git a/syncthing/data.yml b/syncthing/data.yml index 321a6c169..a79c7a4f6 100644 --- a/syncthing/data.yml +++ b/syncthing/data.yml @@ -7,6 +7,7 @@ additionalProperties: key: syncthing name: Syncthing tags: + - WebSite - Tool shortDescZh: 开源的文件同步客户端与服务器软件 shortDescEn: Open source file synchronization client and server software diff --git a/xunlei/data.yml b/xunlei/data.yml index 45842f6e2..e78e20b9c 100644 --- a/xunlei/data.yml +++ b/xunlei/data.yml @@ -7,6 +7,7 @@ additionalProperties: key: xunlei name: 迅雷 tags: + - WebSite - Tool shortDescZh: 提取自群晖平台的迅雷下载套件 shortDescEn: Thunder download kit extracted from Synology platform diff --git a/zerotier-planet/data.yml b/zerotier-planet/data.yml index 398cd5a15..3b6ccb289 100644 --- a/zerotier-planet/data.yml +++ b/zerotier-planet/data.yml @@ -7,6 +7,7 @@ additionalProperties: key: zerotier-planet name: Zerotier Planet tags: + - WebSite - Tool shortDescZh: 创建和管理虚拟软件定义网络 shortDescEn: Create and manage virtual software-defined networks From 7016fc6bb78c292bce04ef50c6fddbee89c521d0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 11 Jun 2025 16:37:07 +0000 Subject: [PATCH 39/53] chore(deps): update jxxghp/moviepilot-v2 docker tag to v2.5.5 --- movie-pilot/2.5.4/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/movie-pilot/2.5.4/docker-compose.yml b/movie-pilot/2.5.4/docker-compose.yml index 243da57cd..bd1b600ea 100644 --- a/movie-pilot/2.5.4/docker-compose.yml +++ b/movie-pilot/2.5.4/docker-compose.yml @@ -13,7 +13,7 @@ services: - TZ=Asia/Shanghai - SUPERUSER=${SUPERUSER} - image: jxxghp/moviepilot-v2:2.5.4 + image: jxxghp/moviepilot-v2:2.5.5 labels: createdBy: Apps networks: From 231891b0d03b7e33d57190ea136ea4694e88d93c Mon Sep 17 00:00:00 2001 From: github-action update-app-version Date: Wed, 11 Jun 2025 16:37:20 +0000 Subject: [PATCH 40/53] Update app version [skip ci] --- movie-pilot/{2.5.4 => 2.5.5}/data.yml | 0 movie-pilot/{2.5.4 => 2.5.5}/docker-compose.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename movie-pilot/{2.5.4 => 2.5.5}/data.yml (100%) rename movie-pilot/{2.5.4 => 2.5.5}/docker-compose.yml (100%) diff --git a/movie-pilot/2.5.4/data.yml b/movie-pilot/2.5.5/data.yml similarity index 100% rename from movie-pilot/2.5.4/data.yml rename to movie-pilot/2.5.5/data.yml diff --git a/movie-pilot/2.5.4/docker-compose.yml b/movie-pilot/2.5.5/docker-compose.yml similarity index 100% rename from movie-pilot/2.5.4/docker-compose.yml rename to movie-pilot/2.5.5/docker-compose.yml From 32f348153ae998de20d9610d40187a23951c3f84 Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Thu, 12 Jun 2025 01:03:52 +0800 Subject: [PATCH 41/53] =?UTF-8?q?refactor(localApps):=20=E9=87=8D=E6=9E=84?= =?UTF-8?q?=E6=9C=AC=E5=9C=B0=E5=BA=94=E7=94=A8=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 更新多个应用的标签、类型等基本信息 - 删除部分冗余的配置文件 - 调整应用分类,优化数据结构 --- movie-pilot/data.yml | 3 +-- siyuan/data.yml | 3 +-- sun-panel/data.yml | 1 - syncthing-discosrv/latest/data.yml | 10 --------- syncthing-discosrv/latest/docker-compose.yml | 21 ------------------- syncthing-relaysrv/latest/data.yml | 10 --------- syncthing-relaysrv/latest/docker-compose.yml | 22 -------------------- syncthing/data.yml | 3 +-- xunlei/data.yml | 3 +-- zerotier-one/latest/data.yml | 10 --------- zerotier-one/latest/docker-compose.yml | 15 ------------- zerotier-planet/data.yml | 1 - 12 files changed, 4 insertions(+), 98 deletions(-) delete mode 100644 syncthing-discosrv/latest/data.yml delete mode 100644 syncthing-discosrv/latest/docker-compose.yml delete mode 100644 syncthing-relaysrv/latest/data.yml delete mode 100644 syncthing-relaysrv/latest/docker-compose.yml delete mode 100644 zerotier-one/latest/data.yml delete mode 100644 zerotier-one/latest/docker-compose.yml diff --git a/movie-pilot/data.yml b/movie-pilot/data.yml index c34ea946c..86b642729 100644 --- a/movie-pilot/data.yml +++ b/movie-pilot/data.yml @@ -7,8 +7,7 @@ additionalProperties: key: movie-pilot name: MoviePilot tags: - - WebSite - - Local + - Tool shortDescZh: NAS媒体库自动化管理工具 shortDescEn: NAS media library automation management tool type: website diff --git a/siyuan/data.yml b/siyuan/data.yml index d4e84ce1c..0db2ded87 100644 --- a/siyuan/data.yml +++ b/siyuan/data.yml @@ -7,11 +7,10 @@ additionalProperties: key: siyuan name: 思源笔记 SiYuan tags: - - WebSite - Tool shortDescZh: 一款隐私优先的个人知识管理系统 shortDescEn: A privacy-first personal knowledge management system - type: tool + type: website crossVersionUpdate: true limit: 0 recommend: 0 diff --git a/sun-panel/data.yml b/sun-panel/data.yml index 57def4072..046ac083e 100644 --- a/sun-panel/data.yml +++ b/sun-panel/data.yml @@ -7,7 +7,6 @@ additionalProperties: key: sun-panel name: Sun Panel tags: - - WebSite - Tool shortDescZh: 一个服务器、NAS导航面板、Homepage、浏览器首页 shortDescEn: A server, NAS navigation panel, Homepage, Browser homepage diff --git a/syncthing-discosrv/latest/data.yml b/syncthing-discosrv/latest/data.yml deleted file mode 100644 index e186af1d2..000000000 --- a/syncthing-discosrv/latest/data.yml +++ /dev/null @@ -1,10 +0,0 @@ -additionalProperties: - formFields: - - default: "8443" - edit: true - envKey: PANEL_APP_PORT_HTTP - labelZh: 发现服务器端口 - labelEn: Discovery server port - required: true - rule: paramPort - type: number \ No newline at end of file diff --git a/syncthing-discosrv/latest/docker-compose.yml b/syncthing-discosrv/latest/docker-compose.yml deleted file mode 100644 index 9b31ff623..000000000 --- a/syncthing-discosrv/latest/docker-compose.yml +++ /dev/null @@ -1,21 +0,0 @@ -networks: - 1panel-network: - external: true - -services: - syncthing_discosrv: - container_name: ${CONTAINER_NAME} - environment: - - PUID=1001 - - PGID=1001 - - TZ=Asia/Shanghai - image: syncthing/discosrv:latest - labels: - createdBy: "Apps" - networks: - - 1panel-network - ports: - - ${PANEL_APP_PORT_HTTP}:8443 - restart: always - volumes: - - ./data:/var/stdiscosrv diff --git a/syncthing-relaysrv/latest/data.yml b/syncthing-relaysrv/latest/data.yml deleted file mode 100644 index ae79aa587..000000000 --- a/syncthing-relaysrv/latest/data.yml +++ /dev/null @@ -1,10 +0,0 @@ -additionalProperties: - formFields: - - default: "22067" - edit: true - envKey: PANEL_APP_PORT_HTTP - labelZh: 中继服务器端口 - labelEn: Relay server port - required: true - rule: paramPort - type: number \ No newline at end of file diff --git a/syncthing-relaysrv/latest/docker-compose.yml b/syncthing-relaysrv/latest/docker-compose.yml deleted file mode 100644 index 6dac02afa..000000000 --- a/syncthing-relaysrv/latest/docker-compose.yml +++ /dev/null @@ -1,22 +0,0 @@ -networks: - 1panel-network: - external: true -services: - syncthing_relaysrv: - command: -pools="" -listen=":22067" - container_name: ${CONTAINER_NAME} - environment: - - PUID=1001 - - PGID=1001 - - pools="" - image: syncthing/relaysrv:latest - labels: - createdBy: "Apps" - networks: - - 1panel-network - ports: - - ${PANEL_APP_PORT_HTTP}:22067 # 中继服务器的数据连接端口(必须开启) - # - 22070:22070 # 用于公用的中继服务器池,显示数据传输、客户端数量等状态,可不开启 - restart: always - volumes: - - ./data:/var/strelaysrv diff --git a/syncthing/data.yml b/syncthing/data.yml index a79c7a4f6..81b9af7c7 100644 --- a/syncthing/data.yml +++ b/syncthing/data.yml @@ -7,11 +7,10 @@ additionalProperties: key: syncthing name: Syncthing tags: - - WebSite - Tool shortDescZh: 开源的文件同步客户端与服务器软件 shortDescEn: Open source file synchronization client and server software - type: tool + type: website crossVersionUpdate: true limit: 1 recommend: 0 diff --git a/xunlei/data.yml b/xunlei/data.yml index e78e20b9c..287ca2a15 100644 --- a/xunlei/data.yml +++ b/xunlei/data.yml @@ -7,11 +7,10 @@ additionalProperties: key: xunlei name: 迅雷 tags: - - WebSite - Tool shortDescZh: 提取自群晖平台的迅雷下载套件 shortDescEn: Thunder download kit extracted from Synology platform - type: tool + type: website crossVersionUpdate: true limit: 0 recommend: 0 diff --git a/zerotier-one/latest/data.yml b/zerotier-one/latest/data.yml deleted file mode 100644 index 3ad9832f7..000000000 --- a/zerotier-one/latest/data.yml +++ /dev/null @@ -1,10 +0,0 @@ -additionalProperties: - formFields: - - default: 9993 - disabled: true - envKey: PANEL_APP_PORT_HTTP - labelEn: Port - labelZh: 端口 - required: true - rule: paramPort - type: number diff --git a/zerotier-one/latest/docker-compose.yml b/zerotier-one/latest/docker-compose.yml deleted file mode 100644 index 4adde27d7..000000000 --- a/zerotier-one/latest/docker-compose.yml +++ /dev/null @@ -1,15 +0,0 @@ -services: - zerotier-one: - container_name: ${CONTAINER_NAME} - restart: always - network_mode: host - devices: - - /dev/net/tun - cap_add: - - NET_ADMIN - - SYS_ADMIN - volumes: - - ./data:/var/lib/zerotier-one - image: zerotier/zerotier:latest - labels: - createdBy: "Apps" diff --git a/zerotier-planet/data.yml b/zerotier-planet/data.yml index 3b6ccb289..398cd5a15 100644 --- a/zerotier-planet/data.yml +++ b/zerotier-planet/data.yml @@ -7,7 +7,6 @@ additionalProperties: key: zerotier-planet name: Zerotier Planet tags: - - WebSite - Tool shortDescZh: 创建和管理虚拟软件定义网络 shortDescEn: Create and manage virtual software-defined networks From 2c345043155644e34a1965ee1d90e5d1ba774a3e Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Fri, 13 Jun 2025 00:02:39 +0800 Subject: [PATCH 42/53] =?UTF-8?q?refactor(localApps):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E5=BA=94=E7=94=A8=E7=9A=84=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除了多个应用的重复属性,如 name、tags、title 和 description- 更新了部分应用的 website、github 和 document 链接- 调整了 zerotier-planet 的 limit 属性值 --- siyuan/data.yml | 5 ----- sun-panel/data.yml | 11 +++-------- syncthing-discosrv/data.yml | 5 ----- syncthing-relaysrv/data.yml | 5 ----- syncthing/data.yml | 7 +------ xunlei/data.yml | 11 +++-------- zerotier-one/data.yml | 5 ----- zerotier-planet/data.yml | 8 ++++---- 8 files changed, 11 insertions(+), 46 deletions(-) diff --git a/siyuan/data.yml b/siyuan/data.yml index 0db2ded87..0ecc94166 100644 --- a/siyuan/data.yml +++ b/siyuan/data.yml @@ -1,8 +1,3 @@ -name: 思源笔记 SiYuan -tags: - - 工具 -title: 一款隐私优先的个人知识管理系统 -description: 思源笔记是一款隐私优先的个人知识管理系统,支持细粒度块级引用和 Markdown 所见即所得。 additionalProperties: key: siyuan name: 思源笔记 SiYuan diff --git a/sun-panel/data.yml b/sun-panel/data.yml index 046ac083e..4029a05ed 100644 --- a/sun-panel/data.yml +++ b/sun-panel/data.yml @@ -1,8 +1,3 @@ -name: Sun Panel -tags: - - 工具 -title: 开源的文件同步客户端与服务器软件 -description: 开源的文件同步客户端与服务器软件,采用Go语言编写。它可以在本地网络上的设备之间或通过Internet在远程设备之间同步文件,使用了其独有的对等自由块交换协议 additionalProperties: key: sun-panel name: Sun Panel @@ -14,6 +9,6 @@ additionalProperties: crossVersionUpdate: true limit: 0 recommend: 0 - website: https://syncthing.net - github: https://github.com/syncthing/syncthing - document: https://docs.syncthing.net + website: https://doc.sun-panel.top/zh_cn/ + github: https://github.com/hslr-s/sun-panel + document: https://doc.sun-panel.top/zh_cn/usage/quick_deploy.html#docker_run diff --git a/syncthing-discosrv/data.yml b/syncthing-discosrv/data.yml index 25c06fded..705ca6cf1 100644 --- a/syncthing-discosrv/data.yml +++ b/syncthing-discosrv/data.yml @@ -1,8 +1,3 @@ -name: Syncthing-discosrv -tags: - - 工具 -title: syncthing 发现服务器 -description: syncthing 发现服务器 additionalProperties: key: syncthing-discosrv name: Syncthing-discosrv diff --git a/syncthing-relaysrv/data.yml b/syncthing-relaysrv/data.yml index 05f8e1112..5eff406d9 100644 --- a/syncthing-relaysrv/data.yml +++ b/syncthing-relaysrv/data.yml @@ -1,8 +1,3 @@ -name: Syncthing-relaysrv -tags: - - 工具 -title: syncthing 中继服务器 -description: syncthing 中继服务器 additionalProperties: key: syncthing-relaysrv name: Syncthing-relaysrv diff --git a/syncthing/data.yml b/syncthing/data.yml index 81b9af7c7..60e51701b 100644 --- a/syncthing/data.yml +++ b/syncthing/data.yml @@ -1,8 +1,3 @@ -name: Syncthing -tags: - - 工具 -title: 开源的文件同步客户端与服务器软件 -description: 开源的文件同步客户端与服务器软件,采用Go语言编写。它可以在本地网络上的设备之间或通过Internet在远程设备之间同步文件,使用了其独有的对等自由块交换协议 additionalProperties: key: syncthing name: Syncthing @@ -12,7 +7,7 @@ additionalProperties: shortDescEn: Open source file synchronization client and server software type: website crossVersionUpdate: true - limit: 1 + limit: 0 recommend: 0 website: https://syncthing.net github: https://github.com/syncthing/syncthing diff --git a/xunlei/data.yml b/xunlei/data.yml index 287ca2a15..cb821807f 100644 --- a/xunlei/data.yml +++ b/xunlei/data.yml @@ -1,8 +1,3 @@ -name: 迅雷 -tags: - - 实用工具 -title: 提取自群晖平台的迅雷下载套件 -description: 提取自群晖平台的迅雷下载套件 additionalProperties: key: xunlei name: 迅雷 @@ -14,6 +9,6 @@ additionalProperties: crossVersionUpdate: true limit: 0 recommend: 0 - website: https://www.xunlei.com - github: https://github.com/cnk3x/xunlei/tree/docker - document: https://github.com/cnk3x/xunlei/tree/docker + website: https://github.com/cnk3x/xunlei + github: https://github.com/cnk3x/xunlei + document: https://github.com/cnk3x/xunlei diff --git a/zerotier-one/data.yml b/zerotier-one/data.yml index e8c205070..f8af7956b 100644 --- a/zerotier-one/data.yml +++ b/zerotier-one/data.yml @@ -1,8 +1,3 @@ -name: ZeroTier-One -tags: - - 工具 -title: 多点虚拟化网络解决方案 -description: 多点虚拟化网络解决方案 additionalProperties: key: zerotier-one name: ZeroTier-One diff --git a/zerotier-planet/data.yml b/zerotier-planet/data.yml index 398cd5a15..c10d407dc 100644 --- a/zerotier-planet/data.yml +++ b/zerotier-planet/data.yml @@ -12,7 +12,7 @@ additionalProperties: shortDescEn: Create and manage virtual software-defined networks type: website crossVersionUpdate: true - limit: 0 - website: https://www.zerotier.com/ - github: https://github.com/zerotier/ZeroTierOne/ - document: https://docs.zerotier.com/ + limit: 1 + website: https://github.com/xubiaolin/docker-zerotier-planet + github: https://github.com/xubiaolin/docker-zerotier-planet + document: https://github.com/xubiaolin/docker-zerotier-planet From c9813bca96d5aa7a684622c25fde2de7cbdab9b8 Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Fri, 13 Jun 2025 00:08:46 +0800 Subject: [PATCH 43/53] =?UTF-8?q?docs(localApps):=20=E7=A7=BB=E9=99=A4?= =?UTF-8?q?=E5=A4=9A=E4=B8=AA=E9=A1=B9=E7=9B=AE=E7=9A=84=E6=97=A0=E5=85=B3?= =?UTF-8?q?=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 删除了 siyuan、sun-panel 和 zerotier-planet 项目中的鸣谢、捐赠和广告等内容 - 精简了 zerotier-planet 项目的功能特性、目录和参考链接 - 移除了多个项目中的冗余图片引用 --- siyuan/README.md | 16 ------ sun-panel/README.md | 35 ------------ zerotier-planet/README.md | 113 -------------------------------------- 3 files changed, 164 deletions(-) diff --git a/siyuan/README.md b/siyuan/README.md index b295aee4d..09f134ea2 100644 --- a/siyuan/README.md +++ b/siyuan/README.md @@ -56,8 +56,6 @@ * [有的块(比如在列表项中的段落块)找不到块标怎么办?](#有的块比如在列表项中的段落块找不到块标怎么办) * [数据仓库密钥遗失怎么办?](#数据仓库密钥遗失怎么办) * [使用需要付费吗?](#使用需要付费吗) -* [🙏 鸣谢](#-鸣谢) - * [贡献者列表](#贡献者列表) --- @@ -432,17 +430,3 @@ Publish parameters: --accessAuthCode=******(访问授权码) 会员特权需要付费后才能使用,请参考[定价](https://b3log.org/siyuan/pricing.html)。 如果你没有会员特权需求但又想支持开发,欢迎进行捐赠:[靠爱发电 - 链滴](https://ld246.com/sponsor) - -## 🙏 鸣谢 - -思源的诞生离不开众多的开源项目和贡献者,请参考项目源代码 kernel/go.mod、app/package.json 和项目首页。 - -思源的成长离不开用户的反馈和宣传推广,感谢所有人对思源的帮助 ❤️ - -### 贡献者列表 - -欢迎加入我们,一起为思源贡献代码。 - - - - \ No newline at end of file diff --git a/sun-panel/README.md b/sun-panel/README.md index 8472eb17d..0dc4ed297 100644 --- a/sun-panel/README.md +++ b/sun-panel/README.md @@ -74,41 +74,6 @@ A server, NAS navigation panel, Homepage, Browser homepage. [Deployment Tutorial](https://sun-panel-doc.enianteam.com/usage/quick_deploy.html) -## 🍵 Donate - -> Open-source development is not easy. If you feel that my project has helped you, you are welcome -> to [donate](./doc/donate.md) or buy me a cup of tea☕ (please leave your nickname or name in the note if possible). Your -> support is my motivation, thank you. - - - - - - -| | | -|----------------------------------------------------------|-----------------------------------------------------------| -| | | - -## 🏖️ Communication group & community - -Author:**[红烧猎人](https://blog.enianteam.com/u/sun/content/11)** - -[Github Discussions](https://github.com/hslr-s/sun-panel/discussions) - -QQ交流群,进不去可以点上方连接联系作者 - - - -## ❤️ Thanks - -- [Roc](https://github.com/RocCheng) -- [jackloves111](https://github.com/jackloves111) -- [Rock.L](https://github.com/gitlyp) - ---- - -[![Star History Chart](https://api.star-history.com/svg?repos=hslr-s/sun-panel&type=Date)](https://star-history.com/#hslr-s/sun-panel&Date) - - 账户密码 ``` diff --git a/zerotier-planet/README.md b/zerotier-planet/README.md index 4f609f627..0eaa3b91d 100644 --- a/zerotier-planet/README.md +++ b/zerotier-planet/README.md @@ -1,20 +1,3 @@ -# 交流群 - -**Telegram** - -- TG交流群:https://t.me/+JduuWfhSEPdlNDk1 - -**QQ Group** - -- 1群:692635772 -- 2群:785620313 -- 3群:316239544 -- 4群:1027678459 - -# 微信公众号 - -![二维码](assets/wechat.png) - # 功能特性 - ✅ 支持 Linux/AMD64、Linux/ARM64 架构 @@ -24,7 +7,6 @@ # 目录 -- [0: 广告](#0-广告) - [1:ZeroTier 介绍](#1zerotier-介绍) - [2:为什么要自建PLANET 服务器](#2为什么要自建planet-服务器) - [3:开始安装](#3开始安装) @@ -68,38 +50,6 @@ - [捐助和支持](#捐助和支持) - [鸣谢](#鸣谢) -# 0: 广告 - -## 托管方案一:自运营容器服务 - -**寻找便捷的解决方案?** - -我们提供专业的托管服务: - -- 免费试用3天 -- 年费仅需99¥ -- 高速带宽:300Mbit -- 流量政策: - - 每月100G转发流量 - - P2P连接后不计流量 - - 超出后每10元100G -- 优质线路:宁波电信机房 -- 联系方式: - - Telegram:[https://t.me/uxkram](https://t.me/uxkram) - - 或加入QQ群咨询群主 - -测速图如下: - -图片名称 - -## 0.2 托管方案二:雨云容器服务 - -[![通过雨云一键部署](https://rainyun-apps.cn-nb1.rains3.com/materials/deploy-on-rainyun-cn.svg)](https://app.rainyun.com/apps/rca/store/6215?ref=220429) - -### 0.3 微信公众号广告:欢迎关注公众号获取最新动态和技术分享 - -图片名称 - # 1:ZeroTier 介绍 `ZeroTier` 是一款强大的 P2P VPN @@ -111,8 +61,6 @@ NAS。最重要的是,设备之间是点对点直连的,无需经过中转 简单来说,`ZeroTier` 就像是一个跨越互联网的"虚拟交换机",让分布在世界各地的设备,都能像在同一个局域网内一样方便地相互访问。 -![zerotier](assets/zerotier-network.png) - **ZeroTier 网络中的关键概念** `PLANET`(行星服务器):ZeroTier 网络的核心根服务器,负责网络发现和初始连接。相当于整个网络的"中枢"。 @@ -263,8 +211,6 @@ cd docker-zerotier-planet 访问 `http://ip:3443` 进入controller页面 -![ui](assets/ztncui.png) - 使用默认账号为:`admin` 默认密码为:`password` @@ -277,19 +223,13 @@ cd docker-zerotier-planet 创建成功后系统会自动生成一个网络ID,这个ID在后续客户端配置时会用到,请记录下来。 -![ui](assets/ztncui_create_net.png) - 得到网络 `id` -![ui](assets/ztncui_net_id.png) - ### 3.5.2 分配网络IP: 选中easy setup -![assign_id](./assets/easy_setup.png) 生成ip范围 -![ip_addr](./assets/network_addr.png) # 4.客户端配置 @@ -308,12 +248,8 @@ ZeroTier 支持多种主流操作系统的客户端,包括: Win+S 搜索 `服务` -![ui](assets/service.png) - 找到ZeroTier One,并且重启服务 -![ui](assets/restart_service.png) - ### 4.2 加入网络 使用管理员身份打开PowerShell @@ -328,12 +264,8 @@ PS C:\Windows\system32> 登录管理后台可以看到有个个新的客户端,勾选`Authorized`就行 -![ui](assets/join_net.png) - IP assignment 里面会出现zerotier的内网ip -![ip](./assets/allow_devices.png) - 执行如下命令: ``` @@ -554,51 +486,6 @@ services: - [x] 3443端口自定义支持 - [ ] planet和controller分离部署 -# 风险声明 - -本项目仅供学习和研究使用,不鼓励用于商业用途。我们不对任何因使用本项目而导致的任何损失负责。 - -# 类似项目 - -- [wireguard一键脚本](https://github.com/xubiaolin/wireguard-onekey) - -# 捐助和支持 - -如果觉得本项目对您有帮助,欢迎通过扫描下方赞赏码捐助项目 :) - -donate - -# 鸣谢 - -感谢以下网友投喂,你们的支持和鼓励是我不懈更新的动力 - -按时间顺序排序: - -- 随性 -- 我 -- 你好 -- Calvin -- 小猪猪的饲养员 -- 情若犹在 -- 天天星期天 -- 啊乐 -- 夏末秋至 -- **忠 -- 岸芷汀兰 -- Kimi Chen -- 匿名 -- 阳光报告旷课 -- 濂溪先生 -- Water -- 匿名 -- 匿名 -- 陆 -- 精钢葫芦娃 -- 唯 -- 王小新 -- 匿名 -- Duck不必 - # 参考链接 [ZeroTier-虚拟局域网详解](https://www.glimmer.ltd/2021/3299983056/) From 9d124ab36d5d39b4d9d4463126864b7cb8937f5e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 14 Jun 2025 09:39:51 +0000 Subject: [PATCH 44/53] chore(deps): update jxxghp/moviepilot-v2 docker tag to v2.5.6 --- movie-pilot/2.5.5/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/movie-pilot/2.5.5/docker-compose.yml b/movie-pilot/2.5.5/docker-compose.yml index bd1b600ea..7029c7e23 100644 --- a/movie-pilot/2.5.5/docker-compose.yml +++ b/movie-pilot/2.5.5/docker-compose.yml @@ -13,7 +13,7 @@ services: - TZ=Asia/Shanghai - SUPERUSER=${SUPERUSER} - image: jxxghp/moviepilot-v2:2.5.5 + image: jxxghp/moviepilot-v2:2.5.6 labels: createdBy: Apps networks: From ede9af8842712d9d3f838fa2667a215ff6c1dd42 Mon Sep 17 00:00:00 2001 From: github-action update-app-version Date: Sat, 14 Jun 2025 09:40:05 +0000 Subject: [PATCH 45/53] Update app version [skip ci] --- movie-pilot/{2.5.5 => 2.5.6}/data.yml | 0 movie-pilot/{2.5.5 => 2.5.6}/docker-compose.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename movie-pilot/{2.5.5 => 2.5.6}/data.yml (100%) rename movie-pilot/{2.5.5 => 2.5.6}/docker-compose.yml (100%) diff --git a/movie-pilot/2.5.5/data.yml b/movie-pilot/2.5.6/data.yml similarity index 100% rename from movie-pilot/2.5.5/data.yml rename to movie-pilot/2.5.6/data.yml diff --git a/movie-pilot/2.5.5/docker-compose.yml b/movie-pilot/2.5.6/docker-compose.yml similarity index 100% rename from movie-pilot/2.5.5/docker-compose.yml rename to movie-pilot/2.5.6/docker-compose.yml From 308b1b377f876f2ed698e44af0b4fce8eae08e3e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 16 Jun 2025 17:30:00 +0000 Subject: [PATCH 46/53] chore(deps): update jxxghp/moviepilot-v2 docker tag to v2.5.7 --- movie-pilot/2.5.6/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/movie-pilot/2.5.6/docker-compose.yml b/movie-pilot/2.5.6/docker-compose.yml index 7029c7e23..9a518c5c1 100644 --- a/movie-pilot/2.5.6/docker-compose.yml +++ b/movie-pilot/2.5.6/docker-compose.yml @@ -13,7 +13,7 @@ services: - TZ=Asia/Shanghai - SUPERUSER=${SUPERUSER} - image: jxxghp/moviepilot-v2:2.5.6 + image: jxxghp/moviepilot-v2:2.5.7 labels: createdBy: Apps networks: From a14631dcfac5439215bfc461ad589bebf975bb4f Mon Sep 17 00:00:00 2001 From: github-action update-app-version Date: Mon, 16 Jun 2025 17:30:13 +0000 Subject: [PATCH 47/53] Update app version [skip ci] --- movie-pilot/{2.5.6 => 2.5.7}/data.yml | 0 movie-pilot/{2.5.6 => 2.5.7}/docker-compose.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename movie-pilot/{2.5.6 => 2.5.7}/data.yml (100%) rename movie-pilot/{2.5.6 => 2.5.7}/docker-compose.yml (100%) diff --git a/movie-pilot/2.5.6/data.yml b/movie-pilot/2.5.7/data.yml similarity index 100% rename from movie-pilot/2.5.6/data.yml rename to movie-pilot/2.5.7/data.yml diff --git a/movie-pilot/2.5.6/docker-compose.yml b/movie-pilot/2.5.7/docker-compose.yml similarity index 100% rename from movie-pilot/2.5.6/docker-compose.yml rename to movie-pilot/2.5.7/docker-compose.yml From 942c363f48207a3b0eeda84b88871c97e0e5105f Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Tue, 17 Jun 2025 10:42:41 +0800 Subject: [PATCH 48/53] =?UTF-8?q?refactor(localApps):=20=E7=94=B5=E5=BD=B1?= =?UTF-8?q?=E8=AF=95=E7=82=B9=E7=89=88=E6=9C=AC=E9=99=8D=E7=BA=A7=E8=87=B3?= =?UTF-8?q?=202.5.6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 docker-compose.yml 文件从 2.5.7 版本更名为 2.5.6 版本 - 修改容器镜像版本从 2.5.7 降至 2.5.6 --- movie-pilot/{2.5.7 => 2.5.6}/data.yml | 0 movie-pilot/{2.5.7 => 2.5.6}/docker-compose.yml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename movie-pilot/{2.5.7 => 2.5.6}/data.yml (100%) rename movie-pilot/{2.5.7 => 2.5.6}/docker-compose.yml (95%) diff --git a/movie-pilot/2.5.7/data.yml b/movie-pilot/2.5.6/data.yml similarity index 100% rename from movie-pilot/2.5.7/data.yml rename to movie-pilot/2.5.6/data.yml diff --git a/movie-pilot/2.5.7/docker-compose.yml b/movie-pilot/2.5.6/docker-compose.yml similarity index 95% rename from movie-pilot/2.5.7/docker-compose.yml rename to movie-pilot/2.5.6/docker-compose.yml index 9a518c5c1..7029c7e23 100644 --- a/movie-pilot/2.5.7/docker-compose.yml +++ b/movie-pilot/2.5.6/docker-compose.yml @@ -13,7 +13,7 @@ services: - TZ=Asia/Shanghai - SUPERUSER=${SUPERUSER} - image: jxxghp/moviepilot-v2:2.5.7 + image: jxxghp/moviepilot-v2:2.5.6 labels: createdBy: Apps networks: From edbc545501a703ec2c57937d658635d6ef626dd0 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 17 Jun 2025 02:47:23 +0000 Subject: [PATCH 49/53] chore(deps): update jxxghp/moviepilot-v2 docker tag to v2.5.7 --- movie-pilot/2.5.6/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/movie-pilot/2.5.6/docker-compose.yml b/movie-pilot/2.5.6/docker-compose.yml index 7029c7e23..9a518c5c1 100644 --- a/movie-pilot/2.5.6/docker-compose.yml +++ b/movie-pilot/2.5.6/docker-compose.yml @@ -13,7 +13,7 @@ services: - TZ=Asia/Shanghai - SUPERUSER=${SUPERUSER} - image: jxxghp/moviepilot-v2:2.5.6 + image: jxxghp/moviepilot-v2:2.5.7 labels: createdBy: Apps networks: From e0e676e43f1c52d377a9e815c541ab3024e1f3b9 Mon Sep 17 00:00:00 2001 From: github-action update-app-version Date: Tue, 17 Jun 2025 02:47:36 +0000 Subject: [PATCH 50/53] Update app version [skip ci] --- movie-pilot/{2.5.6 => 2.5.7}/data.yml | 0 movie-pilot/{2.5.6 => 2.5.7}/docker-compose.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename movie-pilot/{2.5.6 => 2.5.7}/data.yml (100%) rename movie-pilot/{2.5.6 => 2.5.7}/docker-compose.yml (100%) diff --git a/movie-pilot/2.5.6/data.yml b/movie-pilot/2.5.7/data.yml similarity index 100% rename from movie-pilot/2.5.6/data.yml rename to movie-pilot/2.5.7/data.yml diff --git a/movie-pilot/2.5.6/docker-compose.yml b/movie-pilot/2.5.7/docker-compose.yml similarity index 100% rename from movie-pilot/2.5.6/docker-compose.yml rename to movie-pilot/2.5.7/docker-compose.yml From c5dc8a6d884e2d450f9d78511e048e8be7f412e8 Mon Sep 17 00:00:00 2001 From: zhongkunming <73384930+zhongkunming@users.noreply.github.com> Date: Tue, 17 Jun 2025 10:48:50 +0800 Subject: [PATCH 51/53] =?UTF-8?q?refactor(siyuan):=20=E5=B0=86=20Siyuan=20?= =?UTF-8?q?=E7=89=88=E6=9C=AC=E4=BB=8E=20v3.1.32=20=E9=99=8D=E7=BA=A7?= =?UTF-8?q?=E5=88=B0=20v3.1.31?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 docker-compose.yml 文件从 3.1.3 --- siyuan/{3.1.32 => 3.1.31}/data.yml | 0 siyuan/{3.1.32 => 3.1.31}/docker-compose.yml | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename siyuan/{3.1.32 => 3.1.31}/data.yml (100%) rename siyuan/{3.1.32 => 3.1.31}/docker-compose.yml (93%) diff --git a/siyuan/3.1.32/data.yml b/siyuan/3.1.31/data.yml similarity index 100% rename from siyuan/3.1.32/data.yml rename to siyuan/3.1.31/data.yml diff --git a/siyuan/3.1.32/docker-compose.yml b/siyuan/3.1.31/docker-compose.yml similarity index 93% rename from siyuan/3.1.32/docker-compose.yml rename to siyuan/3.1.31/docker-compose.yml index aba30efe8..394ac48c6 100644 --- a/siyuan/3.1.32/docker-compose.yml +++ b/siyuan/3.1.31/docker-compose.yml @@ -10,7 +10,7 @@ services: environment: - RUN_IN_CONTAINER=true - TZ=Asia/Shanghai - image: b3log/siyuan:v3.1.32 + image: b3log/siyuan:v3.1.31 labels: createdBy: Apps networks: From f5db0396b97ab20a1859752ae51b129100cc85e9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 17 Jun 2025 02:49:36 +0000 Subject: [PATCH 52/53] chore(deps): update b3log/siyuan docker tag to v3.1.32 --- siyuan/3.1.31/docker-compose.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/siyuan/3.1.31/docker-compose.yml b/siyuan/3.1.31/docker-compose.yml index 394ac48c6..aba30efe8 100644 --- a/siyuan/3.1.31/docker-compose.yml +++ b/siyuan/3.1.31/docker-compose.yml @@ -10,7 +10,7 @@ services: environment: - RUN_IN_CONTAINER=true - TZ=Asia/Shanghai - image: b3log/siyuan:v3.1.31 + image: b3log/siyuan:v3.1.32 labels: createdBy: Apps networks: From b62260eeff47ff5dbdc9229ddc503008f97ea7fe Mon Sep 17 00:00:00 2001 From: github-action update-app-version Date: Tue, 17 Jun 2025 02:49:48 +0000 Subject: [PATCH 53/53] Update app version [skip ci] --- siyuan/{3.1.31 => 3.1.32}/data.yml | 0 siyuan/{3.1.31 => 3.1.32}/docker-compose.yml | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename siyuan/{3.1.31 => 3.1.32}/data.yml (100%) rename siyuan/{3.1.31 => 3.1.32}/docker-compose.yml (100%) diff --git a/siyuan/3.1.31/data.yml b/siyuan/3.1.32/data.yml similarity index 100% rename from siyuan/3.1.31/data.yml rename to siyuan/3.1.32/data.yml diff --git a/siyuan/3.1.31/docker-compose.yml b/siyuan/3.1.32/docker-compose.yml similarity index 100% rename from siyuan/3.1.31/docker-compose.yml rename to siyuan/3.1.32/docker-compose.yml