commit 691aa7aac91a97b52c70057780cb989f4ff0e5bc
Author: okxlin 现代化、开源的 Linux 服务器运维管理面板
+
+ Free and open source, powerful network-wide ads & trackers blocking DNS
+ server.
+
+ AdGuard.com |
+ Wiki |
+ Reddit |
+ Twitter |
+ Telegram
+
+
+
+
+Note: This requires a PowerShell prompt with winget installed. You should be able to copy and paste the code block to install. If you use an elevated PowerShell prompt, UAC will not pop up during the installs.
+
+```PowerShell
+winget install -e --id Docker.DockerDesktop; `
+winget install -e --id Microsoft.VisualStudioCode
+```
+
+
+
+```sh
+brew install --cask docker visual-studio-code
+```
+
+
+
+```sh
+sudo snap install docker; \
+sudo snap install code --classic
+```
+
+ WeChat Pay Alipay
+
+ 用户交流群
+
+
+ 主页 •
+ 演示站 •
+ 讨论社区 •
+ 文档 •
+ 下载 •
+ Telegram 群组 •
+ 许可证
+ 一个聚合热门数据的 API 接口
+ Feel free to join the Discord and star the repo if you like the project!
+
+ dash. (or dashdot) is a modern server dashboard,
+ running on the latest tech, designed with glassmorphism in mind.
+ It is intended to be used for smaller VPS and private servers.
+
+ Live Demo
+ |
+ Docker Image
+
+ 匿名口令分享文本,文件,像拿快递一样取文件 交流Q群:739673698,欢迎各位集思广益,项目构思重构中 ' | awk '{$1=$1;print}'`
+
+```yaml
+ go-chatgpt-api:
+ container_name: go-chatgpt-api
+ image: linweiyuan/go-chatgpt-api
+ ports:
+ - 8080:8080
+ environment:
+ - TZ=Asia/Shanghai
+ - GO_CHATGPT_API_PROXY=socks5://chatgpt-proxy-server-warp:65535
+ - GO_CHATGPT_API_PANDORA=
+ - GO_CHATGPT_API_ARKOSE_TOKEN_URL=
+ - GO_CHATGPT_API_ARKOSE_PUID=
+ depends_on:
+ - chatgpt-proxy-server-warp
+ restart: unless-stopped
+
+ chatgpt-proxy-server-warp:
+ container_name: chatgpt-proxy-server-warp
+ image: linweiyuan/chatgpt-proxy-server-warp
+ environment:
+ - LOG_LEVEL=OFF
+ restart: unless-stopped
+```
+
+
+
+
+
+This project is supported by:
+
+ 一款简单Linux面板服务 强烈推荐系统:debian
+
+## 安全说明
+
+如果您在使用过程中发现任何安全问题,请通过以下方式直接联系我们:
+
+- 邮箱:support@fit2cloud.com
+- 电话:400-052-0755
+
+## Star History
+
+[](https://star-history.com/#1Panel-dev/1Panel&Date)
+
+## FOSSA Status
+
+[](https://app.fossa.com/projects/git%2Bgithub.com%2F1Panel-dev%2F1Panel?ref=badge_large)
+
+## License
+
+Copyright (c) 2014-2023 [FIT2CLOUD 飞致云](https://fit2cloud.com/), All rights reserved.
+
+Licensed under The GNU General Public License version 3 (GPLv3) (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
+
+
+
Privacy protection center for you and your devices
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+AdGuard Home is a network-wide software for blocking ads and tracking. After you
+set it up, it'll cover ALL your home devices, and you don't need any client-side
+software for that.
+
+It operates as a DNS server that re-routes tracking domains to a “black hole”,
+thus preventing your devices from connecting to those servers. It's based on
+software we use for our public [AdGuard DNS] servers, and both share a lot of
+code.
+
+[AdGuard DNS]: https://adguard-dns.io/
+
+
+
+ * [Getting Started](#getting-started)
+ * [Automated install (Unix)](#automated-install-linux-and-mac)
+ * [Alternative methods](#alternative-methods)
+ * [Guides](#guides)
+ * [API](#api)
+ * [Comparing AdGuard Home to other solutions](#comparison)
+ * [How is this different from public AdGuard DNS servers?](#comparison-adguard-dns)
+ * [How does AdGuard Home compare to Pi-Hole](#comparison-pi-hole)
+ * [How does AdGuard Home compare to traditional ad blockers](#comparison-adblock)
+ * [Known limitations](#comparison-limitations)
+ * [How to build from source](#how-to-build)
+ * [Prerequisites](#prerequisites)
+ * [Building](#building)
+ * [Contributing](#contributing)
+ * [Test unstable versions](#test-unstable-versions)
+ * [Reporting issues](#reporting-issues)
+ * [Help with translations](#translate)
+ * [Other](#help-other)
+ * [Projects that use AdGuard Home](#uses)
+ * [Acknowledgments](#acknowledgments)
+ * [Privacy](#privacy)
+
+
+
+## Getting Started
+
+ ### Automated install (Unix)
+
+To install with `curl` run the following command:
+
+```sh
+curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
+```
+
+To install with `wget` run the following command:
+
+```sh
+wget --no-verbose -O - https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
+```
+
+To install with `fetch` run the following command:
+
+```sh
+fetch -o - https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
+```
+
+The script also accepts some options:
+
+ * `-c
+每日更新
+ 电视剧/国产剧
+ 电视剧/美剧
+ 美剧(已刮削):美剧ℹ
+
+
+[示例文件](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/category.txt)
+
+
+
+
+
+### BiliBili
+目前只有影视TV支持高清高速的DASH格式视频。
+
+拖动行可以改变顺序,需要点击保存按钮才能生效。
+
+打开、关闭显示开关后,需要点击保存按钮才能生效。
+
+
+
+登录后才能使用,TvBox第三个站源。
+
+
+
+或者使用已有的cookie登录。
+
+打开上报播放记录,B站才能看到播放记录。
+
+
+
+添加搜索关键词作为一级分类:
+
+
+
+添加频道作为一级分类:
+
+
+
+### 配置
+
+
+开启安全订阅,在订阅URL、点播API、播放API加上Token,防止被别人扫描。
+
+强制登录AList后,连接webdav需要使用下面的用户名和密码。
+
+如果打开了挂载我的云盘功能,每次启动会消耗两次开放token请求。60分钟内只能请求10次,超过后需要等待60分钟后才能操作。
+
+可以换IP绕开限制。或者更换开放token的认证URL。配置页面->高级设置 选择一个认证URL。
+
+- https://api-cf.nn.ci/alist/ali_open/token
+- https://api.xhofe.top/alist/ali_open/token
+- https://api.nn.ci/alist/ali_open/token
+
+### 索引
+对于阿里云盘资源,建议使用文件数量少的路径,并限速,防止被封号。
+
+
+
+
+
+### 别名
+把一些路径合并成一个路径。
+
+
+
+### 日志
+Nginx代理/logs:
+```text
+ location /logs {
+ proxy_pass http://127.0.0.1:4567;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection 'upgrade';
+ chunked_transfer_encoding off;
+ proxy_buffering off;
+ proxy_cache off;
+ proxy_redirect off;
+ proxy_hide_header Cache-Control;
+ }
+```
+
+### 其它
+不再生效的文件可以保留,以后删除数据库后可以恢复。
+
+guestpass.txt和guestlogin.txt第一次启动时加载,以后不再生效,请在界面配置。
+
+show_my_ali.txt第一次启动时加载,以后不再生效,请在界面配置是否加载阿里云盘。
+
+docker_address.txt不再生效,使用订阅链接会自动识别。
+
+alist_list.txt第一次启动时加载,以后不再生效,请在界面添加站点。
+
+proxy.txt、tv.txt、my.json、iptv.m3u还是生效的,可以在文件页面编辑。
diff --git a/apps/alist-tvbox/data.yml b/apps/alist-tvbox/data.yml
new file mode 100644
index 00000000..866afa0e
--- /dev/null
+++ b/apps/alist-tvbox/data.yml
@@ -0,0 +1,20 @@
+name: Alist-TVBox
+tags:
+ - 工具
+title: AList 代理,支持 xiaoya 版 AList 界面管理
+type: 工具
+description: AList 代理,支持 xiaoya 版 AList 界面管理
+additionalProperties:
+ key: alist-tvbox
+ name: Alist-TVBox
+ tags:
+ - Tool
+ shortDescZh: AList 代理,支持 xiaoya 版 AList 界面管理
+ shortDescEn: AList proxy server for TvBox, support playlist and search
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://github.com/power721/alist-tvbox
+ github: https://github.com/power721/alist-tvbox
+ document: https://github.com/power721/alist-tvbox
diff --git a/apps/alist-tvbox/latest/.env.sample b/apps/alist-tvbox/latest/.env.sample
new file mode 100644
index 00000000..3d0a8e33
--- /dev/null
+++ b/apps/alist-tvbox/latest/.env.sample
@@ -0,0 +1,4 @@
+CONTAINER_NAME="alist-tvbox"
+PANEL_APP_PORT_HTTP="40161"
+PANEL_APP_PORT_XIAOYA="40162"
+DATA_PATH="./data"
diff --git a/apps/alist-tvbox/latest/data.yml b/apps/alist-tvbox/latest/data.yml
new file mode 100644
index 00000000..48071a11
--- /dev/null
+++ b/apps/alist-tvbox/latest/data.yml
@@ -0,0 +1,25 @@
+additionalProperties:
+ formFields:
+ - default: 40161
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 40162
+ edit: true
+ envKey: PANEL_APP_PORT_XIAOYA
+ labelEn: xiaoya Alist Port
+ labelZh: 小雅 Alist 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
diff --git a/apps/alist-tvbox/latest/docker-compose.yml b/apps/alist-tvbox/latest/docker-compose.yml
new file mode 100644
index 00000000..afa728f1
--- /dev/null
+++ b/apps/alist-tvbox/latest/docker-compose.yml
@@ -0,0 +1,21 @@
+version: '3'
+services:
+ alist-tvbox:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:4567"
+ - "${PANEL_APP_PORT_XIAOYA}:80"
+ volumes:
+ - "${DATA_PATH}:/data"
+ environment:
+ - ALIST_PORT=${PANEL_APP_PORT_XIAOYA}
+ image: haroldli/xiaoya-tvbox:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/alist-tvbox/logo.png b/apps/alist-tvbox/logo.png
new file mode 100644
index 00000000..1e1313c0
Binary files /dev/null and b/apps/alist-tvbox/logo.png differ
diff --git a/apps/alist/3.28.0@sha256:1e931c57d9de771f75c5c853231f215ffd8a684563323fa42138beda8ff42e5a/.env.sample b/apps/alist/3.28.0@sha256:1e931c57d9de771f75c5c853231f215ffd8a684563323fa42138beda8ff42e5a/.env.sample
new file mode 100644
index 00000000..ce9d0b12
--- /dev/null
+++ b/apps/alist/3.28.0@sha256:1e931c57d9de771f75c5c853231f215ffd8a684563323fa42138beda8ff42e5a/.env.sample
@@ -0,0 +1,4 @@
+CONTAINER_NAME="alist"
+PANEL_APP_PORT_HTTP="40034"
+DATA_PATH="./data/data"
+MOUNT_PATH="./data/mnt"
\ No newline at end of file
diff --git a/apps/alist/3.28.0@sha256:1e931c57d9de771f75c5c853231f215ffd8a684563323fa42138beda8ff42e5a/data.yml b/apps/alist/3.28.0@sha256:1e931c57d9de771f75c5c853231f215ffd8a684563323fa42138beda8ff42e5a/data.yml
new file mode 100644
index 00000000..6232ae6c
--- /dev/null
+++ b/apps/alist/3.28.0@sha256:1e931c57d9de771f75c5c853231f215ffd8a684563323fa42138beda8ff42e5a/data.yml
@@ -0,0 +1,24 @@
+additionalProperties:
+ formFields:
+ - default: 40034
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data/data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+ - default: ./data/mnt
+ edit: true
+ envKey: MOUNT_PATH
+ labelEn: Mount folder path
+ labelZh: 挂载文件夹路径
+ required: true
+ type: text
diff --git a/apps/alist/3.28.0@sha256:1e931c57d9de771f75c5c853231f215ffd8a684563323fa42138beda8ff42e5a/docker-compose.yml b/apps/alist/3.28.0@sha256:1e931c57d9de771f75c5c853231f215ffd8a684563323fa42138beda8ff42e5a/docker-compose.yml
new file mode 100644
index 00000000..e754f6b1
--- /dev/null
+++ b/apps/alist/3.28.0@sha256:1e931c57d9de771f75c5c853231f215ffd8a684563323fa42138beda8ff42e5a/docker-compose.yml
@@ -0,0 +1,24 @@
+version: '3'
+services:
+ alist:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:5244"
+ volumes:
+ - "${DATA_PATH}:/opt/alist/data"
+ - "${MOUNT_PATH}:/mnt/data"
+ environment:
+ - PUID=0
+ - PGID=0
+ - UMASK=022
+ image: xhofe/alist:v3.28.0@sha256:1e931c57d9de771f75c5c853231f215ffd8a684563323fa42138beda8ff42e5a
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
+
diff --git a/apps/alist/README.md b/apps/alist/README.md
new file mode 100644
index 00000000..ac73ec7f
--- /dev/null
+++ b/apps/alist/README.md
@@ -0,0 +1,144 @@
+# 使用说明
+
+- 账户与密码
+
+查看容器日志,或者容器功能界面找到`alist`的容器,点击终端连接到容器内部, 运行
+```
+./alist admin
+```
+# 原始相关
+
+
+
+---
+
+[English](./README.md) | 中文 | [Contributing](./CONTRIBUTING.md) | [CODE_OF_CONDUCT](./CODE_OF_CONDUCT.md)
+
+## 功能
+
+- [x] 多种存储
+ - [x] 本地存储
+ - [x] [阿里云盘](https://www.aliyundrive.com/)
+ - [x] OneDrive / Sharepoint([国际版](https://www.office.com/), [世纪互联](https://portal.partner.microsoftonline.cn),de,us)
+ - [x] [天翼云盘](https://cloud.189.cn) (个人云, 家庭云)
+ - [x] [GoogleDrive](https://drive.google.com/)
+ - [x] [123云盘](https://www.123pan.com/)
+ - [x] FTP / SFTP
+ - [x] [PikPak](https://www.mypikpak.com/)
+ - [x] [S3](https://aws.amazon.com/cn/s3/)
+ - [x] [Seafile](https://seafile.com/)
+ - [x] [又拍云对象存储](https://www.upyun.com/products/file-storage)
+ - [x] WebDav(支持无API的OneDrive/SharePoint)
+ - [x] Teambition([中国](https://www.teambition.com/ ),[国际](https://us.teambition.com/ ))
+ - [x] [分秒帧](https://www.mediatrack.cn/)
+ - [x] [和彩云](https://yun.139.com/) (个人云, 家庭云)
+ - [x] [Yandex.Disk](https://disk.yandex.com/)
+ - [x] [百度网盘](http://pan.baidu.com/)
+ - [x] [夸克网盘](https://pan.quark.cn)
+ - [x] [迅雷网盘](https://pan.xunlei.com)
+ - [x] [蓝奏云](https://www.lanzou.com/)
+ - [x] [阿里云盘分享](https://www.aliyundrive.com/)
+ - [x] [谷歌相册](https://photos.google.com/)
+ - [x] [Mega.nz](https://mega.nz)
+ - [x] [一刻相册](https://photo.baidu.com/)
+ - [x] SMB
+ - [x] [115](https://115.com/)
+ - [X] Cloudreve
+- [x] 部署方便,开箱即用
+- [x] 文件预览(PDF、markdown、代码、纯文本……)
+- [x] 画廊模式下的图像预览
+- [x] 视频和音频预览,支持歌词和字幕
+- [x] Office 文档预览(docx、pptx、xlsx、...)
+- [x] `README.md` 预览渲染
+- [x] 文件永久链接复制和直接文件下载
+- [x] 黑暗模式
+- [x] 国际化
+- [x] 受保护的路由(密码保护和身份验证)
+- [x] WebDav (具体见 https://alist.nn.ci/zh/guide/webdav.html)
+- [x] [Docker 部署](https://hub.docker.com/r/xhofe/alist)
+- [x] Cloudflare workers 中转
+- [x] 文件/文件夹打包下载
+- [x] 网页上传(可以允许访客上传),删除,新建文件夹,重命名,移动,复制
+- [x] 离线下载
+- [x] 跨存储复制文件
+
+## 文档
+
+
+
+
+# Answer - 构建问答社区
+
+一款问答形式的知识社区开源软件,你可以使用它快速建立你的问答社区,用于产品技术支持、客户支持、用户交流等。
+
+了解更多关于该项目的内容,请访问 [answer.dev](https://answer.dev).
+
+[](https://github.com/answerdev/answer/blob/main/LICENSE)
+[](https://golang.org/)
+[](https://reactjs.org/)
+[](https://goreportcard.com/report/github.com/answerdev/answer)
+[](https://discord.gg/Jm7Y4cbUej)
+
+## 截图
+
+
+
+## 快速开始
+
+### 使用 docker 快速搭建
+
+```bash
+docker run -d -p 9080:80 -v answer-data:/data --name answer answerdev/answer:latest
+```
+
+其他安装配置细节请参考 [Installation](https://answer.dev/docs/installation)
+
+## 贡献
+
+我们随时欢迎你的贡献!
+
+参考 [CONTRIBUTING](https://answer.dev/docs/development/contributing/) 开始贡献。
+
+## License
+
+[Apache License 2.0](https://github.com/answerdev/answer/blob/main/LICENSE)
\ No newline at end of file
diff --git a/apps/answer/data.yml b/apps/answer/data.yml
new file mode 100644
index 00000000..6c4df6e1
--- /dev/null
+++ b/apps/answer/data.yml
@@ -0,0 +1,20 @@
+name: Answer
+tags:
+ - 建站
+title: 一款适合任何团队的问答平台软件
+type: 建站
+description: 一款适合任何团队的问答平台软件
+additionalProperties:
+ key: answer
+ name: Answer
+ tags:
+ - WebSite
+ shortDescZh: 一款适合任何团队的问答平台软件
+ shortDescEn: A Q&A platform software for teams at any scales
+ type: website
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://answer.dev/
+ github: https://github.com/answerdev/answer
+ document: https://answer.dev/zh-CN/docs
diff --git a/apps/answer/latest/.env.sample b/apps/answer/latest/.env.sample
new file mode 100644
index 00000000..7b11e7c8
--- /dev/null
+++ b/apps/answer/latest/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="answer"
+PANEL_APP_PORT_HTTP="40065"
+DATA_PATH="./data"
diff --git a/apps/answer/latest/data.yml b/apps/answer/latest/data.yml
new file mode 100644
index 00000000..4f5122de
--- /dev/null
+++ b/apps/answer/latest/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 40065
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
\ No newline at end of file
diff --git a/apps/answer/latest/docker-compose.yml b/apps/answer/latest/docker-compose.yml
new file mode 100644
index 00000000..ba443412
--- /dev/null
+++ b/apps/answer/latest/docker-compose.yml
@@ -0,0 +1,18 @@
+version: '3'
+services:
+ answer:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ volumes:
+ - "${DATA_PATH}:/data"
+ image: answerdev/answer:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/answer/logo.png b/apps/answer/logo.png
new file mode 100644
index 00000000..444ad16b
Binary files /dev/null and b/apps/answer/logo.png differ
diff --git a/apps/aria2-pro/README.md b/apps/aria2-pro/README.md
new file mode 100644
index 00000000..0757a003
--- /dev/null
+++ b/apps/aria2-pro/README.md
@@ -0,0 +1,121 @@
+**English** | [中文](https://p3terx.com/archives/docker-aria2-pro.html)
+
+# Aria2 Pro Docker
+
+[](https://github.com/P3TERX/Aria2-Pro-Docker/blob/master/LICENSE)
+[](https://github.com/P3TERX/Aria2-Pro-Docker/stargazers)
+[](https://github.com/P3TERX/Aria2-Pro-Docker/fork)
+[](https://hub.docker.com/r/p3terx/aria2-pro)
+[](https://hub.docker.com/r/p3terx/aria2-pro)
+
+
+A perfect Aria2 Docker image. Out of the box, just add download tasks and don't need to think about anything else.
+
+## Features
+
+* Supported platforms: `amd64`, `i386`, `arm64`, `arm/v7`, `arm/v6`
+* Full Function: `Async DNS`, `BitTorrent`, `Firefox3 Cookie`, `GZip`, `HTTPS`, `Message Digest`, `Metalink`, `XML-RPC`, `SFTP`
+* `max-connection-per-server` unlimited.
+* retry on slow speed (`lowest-speed-limit`) and connection close
+* High BT download rate and speed
+* Get BitTorrent tracker automatically
+* Download error automatically delete files
+* Download cancel automatically delete files
+* Automatically clear `.aria2` suffix files
+* Automatically clear `.torrent` suffix files
+* No lost task progress, no repeated downloads
+* And more powerful features
+
+## Usage
+
+### Docker CLI
+
+- No matter what architecture platform is used, just use the following command to start the container ( Just need to replace the `
`-e PGID=$GID` | Bind UID and GID to the container, which means you can use a non-root user to manage downloaded files. |
+| `-e UMASK_SET=022` | For umask setting of Aria2, optional , default if left unset is `022` |
+| `-e RPC_SECRET=
+
+
+
+
+ Documentation
+ ·
+ User Guides
+ ·
+ Support
+
+
+
+
+
+
+# Organizing your audiobooks
+
+#### Directory structure and folder names are important to Audiobookshelf!
+
+ See [documentation](https://audiobookshelf.org/docs#book-directory-structure) for supported directory structure, folder naming conventions, and audio file metadata usage.
+
+
+
+# Installation
+
+See [install docs](https://www.audiobookshelf.org/docs)
+
+
+
+# Reverse Proxy Set Up
+
+#### Important! Audiobookshelf requires a websocket connection.
+
+#### Note: Subfolder paths (e.g. /audiobooks) are not supported yet. See [issue](https://github.com/advplyr/audiobookshelf/issues/385)
+
+### NGINX Proxy Manager
+
+Toggle websockets support.
+
+
+
+### NGINX Reverse Proxy
+
+Add this to the site config file on your nginx server after you have changed the relevant parts in the <> brackets, and inserted your certificate paths.
+
+
+```bash
+server
+{
+ listen 443 ssl;
+ server_name .
+
+
+From [@Dondochaka](https://discord.com/channels/942908292873723984/942914154254176257/945074590374318170) and [@BeastleeUK](https://discord.com/channels/942908292873723984/942914154254176257/970366039294611506)
+
+
+### Example Caddyfile - [Caddy Reverse Proxy](https://caddyserver.com/docs/caddyfile/directives/reverse_proxy)
+
+```
+subdomain.domain.com {
+ encode gzip zstd
+ reverse_proxy Install the required software on Windows with winget
+
+Install the required software on MacOS with homebrew
+
+Install the required software on Linux with snap
+
+
+
+
+### cookie 在 config.yml 中的设置方法
+
+cookie的设置以域名为单位。比如想在录制抖音直播时使用 cookie,那么 config.yml 中可以像下面这样写:
+```
+cookies:
+ live.douyin.com: __ac_nonce=123456789012345678903;name=value
+```
+
+## Grafana 面板
+
+> 请自行部署 prometheus 和 grafana
+
+
+
+## 依赖
+* [ffmpeg](https://ffmpeg.org/)
+
+## 使用例子
+- 本地
+ ```
+ ./bililive-go -i https://live.bilibili.com/1030 -i https://www.douyu.com/6655
+ ```
+- docker
+ ```
+ docker run --restart=always -v ~/Videos:/srv/bililive -p 8080:8080 -d chigusa/bililive-go
+ ```
+
+## 开发环境搭建(linux系统)
+```
+一、环境准备
+ 1. 前端环境
+ 1)前往https://nodejs.org/zh-cn/下载当前版本node(18.12.1)
+ 2)命令行运行 node -v 若控制台输出版本号则前端环境搭建成功
+ 2.后端环境
+ 1)下载golang安装 版本号1.19
+ 国际: https://golang.org/dl/
+ 国内: https://golang.google.cn/dl/
+ 2)命令行运行 go 若控制台输出各类提示命令 则安装成功 输入 go version 确认版本
+ 3.安装 ffmpeg (以centos7为例)
+ 1) yum install -y epel-release rpm
+ 2) rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
+ 3) yum repolist
+ 4) rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
+ 5) rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
+ 6) yum repolist
+ 7) yum install -y ffmpeg
+二、克隆代码并编译(linux环境)
+ 1. git clone https://github.com/hr3lxphr6j/bililive-go.git
+ 2. cd bililive-go
+ 3. make build-web
+ 4. make
+三、linux编译其他环境(以windows 为例)
+ 1. GOOS=windows GOARCH=amd64 CGO_ENABLED=0 UPX_ENABLE=0 TAGS=dev ./src/hack/build.sh bililive
+ 2.如果不需要调试,可以改成
+ GOOS=windows GOARCH=amd64 CGO_ENABLED=0 UPX_ENABLE=0 TAGS=release ./src/hack/build.sh bililive
+```
+
+## Wiki
+[Wiki](https://github.com/hr3lxphr6j/bililive-go/wiki)
+
+## API
+[API doc](https://github.com/hr3lxphr6j/bililive-go/blob/master/docs/API.md)
+
+## 参考
+- [you-get](https://github.com/soimort/you-get)
+- [ykdl](https://github.com/zhangn1985/ykdl)
+- [youtube-dl](https://github.com/ytdl-org/youtube-dl)
\ No newline at end of file
diff --git a/apps/bililive-go/data.yml b/apps/bililive-go/data.yml
new file mode 100644
index 00000000..0f9a9f86
--- /dev/null
+++ b/apps/bililive-go/data.yml
@@ -0,0 +1,20 @@
+name: Bililive-go
+tags:
+ - 工具
+title: 一个支持多种直播平台的直播录制工具
+type: 工具
+description: 一个支持多种直播平台的直播录制工具
+additionalProperties:
+ key: bililive-go
+ name: Bililive-go
+ tags:
+ - Tool
+ shortDescZh: 一个支持多种直播平台的直播录制工具
+ shortDescEn: A live recording tool that supports multiple live streaming platforms
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://github.com/hr3lxphr6j/bililive-go
+ github: https://github.com/hr3lxphr6j/bililive-go
+ document: https://github.com/hr3lxphr6j/bililive-go/wiki
diff --git a/apps/bililive-go/latest/.env.sample b/apps/bililive-go/latest/.env.sample
new file mode 100644
index 00000000..31c0e42b
--- /dev/null
+++ b/apps/bililive-go/latest/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="bililive-go"
+PANEL_APP_PORT_HTTP="40079"
+DATA_PATH="./data"
diff --git a/apps/bililive-go/latest/data.yml b/apps/bililive-go/latest/data.yml
new file mode 100644
index 00000000..1558f314
--- /dev/null
+++ b/apps/bililive-go/latest/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 40079
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
\ No newline at end of file
diff --git a/apps/bililive-go/latest/docker-compose.yml b/apps/bililive-go/latest/docker-compose.yml
new file mode 100644
index 00000000..f2f4da44
--- /dev/null
+++ b/apps/bililive-go/latest/docker-compose.yml
@@ -0,0 +1,18 @@
+version: '3'
+services:
+ bililive-go:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8080"
+ volumes:
+ - "${DATA_PATH}:/srv/bililive"
+ image: chigusa/bililive-go:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/bililive-go/logo.png b/apps/bililive-go/logo.png
new file mode 100644
index 00000000..c06afbe2
Binary files /dev/null and b/apps/bililive-go/logo.png differ
diff --git a/apps/bitwarden/1.30.0-alpine/.env.sample b/apps/bitwarden/1.30.0-alpine/.env.sample
new file mode 100644
index 00000000..cca679a1
--- /dev/null
+++ b/apps/bitwarden/1.30.0-alpine/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="bitwarden"
+PANEL_APP_PORT_HTTP="40031"
+DATA_PATH="./data"
diff --git a/apps/bitwarden/1.30.0-alpine/data.yml b/apps/bitwarden/1.30.0-alpine/data.yml
new file mode 100644
index 00000000..4812fc50
--- /dev/null
+++ b/apps/bitwarden/1.30.0-alpine/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 40031
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
diff --git a/apps/bitwarden/1.30.0-alpine/docker-compose.yml b/apps/bitwarden/1.30.0-alpine/docker-compose.yml
new file mode 100644
index 00000000..cf23330b
--- /dev/null
+++ b/apps/bitwarden/1.30.0-alpine/docker-compose.yml
@@ -0,0 +1,18 @@
+version: '3'
+services:
+ bitwarden:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ volumes:
+ - "${DATA_PATH}:/data"
+ image: vaultwarden/server:1.30.0-alpine
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/bitwarden/README.md b/apps/bitwarden/README.md
new file mode 100644
index 00000000..dc98d41d
--- /dev/null
+++ b/apps/bitwarden/README.md
@@ -0,0 +1,95 @@
+### Alternative implementation of the Bitwarden server API written in Rust and compatible with [upstream Bitwarden clients](https://bitwarden.com/download/)*, perfect for self-hosted deployment where running the official resource-heavy service might not be ideal.
+
+📢 Note: This project was known as Bitwarden_RS and has been renamed to separate itself from the official Bitwarden server in the hopes of avoiding confusion and trademark/branding issues. Please see [#1642](https://github.com/dani-garcia/vaultwarden/discussions/1642) for more explanation.
+
+---
+[](https://github.com/dani-garcia/vaultwarden/actions/workflows/build.yml)
+[](https://github.com/dani-garcia/vaultwarden/pkgs/container/vaultwarden)
+[](https://hub.docker.com/r/vaultwarden/server)
+[](https://quay.io/repository/vaultwarden/server)
+[](https://deps.rs/repo/github/dani-garcia/vaultwarden)
+[](https://github.com/dani-garcia/vaultwarden/releases/latest)
+[](https://github.com/dani-garcia/vaultwarden/blob/main/LICENSE.txt)
+[](https://matrix.to/#/#vaultwarden:matrix.org)
+
+Image is based on [Rust implementation of Bitwarden API](https://github.com/dani-garcia/vaultwarden).
+
+**This project is not associated with the [Bitwarden](https://bitwarden.com/) project nor Bitwarden, Inc.**
+
+#### ⚠️**IMPORTANT**⚠️: When using this server, please report any bugs or suggestions to us directly (look at the bottom of this page for ways to get in touch), regardless of whatever clients you are using (mobile, desktop, browser...). DO NOT use the official support channels.
+
+---
+
+## Features
+
+Basically full implementation of Bitwarden API is provided including:
+
+ * Organizations support
+ * Attachments and Send
+ * Vault API support
+ * Serving the static files for Vault interface
+ * Website icons API
+ * Authenticator and U2F support
+ * YubiKey and Duo support
+ * Emergency Access
+
+## Installation
+Pull the docker image and mount a volume from the host for persistent storage:
+
+```sh
+docker pull vaultwarden/server:latest
+docker run -d --name vaultwarden -v /vw-data/:/data/ -p 80:80 vaultwarden/server:latest
+```
+This will preserve any persistent data under /vw-data/, you can adapt the path to whatever suits you.
+
+**IMPORTANT**: Most modern web browsers, disallow the use of Web Crypto APIs in insecure contexts. In this case, you might get an error like `Cannot read property 'importKey'`. To solve this problem, you need to access the web vault via HTTPS or localhost.
+
+This can be configured in [vaultwarden directly](https://github.com/dani-garcia/vaultwarden/wiki/Enabling-HTTPS) or using a third-party reverse proxy ([some examples](https://github.com/dani-garcia/vaultwarden/wiki/Proxy-examples)).
+
+If you have an available domain name, you can get HTTPS certificates with [Let's Encrypt](https://letsencrypt.org/), or you can generate self-signed certificates with utilities like [mkcert](https://github.com/FiloSottile/mkcert). Some proxies automatically do this step, like Caddy (see examples linked above).
+
+## Usage
+See the [vaultwarden wiki](https://github.com/dani-garcia/vaultwarden/wiki) for more information on how to configure and run the vaultwarden server.
+
+## Get in touch
+To ask a question, offer suggestions or new features or to get help configuring or installing the software, please use [GitHub Discussions](https://github.com/dani-garcia/vaultwarden/discussions) or [the forum](https://vaultwarden.discourse.group/).
+
+If you spot any bugs or crashes with vaultwarden itself, please [create an issue](https://github.com/dani-garcia/vaultwarden/issues/). Make sure you are on the latest version and there aren't any similar issues open, though!
+
+If you prefer to chat, we're usually hanging around at [#vaultwarden:matrix.org](https://matrix.to/#/#vaultwarden:matrix.org) room on Matrix. Feel free to join us!
+
+### Sponsors
+Thanks for your contribution to the project!
+
+
+
+
+
+ 站点
+ url
+ 支持情况
+ cookie
+
+
+ Acfun直播
+ live.acfun.cn
+ 滋瓷
+
+
+
+ 哔哩哔哩直播
+ live.bilibili.com
+ 滋瓷
+ 滋瓷
+
+
+ 战旗直播
+ www.zhanqi.tv
+ 滋瓷
+
+
+
+ 斗鱼直播
+ www.douyu.com
+ 滋瓷
+
+
+
+ 火猫直播
+ www.huomao.com
+ 滋瓷
+
+
+
+ 龙珠直播
+ longzhu.com
+ 滋瓷
+
+
+
+ 虎牙直播
+ www.huya.com
+ 滋瓷
+
+
+
+ CC直播
+ cc.163.com
+ 滋瓷
+
+
+
+ 一直播
+ www.yizhibo.com
+ 滋瓷
+
+
+
+ twitch
+ www.twitch.tv
+ TODO
+
+
+
+ OPENREC
+ www.openrec.tv
+ 滋瓷
+
+
+
+ 企鹅电竞
+ egame.qq.com
+ 滋瓷
+
+
+
+ 浪live
+ play.lang.live & www.lang.live
+ 滋瓷
+
+
+
+ 花椒
+ www.huajiao.com
+ 滋瓷
+
+
+
+ 抖音直播
+ live.douyin.com
+ 滋瓷
+ 滋瓷
+
+
+ 猫耳
+ fm.missevan.com
+ 滋瓷
+
+
+
+ 克拉克拉
+ www.hongdoufm.com
+ 滋瓷
+
+
+
+ 快手
+ live.kuaishou.com
+ 滋瓷
+ 滋瓷
+
+
+ YY直播
+ www.yy.com
+ 滋瓷
+
+
+
+微博直播
+ weibo.com
+ 滋瓷
+
+
+
diff --git a/apps/bitwarden/data.yml b/apps/bitwarden/data.yml
new file mode 100644
index 00000000..58192b24
--- /dev/null
+++ b/apps/bitwarden/data.yml
@@ -0,0 +1,20 @@
+name: Bitwarden
+tags:
+ - 工具
+title: 一个开源的密码管理服务
+type: 工具
+description: 一个开源的密码管理服务
+additionalProperties:
+ key: bitwarden
+ name: Bitwarden
+ tags:
+ - Tool
+ shortDescZh: 一个开源的密码管理服务
+ shortDescEn: An open source password management service
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://bitwarden.com/
+ github: https://github.com/dani-garcia/vaultwarden
+ document: https://github.com/dani-garcia/vaultwarden/wiki
\ No newline at end of file
diff --git a/apps/bitwarden/latest/.env.sample b/apps/bitwarden/latest/.env.sample
new file mode 100644
index 00000000..cca679a1
--- /dev/null
+++ b/apps/bitwarden/latest/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="bitwarden"
+PANEL_APP_PORT_HTTP="40031"
+DATA_PATH="./data"
diff --git a/apps/bitwarden/latest/data.yml b/apps/bitwarden/latest/data.yml
new file mode 100644
index 00000000..4812fc50
--- /dev/null
+++ b/apps/bitwarden/latest/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 40031
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
diff --git a/apps/bitwarden/latest/docker-compose.yml b/apps/bitwarden/latest/docker-compose.yml
new file mode 100644
index 00000000..2d7137d6
--- /dev/null
+++ b/apps/bitwarden/latest/docker-compose.yml
@@ -0,0 +1,18 @@
+version: '3'
+services:
+ bitwarden:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ volumes:
+ - "${DATA_PATH}:/data"
+ image: vaultwarden/server:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/bitwarden/logo.png b/apps/bitwarden/logo.png
new file mode 100644
index 00000000..302e0a6d
Binary files /dev/null and b/apps/bitwarden/logo.png differ
diff --git a/apps/calibre-web/0.6.21/.env.sample b/apps/calibre-web/0.6.21/.env.sample
new file mode 100644
index 00000000..a967d1f7
--- /dev/null
+++ b/apps/calibre-web/0.6.21/.env.sample
@@ -0,0 +1,4 @@
+CONTAINER_NAME="calibre-web"
+PANEL_APP_PORT_HTTP="40109"
+DATA_PATH="./data/books"
+TIME_ZONE="Asia/Shanghai"
diff --git a/apps/calibre-web/0.6.21/data.yml b/apps/calibre-web/0.6.21/data.yml
new file mode 100644
index 00000000..9b517e13
--- /dev/null
+++ b/apps/calibre-web/0.6.21/data.yml
@@ -0,0 +1,24 @@
+additionalProperties:
+ formFields:
+ - default: 40109
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data/books
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Books folder path
+ labelZh: 书本文件夹路径
+ required: true
+ type: text
+ - default: Asia/Shanghai
+ edit: true
+ envKey: TIME_ZONE
+ labelEn: Time zone
+ labelZh: 时区
+ required: true
+ type: text
diff --git a/apps/calibre-web/0.6.21/docker-compose.yml b/apps/calibre-web/0.6.21/docker-compose.yml
new file mode 100644
index 00000000..dae16b5c
--- /dev/null
+++ b/apps/calibre-web/0.6.21/docker-compose.yml
@@ -0,0 +1,25 @@
+version: '3'
+services:
+ calibre-web:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8083"
+ volumes:
+ - "./data/config:/config"
+ - "${DATA_PATH}:/books"
+ environment:
+ - PUID=1000
+ - PGID=1000
+ - TZ=${TIME_ZONE}
+ - DOCKER_MODS=linuxserver/mods:universal-calibre #optional
+ - OAUTHLIB_RELAX_TOKEN_SCOPE=1 #optional
+ image: linuxserver/calibre-web:0.6.21
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/calibre-web/README.md b/apps/calibre-web/README.md
new file mode 100644
index 00000000..bcd0de98
--- /dev/null
+++ b/apps/calibre-web/README.md
@@ -0,0 +1,133 @@
+# 使用说明
+
+- 默认账户密码
+
+```
+username:admin
+password:admin123
+```
+
+# 原始相关
+
+# Calibre-Web
+
+Calibre-Web is a web app that offers a clean and intuitive interface for browsing, reading, and downloading eBooks using a valid [Calibre](https://calibre-ebook.com) database.
+
+[](https://github.com/janeczku/calibre-web/blob/master/LICENSE)
+
+[](https://github.com/janeczku/calibre-web/releases)
+[](https://pypi.org/project/calibreweb/)
+[](https://pypi.org/project/calibreweb/)
+[](https://discord.gg/h2VsJ2NEfB)
+
+
+
+
+
+ Chris Alfano
+
+
+
+
+
+
+ Numberly
+
+
+ Table of Contents (click to expand)
+
+- [使用说明](#使用说明)
+- [原始相关](#原始相关)
+- [Calibre-Web](#calibre-web)
+ - [Features](#features)
+ - [Installation](#installation)
+ - [Installation via pip (recommended)](#installation-via-pip-recommended)
+ - [Quick Start](#quick-start)
+ - [Default Admin Login:](#default-admin-login)
+ - [Requirements](#requirements)
+ - [Docker Images](#docker-images)
+ - [**LinuxServer - x64, aarch64**](#linuxserver---x64-aarch64)
+ - [Contributor Recognition](#contributor-recognition)
+ - [Contact](#contact)
+ - [Contributing to Calibre-Web](#contributing-to-calibre-web)
+
+](https://changedetection.io?src=github)
+
+[![Release Version][release-shield]][release-link] [![Docker Pulls][docker-pulls]][docker-link] [![License][license-shield]](https://github.com/dgtlmoon/changedetection.io/blob/master/LICENSE.md)
+
+
+
+[**Don't have time? Let us host it for you! try our $8.99/month subscription - use our proxies and support!**](https://changedetection.io) , _half the price of other website change monitoring services!_
+
+- Chrome browser included.
+- Super fast, no registration needed setup.
+- Get started watching and receiving website change notifications straight away.
+
+
+### Target specific parts of the webpage using the Visual Selector tool.
+
+Available when connected to a playwright content fetcher (included as part of our subscription service)
+
+[
](https://changedetection.io?src=github)
+
+### Easily see what changed, examine by word, line, or individual character.
+
+[
](https://changedetection.io?src=github)
+
+
+### Perform interactive browser steps
+
+Fill in text boxes, click buttons and more, setup your changedetection scenario.
+
+Using the **Browser Steps** configuration, add basic steps before performing change detection, such as logging into websites, adding a product to a cart, accept cookie logins, entering dates and refining searches.
+
+[
](https://changedetection.io?src=github)
+
+After **Browser Steps** have been run, then visit the **Visual Selector** tab to refine the content you're interested in.
+Requires Playwright to be enabled.
+
+
+### Example use cases
+
+- Products and services have a change in pricing
+- _Out of stock notification_ and _Back In stock notification_
+- Monitor and track PDF file changes, know when a PDF file has text changes.
+- Governmental department updates (changes are often only on their websites)
+- New software releases, security advisories when you're not on their mailing list.
+- Festivals with changes
+- Discogs restock alerts and monitoring
+- Realestate listing changes
+- Know when your favourite whiskey is on sale, or other special deals are announced before anyone else
+- COVID related news from government websites
+- University/organisation news from their website
+- Detect and monitor changes in JSON API responses
+- JSON API monitoring and alerting
+- Changes in legal and other documents
+- Trigger API calls via notifications when text appears on a website
+- Glue together APIs using the JSON filter and JSON notifications
+- Create RSS feeds based on changes in web content
+- Monitor HTML source code for unexpected changes, strengthen your PCI compliance
+- You have a very sensitive list of URLs to watch and you do _not_ want to use the paid alternatives. (Remember, _you_ are the product)
+- Get notified when certain keywords appear in Twitter search results
+- Proactively search for jobs, get notified when companies update their careers page, search job portals for keywords.
+- Get alerts when new job positions are open on Bamboo HR and other job platforms
+- Website defacement monitoring
+- Pokémon Card Restock Tracker / Pokémon TCG Tracker
+
+_Need an actual Chrome runner with Javascript support? We support fetching via WebDriver and Playwright!_
+
+#### Key Features
+
+- Lots of trigger filters, such as "Trigger on text", "Remove text by selector", "Ignore text", "Extract text", also using regular-expressions!
+- Target elements with xPath and CSS Selectors, Easily monitor complex JSON with JSONPath or jq
+- Switch between fast non-JS and Chrome JS based "fetchers"
+- Track changes in PDF files (Monitor text changed in the PDF, Also monitor PDF filesize and checksums)
+- Easily specify how often a site should be checked
+- Execute JS before extracting text (Good for logging in, see examples in the UI!)
+- Override Request Headers, Specify `POST` or `GET` and other methods
+- Use the "Visual Selector" to help target specific elements
+- Configurable [proxy per watch](https://github.com/dgtlmoon/changedetection.io/wiki/Proxy-configuration)
+- Send a screenshot with the notification when a change is detected in the web page
+
+We [recommend and use Bright Data](https://brightdata.grsm.io/n0r16zf7eivq) global proxy services, Bright Data will match any first deposit up to $100 using our signup link.
+
+Please :star: star :star: this project and help it grow! https://github.com/dgtlmoon/changedetection.io/
+
+## Installation
+
+### Docker
+
+With Docker composer, just clone this repository and..
+
+```bash
+$ docker-compose up -d
+```
+
+Docker standalone
+```bash
+$ docker run -d --restart always -p "127.0.0.1:5000:5000" -v datastore-volume:/datastore --name changedetection.io dgtlmoon/changedetection.io
+```
+
+`:latest` tag is our latest stable release, `:dev` tag is our bleeding edge `master` branch.
+
+Alternative docker repository over at ghcr - [ghcr.io/dgtlmoon/changedetection.io](https://ghcr.io/dgtlmoon/changedetection.io)
+
+### Windows
+
+See the install instructions at the wiki https://github.com/dgtlmoon/changedetection.io/wiki/Microsoft-Windows
+
+### Python Pip
+
+Check out our pypi page https://pypi.org/project/changedetection.io/
+
+```bash
+$ pip3 install changedetection.io
+$ changedetection.io -d /path/to/empty/data/dir -p 5000
+```
+
+Then visit http://127.0.0.1:5000 , You should now be able to access the UI.
+
+_Now with per-site configurable support for using a fast built in HTTP fetcher or use a Chrome based fetcher for monitoring of JavaScript websites!_
+
+## Updating changedetection.io
+
+### Docker
+```
+docker pull dgtlmoon/changedetection.io
+docker kill $(docker ps -a -f name=changedetection.io -q)
+docker rm $(docker ps -a -f name=changedetection.io -q)
+docker run -d --restart always -p "127.0.0.1:5000:5000" -v datastore-volume:/datastore --name changedetection.io dgtlmoon/changedetection.io
+```
+
+### docker-compose
+
+```bash
+docker-compose pull && docker-compose up -d
+```
+
+See the wiki for more information https://github.com/dgtlmoon/changedetection.io/wiki
+
+
+## Filters
+
+XPath, JSONPath, jq, and CSS support comes baked in! You can be as specific as you need, use XPath exported from various XPath element query creation tools.
+(We support LXML `re:test`, `re:match` and `re:replace`.)
+
+## Notifications
+
+ChangeDetection.io supports a massive amount of notifications (including email, office365, custom APIs, etc) when a web-page has a change detected thanks to the apprise library.
+Simply set one or more notification URL's in the _[edit]_ tab of that watch.
+
+Just some examples
+
+ discord://webhook_id/webhook_token
+ flock://app_token/g:channel_id
+ gitter://token/room
+ gchat://workspace/key/token
+ msteams://TokenA/TokenB/TokenC/
+ o365://TenantID:AccountEmail/ClientID/ClientSecret/TargetEmail
+ rocket://user:password@hostname/#Channel
+ mailto://user:pass@example.com?to=receivingAddress@example.com
+ json://someserver.com/custom-api
+ syslog://
+
+And everything else in this list!
+
+
+
+Now you can also customise your notification content and use Jinja2 templating for their title and body!
+
+## JSON API Monitoring
+
+Detect changes and monitor data in JSON API's by using either JSONPath or jq to filter, parse, and restructure JSON as needed.
+
+
+
+This will re-parse the JSON and apply formatting to the text, making it super easy to monitor and detect changes in JSON API results
+
+
+
+### JSONPath or jq?
+
+For more complex parsing, filtering, and modifying of JSON data, jq is recommended due to the built-in operators and functions. Refer to the [documentation](https://stedolan.github.io/jq/manual/) for more specifc information on jq.
+
+One big advantage of `jq` is that you can use logic in your JSON filter, such as filters to only show items that have a value greater than/less than etc.
+
+See the wiki https://github.com/dgtlmoon/changedetection.io/wiki/JSON-Selector-Filter-help for more information and examples
+
+### Parse JSON embedded in HTML!
+
+When you enable a `json:` or `jq:` filter, you can even automatically extract and parse embedded JSON inside a HTML page! Amazingly handy for sites that build content based on JSON, such as many e-commerce websites.
+
+```
+
+...
+
+```
+
+`json:$..price` or `jq:..price` would give `3949.99`, or you can extract the whole structure (use a JSONpath test website to validate with)
+
+The application also supports notifying you that it can follow this information automatically
+
+
+## Proxy Configuration
+
+See the wiki https://github.com/dgtlmoon/changedetection.io/wiki/Proxy-configuration , we also support using [BrightData proxy services where possible]( https://github.com/dgtlmoon/changedetection.io/wiki/Proxy-configuration#brightdata-proxy-support)
+
+## Raspberry Pi support?
+
+Raspberry Pi and linux/arm/v6 linux/arm/v7 arm64 devices are supported! See the wiki for [details](https://github.com/dgtlmoon/changedetection.io/wiki/Fetching-pages-with-WebDriver)
+
+## API Support
+
+Supports managing the website watch list [via our API](https://changedetection.io/docs/api_v1/index.html)
+
+## Support us
+
+Do you use changedetection.io to make money? does it save you time or money? Does it make your life easier? less stressful? Remember, we write this software when we should be doing actual paid work, we have to buy food and pay rent just like you.
+
+
+Firstly, consider taking out a [change detection monthly subscription - unlimited checks and watches](https://changedetection.io?src=github) , even if you don't use it, you still get the warm fuzzy feeling of helping out the project. (And who knows, you might just use it!)
+
+Or directly donate an amount PayPal [](https://www.paypal.com/donate/?hosted_button_id=7CP6HR9ZCNDYJ)
+
+Or BTC `1PLFN327GyUarpJd7nVe7Reqg9qHx5frNn`
+
+
+
+## Commercial Support
+
+I offer commercial support, this software is depended on by network security, aerospace , data-science and data-journalist professionals just to name a few, please reach out at dgtlmoon@gmail.com for any enquiries, I am more than glad to work with your organisation to further the possibilities of what can be done with changedetection.io
+
+
+[release-shield]: https://img.shields.io:/github/v/release/dgtlmoon/changedetection.io?style=for-the-badge
+[docker-pulls]: https://img.shields.io/docker/pulls/dgtlmoon/changedetection.io?style=for-the-badge
+[test-shield]: https://github.com/dgtlmoon/changedetection.io/actions/workflows/test-only.yml/badge.svg?branch=master
+
+[license-shield]: https://img.shields.io/github/license/dgtlmoon/changedetection.io.svg?style=for-the-badge
+[release-link]: https://github.com/dgtlmoon/changedetection.io/releases
+[docker-link]: https://hub.docker.com/r/dgtlmoon/changedetection.io
\ No newline at end of file
diff --git a/apps/changedetectionio/data.yml b/apps/changedetectionio/data.yml
new file mode 100644
index 00000000..c0e74ac2
--- /dev/null
+++ b/apps/changedetectionio/data.yml
@@ -0,0 +1,20 @@
+name: Changedetection.io
+tags:
+ - 工具
+title: 网站更改检测、补货监控和通知。
+type: 工具
+description: 网站更改检测、补货监控和通知。
+additionalProperties:
+ key: changedetectionio
+ name: Changedetection.io
+ tags:
+ - Tool
+ shortDescZh: 网站更改检测、补货监控和通知。
+ shortDescEn: Web Site Change Detection, Restock monitoring and notifications
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://changedetection.io/
+ github: https://github.com/dgtlmoon/changedetection.io
+ document: https://github.com/dgtlmoon/changedetection.io/wiki
diff --git a/apps/changedetectionio/latest/.env.sample b/apps/changedetectionio/latest/.env.sample
new file mode 100644
index 00000000..db8393dc
--- /dev/null
+++ b/apps/changedetectionio/latest/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="changedetection"
+PANEL_APP_PORT_HTTP="40097"
+DATA_PATH="./data"
diff --git a/apps/changedetectionio/latest/data.yml b/apps/changedetectionio/latest/data.yml
new file mode 100644
index 00000000..23a9cfe9
--- /dev/null
+++ b/apps/changedetectionio/latest/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 40097
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
diff --git a/apps/changedetectionio/latest/docker-compose.yml b/apps/changedetectionio/latest/docker-compose.yml
new file mode 100644
index 00000000..5e0f8ffb
--- /dev/null
+++ b/apps/changedetectionio/latest/docker-compose.yml
@@ -0,0 +1,18 @@
+version: '3'
+services:
+ changedetection:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:5000"
+ volumes:
+ - "${DATA_PATH}:/datastore"
+ image: dgtlmoon/changedetection.io:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/changedetectionio/logo.png b/apps/changedetectionio/logo.png
new file mode 100644
index 00000000..8719f226
Binary files /dev/null and b/apps/changedetectionio/logo.png differ
diff --git a/apps/chatgpt-next-web/2.9.10/.env.sample b/apps/chatgpt-next-web/2.9.10/.env.sample
new file mode 100644
index 00000000..ecff0a25
--- /dev/null
+++ b/apps/chatgpt-next-web/2.9.10/.env.sample
@@ -0,0 +1,6 @@
+CONTAINER_NAME="chatgpt-next-web"
+API_BASE_URL="https://api.openai.com"
+API_KEY="sk-xxx"
+PANEL_APP_PORT_HTTP="40042"
+PROXY=""
+SECRET_KEY="chatgptnextweb_password"
diff --git a/apps/chatgpt-next-web/2.9.10/data.yml b/apps/chatgpt-next-web/2.9.10/data.yml
new file mode 100644
index 00000000..c1c32268
--- /dev/null
+++ b/apps/chatgpt-next-web/2.9.10/data.yml
@@ -0,0 +1,40 @@
+additionalProperties:
+ formFields:
+ - default: 40042
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: "sk-xxx"
+ edit: true
+ envKey: API_KEY
+ labelEn: OPENAI API KEY
+ labelZh: OPENAI API KEY
+ required: true
+ type: text
+ - default: "chatgptnextweb"
+ edit: true
+ envKey: SECRET_KEY
+ labelEn: Access rights key, optional (recommended)
+ labelZh: 访问权限密钥,可选(强烈建议填写)
+ random: true
+ required: false
+ rule: paramComplexity
+ type: password
+ - default: ""
+ edit: true
+ envKey: PROXY
+ labelEn: Proxy (example:http://127.0.0.1:7890 user password)
+ labelZh: 代理地址(例子:http://127.0.0.1:7890 user password)
+ required: false
+ type: text
+ - default: "https://api.openai.com"
+ edit: true
+ envKey: API_BASE_URL
+ labelEn: API interface address
+ labelZh: API接口地址
+ required: true
+ type: text
\ No newline at end of file
diff --git a/apps/chatgpt-next-web/2.9.10/docker-compose.yml b/apps/chatgpt-next-web/2.9.10/docker-compose.yml
new file mode 100644
index 00000000..17c28185
--- /dev/null
+++ b/apps/chatgpt-next-web/2.9.10/docker-compose.yml
@@ -0,0 +1,21 @@
+version: '3'
+services:
+ chatgpt-next-web:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:3000"
+ environment:
+ - "OPENAI_API_KEY=${API_KEY}"
+ - "CODE=${SECRET_KEY}"
+ - "PROXY_URL=${PROXY}"
+ - "BASE_URL=${API_BASE_URL}"
+ image: yidadaa/chatgpt-next-web:v2.9.10
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/chatgpt-next-web/README.md b/apps/chatgpt-next-web/README.md
new file mode 100644
index 00000000..f8d5693e
--- /dev/null
+++ b/apps/chatgpt-next-web/README.md
@@ -0,0 +1,186 @@
+
+
+
ChatGPT Next Web
+
+一键免费部署你的私人 ChatGPT 网页应用。
+
+[演示 Demo](https://chat-gpt-next-web.vercel.app/) / [反馈 Issues](https://github.com/Yidadaa/ChatGPT-Next-Web/issues) / [加入 Discord](https://discord.gg/zrhvHCr79N) / [QQ 群](https://user-images.githubusercontent.com/16968934/228190818-7dd00845-e9b9-4363-97e5-44c507ac76da.jpeg) / [打赏开发者](https://user-images.githubusercontent.com/16968934/227772541-5bcd52d8-61b7-488c-a203-0330d8006e2b.jpg) / [Donate](#捐赠-donate-usdt)
+
+[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2FYidadaa%2FChatGPT-Next-Web&env=OPENAI_API_KEY&env=CODE&project-name=chatgpt-next-web&repository-name=ChatGPT-Next-Web)
+
+[](https://gitpod.io/#https://github.com/Yidadaa/ChatGPT-Next-Web)
+
+
+
+
+
+
+## 赞助
+
+如果你觉得这个项目对你有帮助,并且情况允许的话,可以给我一点点支持,总之非常感谢支持~
+
+
+
+
+
+
+
+
+
+
+
+[Laravel](https://laravel.com) ,优雅的 PHP Web 框架。
+
+[Dcat Admin](https://dcatadmin.com) ,高颜值、高效率的后台开发框架。
+
+`Dr. Peter Schlumbohm`,感谢发明了 Chemex 冲煮咖啡。
+
+## 简介
+
+咖啡壶(Chemex)是一个轻量的、现代设计风格的 ICT 资产管理系统。得益于 [Laravel](https://laravel.com/)
+框架以及 [Dcat Admin](https://dcatadmin.com)
+开发平台,使其具备了优雅、简洁的优秀体验。 咖啡壶(Chemex)
+是完全免费且开源的,任何人都可以无限制的修改代码以及部署服务,这对于很多想要对ICT资产做信息化管理的中小型企业来说,是一个很好的选择:低廉的成本换回的是高效的管理方案,同时又有健康的生态提供支持。
+
+## 文档
+
+所有文档都存在于本项目的 `docs` 子目录中,可以随时查阅。
+
+请访问我了解如何 [安装](https://github.com/celaraze/chemex/blob/main/docs/%E5%AE%89%E8%A3%85.md)。
+
+请访问我了解如何 [升级](https://github.com/celaraze/chemex/blob/main/docs/%E5%8D%87%E7%BA%A7.md)。
+
+## 特点
+
+使用先进的 Web 框架进行开发。
+
+简洁优雅的使用体验。
+
+灵活可配置的自定义字段。
+
+## 反馈问题
+
+请随时牢记,这是一个开源项目,作者有自己的生活、自己的工作,QQ群建立的目的是提供一个场所供用户们互相交流,作者不会提供1对1的服务。
+
+最好的反馈方式是在本代码仓库中提交 Issue,我们在空余时间检查并解决。
+
+## 截图
+
+
+
+
+
+
+
+
+
+## 咖啡壶没有满足我的需求,我想要咖啡壶成为我想要的样子
+
+咖啡壶是开源的,程序本体及其衍生工具的源码都在你的手中,你可以自行修改成为你想要的样子。
+
+`Fork` 本仓库,修改代码,成为你的。
+
+## 开源协议
+
+咖啡壶(Chemex)遵循 [GPL3.0](https://www.gnu.org/licenses/gpl-3.0.html) 开源协议。
+
+GPL3.0 协议受国家法律认可且保护,一切基于 Chemex 进行二次修改、分发、开源、商业行为必须注明原作者及修改内容。
diff --git a/apps/chemex/data.yml b/apps/chemex/data.yml
new file mode 100644
index 00000000..01502fdf
--- /dev/null
+++ b/apps/chemex/data.yml
@@ -0,0 +1,20 @@
+name: Chemex
+tags:
+ - 工具
+title: 一个免费、开源、高效且漂亮的运维资产管理平台
+type: 工具
+description: 一个免费、开源、高效且漂亮的运维资产管理平台
+additionalProperties:
+ key: chemex
+ name: Chemex
+ tags:
+ - Tool
+ shortDescZh: 一个免费、开源、高效且漂亮的运维资产管理平台
+ shortDescEn: A free, open-source, efficient and beautiful O&M asset management platform
+ type: tool
+ crossVersionUpdate: false
+ limit: 0
+ recommend: 0
+ website: https://hub.docker.com/r/celaraze/chemex
+ github: https://github.com/celaraze/chemex
+ document: https://github.com/celaraze/chemex
diff --git a/apps/chemex/latest/.env.sample b/apps/chemex/latest/.env.sample
new file mode 100644
index 00000000..37abaa07
--- /dev/null
+++ b/apps/chemex/latest/.env.sample
@@ -0,0 +1,11 @@
+CONTAINER_NAME="chemex"
+ENV_PATH="./data/.env"
+PANEL_APP_PORT_HTTP="40028"
+PANEL_DB_HOST="mysql"
+CHEMEX_DB_PORT="3306"
+PANEL_DB_NAME="chemex"
+PANEL_DB_USER="chemex"
+PANEL_DB_USER_PASSWORD="mysql_password"
+PANEL_REDIS_DB_HOST="redis"
+PANEL_DB_ROOT_PASSWORD="redis_password"
+REDIS_DB_PORT="6379"
diff --git a/apps/chemex/latest/data.yml b/apps/chemex/latest/data.yml
new file mode 100644
index 00000000..2dc131b3
--- /dev/null
+++ b/apps/chemex/latest/data.yml
@@ -0,0 +1,86 @@
+additionalProperties:
+ formFields:
+ - child:
+ default: ""
+ envKey: PANEL_DB_HOST
+ labelEn: Database Service
+ labelZh: 数据库服务
+ required: true
+ type: service
+ default: mysql
+ labelEn: Database Service
+ labelZh: 数据库服务
+ params:
+ - envKey: CHEMEX_DB_PORT
+ key: mysql
+ type: param
+ value: "3306"
+ - envKey: CHEMEX_DB_PORT
+ key: postgresql
+ type: param
+ value: "5432"
+ required: true
+ type: apps
+ values:
+ - label: MySQL
+ value: mysql
+ - default: chemex
+ envKey: PANEL_DB_NAME
+ labelEn: Database
+ labelZh: 数据库名
+ random: true
+ required: true
+ rule: paramCommon
+ type: text
+ - default: chemex
+ envKey: PANEL_DB_USER
+ labelEn: User
+ labelZh: 数据库用户
+ random: true
+ required: true
+ rule: paramCommon
+ type: text
+ - default: chemex
+ envKey: PANEL_DB_USER_PASSWORD
+ labelEn: Password
+ labelZh: 数据库用户密码
+ random: true
+ required: true
+ rule: paramComplexity
+ type: password
+ - default: 40028
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data/.env
+ edit: true
+ envKey: ENV_PATH
+ labelEn: Environment configuration file path
+ labelZh: 环境配置文件路径
+ required: true
+ type: text
+ - default: ""
+ envKey: PANEL_REDIS_DB_HOST
+ key: redis
+ labelEn: Redis Service
+ labelZh: Redis 服务
+ required: true
+ type: service
+ - default: ""
+ envKey: PANEL_DB_ROOT_PASSWORD
+ labelEn: Redis Password
+ labelZh: Redis 密码
+ required: true
+ type: password
+ - default: 6379
+ edit: true
+ envKey: REDIS_DB_PORT
+ labelEn: Redis Port
+ labelZh: Redis端口
+ required: true
+ rule: paramPort
+ type: number
\ No newline at end of file
diff --git a/apps/chemex/latest/data/.env b/apps/chemex/latest/data/.env
new file mode 100644
index 00000000..299cb939
--- /dev/null
+++ b/apps/chemex/latest/data/.env
@@ -0,0 +1,81 @@
+# 欢迎使用 chemex,在您开始之前,请按照指引完成配置
+
+# 基础配置:
+
+### 第一步:数据库配置
+# 数据库类型,不需要修改(兼容mariadb)
+DB_CONNECTION=mysql
+# 数据库地址
+# 1panel数据库页面可以查看连接信息
+DB_HOST=mysql
+# 数据库端口号
+DB_PORT=3306
+# 数据库名称(应用创建时的数据库信息)
+DB_DATABASE=
+# 数据库用户名(应用创建时的数据库信息)
+DB_USERNAME=
+# 数据库密码(应用创建时的数据库信息)
+DB_PASSWORD=
+
+### 第二步:配置HTTPS
+### 如果您使用HTTPS协议,请将下面两个参数修改为true
+ADMIN_HTTPS=true
+
+### 第三步:配置应用信息
+# 应用名称,一般不需要修改
+APP_NAME=chemex
+APP_ENV=local
+# 默认应用地址,在站点配置中如果没有设置,将以此生效
+APP_URL="${APP_URL}"
+
+### 第四步:执行安装命令
+# 在项目根目录中执行 php artisan chemex:install
+
+# 高级配置:
+
+# 应用密钥,可以通过执行 php artisan key:generate 重新生成
+# 此项影响用户密码,一旦修改,既有的密码将全部失效,请谨慎修改
+APP_KEY=base64:ytRzqoUXo7skRrVZIMQxw+cnoVUXVcOhWioKfFtVBUg=
+
+# 是否开启 DEBUG 模式
+# 开启后如果程序出错,将会抛出异常
+# 关闭后如果程序出错,将只会给出 HTTP 错误码 500
+APP_DEBUG=true
+
+LOG_CHANNEL=stack
+
+BROADCAST_DRIVER=log
+CACHE_DRIVER=file
+QUEUE_CONNECTION=sync
+SESSION_DRIVER=file
+SESSION_LIFETIME=120
+
+# 1panel数据库页面可以查看连接信息
+REDIS_HOST=redis
+REDIS_PASSWORD=null
+REDIS_PORT=6379
+
+MAIL_MAILER=smtp
+MAIL_HOST=smtp.mailtrap.io
+MAIL_PORT=2525
+MAIL_USERNAME=null
+MAIL_PASSWORD=null
+MAIL_ENCRYPTION=null
+MAIL_FROM_ADDRESS=null
+MAIL_FROM_NAME="${APP_NAME}"
+
+AWS_ACCESS_KEY_ID=
+AWS_SECRET_ACCESS_KEY=
+AWS_DEFAULT_REGION=us-east-1
+AWS_BUCKET=
+
+PUSHER_APP_ID=
+PUSHER_APP_KEY=
+PUSHER_APP_SECRET=
+PUSHER_APP_CLUSTER=mt1
+
+MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
+MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
+
+# 决定了此实例是否以demo运行(部分权限受阻)
+ADMIN_DEMO=false
diff --git a/apps/chemex/latest/docker-compose.yml b/apps/chemex/latest/docker-compose.yml
new file mode 100644
index 00000000..d56d637f
--- /dev/null
+++ b/apps/chemex/latest/docker-compose.yml
@@ -0,0 +1,30 @@
+version: "3"
+services:
+ chemex:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ volumes:
+ - "${ENV_PATH}:/var/www/html/laravel/.env"
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8000"
+ environment:
+ - "DB_CONNECTION=mysql"
+ - "DB_HOST=${PANEL_DB_HOST}"
+ - "DB_PORT=${CHEMEX_DB_PORT}"
+ - "DB_DATABASE=${PANEL_DB_NAME}"
+ - "DB_USERNAME=${PANEL_DB_USER}"
+ - "DB_PASSWORD=${PANEL_DB_USER_PASSWORD}"
+ - "REDIS_HOST=${PANEL_REDIS_DB_HOST}"
+ - "REDIS_PORT=${REDIS_DB_PORT}"
+ - "REDIS_PASSWORD=${PANEL_DB_ROOT_PASSWORD}"
+ tty: true
+ image: celaraze/chemex:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
+
diff --git a/apps/chemex/logo.png b/apps/chemex/logo.png
new file mode 100644
index 00000000..54d6f1c1
Binary files /dev/null and b/apps/chemex/logo.png differ
diff --git a/apps/chinesesubfinder/0.55.2/.env.sample b/apps/chinesesubfinder/0.55.2/.env.sample
new file mode 100644
index 00000000..cf94ed60
--- /dev/null
+++ b/apps/chinesesubfinder/0.55.2/.env.sample
@@ -0,0 +1,6 @@
+CONTAINER_NAME="chinesesubfinder"
+PANEL_APP_PORT_HTTP="40158"
+PANEL_APP_PORT_IMAGE="40159"
+DATA_PATH="./data"
+MEDIA_PATH="./data/media"
+MEDIA_PATH2="./data/media2"
diff --git a/apps/chinesesubfinder/0.55.2/data.yml b/apps/chinesesubfinder/0.55.2/data.yml
new file mode 100644
index 00000000..0339448e
--- /dev/null
+++ b/apps/chinesesubfinder/0.55.2/data.yml
@@ -0,0 +1,39 @@
+additionalProperties:
+ formFields:
+ - default: 40158
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 40159
+ edit: true
+ envKey: PANEL_APP_PORT_IMAGE
+ labelEn: WebUI video list with the port used to read pictures (127.0.0.1:port)
+ labelZh: webui 视频列表读取图片用的端口 (127.0.0.1:port)
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+ - default: ./data/media
+ edit: true
+ envKey: MEDIA_PATH
+ labelEn: Media folder path
+ labelZh: 媒体文件夹路径
+ required: true
+ type: text
+ - default: ./data/media2
+ edit: true
+ envKey: MEDIA_PATH2
+ labelEn: Media folder path
+ labelZh: 媒体文件夹路径
+ required: true
+ type: text
diff --git a/apps/chinesesubfinder/0.55.2/docker-compose.yml b/apps/chinesesubfinder/0.55.2/docker-compose.yml
new file mode 100644
index 00000000..b249f72a
--- /dev/null
+++ b/apps/chinesesubfinder/0.55.2/docker-compose.yml
@@ -0,0 +1,33 @@
+version: '3'
+services:
+ chinesesubfinder:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:19035"
+ - "127.0.0.1:${PANEL_APP_PORT_IMAGE}:19037"
+ volumes:
+ - ${DATA_PATH}/config:/config
+ - ${MEDIA_PATH}:/media
+ - ${MEDIA_PATH2}:/media2
+ - ${DATA_PATH}/browser:/root/.cache/rod/browser
+ environment:
+ - PUID=1026
+ - PGID=100
+ - PERMS=true
+ - TZ=Asia/Shanghai
+ - UMASK=022
+ logging:
+ driver: "json-file"
+ options:
+ max-size: "5m"
+ hostname: chinesesubfinder
+ image: allanpk716/chinesesubfinder:v0.55.2
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/chinesesubfinder/README.md b/apps/chinesesubfinder/README.md
new file mode 100644
index 00000000..b8c5c47e
--- /dev/null
+++ b/apps/chinesesubfinder/README.md
@@ -0,0 +1,112 @@
+# ChineseSubFinder
+
+本项目的初衷仅仅是想自动化搞定**限定条件**下 **中文** 字幕,在**第三方**的网站或者接口的下载。
+
+> CSF 使用交流目前只有一个 telegram 小组,https://t.me/chinesesubfinder 。
+>
+> 个人建议是以使用和讨论为主,bug 的反馈最好去 issue 按模板反馈和提出问题,也好有一个地方追溯。
+
+## 前言
+
+移除全功能版本,以后都是轻量级(Lite),tag 继续保留,实则都有是一个。不再直接支持某些字幕网站的下载(人多了,对方服务器扛不住),请使用第三方的字幕下载服务,subtitle best,具体请进入程序后去设置界面,会有引导。
+
+最新的版本可以查看 [Docker Hub](https://hub.docker.com/repository/docker/allanpk716/chinesesubfinder) ,如果不在 telegram 群内,没有特殊的需求请不要选择 **Beta** 版本使用。
+
+## 前置要求
+
+如果想顺利的用起来,还是对电影、连续剧的目录有一定的要求的。见文档:
+
+- [电影的推荐目录结构](https://github.com/ChineseSubFinder/ChineseSubFinder/blob/docs/DesignFile/%E7%94%B5%E5%BD%B1%E5%92%8C%E8%BF%9E%E7%BB%AD%E5%89%A7%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84%E7%A4%BA%E4%BE%8B.md)
+- [连续剧目录结构要求](https://github.com/ChineseSubFinder/ChineseSubFinder/blob/docs/DesignFile/%E8%BF%9E%E7%BB%AD%E5%89%A7%E7%9B%AE%E5%BD%95%E7%BB%93%E6%9E%84%E8%A6%81%E6%B1%82.md)
+
+## How to use
+
+### 如何部署
+
+- [Docker 部署教程](https://github.com/ChineseSubFinder/ChineseSubFinder/blob/master/docker/readme.md)
+- [如何在 Windows 上使用](https://github.com/ChineseSubFinder/ChineseSubFinder/blob/docs/DesignFile/v0.20教程/01.如何在Windows上使用.md)
+- [Docker ChineseSubFinder--中文字幕自动下载 | sleele 的博客 - 第三方教程](https://sleele.com/2021/06/25/docker-chinesesubfinder-中文字幕自动下载/)
+
+### 如何使用
+
+* [使用教程](https://github.com/ChineseSubFinder/ChineseSubFinder/tree/docs/DesignFile/使用教程)
+* [传参启动(v0.41.x 之后才支持)](https://github.com/ChineseSubFinder/ChineseSubFinder/blob/docs/DesignFile/传参启动/传参启动.md)
+
+### API 文档文档
+
+- [对外的 http api](https://github.com/ChineseSubFinder/ChineseSubFinder/tree/docs/DesignFile/ApiKey%E8%AE%BE%E8%AE%A1),以及[示例](https://github.com/ChineseSubFinder/ChineseSubFinder/issues/336)
+
+### 高阶设置
+
+- [字幕时间轴校正 V2](https://github.com/ChineseSubFinder/ChineseSubFinder/blob/docs/DesignFile/%E5%AD%97%E5%B9%95%E6%97%B6%E9%97%B4%E8%BD%B4%E6%A0%A1%E6%AD%A3V2.md),有待更新 v0.20.x 对应的设置
+
+建议了解的文档:
+
+- [关于字幕名称命名格式说明](https://github.com/ChineseSubFinder/ChineseSubFinder/blob/docs/DesignFile/%E5%85%B3%E4%BA%8E%E5%AD%97%E5%B9%95%E5%90%8D%E7%A7%B0%E5%91%BD%E5%90%8D%E6%A0%BC%E5%BC%8F%E8%AF%B4%E6%98%8E.md)
+
+如果文档没有及时更新,或者描述含糊、歧义的,欢迎提 [ISSUES](https://github.com/ChineseSubFinder/ChineseSubFinder/issues)。
+
+## 问题列表
+
+如果遇到问题了,可以先看看这里总结的问题,如果未能解决,依然可以继续提问。[问题列表](https://github.com/ChineseSubFinder/ChineseSubFinder/blob/docs/DesignFile/%E9%97%AE%E9%A2%98%E5%88%97%E8%A1%A8.md)
+
+## 其他文档
+
+- [削刮器的推荐设置](https://github.com/ChineseSubFinder/ChineseSubFinder/blob/docs/DesignFile/%E5%89%8A%E5%88%AE%E5%99%A8%E7%9A%84%E6%8E%A8%E8%8D%90%E8%AE%BE%E7%BD%AE.md)
+- [如何判断视频是否需要下载、更新字幕的](https://github.com/ChineseSubFinder/ChineseSubFinder/blob/docs/DesignFile/%E5%A6%82%E4%BD%95%E5%88%A4%E6%96%AD%E8%A7%86%E9%A2%91%E6%98%AF%E5%90%A6%E9%9C%80%E8%A6%81%E4%B8%8B%E8%BD%BD%E3%80%81%E6%9B%B4%E6%96%B0%E5%AD%97%E5%B9%95%E7%9A%84.md)
+- [设计](https://github.com/ChineseSubFinder/ChineseSubFinder/blob/docs/DesignFile/%E8%AE%BE%E8%AE%A1.md)
+- [字幕时间轴校正功能实现解析(有待补全)](https://github.com/ChineseSubFinder/ChineseSubFinder/blob/docs/DesignFile/字幕时间轴校正功能实现解析/字幕时间轴校正功能实现解析.md)
+
+## 如何编译此项目
+
+* 首选需要编译 Web 部分,见 frontend/README.md
+
+* 然后才能编译可执行程序部分
+
+> 如果是 Windows,那么可以从这里下载 [MinGW-w64 - for 32 and 64 bit Windows - Browse /Toolchains targetting Win64 at SourceForge.net](https://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win64/)
+>
+> - [x86_64-posix-seh](https://sourceforge.net/projects/mingw-w64/files/Toolchains targetting Win64/Personal Builds/mingw-builds/8.1.0/threads-posix/seh/x86_64-8.1.0-release-posix-seh-rt_v6-rev0.7z)
+>
+> 后面的 CGO 编译需要:
+>
+> 1、新建变量: PATH,变量值为:xx\mingw64\bin
+>
+> 2、新建变量:LIB,变量值为:xx\mingw64\lib
+>
+> 3、新建变量:INCLUDE,变量值为:xx\mingw64\include
+>
+> 使用 gcc -v 验证是否生效
+
+go mod tidy ,然后需要设置 CGO=1 ,找到 cmd\chinesesubfinder\main.go 这个入口文件就好了。 :joy:
+
+编译代码如下:
+
+> cd ./cmd/chinesesubfinder \
+> && go build -ldflags="-s -w" -o /app/chinesesubfinder
+
+跨平台是没有问题的,作者现在就是 Windows 开发的。因为手头没得 Mac OS ,也懒得整虚拟机去试,应该也是可以直接玩起来的。
+
+## 版本
+
+请务必使用最新版本,这里忘记(懒得)写更新记录的话,可以去 [Releases](https://github.com/ChineseSubFinder/ChineseSubFinder/releases) 查看最新到什么版本了。
+
+> 因为业余时间不多,都是断断续续做的,基本我只能记得最近两个版本的功能···
+
+- v0.42.x 新增,支持手动上传字幕,以及在 Web 界面即可预览字幕效果,重写“库”的刷新逻辑。 -- 2022年10月31日
+- ···
+- 完成初版,仅仅支持电影的字幕下载 -- 2021 年 6 月 13 日
+
+## 感谢
+
+- [iMyon (Myon) ](https://github.com/iMyon) 帮搞定 Web 前端部分
+- [devome](https://github.com/devome) 帮解决 Linux 和 Docker 编译、部署相关问题
+- [宅宅还是度度](https://weibo.com/u/2884534224) 设计 Logo
+
+感谢下面项目的帮助
+
+- [Andyfoo/GoSubTitleSearcher: 字幕搜索查询(go 语言版)](https://github.com/Andyfoo/GoSubTitleSearcher)
+- [go-rod/rod: A Devtools driver for web automation and scraping](https://github.com/go-rod/rod)
+- [ausaki/subfinder: 字幕查找器](https://github.com/ausaki/subfinder)
+- [golandscape/sat: 高性能简繁体转换](https://github.com/golandscape/sat)
+- [smacke/ffsubsync: Automagically synchronize subtitles with video](https://github.com/smacke/ffsubsync)
+- [shimberger/gohls: A server that exposes a directory for video streaming via web interface](https://github.com/shimberger/gohls)
diff --git a/apps/chinesesubfinder/data.yml b/apps/chinesesubfinder/data.yml
new file mode 100644
index 00000000..4c899318
--- /dev/null
+++ b/apps/chinesesubfinder/data.yml
@@ -0,0 +1,20 @@
+name: ChineseSubFinder
+tags:
+ - 工具
+title: 自动化中文字幕下载
+type: 工具
+description: 自动化中文字幕下载
+additionalProperties:
+ key: chinesesubfinder
+ name: ChineseSubFinder
+ tags:
+ - Tool
+ shortDescZh: 自动化中文字幕下载
+ shortDescEn: Automatic Chinese subtitle download
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://github.com/ChineseSubFinder/ChineseSubFinder
+ github: https://github.com/ChineseSubFinder/ChineseSubFinder
+ document: https://github.com/ChineseSubFinder/ChineseSubFinder
diff --git a/apps/chinesesubfinder/latest/.env.sample b/apps/chinesesubfinder/latest/.env.sample
new file mode 100644
index 00000000..cf94ed60
--- /dev/null
+++ b/apps/chinesesubfinder/latest/.env.sample
@@ -0,0 +1,6 @@
+CONTAINER_NAME="chinesesubfinder"
+PANEL_APP_PORT_HTTP="40158"
+PANEL_APP_PORT_IMAGE="40159"
+DATA_PATH="./data"
+MEDIA_PATH="./data/media"
+MEDIA_PATH2="./data/media2"
diff --git a/apps/chinesesubfinder/latest/data.yml b/apps/chinesesubfinder/latest/data.yml
new file mode 100644
index 00000000..0339448e
--- /dev/null
+++ b/apps/chinesesubfinder/latest/data.yml
@@ -0,0 +1,39 @@
+additionalProperties:
+ formFields:
+ - default: 40158
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 40159
+ edit: true
+ envKey: PANEL_APP_PORT_IMAGE
+ labelEn: WebUI video list with the port used to read pictures (127.0.0.1:port)
+ labelZh: webui 视频列表读取图片用的端口 (127.0.0.1:port)
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+ - default: ./data/media
+ edit: true
+ envKey: MEDIA_PATH
+ labelEn: Media folder path
+ labelZh: 媒体文件夹路径
+ required: true
+ type: text
+ - default: ./data/media2
+ edit: true
+ envKey: MEDIA_PATH2
+ labelEn: Media folder path
+ labelZh: 媒体文件夹路径
+ required: true
+ type: text
diff --git a/apps/chinesesubfinder/latest/docker-compose.yml b/apps/chinesesubfinder/latest/docker-compose.yml
new file mode 100644
index 00000000..531f81e5
--- /dev/null
+++ b/apps/chinesesubfinder/latest/docker-compose.yml
@@ -0,0 +1,33 @@
+version: '3'
+services:
+ chinesesubfinder:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:19035"
+ - "127.0.0.1:${PANEL_APP_PORT_IMAGE}:19037"
+ volumes:
+ - ${DATA_PATH}/config:/config
+ - ${MEDIA_PATH}:/media
+ - ${MEDIA_PATH2}:/media2
+ - ${DATA_PATH}/browser:/root/.cache/rod/browser
+ environment:
+ - PUID=1026
+ - PGID=100
+ - PERMS=true
+ - TZ=Asia/Shanghai
+ - UMASK=022
+ logging:
+ driver: "json-file"
+ options:
+ max-size: "5m"
+ hostname: chinesesubfinder
+ image: allanpk716/chinesesubfinder:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/chinesesubfinder/logo.png b/apps/chinesesubfinder/logo.png
new file mode 100644
index 00000000..c2bcc961
Binary files /dev/null and b/apps/chinesesubfinder/logo.png differ
diff --git a/apps/cloudbeaver/23.2.4/.env.sample b/apps/cloudbeaver/23.2.4/.env.sample
new file mode 100644
index 00000000..dd21cf85
--- /dev/null
+++ b/apps/cloudbeaver/23.2.4/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="cloudbeaver"
+PANEL_APP_PORT_HTTP="40083"
+DATA_PATH="./data"
diff --git a/apps/cloudbeaver/23.2.4/data.yml b/apps/cloudbeaver/23.2.4/data.yml
new file mode 100644
index 00000000..b7f6871e
--- /dev/null
+++ b/apps/cloudbeaver/23.2.4/data.yml
@@ -0,0 +1,18 @@
+additionalProperties:
+ formFields:
+ - default: 40083
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+
diff --git a/apps/cloudbeaver/23.2.4/docker-compose.yml b/apps/cloudbeaver/23.2.4/docker-compose.yml
new file mode 100644
index 00000000..21145a17
--- /dev/null
+++ b/apps/cloudbeaver/23.2.4/docker-compose.yml
@@ -0,0 +1,19 @@
+version: '3'
+services:
+ cloudbeaver:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8978"
+ volumes:
+ - "${DATA_PATH}:/opt/cloudbeaver/workspace"
+ tty: true
+ image: dbeaver/cloudbeaver:23.2.4
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/cloudbeaver/README.md b/apps/cloudbeaver/README.md
new file mode 100644
index 00000000..93b613e3
--- /dev/null
+++ b/apps/cloudbeaver/README.md
@@ -0,0 +1,70 @@
+# CloudBeaver Community
+
+
+
+Cloud Database Manager - Community Edition.
+CloudBeaver is a web server which provides rich web interface. Server itself is a Java application, web part is written on TypeScript and React.
+It is free to use and open-source (licensed under [Apache 2](https://github.com/dbeaver/cloudbeaver/blob/devel/LICENSE) license).
+See out [WIKI](https://github.com/dbeaver/cloudbeaver/wiki) for more details.
+
+
+
+## Run in Docker
+
+- [Official Docker repository](https://hub.docker.com/r/dbeaver/cloudbeaver)
+- [Running instructions](https://github.com/dbeaver/cloudbeaver/wiki/Run-Docker-Container)
+
+## Demo server
+
+You can see live demo of CloudBeaver here: https://demo.cloudbeaver.io
+
+[Database access instructions](https://github.com/dbeaver/cloudbeaver/wiki/Demo-Server)
+
+## Changelog
+
+### CloudBeaver 23.1.3 - 2023-07-24
+
+- Users can simultaneously edit resources, allowing them to work together;
+- We have improved the UX in the search bar - users can delete a query or request by clicking on the cross icon;
+- The search request considers file names and exclude the .sql file extension for now;
+- Different bug fixes and enhancements have been made.
+
+### CloudBeaver 23.1.2 - 2023-07-10
+
+- We have improved the SQL Editor functionality by adding support for displaying tables with nested arrays of objects;
+- The ability to compress files during export allows for faster download speeds, particularly for larger files;
+- New Settings panel displays the product configuration settings such as Minimum fetch size, Maximum fetch size, and Default fetch size from the Data Editor;
+- Different bug fixes and enhancements have been made.
+
+### CloudBeaver 23.1.1 - 2023-06-26
+
+- Connections are consistently displayed now when they are pre-configured into the workspace in the Global Configuration json file.
+- Different bug fixes and enhancements have been made.
+
+### CloudBeaver 23.1.0 - 2023-06-05
+
+Changes since 23.0.0
+
+- Data viewer:
+ - New grouping panel menu was added in the Data Viewer. This panel extracts unique values from the database column for count. Users can drag and drop the column to the grouping panel and get the results immediately. Sorting, filtering and exporting of the results are available on the Grouping panel.
+- SQL Editor:
+ - We improved the performance of the SQL-editor - as a result, handling scripts with up to 10 000 lines does not present any challenges;
+ - In the SQL-editor, pressing Tab/Space followed by Enter now causes the cursor to move to a new line;
+ - In the SQL editor, when the cursor goes back on the query, the previous hints are displayed;
+ - Error when running SQL with semicolon has been fixed.
+- Connections:
+ - If there is an error in saving the data, the tab for the chosen connection dialog will stay open to allow corrections;
+ - The URL-configuration for PostgreSQL now correctly displays only a single database.
+- Driver management:
+ - The CE version now offers the updated sqlite-jdbc driver, version 3.41.2;
+ - CloudBeaver has the option to connect to H2 database version 2;
+ - The internal CloudBeaver database is upgraded to the newest H2 version 2 to avoid vulnerability issues. The database will be safely upgraded automatically for the servers with default configurations. You can perform this upgrade manually if you have a custom configuration for this database in your infrastructure.
+- Connections:
+ - Option to increase the maximum size of text files displayed in the value panel (using the sqlTextPreviewMaxLength parameter) has been added;
+ - Support for custom logging configuration has been added. An external configuration file can be used instead of the default configuration.
+
+
+### Old CloudBeaver releases
+
+You can find information about earlier releases on the CloudBeaver wiki https://github.com/dbeaver/cloudbeaver/wiki/Releases.
+
diff --git a/apps/cloudbeaver/data.yml b/apps/cloudbeaver/data.yml
new file mode 100644
index 00000000..81edb866
--- /dev/null
+++ b/apps/cloudbeaver/data.yml
@@ -0,0 +1,20 @@
+name: CloudBeaver
+tags:
+ - 工具
+title: 云数据库管理器
+type: 工具
+description: 云数据库管理器
+additionalProperties:
+ key: cloudbeaver
+ name: CloudBeaver
+ tags:
+ - Tool
+ shortDescZh: 云数据库管理器
+ shortDescEn: Cloud Database Manager
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://dbeaver.com/
+ github: https://github.com/dbeaver/cloudbeaver
+ document: https://dbeaver.com/docs/cloudbeaver/
\ No newline at end of file
diff --git a/apps/cloudbeaver/latest/.env.sample b/apps/cloudbeaver/latest/.env.sample
new file mode 100644
index 00000000..dd21cf85
--- /dev/null
+++ b/apps/cloudbeaver/latest/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="cloudbeaver"
+PANEL_APP_PORT_HTTP="40083"
+DATA_PATH="./data"
diff --git a/apps/cloudbeaver/latest/data.yml b/apps/cloudbeaver/latest/data.yml
new file mode 100644
index 00000000..b7f6871e
--- /dev/null
+++ b/apps/cloudbeaver/latest/data.yml
@@ -0,0 +1,18 @@
+additionalProperties:
+ formFields:
+ - default: 40083
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+
diff --git a/apps/cloudbeaver/latest/docker-compose.yml b/apps/cloudbeaver/latest/docker-compose.yml
new file mode 100644
index 00000000..af5f05e4
--- /dev/null
+++ b/apps/cloudbeaver/latest/docker-compose.yml
@@ -0,0 +1,19 @@
+version: '3'
+services:
+ cloudbeaver:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8978"
+ volumes:
+ - "${DATA_PATH}:/opt/cloudbeaver/workspace"
+ tty: true
+ image: dbeaver/cloudbeaver:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/cloudbeaver/logo.png b/apps/cloudbeaver/logo.png
new file mode 100644
index 00000000..34fc5ffa
Binary files /dev/null and b/apps/cloudbeaver/logo.png differ
diff --git a/apps/cloudreve/3.8.3/.env.sample b/apps/cloudreve/3.8.3/.env.sample
new file mode 100644
index 00000000..b3b1122f
--- /dev/null
+++ b/apps/cloudreve/3.8.3/.env.sample
@@ -0,0 +1,4 @@
+CONTAINER_NAME="cloudreve"
+PANEL_APP_PORT_HTTP="40033"
+UPLOAD_PATH="./data/uploads"
+TMP_PATH="./data/data"
\ No newline at end of file
diff --git a/apps/cloudreve/3.8.3/data.yml b/apps/cloudreve/3.8.3/data.yml
new file mode 100644
index 00000000..5b4d7f9c
--- /dev/null
+++ b/apps/cloudreve/3.8.3/data.yml
@@ -0,0 +1,24 @@
+additionalProperties:
+ formFields:
+ - default: 40033
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data/uploads
+ edit: true
+ envKey: UPLOAD_PATH
+ labelEn: The upload file save path
+ labelZh: 上传文件保存路径
+ required: true
+ type: text
+ - default: ./data/data
+ edit: true
+ envKey: TMP_PATH
+ labelEn: Temp folder path
+ labelZh: 临时文件夹路径
+ required: true
+ type: text
diff --git a/apps/cloudreve/3.8.3/data/cloudreve.db b/apps/cloudreve/3.8.3/data/cloudreve.db
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/cloudreve/3.8.3/data/conf.ini b/apps/cloudreve/3.8.3/data/conf.ini
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/cloudreve/3.8.3/docker-compose.yml b/apps/cloudreve/3.8.3/docker-compose.yml
new file mode 100644
index 00000000..5ecb9c80
--- /dev/null
+++ b/apps/cloudreve/3.8.3/docker-compose.yml
@@ -0,0 +1,22 @@
+version: '3'
+services:
+ cloudreve:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:5212"
+ volumes:
+ - "${UPLOAD_PATH}:/cloudreve/uploads"
+ - "${TMP_PATH}:/data"
+ - "./data/conf.ini:/cloudreve/conf.ini"
+ - "./data/cloudreve.db:/cloudreve/cloudreve.db"
+ - "./data/avatar:/cloudreve/avatar"
+ image: cloudreve/cloudreve:3.8.3
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/cloudreve/README.md b/apps/cloudreve/README.md
new file mode 100644
index 00000000..4d59aaa9
--- /dev/null
+++ b/apps/cloudreve/README.md
@@ -0,0 +1,110 @@
+# 使用说明
+账户与密码可以查看容器日志获得
+
+
+# 原始相关
+
+[English Version](https://github.com/cloudreve/Cloudreve/blob/master/README.md)
+
+
+
+
+
+
+
+ Cloudreve
+
+支持多家云存储驱动的公有云文件系统.
+
+
+
+
今日热榜
+调用示例
+
+```json
+{
+ "code": 200,
+ "message": "获取成功",
+ "title": "哔哩哔哩", // 榜单名称
+ "subtitle": "热门榜", // 榜单类别
+ "from": "server", // 此处返回是最新数据还是缓存
+ "total": 100, // 数据总数
+ "updateTime": "2023-03-14T07:40:51.846Z", // 数据获取时间
+ "data": [
+ {
+ "id": "BV1E84y1A7z2",
+ "title": "假如我的校园是一款RPG游戏!",
+ "desc": "所有取景都是在学校里面拍的,都是真实存在的场景哦!",
+ "pic": "http://i2.hdslb.com/bfs/archive/a24e442d0aae6d488db023c4ddcb450e9f2bf5f3.jpg",
+ "owner": {
+ "mid": 424658638,
+ "name": "四夕小田木_已黑化_",
+ "face": "https://i1.hdslb.com/bfs/face/afd9ba47933edc4842ccbeba2891a25465d1cf77.jpg"
+ },
+ "data": {
+ "aid": 610872610,
+ "view": 4178745,
+ "danmaku": 4229,
+ "reply": 5317,
+ "favorite": 91020,
+ "coin": 133596,
+ "share": 46227,
+ "now_rank": 0,
+ "his_rank": 1,
+ "like": 616519,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 0
+ },
+ "url": "https://b23.tv/BV1E84y1A7z2",
+ "mobileUrl": "https://m.bilibili.com/video/BV1E84y1A7z2"
+ },
+ ...
+ ]
+}
+```
+
+调用示例
+
+```json
+{
+ "code": 200,
+ "message": "获取成功",
+ "title": "哔哩哔哩", // 榜单名称
+ "subtitle": "热门榜", // 榜单类别
+ "total": 100, // 数据总数
+ "updateTime": "2023-03-14T07:40:51.846Z", // 数据获取时间
+ "data": [
+ {
+ "id": "BV1E84y1A7z2",
+ "title": "假如我的校园是一款RPG游戏!",
+ "desc": "所有取景都是在学校里面拍的,都是真实存在的场景哦!",
+ "pic": "http://i2.hdslb.com/bfs/archive/a24e442d0aae6d488db023c4ddcb450e9f2bf5f3.jpg",
+ "owner": {
+ "mid": 424658638,
+ "name": "四夕小田木_已黑化_",
+ "face": "https://i1.hdslb.com/bfs/face/afd9ba47933edc4842ccbeba2891a25465d1cf77.jpg"
+ },
+ "data": {
+ "aid": 610872610,
+ "view": 4178745,
+ "danmaku": 4229,
+ "reply": 5317,
+ "favorite": 91020,
+ "coin": 133596,
+ "share": 46227,
+ "now_rank": 0,
+ "his_rank": 1,
+ "like": 616519,
+ "dislike": 0,
+ "vt": 0,
+ "vv": 0
+ },
+ "url": "https://b23.tv/BV1E84y1A7z2",
+ "mobileUrl": "https://m.bilibili.com/video/BV1E84y1A7z2"
+ },
+ ...
+ ]
+}
+```
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+**dash.** is a open-source project, so any contribution is highly appreciated.
+If you are interested in further developing this project, have a look at the
+[Contributing.md](https://github.com/MauriceNino/dashdot/blob/main/.github/CONTRIBUTING.md).
+
+In case you want to financially support this project, you can visit my
+[GitHub Sponsors](https://github.com/sponsors/MauriceNino), or my [Ko-Fi](https://ko-fi.com/mauricenino).
+
+## Preview
+
+
+
+| Dark-Mode | Light-Mode |
+| -------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------- |
+|
|
|
+
+
+## Quick Install (Docker)
+
+Images are hosted on [DockerHub](https://hub.docker.com/r/mauricenino/dashdot),
+and are available for both AMD64 and ARM devices.
+
+```bash
+docker container run -it \
+ -p 80:3001 \
+ -v /:/mnt/host:ro \
+ --privileged \
+ mauricenino/dashdot
+```
+
+To get more information on why which flag is needed, or if you want to use other
+install options instead (`docker-compose`, or from source), have a look at the
+[installation options](https://getdashdot.com/docs/install).
+
+To read more about configuration options, you can visit the [configuration options](https://getdashdot.com/docs/config).
\ No newline at end of file
diff --git a/apps/dashdot/data.yml b/apps/dashdot/data.yml
new file mode 100644
index 00000000..54d51a7f
--- /dev/null
+++ b/apps/dashdot/data.yml
@@ -0,0 +1,20 @@
+name: dashdot
+tags:
+ - 工具
+title: 一个简单、现代的服务器仪表板
+type: 工具
+description: 一个简单、现代的服务器仪表板
+additionalProperties:
+ key: dashdot
+ name: dashdot
+ tags:
+ - Tool
+ shortDescZh: 一个简单、现代的服务器仪表板
+ shortDescEn: A simple, modern server dashboard
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://getdashdot.com
+ github: https://github.com/MauriceNino/dashdot
+ document: https://getdashdot.com/docs/install
diff --git a/apps/dashdot/dev/.env.sample b/apps/dashdot/dev/.env.sample
new file mode 100644
index 00000000..505c58fb
--- /dev/null
+++ b/apps/dashdot/dev/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="dashdot"
+PANEL_APP_PORT_HTTP="40094"
+DATA_PATH="/"
diff --git a/apps/dashdot/dev/data.yml b/apps/dashdot/dev/data.yml
new file mode 100644
index 00000000..210da330
--- /dev/null
+++ b/apps/dashdot/dev/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 40094
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: /mnt
+ edit: true
+ envKey: DATA_PATH
+ labelEn: The drive for which you need to view statistics
+ labelZh: 需要查看统计信息的驱动器
+ required: true
+ type: text
\ No newline at end of file
diff --git a/apps/dashdot/dev/docker-compose.yml b/apps/dashdot/dev/docker-compose.yml
new file mode 100644
index 00000000..0a4207bf
--- /dev/null
+++ b/apps/dashdot/dev/docker-compose.yml
@@ -0,0 +1,22 @@
+version: '3'
+services:
+ dashdot:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:3001"
+ volumes:
+ - "/etc/os-release:/etc/os-release:ro"
+ - "/proc/1/ns/net:/mnt/host_ns_net:ro"
+ - "${DATA_PATH}:/mnt/host:ro"
+ privileged: true
+ tty: true
+ image: mauricenino/dashdot:dev
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/dashdot/logo (1).png:Zone.Identifier b/apps/dashdot/logo (1).png:Zone.Identifier
new file mode 100644
index 00000000..45a0c90e
--- /dev/null
+++ b/apps/dashdot/logo (1).png:Zone.Identifier
@@ -0,0 +1,3 @@
+[ZoneTransfer]
+ZoneId=3
+HostUrl=https://squoosh.app/
diff --git a/apps/dashdot/logo.png b/apps/dashdot/logo.png
new file mode 100644
index 00000000..4e21cd5c
Binary files /dev/null and b/apps/dashdot/logo.png differ
diff --git a/apps/dashdot/sha-6f7544d/.env.sample b/apps/dashdot/sha-6f7544d/.env.sample
new file mode 100644
index 00000000..505c58fb
--- /dev/null
+++ b/apps/dashdot/sha-6f7544d/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="dashdot"
+PANEL_APP_PORT_HTTP="40094"
+DATA_PATH="/"
diff --git a/apps/dashdot/sha-6f7544d/data.yml b/apps/dashdot/sha-6f7544d/data.yml
new file mode 100644
index 00000000..210da330
--- /dev/null
+++ b/apps/dashdot/sha-6f7544d/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 40094
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: /mnt
+ edit: true
+ envKey: DATA_PATH
+ labelEn: The drive for which you need to view statistics
+ labelZh: 需要查看统计信息的驱动器
+ required: true
+ type: text
\ No newline at end of file
diff --git a/apps/dashdot/sha-6f7544d/docker-compose.yml b/apps/dashdot/sha-6f7544d/docker-compose.yml
new file mode 100644
index 00000000..8b73c7ab
--- /dev/null
+++ b/apps/dashdot/sha-6f7544d/docker-compose.yml
@@ -0,0 +1,22 @@
+version: '3'
+services:
+ dashdot:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:3001"
+ volumes:
+ - "/etc/os-release:/etc/os-release:ro"
+ - "/proc/1/ns/net:/mnt/host_ns_net:ro"
+ - "${DATA_PATH}:/mnt/host:ro"
+ privileged: true
+ tty: true
+ image: mauricenino/dashdot:sha-6f7544d
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/dashmachine/README.md b/apps/dashmachine/README.md
new file mode 100644
index 00000000..3a5e9161
--- /dev/null
+++ b/apps/dashmachine/README.md
@@ -0,0 +1,55 @@
+# DashMachine
+
+## 默认账号密码
+```
+User: admin
+Password: admin
+```
+
+## 安装
+
+### Docker
+```
+docker create \
+ --name=dashmachine \
+ -p 5000:5000 \
+ -v path/to/data:/dashmachine/dashmachine/user_data \
+ --restart unless-stopped \
+ rmountjoy/dashmachine:latest
+```
+To run in a subfolder, use a CONTEXT_PATH environment variable. For example, to run at localhost:5000/dash:
+```
+docker create \
+ --name=dashmachine \
+ -p 5000:5000 \
+ -e CONTEXT_PATH=/dash
+ -v path/to/data:/dashmachine/dashmachine/user_data \
+ --restart unless-stopped \
+ rmountjoy/dashmachine:latest
+```
+### Synology
+Check out this awesome guide: https://nashosted.com/manage-your-self-hosted-applications-using-dashmachine/
+### Python
+Instructions are for linux.
+```
+virtualenv --python=python3 DashMachineEnv
+cd DashMachineEnv && source bin/activate
+git clone https://github.com/rmountjoy92/DashMachine.git
+cd DashMachine && pip install -r requirements.txt
+python3 run.py
+```
+Then open a web browser and go to localhost:5000
+
+## FAQs
+1. application does not work in iframe
+see https://github.com/rmountjoy92/DashMachine/issues/6
+
+## 演示
+
+
+
+
+
+
+
+
diff --git a/apps/dashmachine/data.yml b/apps/dashmachine/data.yml
new file mode 100644
index 00000000..87ae3d33
--- /dev/null
+++ b/apps/dashmachine/data.yml
@@ -0,0 +1,20 @@
+name: DashMachine
+tags:
+ - 工具
+title: 一个具有有趣功能的 Web 应用程序书签仪表板
+type: 工具
+description: 一个具有有趣功能的 Web 应用程序书签仪表板
+additionalProperties:
+ key: dashmachine
+ name: DashMachine
+ tags:
+ - Tool
+ shortDescZh: 一个具有有趣功能的 Web 应用程序书签仪表板
+ shortDescEn: A web application bookmark dashboard, with fun features
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://github.com/rmountjoy92/DashMachine
+ github: https://github.com/rmountjoy92/DashMachine
+ document: https://github.com/rmountjoy92/DashMachine
diff --git a/apps/dashmachine/latest/.env.sample b/apps/dashmachine/latest/.env.sample
new file mode 100644
index 00000000..b6e87966
--- /dev/null
+++ b/apps/dashmachine/latest/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="dashmachine"
+PANEL_APP_PORT_HTTP="40144"
+DATA_PATH="./data"
diff --git a/apps/dashmachine/latest/data.yml b/apps/dashmachine/latest/data.yml
new file mode 100644
index 00000000..fe298135
--- /dev/null
+++ b/apps/dashmachine/latest/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 40144
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
diff --git a/apps/dashmachine/latest/docker-compose.yml b/apps/dashmachine/latest/docker-compose.yml
new file mode 100644
index 00000000..9624765d
--- /dev/null
+++ b/apps/dashmachine/latest/docker-compose.yml
@@ -0,0 +1,18 @@
+version: '3'
+services:
+ dashmachine:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:5000"
+ volumes:
+ - "${DATA_PATH}:/dashmachine/dashmachine/user_data"
+ image: rmountjoy/dashmachine:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/dashmachine/logo.png b/apps/dashmachine/logo.png
new file mode 100644
index 00000000..d0456de6
Binary files /dev/null and b/apps/dashmachine/logo.png differ
diff --git a/apps/ddns-go/5.6.6/.env.sample b/apps/ddns-go/5.6.6/.env.sample
new file mode 100644
index 00000000..fd350535
--- /dev/null
+++ b/apps/ddns-go/5.6.6/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="ddns-go"
+PANEL_APP_PORT_HTTP="9876"
+DATA_PATH="./data"
\ No newline at end of file
diff --git a/apps/ddns-go/5.6.6/data.yml b/apps/ddns-go/5.6.6/data.yml
new file mode 100644
index 00000000..e47981d1
--- /dev/null
+++ b/apps/ddns-go/5.6.6/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 9876
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: WebUI Port
+ labelZh: 网页端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
\ No newline at end of file
diff --git a/apps/ddns-go/5.6.6/docker-compose.yml b/apps/ddns-go/5.6.6/docker-compose.yml
new file mode 100644
index 00000000..6a479235
--- /dev/null
+++ b/apps/ddns-go/5.6.6/docker-compose.yml
@@ -0,0 +1,11 @@
+version: "3"
+services:
+ ddns-go:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ network_mode: "host"
+ volumes:
+ - "${DATA_PATH}:/root"
+ image: jeessy/ddns-go:v5.6.6
+ labels:
+ createdBy: "Apps"
diff --git a/apps/ddns-go/README.md b/apps/ddns-go/README.md
new file mode 100644
index 00000000..6eccefbd
--- /dev/null
+++ b/apps/ddns-go/README.md
@@ -0,0 +1,277 @@
+# 使用说明
+
+默认以`--net=host`网络模式运行,方便获取`IPV6`地址,默认管理界面端口`9876`
+
+如果因为端口冲突,需要以桥接网络模式运行,不需要获取`IPV6`,请将原始`docker-compose.yml`做修改,
+
+> 已经保留了面板设置桥接模式端口的设置,有需要的直接粘贴覆盖原`docker-compose.yml`文件里的内容,重建应用即可。
+
+- `--net=host`网络模式设置
+```
+ network_mode: "host"
+```
+
+- 桥接网络模式
+```
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:9876"
+```
+
+
+完整桥接网络模式配置如下
+```
+version: "3"
+services:
+ ddns-go:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:9876"
+ volumes:
+ - "${DATA_PATH}:/root"
+ image: jeessy/ddns-go:v5.3.7
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
+```
+
+
+# 原始相关
+
+# ddns-go
+
+[ ](https://github.com/jeessy2/ddns-go/releases/latest) [](https://github.com/jeessy2/ddns-go/blob/master/go.mod) [](https://goreportcard.com/report/github.com/jeessy2/ddns-go/v5) [](https://registry.hub.docker.com/r/jeessy/ddns-go) [](https://registry.hub.docker.com/r/jeessy/ddns-go)
+
+自动获得你的公网 IPv4 或 IPv6 地址,并解析到对应的域名服务。
+
+- [使用说明](#使用说明)
+- [原始相关](#原始相关)
+- [ddns-go](#ddns-go)
+ - [特性](#特性)
+ - [系统中使用](#系统中使用)
+ - [Docker中使用](#docker中使用)
+ - [使用IPv6](#使用ipv6)
+ - [Webhook](#webhook)
+ - [Callback](#callback)
+ - [界面](#界面)
+ - [开发\&自行编译](#开发自行编译)
+
+## 特性
+
+- 支持Mac、Windows、Linux系统,支持ARM、x86架构
+- 支持的域名服务商 `Alidns(阿里云)` `Dnspod(腾讯云)` `Cloudflare` `华为云` `Callback` `百度云` `Porkbun` `GoDaddy` `Google Domain`
+- 支持接口/网卡/[命令](https://github.com/jeessy2/ddns-go/wiki/通过命令获取IP参考)获取IP
+- 支持以服务的方式运行
+- 默认间隔5分钟同步一次
+- 支持同时配置多个DNS服务商
+- 支持多个域名同时解析
+- 支持多级域名
+- 网页中配置,简单又方便,默认勾选`禁止从公网访问`
+- 网页中方便快速查看最近50条日志
+- 支持Webhook通知
+- 支持TTL
+- 支持部分DNS服务商[传递自定义参数](https://github.com/jeessy2/ddns-go/wiki/传递自定义参数),实现地域解析等功能
+
+> **Note** 建议在启用公网访问时,使用 Nginx 等反向代理软件启用 HTTPS 访问,以保证安全性。[FAQ](https://github.com/jeessy2/ddns-go/wiki/FAQ)
+
+## 系统中使用
+
+- 从 [Releases](https://github.com/jeessy2/ddns-go/releases) 下载并解压 ddns-go
+- 双击运行, 如没有找到配置, 程序将自动打开 http://127.0.0.1:9876
+- [可选] 安装服务
+ - Mac/Linux: `sudo ./ddns-go -s install`
+ - Win(以管理员打开cmd): `.\ddns-go.exe -s install`
+- [可选] 服务卸载
+ - Mac/Linux: `sudo ./ddns-go -s uninstall`
+ - Win(以管理员打开cmd): `.\ddns-go.exe -s uninstall`
+- [可选] 支持安装或启动时带参数 `-l`监听地址 `-f`同步间隔时间(秒) `-c`自定义配置文件路径 `-noweb`不启动web服务 `-skipVerify`跳过证书验证。如:`./ddns-go -s install -l :9877 -f 600 -c /Users/name/ddns-go.yaml`
+
+## Docker中使用
+
+- 挂载主机目录, 使用docker host模式。可把 `/opt/ddns-go` 替换为你主机任意目录, 配置文件为隐藏文件
+
+ ```bash
+ docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go
+ ```
+
+- 在浏览器中打开`http://主机IP:9876`,修改你的配置,成功
+
+- [可选] 使用 `ghcr.io` 镜像
+
+ ```bash
+ docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root ghcr.io/jeessy2/ddns-go
+ ```
+
+- [可选] 支持启动带参数 `-l`监听地址 `-f`间隔时间(秒)
+
+ ```bash
+ docker run -d --name ddns-go --restart=always --net=host -v /opt/ddns-go:/root jeessy/ddns-go -l :9877 -f 600
+ ```
+
+- [可选] 不使用docker host模式
+
+ ```bash
+ docker run -d --name ddns-go --restart=always -p 9876:9876 -v /opt/ddns-go:/root jeessy/ddns-go
+ ```
+
+## 使用IPv6
+
+- 前提:你的电脑或终端能正常获取IPv6,并能正常访问IPv6
+- Windows/Mac:推荐 [系统中使用](#系统中使用),Windows/Mac桌面版的docker不支持`--net=host`
+- 群晖:
+ - 套件中心下载docker并打开
+ - 注册表中搜索`ddns-go`并下载
+ - 映像 -> 选择`jeessy/ddns-go` -> 启动 -> 高级设置 -> 网络中勾选`使用与 Docker Host 相同的网络`,高级设置中勾选`启动自动重新启动`
+ - 在浏览器中打开`http://群晖IP:9876`,修改你的配置,成功
+- Linux的x86或arm架构,推荐使用Docker的`--net=host`模式。参考 [Docker中使用](#Docker中使用)
+- 虚拟机中使用有可能正常获取IPv6,但不能正常访问IPv6
+
+## Webhook
+
+- 支持webhook, 域名更新成功或不成功时, 会回调填写的URL
+- 支持的变量
+
+ | 变量名 | 说明 |
+ | ---- | ---- |
+ | #{ipv4Addr} | 新的IPv4地址 |
+ | #{ipv4Result} | IPv4地址更新结果: `未改变` `失败` `成功`|
+ | #{ipv4Domains} | IPv4的域名,多个以`,`分割 |
+ | #{ipv6Addr} | 新的IPv6地址 |
+ | #{ipv6Result} | IPv6地址更新结果: `未改变` `失败` `成功`|
+ | #{ipv6Domains} | IPv6的域名,多个以`,`分割 |
+
+- 如 RequestBody 为空则为 GET 请求,否则为 POST 请求
+-
Server酱
+
+ ```
+ https://sctapi.ftqq.com/[SendKey].send?title=你的公网IP变了&desp=主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
+ ```
+- Bark
+
+ ```
+ https://api.day.app/[YOUR_KEY]/主人IPv4变了#{ipv4Addr},域名更新结果:#{ipv4Result}
+ ```
+ 钉钉
+
+ - 钉钉电脑端 -> 群设置 -> 智能群助手 -> 添加机器人 -> 自定义
+ - 只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
+ - URL中输入钉钉给你的 `Webhook地址`
+ - RequestBody中输入
+ ```json
+ {
+ "msgtype": "markdown",
+ "markdown": {
+ "title": "你的公网IP变了",
+ "text": "#### 你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
+ }
+ }
+ ```
+ 飞书
+
+ - 飞书电脑端 -> 群设置 -> 添加机器人 -> 自定义机器人
+ - 安全设置只勾选 `自定义关键词`, 输入的关键字必须包含在RequestBody的content中, 如:`你的公网IP变了`
+ - URL中输入飞书给你的 `Webhook地址`
+ - RequestBody中输入
+ ```json
+ {
+ "msg_type": "post",
+ "content": {
+ "post": {
+ "zh_cn": {
+ "title": "你的公网IP变了",
+ "content": [
+ [
+ {
+ "tag": "text",
+ "text": "IPv4地址:#{ipv4Addr}"
+ }
+ ],
+ [
+ {
+ "tag": "text",
+ "text": "域名更新结果:#{ipv4Result}"
+ }
+ ]
+ ]
+ }
+ }
+ }
+ }
+ ```
+ Telegram
+
+ [ddns-telegram-bot](https://github.com/WingLim/ddns-telegram-bot)
+ plusplus 推送加
+
+ - [获取token](https://www.pushplus.plus/push1.html)
+ - URL中输入 `https://www.pushplus.plus/send`
+ - RequestBody中输入
+ ```json
+ {
+ "token": "your token",
+ "title": "你的公网IP变了",
+ "content": "你的公网IP变了 \n - IPv4地址:#{ipv4Addr} \n - 域名更新结果:#{ipv4Result} \n"
+ }
+ ```
+ Discord
+
+ - Discord任意客户端 -> 伺服器 -> 频道设置 -> 整合 -> 查看Webhook -> 新Webhook -> 复制Webhook网址
+ - URL中输入Discord复制的 `Webhook网址`
+ - RequestBody中输入
+ ```json
+ {
+ "content": "域名 #{ipv4Domains} 动态解析 #{ipv4Result}.",
+ "embeds": [
+ {
+ "description": "#{ipv4Domains} 的动态解析 #{ipv4Result}, IP: #{ipv4Addr}",
+ "color": 15258703,
+ "author": {
+ "name": "DDNS"
+ },
+ "footer": {
+ "text": "DDNS #{ipv4Result}"
+ }
+ }
+ ]
+ }
+ ```
+
+
+- 移动端预览地址(请使用移动端窗口体验):[https://mouday.github.io/domain-admin-mini/](https://mouday.github.io/domain-admin-mini/)
+
+移动端项目地址:[https://github.com/mouday/domain-admin-mini](https://github.com/mouday/domain-admin-mini)
+
+## 问题反馈交流
+
+QQ群号:731742868
+
+邀请码:domain-admin
+
+
+
+## 更新日志
+
+[CHANGELOG.md](https://domain-admin.readthedocs.io/zh_CN/latest/manual/changelog.html)
diff --git a/apps/domain-admin/data.yml b/apps/domain-admin/data.yml
new file mode 100644
index 00000000..4038ea1b
--- /dev/null
+++ b/apps/domain-admin/data.yml
@@ -0,0 +1,20 @@
+name: Domain Admin
+tags:
+ - 工具
+title: 域名和SSL证书监测平台
+type: 工具
+description: 域名和SSL证书监测平台
+additionalProperties:
+ key: domain-admin
+ name: Domain Admin
+ tags:
+ - Tool
+ shortDescZh: 域名和SSL证书监测平台
+ shortDescEn: Domain name and SSL certificate monitoring platform
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://github.com/mouday/domain-admin
+ github: https://github.com/mouday/domain-admin
+ document: https://domain-admin.readthedocs.io/
diff --git a/apps/domain-admin/latest/.env.sample b/apps/domain-admin/latest/.env.sample
new file mode 100644
index 00000000..32dd5b37
--- /dev/null
+++ b/apps/domain-admin/latest/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="domain-admin"
+PANEL_APP_PORT_HTTP="40076"
+DATA_PATH="./data"
diff --git a/apps/domain-admin/latest/data.yml b/apps/domain-admin/latest/data.yml
new file mode 100644
index 00000000..6fb7bc3b
--- /dev/null
+++ b/apps/domain-admin/latest/data.yml
@@ -0,0 +1,18 @@
+additionalProperties:
+ formFields:
+ - default: 40076
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+
diff --git a/apps/domain-admin/latest/docker-compose.yml b/apps/domain-admin/latest/docker-compose.yml
new file mode 100644
index 00000000..c6d683a8
--- /dev/null
+++ b/apps/domain-admin/latest/docker-compose.yml
@@ -0,0 +1,19 @@
+version: '3'
+services:
+ domain-admin:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8000"
+ volumes:
+ - "${DATA_PATH}/database:/app/database"
+ - "${DATA_PATH}/logs:/app/logs"
+ image: mouday/domain-admin:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/domain-admin/logo.png b/apps/domain-admin/logo.png
new file mode 100644
index 00000000..9d16688a
Binary files /dev/null and b/apps/domain-admin/logo.png differ
diff --git a/apps/dosgame/README.md b/apps/dosgame/README.md
new file mode 100644
index 00000000..af23fa7b
--- /dev/null
+++ b/apps/dosgame/README.md
@@ -0,0 +1,52 @@
+# 使用说明
+
+需要更多游戏的,从原仓库获取,然后将游戏放到存储卷`dosgame_data`的对应目录下
+
+原仓库:[chinese-dos-games](https://github.com/rwv/chinese-dos-games)
+
+# 原始相关
+
+# 🎮 中文 DOS 游戏
+
+网址: https://dos.lol
+
+
+中文 DOS 游戏合集,目前共有 1898 款游戏。
+
+## 下载游戏文件
+
+在根目录下运行 Python 3 脚本
+
+``` python
+python download_data.py
+```
+
+若下载出错请参见 [Issue #26](https://github.com/rwv/chinese-dos-games/issues/26)
+
+## 游戏列表
+
+参见 https://dos.lol/games
+
+## IPFS
+
+IPNS Hash: [`k2k4r8oyknzob8jjqpj6toer4dw3jc6srsbqlbsalktnw1fopb7iyqd2`](https://ipfs.io/ipns/k2k4r8oyknzob8jjqpj6toer4dw3jc6srsbqlbsalktnw1fopb7iyqd2)
+
+## 网站源代码
+
+请参见 [rwv/chinese-dos-games-web: 🌐 Source code of https://dos.zczc.cz](https://github.com/rwv/chinese-dos-games-web)
+
+## 版权问题
+
+本人明白此项目存在版权上的侵权,如版权方介意的话,请联系 [chinese.dos.games@outlook.com](mailto:chinese.dos.games@outlook.com),本人将立刻删除有关文件。
+
+## Contributing
+
+欢迎提 [Issue](https://github.com/rwv/chinese-dos-games/issues) 和 [Pull request](https://github.com/rwv/chinese-dos-games/pulls) 来增加新的游戏!
+
+PR 具体参见 [CONTRIBUTING.md](https://github.com/rwv/chinese-dos-games/blob/master/CONTRIBUTING.md)
+
+## Credits
+
+* [dreamlayers/em-dosbox: An Emscripten port of DOSBox](https://github.com/dreamlayers/em-dosbox)
+* [db48x/emularity: easily embed emulators](https://github.com/db48x/emularity)
+* [衡兰若芷制作的DOS游戏合集](https://tieba.baidu.com/p/3962261741)
diff --git a/apps/dosgame/data.yml b/apps/dosgame/data.yml
new file mode 100644
index 00000000..1ca23829
--- /dev/null
+++ b/apps/dosgame/data.yml
@@ -0,0 +1,20 @@
+name: 中文 DOS 游戏
+tags:
+ - 工具
+title: 中文 DOS 游戏合集
+type: 工具
+description: 中文 DOS 游戏合集
+additionalProperties:
+ key: dosgame
+ name: 中文 DOS 游戏
+ tags:
+ - Tool
+ shortDescZh: 中文 DOS 游戏合集
+ shortDescEn: Chinese DOS games collections
+ type: tool
+ crossVersionUpdate: false
+ limit: 0
+ recommend: 0
+ website: https://dos.lol/
+ github: https://github.com/rwv/chinese-dos-games
+ document: https://github.com/rwv/chinese-dos-games
diff --git a/apps/dosgame/latest/.env.sample b/apps/dosgame/latest/.env.sample
new file mode 100644
index 00000000..178dadbc
--- /dev/null
+++ b/apps/dosgame/latest/.env.sample
@@ -0,0 +1,2 @@
+CONTAINER_NAME="dosgame"
+PANEL_APP_PORT_HTTP="40078"
diff --git a/apps/dosgame/latest/data.yml b/apps/dosgame/latest/data.yml
new file mode 100644
index 00000000..6d788420
--- /dev/null
+++ b/apps/dosgame/latest/data.yml
@@ -0,0 +1,10 @@
+additionalProperties:
+ formFields:
+ - default: 40078
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
diff --git a/apps/dosgame/latest/docker-compose.yml b/apps/dosgame/latest/docker-compose.yml
new file mode 100644
index 00000000..13646419
--- /dev/null
+++ b/apps/dosgame/latest/docker-compose.yml
@@ -0,0 +1,21 @@
+version: '3'
+services:
+ dosgame:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:262"
+ volumes:
+ - dosgame_data:/app/static/games
+ image: oldiy/dosgame-web-docker:latest
+ labels:
+ createdBy: "Apps"
+
+volumes:
+ dosgame_data:
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/dosgame/logo.png b/apps/dosgame/logo.png
new file mode 100644
index 00000000..950c5520
Binary files /dev/null and b/apps/dosgame/logo.png differ
diff --git a/apps/easyimage2/2.8.3-r1/.env.sample b/apps/easyimage2/2.8.3-r1/.env.sample
new file mode 100644
index 00000000..93e438de
--- /dev/null
+++ b/apps/easyimage2/2.8.3-r1/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="easyimage"
+PANEL_APP_PORT_HTTP="40061"
+DATA_PATH="./data"
diff --git a/apps/easyimage2/2.8.3-r1/data.yml b/apps/easyimage2/2.8.3-r1/data.yml
new file mode 100644
index 00000000..f57d153b
--- /dev/null
+++ b/apps/easyimage2/2.8.3-r1/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 40061
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
diff --git a/apps/easyimage2/2.8.3-r1/docker-compose.yml b/apps/easyimage2/2.8.3-r1/docker-compose.yml
new file mode 100644
index 00000000..1431cadb
--- /dev/null
+++ b/apps/easyimage2/2.8.3-r1/docker-compose.yml
@@ -0,0 +1,24 @@
+version: '3'
+services:
+ easyimage:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ volumes:
+ - "${DATA_PATH}/config:/app/web/config"
+ - "${DATA_PATH}/i:/app/web/i"
+ environment:
+ - TZ=Asia/Shanghai
+ - PUID=1000
+ - PGID=1000
+ - DEBUG=false
+ image: ddsderek/easyimage:v2.8.3-r1
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/easyimage2/README.md b/apps/easyimage2/README.md
new file mode 100644
index 00000000..35f63c0d
--- /dev/null
+++ b/apps/easyimage2/README.md
@@ -0,0 +1,76 @@
+## EasyImage2.0 简单图床
+
+[](https://github.com/icret/EasyImages2.0/stargazers)
+[](https://github.com/icret/EasyImages2.0/network/members)
+[](http://php.net)
+[](https://github.com/icret/EasyImages2.0/releases)
+[](https://cdn.jsdelivr.net/gh/icret/EasyImages2.0@EasyImage2.0/)
+[](https://github.com/icret/EasyImages2.0/blob/master/LICENSE)
+[](https://jq.qq.com/?_wv=1027&k=jfXRHU8Y)
+
+[演示](https://png.cm/) · [手册](https://icret.github.io/EasyImages2.0/#/) · [社区](https://github.com/icret/EasyImages2.0/discussions) · [Telegram](https://t.me/Easy_Image) - 插件: [Chrome](https://github.com/icret/EasyImages2.0/blob/master/docs/Chrome插件.md) · [Edge](https://github.com/icret/EasyImages2.0/blob/master/docs/Edge插件.md) · [PicGo](https://github.com/icret/EasyImages2.0/blob/master/docs/使用PicGo上传.md) · [ShareX](https://github.com/icret/EasyImages2.0/blob/master/docs/使用ShareX上传.md)
+
+目录: [安装](https://github.com/icret/EasyImages2.0/blob/master/docs/安装图床.md) | [安全](https://github.com/icret/EasyImages2.0/blob/master/docs/安全配置.md) | [API](https://github.com/icret/EasyImages2.0/blob/master/docs/API.md) | [鉴黄](https://github.com/icret/EasyImages2.0/blob/master/docs/鉴黄.md) | [升级](https://github.com/icret/EasyImages2.0/blob/master/docs/图床更新升级.md) | [常见问题](https://github.com/icret/EasyImages2.0/blob/master/docs/常见问题.md) | [环境/兼容](#环境要求) | [更新日志](https://github.com/icret/EasyImages2.0/blob/master/docs/update.md) | [打赏开发者](https://github.com/icret/EasyImages2.0/blob/master/docs/打赏开发者.md) | [鸣谢](#鸣谢) | [许可证](#开源许可)
+
+> 始于2018年7月,支持多文件上传,简单无数据库,返回图片url,markdown,bbscode,html的一款图床程序
+演示地址:[https://png.cm/](https://png.cm/)
+之前一直用的图床程序是:[PHP多图长传程序2.4.3](https://www.jb51.net/codes/40544.html)
+由于版本过老并且使用falsh上传,在当前html5流行大势所趋下,遂利用基础知识新写了一个以html5为默认上传并且支持flash,向下兼容至IE9。
+***本程序环境要求极低,适用于单一场景(游客上传)和个人使用,不适于多用户复杂场景***
+>本人善写bug 发现bug可提交 [issues](https://github.com/icret/EasyImages2.0/issues) 追求稳定请下载 [稳定版](https://github.com/icret/EasyImages2.0/releases)
+
+## 特点
+
+* [x] 支持API
+* [x] 支持仅登录后上传
+* [x] 支持设置图片质量
+* [x] 支持压缩图片大小
+* [x] 支持文字/图片水印
+* [x] 支持设置图片指定宽/高
+* [x] 支持上传图片转换为指定格式
+* [x] 支持限制最低宽度/高度上传
+* [x] 支持上传其他文件格式
+* [x] 在线管理图片
+* [x] 支持网站统计
+* [x] 支持设置广告
+* [x] 支持图片鉴黄
+* [x] 支持自定义代码
+* [x] 支持上传IP黑白名单
+* [x] 支持上传日志IP定位
+* [x] 支持限制日上传次数
+* [x] 支持创建仅上传用户
+* [x] 对于安装环境要求极低
+* [x] 对于服务器性能要求极低
+* [x] 理论上[支持所有常见格式](https://github.com/icret/EasyImages2.0/blob/master/docs/其他格式.md)
+* [x] 更多功能支持请安装尝试···
+
+ ## 界面演示
+
+ 
+ 
+ 
+ 
+ 
+ 
+
+## 环境要求
+> 推荐环境:Nginx + PHP≥7.0 + linux
+
+- ##### 兼容
+
+ >最低`PHP 5.6`,推荐`PHP≥7.0`及以上版本,需要PHP支持`Fileinfo,iconv,zip,mbstring,openssl`扩展,如果缺失会导致无法上传/删除图片
+ 文件上传视图提供文件列表管理和文件批量上传功能,允许拖拽(需要`HTML5`支持)来添加上传文件,支持上传大图片,优先使用`HTML5`旧得浏览器自动使用`Flash和Silverlight`的方式兼容
+
+## 鸣谢
+
+- [verot](https://github.com/verot/class.upload.php "verot" )
+- [ZUI](https://github.com/easysoft/zui "ZUI" )
+
+## 开源许可
+
+ - [GPL-2.0](https://github.com/icret/EasyImages2.0/blob/master/LICENSE)
+ - Copyright © 2018 EasyImage Developer By [Icret](https://github.com/icret)
+
+* have fun!
+
+[](https://github.com/icret/EasyImages2.0/stargazers)
\ No newline at end of file
diff --git a/apps/easyimage2/data.yml b/apps/easyimage2/data.yml
new file mode 100644
index 00000000..1ccc3a40
--- /dev/null
+++ b/apps/easyimage2/data.yml
@@ -0,0 +1,20 @@
+name: EasyImage2.0
+tags:
+ - 工具
+title: 简单图床 - 一款功能强大无数据库的图床 2.0版
+type: 工具
+description: 简单图床 - 一款功能强大无数据库的图床 2.0版
+additionalProperties:
+ key: easyimage2
+ name: EasyImage2.0
+ tags:
+ - Tool
+ shortDescZh: 简单图床 - 一款功能强大无数据库的图床 2.0版
+ shortDescEn: EasyImage - A powerful database-free graph bed version 2.0
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://github.com/icret/EasyImages2.0
+ github: https://github.com/icret/EasyImages2.0
+ document: https://icret.github.io/EasyImages2.0/
diff --git a/apps/easyimage2/latest/.env.sample b/apps/easyimage2/latest/.env.sample
new file mode 100644
index 00000000..93e438de
--- /dev/null
+++ b/apps/easyimage2/latest/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="easyimage"
+PANEL_APP_PORT_HTTP="40061"
+DATA_PATH="./data"
diff --git a/apps/easyimage2/latest/data.yml b/apps/easyimage2/latest/data.yml
new file mode 100644
index 00000000..f57d153b
--- /dev/null
+++ b/apps/easyimage2/latest/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 40061
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
diff --git a/apps/easyimage2/latest/docker-compose.yml b/apps/easyimage2/latest/docker-compose.yml
new file mode 100644
index 00000000..49964400
--- /dev/null
+++ b/apps/easyimage2/latest/docker-compose.yml
@@ -0,0 +1,24 @@
+version: '3'
+services:
+ easyimage:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ volumes:
+ - "${DATA_PATH}/config:/app/web/config"
+ - "${DATA_PATH}/i:/app/web/i"
+ environment:
+ - TZ=Asia/Shanghai
+ - PUID=1000
+ - PGID=1000
+ - DEBUG=false
+ image: ddsderek/easyimage:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/easyimage2/logo.png b/apps/easyimage2/logo.png
new file mode 100644
index 00000000..9cec3e62
Binary files /dev/null and b/apps/easyimage2/logo.png differ
diff --git a/apps/element-web/1.11.48/.env.sample b/apps/element-web/1.11.48/.env.sample
new file mode 100644
index 00000000..a884f75c
--- /dev/null
+++ b/apps/element-web/1.11.48/.env.sample
@@ -0,0 +1,2 @@
+CONTAINER_NAME="element-web"
+PANEL_APP_PORT_HTTP="40124"
diff --git a/apps/element-web/1.11.48/data.yml b/apps/element-web/1.11.48/data.yml
new file mode 100644
index 00000000..a45ec47c
--- /dev/null
+++ b/apps/element-web/1.11.48/data.yml
@@ -0,0 +1,10 @@
+additionalProperties:
+ formFields:
+ - default: 40124
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
diff --git a/apps/element-web/1.11.48/docker-compose.yml b/apps/element-web/1.11.48/docker-compose.yml
new file mode 100644
index 00000000..e3c4e768
--- /dev/null
+++ b/apps/element-web/1.11.48/docker-compose.yml
@@ -0,0 +1,16 @@
+version: '3'
+services:
+ element-web:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ image: vectorim/element-web:v1.11.48
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/element-web/README.md b/apps/element-web/README.md
new file mode 100644
index 00000000..52210e27
--- /dev/null
+++ b/apps/element-web/README.md
@@ -0,0 +1,397 @@
+[](https://matrix.to/#/#element-web:matrix.org)
+
+
+[](https://translate.element.io/engage/element-web/)
+[](https://sonarcloud.io/summary/new_code?id=element-web)
+[](https://sonarcloud.io/summary/new_code?id=element-web)
+[](https://sonarcloud.io/summary/new_code?id=element-web)
+[](https://sonarcloud.io/summary/new_code?id=element-web)
+
+# Element
+
+Element (formerly known as Vector and Riot) is a Matrix web client built using the [Matrix
+React SDK](https://github.com/matrix-org/matrix-react-sdk).
+
+# Supported Environments
+
+Element has several tiers of support for different environments:
+
+- Supported
+ - Definition: Issues **actively triaged**, regressions **block** the release
+ - Last 2 major versions of Chrome, Firefox, and Edge on desktop OSes
+ - Last 2 versions of Safari
+ - Latest release of official Element Desktop app on desktop OSes
+ - Desktop OSes means macOS, Windows, and Linux versions for desktop devices
+ that are actively supported by the OS vendor and receive security updates
+- Experimental
+ - Definition: Issues **accepted**, regressions **do not block** the release
+ - Element as an installed PWA via current stable version of Chrome
+ - Mobile web for current stable version of Chrome, Firefox, and Safari on Android, iOS, and iPadOS
+- Not supported
+ - Definition: Issues only affecting unsupported environments are **closed**
+ - Everything else
+
+For accessing Element on an Android or iOS device, we currently recommend the
+native apps [element-android](https://github.com/vector-im/element-android)
+and [element-ios](https://github.com/vector-im/element-ios).
+
+# Getting Started
+
+The easiest way to test Element is to just use the hosted copy at
[webpack.Progress] 100%
+[element-js]
+[element-js] ℹ 「wdm」: 1840 modules
+[element-js] ℹ 「wdm」: Compiled successfully.
+```
+
+Remember, the command will not terminate since it runs the web server
+and rebuilds source files when they change. This development server also
+disables caching, so do NOT use it in production.
+
+Open ](https://translate.element.io/engage/element-web/?utm_source=widget)
+
+# Triaging issues
+
+Issues are triaged by community members and the Web App Team, following the [triage process](https://github.com/vector-im/element-meta/wiki/Triage-process).
+
+We use [issue labels](https://github.com/vector-im/element-meta/wiki/Issue-labelling) to sort all incoming issues.
\ No newline at end of file
diff --git a/apps/element-web/data.yml b/apps/element-web/data.yml
new file mode 100644
index 00000000..238eb4f6
--- /dev/null
+++ b/apps/element-web/data.yml
@@ -0,0 +1,20 @@
+name: Element Web
+tags:
+ - 工具
+title: 一款围绕您构建的安全通信平台
+type: 工具
+description: 一款围绕您构建的安全通信平台
+additionalProperties:
+ key: element-web
+ name: Element Web
+ tags:
+ - Tool
+ shortDescZh: 一款围绕您构建的安全通信平台
+ shortDescEn: A secure communications platform built around you
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://element.io
+ github: https://github.com/vector-im/element-web
+ document: https://github.com/vector-im/element-web
diff --git a/apps/element-web/latest/.env.sample b/apps/element-web/latest/.env.sample
new file mode 100644
index 00000000..a884f75c
--- /dev/null
+++ b/apps/element-web/latest/.env.sample
@@ -0,0 +1,2 @@
+CONTAINER_NAME="element-web"
+PANEL_APP_PORT_HTTP="40124"
diff --git a/apps/element-web/latest/data.yml b/apps/element-web/latest/data.yml
new file mode 100644
index 00000000..a45ec47c
--- /dev/null
+++ b/apps/element-web/latest/data.yml
@@ -0,0 +1,10 @@
+additionalProperties:
+ formFields:
+ - default: 40124
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
diff --git a/apps/element-web/latest/docker-compose.yml b/apps/element-web/latest/docker-compose.yml
new file mode 100644
index 00000000..49628375
--- /dev/null
+++ b/apps/element-web/latest/docker-compose.yml
@@ -0,0 +1,16 @@
+version: '3'
+services:
+ element-web:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ image: vectorim/element-web:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/element-web/logo.png b/apps/element-web/logo.png
new file mode 100644
index 00000000..55ead7a1
Binary files /dev/null and b/apps/element-web/logo.png differ
diff --git a/apps/embyserver/README.md b/apps/embyserver/README.md
new file mode 100644
index 00000000..162feb1c
--- /dev/null
+++ b/apps/embyserver/README.md
@@ -0,0 +1,54 @@
+Emby Server
+============
+
+Emby Server is a personal media server with apps on just about every device.
+
+It features a REST-based API with built-in documention to facilitate client development. We also have client libraries for our API to enable rapid development.
+
+## Emby Apps
+
+- [Android Mobile (Play Store)](https://play.google.com/store/apps/details?id=com.mb.android "Android Mobile (Play Store)")
+- [Android Mobile (Amazon)](http://www.amazon.com/Emby-for-Android/dp/B00GVH9O0I "Android Mobile (Amazon)")
+- [Android TV](https://play.google.com/store/apps/details?id=tv.emby.embyatv "Android TV")
+- [Amazon Fire TV](http://www.amazon.com/Emby-for-Fire-TV/dp/B00VVJKTW8 "Amazon Fire TV")
+- [HTML5](http://app.emby.media "HTML5")
+- [iPad](https://itunes.apple.com/us/app/emby/id992180193?ls=1&mt=8 "iPad")
+- [iPhone](https://itunes.apple.com/us/app/emby/id992180193?ls=1&mt=8 "iPhone")
+- [Kodi](http://emby.media/download/ "Kodi")
+- [Media Portal](http://www.team-mediaportal.com/ "Media Portal")
+- [Roku](https://www.roku.com/channels#!details/44191/emby "Roku")
+- [Windows Desktop](http://emby.media/download/ "Windows Desktop")
+- [Windows Media Center](http://emby.media/download/ "Windows Media Center")
+- [Windows Phone](http://www.windowsphone.com/s?appid=f4971ed9-f651-4bf6-84bb-94fd98613b86 "Windows Phone")
+- [Windows 8](http://apps.microsoft.com/windows/en-us/app/media-browser/ad55a2f0-9897-47bd-8944-bed3aefd5d06 "Windows 8.1")
+
+## New Users ##
+
+If you're a new user looking to install Emby Server, please head over to [emby.media](http://www.emby.media/ "emby.media")
+
+## Developer Info ##
+
+[Api Docs](https://github.com/MediaBrowser/MediaBrowser/wiki "Api Workflow")
+
+[How to Build a Server Plugin](https://github.com/MediaBrowser/MediaBrowser/wiki/How-to-build-a-Server-Plugin "How to build a server plugin")
+
+
+## Visit our community: ##
+
+http://emby.media/community
+
+## Images
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/embyserver/arm32v7/.env.sample b/apps/embyserver/arm32v7/.env.sample
new file mode 100644
index 00000000..b152e7ba
--- /dev/null
+++ b/apps/embyserver/arm32v7/.env.sample
@@ -0,0 +1,6 @@
+CONTAINER_NAME="embyserver"
+DATA_PATH="./data/config"
+MOUNT_PATH2="./data/mnt2"
+MOUNT_PATH="./data/mnt1"
+PANEL_APP_PORT_HTTP="40091"
+PANEL_APP_PORT_HTTPS="40092"
diff --git a/apps/embyserver/arm32v7/data.yml b/apps/embyserver/arm32v7/data.yml
new file mode 100644
index 00000000..863a0740
--- /dev/null
+++ b/apps/embyserver/arm32v7/data.yml
@@ -0,0 +1,39 @@
+additionalProperties:
+ formFields:
+ - default: 40091
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 40092
+ edit: true
+ envKey: PANEL_APP_PORT_HTTPS
+ labelEn: HTTPS Port
+ labelZh: HTTPS端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data/config
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+ - default: ./data/mnt1
+ edit: true
+ envKey: MOUNT_PATH
+ labelEn: Mount folder path
+ labelZh: 挂载文件夹路径
+ required: true
+ type: text
+ - default: ./data/mnt2
+ edit: true
+ envKey: MOUNT_PATH2
+ labelEn: Mount folder path 2
+ labelZh: 挂载文件夹路径2
+ required: true
+ type: text
\ No newline at end of file
diff --git a/apps/embyserver/arm32v7/docker-compose.yml b/apps/embyserver/arm32v7/docker-compose.yml
new file mode 100644
index 00000000..4a7ba5de
--- /dev/null
+++ b/apps/embyserver/arm32v7/docker-compose.yml
@@ -0,0 +1,30 @@
+version: '3'
+services:
+ emby:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8096"
+ - "${PANEL_APP_PORT_HTTPS}:8920"
+ volumes:
+ - "${DATA_PATH}:/config"
+ - "${MOUNT_PATH}:/mnt/share1"
+ - "${MOUNT_PATH2}:/mnt/share2"
+ environment:
+ - UID=1000
+ - GID=100
+ - GIDLIST=100
+ #runtime: nvidia # Expose NVIDIA GPUs
+ #runtime: nvidia # Expose NVIDIA GPUs
+ devices:
+ - /dev/dri:/dev/dri # VAAPI/NVDEC/NVENC render nodes
+ #- /dev/vchiq:/dev/vchiq # MMAL/OMX on Raspberry Pi
+ image: emby/embyserver_arm32v7:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/embyserver/arm64v8/.env.sample b/apps/embyserver/arm64v8/.env.sample
new file mode 100644
index 00000000..b152e7ba
--- /dev/null
+++ b/apps/embyserver/arm64v8/.env.sample
@@ -0,0 +1,6 @@
+CONTAINER_NAME="embyserver"
+DATA_PATH="./data/config"
+MOUNT_PATH2="./data/mnt2"
+MOUNT_PATH="./data/mnt1"
+PANEL_APP_PORT_HTTP="40091"
+PANEL_APP_PORT_HTTPS="40092"
diff --git a/apps/embyserver/arm64v8/data.yml b/apps/embyserver/arm64v8/data.yml
new file mode 100644
index 00000000..863a0740
--- /dev/null
+++ b/apps/embyserver/arm64v8/data.yml
@@ -0,0 +1,39 @@
+additionalProperties:
+ formFields:
+ - default: 40091
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 40092
+ edit: true
+ envKey: PANEL_APP_PORT_HTTPS
+ labelEn: HTTPS Port
+ labelZh: HTTPS端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data/config
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+ - default: ./data/mnt1
+ edit: true
+ envKey: MOUNT_PATH
+ labelEn: Mount folder path
+ labelZh: 挂载文件夹路径
+ required: true
+ type: text
+ - default: ./data/mnt2
+ edit: true
+ envKey: MOUNT_PATH2
+ labelEn: Mount folder path 2
+ labelZh: 挂载文件夹路径2
+ required: true
+ type: text
\ No newline at end of file
diff --git a/apps/embyserver/arm64v8/docker-compose.yml b/apps/embyserver/arm64v8/docker-compose.yml
new file mode 100644
index 00000000..c3278631
--- /dev/null
+++ b/apps/embyserver/arm64v8/docker-compose.yml
@@ -0,0 +1,29 @@
+version: '3'
+services:
+ emby:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8096"
+ - "${PANEL_APP_PORT_HTTPS}:8920"
+ volumes:
+ - "${DATA_PATH}:/config"
+ - "${MOUNT_PATH}:/mnt/share1"
+ - "${MOUNT_PATH2}:/mnt/share2"
+ environment:
+ - UID=1000
+ - GID=100
+ - GIDLIST=100
+ #runtime: nvidia # Expose NVIDIA GPUs
+ devices:
+ - /dev/dri:/dev/dri # VAAPI/NVDEC/NVENC render nodes
+ #- /dev/vchiq:/dev/vchiq # MMAL/OMX on Raspberry Pi
+ image: emby/embyserver_arm64v8:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/embyserver/data.yml b/apps/embyserver/data.yml
new file mode 100644
index 00000000..f64acb82
--- /dev/null
+++ b/apps/embyserver/data.yml
@@ -0,0 +1,20 @@
+name: Emby Server
+tags:
+ - 工具
+title: Emby 是一个免费的个人媒体服务器
+type: 工具
+description: Emby 是一个免费的个人媒体服务器
+additionalProperties:
+ key: embyserver
+ name: Emby Server
+ tags:
+ - Tool
+ shortDescZh: Emby 是一个免费的个人媒体服务器
+ shortDescEn: Emby is a free personal media server
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://emby.media/
+ github: https://github.com/MediaBrowser/Emby
+ document: https://emby.media/support/articles/Home.html
diff --git a/apps/embyserver/latest/.env.sample b/apps/embyserver/latest/.env.sample
new file mode 100644
index 00000000..b152e7ba
--- /dev/null
+++ b/apps/embyserver/latest/.env.sample
@@ -0,0 +1,6 @@
+CONTAINER_NAME="embyserver"
+DATA_PATH="./data/config"
+MOUNT_PATH2="./data/mnt2"
+MOUNT_PATH="./data/mnt1"
+PANEL_APP_PORT_HTTP="40091"
+PANEL_APP_PORT_HTTPS="40092"
diff --git a/apps/embyserver/latest/data.yml b/apps/embyserver/latest/data.yml
new file mode 100644
index 00000000..863a0740
--- /dev/null
+++ b/apps/embyserver/latest/data.yml
@@ -0,0 +1,39 @@
+additionalProperties:
+ formFields:
+ - default: 40091
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 40092
+ edit: true
+ envKey: PANEL_APP_PORT_HTTPS
+ labelEn: HTTPS Port
+ labelZh: HTTPS端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data/config
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+ - default: ./data/mnt1
+ edit: true
+ envKey: MOUNT_PATH
+ labelEn: Mount folder path
+ labelZh: 挂载文件夹路径
+ required: true
+ type: text
+ - default: ./data/mnt2
+ edit: true
+ envKey: MOUNT_PATH2
+ labelEn: Mount folder path 2
+ labelZh: 挂载文件夹路径2
+ required: true
+ type: text
\ No newline at end of file
diff --git a/apps/embyserver/latest/docker-compose.yml b/apps/embyserver/latest/docker-compose.yml
new file mode 100644
index 00000000..b687d2dd
--- /dev/null
+++ b/apps/embyserver/latest/docker-compose.yml
@@ -0,0 +1,29 @@
+version: '3'
+services:
+ emby:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8096"
+ - "${PANEL_APP_PORT_HTTPS}:8920"
+ volumes:
+ - "${DATA_PATH}:/config"
+ - "${MOUNT_PATH}:/mnt/share1"
+ - "${MOUNT_PATH2}:/mnt/share2"
+ environment:
+ - UID=1000
+ - GID=100
+ - GIDLIST=100
+ #runtime: nvidia # Expose NVIDIA GPUs
+ devices:
+ - /dev/dri:/dev/dri # VAAPI/NVDEC/NVENC render nodes
+ #- /dev/vchiq:/dev/vchiq # MMAL/OMX on Raspberry Pi
+ image: emby/embyserver:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/embyserver/logo.png b/apps/embyserver/logo.png
new file mode 100644
index 00000000..50441767
Binary files /dev/null and b/apps/embyserver/logo.png differ
diff --git a/apps/filebrowser/2.26.0/.env.sample b/apps/filebrowser/2.26.0/.env.sample
new file mode 100644
index 00000000..f914cabf
--- /dev/null
+++ b/apps/filebrowser/2.26.0/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="filebrowser"
+PANEL_APP_PORT_HTTP="40071"
+MOUNT_PATH="./data/mnt"
diff --git a/apps/filebrowser/2.26.0/data.yml b/apps/filebrowser/2.26.0/data.yml
new file mode 100644
index 00000000..cd96ae14
--- /dev/null
+++ b/apps/filebrowser/2.26.0/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 40071
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data/mnt
+ edit: true
+ envKey: MOUNT_PATH
+ labelEn: Mount folder path
+ labelZh: 挂载文件夹路径
+ required: true
+ type: text
diff --git a/apps/filebrowser/2.26.0/data/.filebrowser.json b/apps/filebrowser/2.26.0/data/.filebrowser.json
new file mode 100644
index 00000000..fbcf6a1a
--- /dev/null
+++ b/apps/filebrowser/2.26.0/data/.filebrowser.json
@@ -0,0 +1,8 @@
+{
+ "port": 80,
+ "baseURL": "",
+ "address": "",
+ "log": "stdout",
+ "database": "/database/filebrowser.db",
+ "root": "/srv"
+ }
\ No newline at end of file
diff --git a/apps/filebrowser/2.26.0/data/database.db b/apps/filebrowser/2.26.0/data/database.db
new file mode 100644
index 00000000..e69de29b
diff --git a/apps/filebrowser/2.26.0/docker-compose.yml b/apps/filebrowser/2.26.0/docker-compose.yml
new file mode 100644
index 00000000..f93561f7
--- /dev/null
+++ b/apps/filebrowser/2.26.0/docker-compose.yml
@@ -0,0 +1,21 @@
+version: '3'
+services:
+ filebrowser:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ volumes:
+ - "${MOUNT_PATH}:/srv"
+ - "./data/database.db:/database.db"
+ - "./data/.filebrowser.json:/.filebrowser.json"
+ user: "${UID}:${GID}"
+ image: filebrowser/filebrowser:v2.26.0
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/filebrowser/README.md b/apps/filebrowser/README.md
new file mode 100644
index 00000000..31d51348
--- /dev/null
+++ b/apps/filebrowser/README.md
@@ -0,0 +1,44 @@
+# 使用说明
+
+- 默认账户密码
+
+```
+username:admin
+password:admin
+```
+
+# 原始相关
+
+
+
文件快递柜-轻量
+FileCodeBox-Lite
+
+
+
+
+### 寄件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+### 取件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+### 管理
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## 配置文件(1.7及以下版本才需要)
+
+如果需要修改配置,可以将该文件放在`/opt/FileCodeBox/`目录下,并命名为`.env`,然后重启容器即可。
+如果不是Docker,则需要在项目同目录下新建一个`data`文件夹,然后在创建`.env`文件
+
+```dotenv
+# 端口
+PORT=12345
+# Sqlite数据库文件
+DATABASE_URL=sqlite+aiosqlite:///database.db
+# 静态文件夹
+DATA_ROOT=./static
+# 静态文件夹URL
+STATIC_URL=/static
+# 开启上传
+ENABLE_UPLOAD=True
+# 错误次数
+ERROR_COUNT=5
+# 错误限制分钟数
+ERROR_MINUTE=10
+# 上传次数
+UPLOAD_COUNT=60
+# 上传限制分钟数
+UPLOAD_MINUTE=1
+# 删除过期文件的间隔(分钟)
+DELETE_EXPIRE_FILES_INTERVAL=10
+# 管理地址
+ADMIN_ADDRESS=admin
+# 管理密码
+ADMIN_PASSWORD=admin
+# 文件大小限制,默认10MB
+FILE_SIZE_LIMIT=10
+# 网站标题
+TITLE=文件快递柜
+# 网站描述
+DESCRIPTION=FileCodeBox,文件快递柜,口令传送箱,匿名口令分享文本,文件,图片,视频,音频,压缩包等文件
+# 网站关键词
+KEYWORDS=FileCodeBox,文件快递柜,口令传送箱,匿名口令分享文本,文件,图片,视频,音频,压缩包等文件
+# 存储引擎
+STORAGE_ENGINE=filesystem
+# 如果使用阿里云OSS服务的话需要额外创建如下参数:
+# 阿里云账号AccessKey
+KeyId=阿里云账号AccessKey
+# 阿里云账号AccessKeySecret
+KeySecret=阿里云账号AccessKeySecret
+# 阿里云OSS Bucket的地域节点
+OSS_ENDPOINT=阿里云OSS Bucket的地域节点
+# 阿里云OSS Bucket的BucketName
+BUCKET_NAME=阿里云OSS Bucket的BucketName
+```
+
+## 状态
+
+
+
+## Star History
+
+[](https://star-history.com/#vastsa/FileCodeBox&Date)
+
+## 赞赏
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+## 常见问题
+
+1. 413 Request Entity Too Large
+ Nginx限制:
+ 找到自己主机的nginx.conf配置文件,打开
+ 在http{}中加入 client_max_body_size 10m;
+ 然后重启nginx
+
+## 免责声明
+
+本项目开源仅供学习使用,不得用于任何违法用途,否则后果自负,与本人无关。使用请保留项目地址谢谢。
diff --git a/apps/filecodebox/beta/.env.sample b/apps/filecodebox/beta/.env.sample
new file mode 100644
index 00000000..be23ecc7
--- /dev/null
+++ b/apps/filecodebox/beta/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="filecodebox"
+PANEL_APP_PORT_HTTP="40157"
+DATA_PATH="./data"
diff --git a/apps/filecodebox/beta/data.yml b/apps/filecodebox/beta/data.yml
new file mode 100644
index 00000000..9435884d
--- /dev/null
+++ b/apps/filecodebox/beta/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 40157
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
diff --git a/apps/filecodebox/beta/docker-compose.yml b/apps/filecodebox/beta/docker-compose.yml
new file mode 100644
index 00000000..cc3ba073
--- /dev/null
+++ b/apps/filecodebox/beta/docker-compose.yml
@@ -0,0 +1,18 @@
+version: '3'
+services:
+ filecodebox:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:12345"
+ volumes:
+ - "${DATA_PATH}:/app/data"
+ image: lanol/filecodebox:beta
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/filecodebox/data.yml b/apps/filecodebox/data.yml
new file mode 100644
index 00000000..901b4ca4
--- /dev/null
+++ b/apps/filecodebox/data.yml
@@ -0,0 +1,20 @@
+name: 文件快递柜-轻量 (FileCodeBox-Lite)
+tags:
+ - 工具
+title: 匿名口令分享文本,文件,像拿快递一样取文件
+type: 工具
+description: 匿名口令分享文本,文件,像拿快递一样取文件
+additionalProperties:
+ key: filecodebox
+ name: 文件快递柜-轻量 (FileCodeBox-Lite)
+ tags:
+ - Tool
+ shortDescZh: 匿名口令分享文本,文件,像拿快递一样取文件
+ shortDescEn: Anonymous Passcode Sharing Text, Files, Like Taking Express Delivery for Files
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://share.lanol.cn
+ github: https://github.com/vastsa/FileCodeBox
+ document: https://github.com/vastsa/FileCodeBox
diff --git a/apps/filecodebox/logo.png b/apps/filecodebox/logo.png
new file mode 100644
index 00000000..1e1313c0
Binary files /dev/null and b/apps/filecodebox/logo.png differ
diff --git a/apps/firefox-browser/README.md b/apps/firefox-browser/README.md
new file mode 100644
index 00000000..55a9c4f0
--- /dev/null
+++ b/apps/firefox-browser/README.md
@@ -0,0 +1,26 @@
+
+
+
+[Firefox](https://www.mozilla.org/en-US/firefox/) Browser, also known as Mozilla Firefox or simply Firefox, is a free and open-source web browser developed by the Mozilla Foundation and its subsidiary, the Mozilla Corporation. Firefox uses the Gecko layout engine to render web pages, which implements current and anticipated web standards.
+
+
+## Supported Architectures
+
+We utilise the docker manifest for multi-platform awareness. More information is available from docker [here](https://github.com/docker/distribution/blob/master/docs/spec/manifest-v2-2.md#manifest-list) and our announcement [here](https://blog.linuxserver.io/2019/02/21/the-lsio-pipeline-project/).
+
+Simply pulling `lscr.io/linuxserver/firefox:latest` should retrieve the correct image for your arch, but you can also pull specific arch images via tags.
+
+The architectures supported by this image are:
+
+| Architecture | Available | Tag |
+| --- | --- | --- |
+| x86-64 | ✅ | amd64-<version tag> |
+| arm64 | ✅ | arm64v8-<version tag> |
+| armhf | ❌ | |
+
+## Application Setup
+
+The application can be accessed at:
+
+- http://yourhost:3000/
+- https://yourhost:3001/
diff --git a/apps/firefox-browser/data.yml b/apps/firefox-browser/data.yml
new file mode 100644
index 00000000..aae23fa6
--- /dev/null
+++ b/apps/firefox-browser/data.yml
@@ -0,0 +1,20 @@
+name: Firefox Browser
+tags:
+ - 工具
+title: 一个免费的开源网络浏览器
+type: 工具
+description: 一个免费的开源网络浏览器
+additionalProperties:
+ key: firefox-browser
+ name: Firefox Browser
+ tags:
+ - Tool
+ shortDescZh: 一个免费的开源网络浏览器
+ shortDescEn: A free and open-source web browser
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://www.mozilla.org/
+ github: https://www.mozilla.org/
+ document: https://www.mozilla.org/
diff --git a/apps/firefox-browser/latest/.env.sample b/apps/firefox-browser/latest/.env.sample
new file mode 100644
index 00000000..c95a9e20
--- /dev/null
+++ b/apps/firefox-browser/latest/.env.sample
@@ -0,0 +1,7 @@
+CONTAINER_NAME="firefox-browser"
+DATA_PATH="./data"
+HTTP_PWD="Password"
+HTTP_USER="user"
+MEM_USE="512m"
+PANEL_APP_PORT_HTTP="40089"
+PANEL_APP_PORT_HTTPS="40090"
diff --git a/apps/firefox-browser/latest/data.yml b/apps/firefox-browser/latest/data.yml
new file mode 100644
index 00000000..4dc1cc51
--- /dev/null
+++ b/apps/firefox-browser/latest/data.yml
@@ -0,0 +1,48 @@
+additionalProperties:
+ formFields:
+ - default: 40089
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 40090
+ edit: true
+ envKey: PANEL_APP_PORT_HTTPS
+ labelEn: HTTPS Port
+ labelZh: HTTPS端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: "user"
+ edit: true
+ envKey: HTTP_USER
+ labelEn: Access User
+ labelZh: 访问用户
+ required: true
+ type: text
+ - default: Password
+ edit: true
+ envKey: HTTP_PWD
+ labelEn: Access Password
+ labelZh: 访问密码
+ random: false
+ required: true
+ rule: paramComplexity
+ type: password
+ - default: "512m"
+ edit: true
+ envKey: MEM_USE
+ labelEn: Shared memory footprint (1gb)
+ labelZh: 共享内存占用(1gb)
+ required: true
+ type: text
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
diff --git a/apps/firefox-browser/latest/docker-compose.yml b/apps/firefox-browser/latest/docker-compose.yml
new file mode 100644
index 00000000..dcfcc1ef
--- /dev/null
+++ b/apps/firefox-browser/latest/docker-compose.yml
@@ -0,0 +1,28 @@
+version: '3'
+services:
+ firefox:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - ${PANEL_APP_PORT_HTTP}:3000
+ - ${PANEL_APP_PORT_HTTPS}:3001
+ volumes:
+ - "${DATA_PATH}:/config"
+ security_opt:
+ - seccomp:unconfined
+ environment:
+ - PUID=1000
+ - PGID=1000
+ - TZ=Asia/Shanghai
+ - CUSTOM_USER=${HTTP_USER}
+ - PASSWORD=${HTTP_PWD}
+ shm_size: ${MEM_USE}
+ image: linuxserver/firefox:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
\ No newline at end of file
diff --git a/apps/firefox-browser/logo.png b/apps/firefox-browser/logo.png
new file mode 100644
index 00000000..225ecced
Binary files /dev/null and b/apps/firefox-browser/logo.png differ
diff --git a/apps/firefox-browser/version-116.0-r0/.env.sample b/apps/firefox-browser/version-116.0-r0/.env.sample
new file mode 100644
index 00000000..c95a9e20
--- /dev/null
+++ b/apps/firefox-browser/version-116.0-r0/.env.sample
@@ -0,0 +1,7 @@
+CONTAINER_NAME="firefox-browser"
+DATA_PATH="./data"
+HTTP_PWD="Password"
+HTTP_USER="user"
+MEM_USE="512m"
+PANEL_APP_PORT_HTTP="40089"
+PANEL_APP_PORT_HTTPS="40090"
diff --git a/apps/firefox-browser/version-116.0-r0/data.yml b/apps/firefox-browser/version-116.0-r0/data.yml
new file mode 100644
index 00000000..4dc1cc51
--- /dev/null
+++ b/apps/firefox-browser/version-116.0-r0/data.yml
@@ -0,0 +1,48 @@
+additionalProperties:
+ formFields:
+ - default: 40089
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 40090
+ edit: true
+ envKey: PANEL_APP_PORT_HTTPS
+ labelEn: HTTPS Port
+ labelZh: HTTPS端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: "user"
+ edit: true
+ envKey: HTTP_USER
+ labelEn: Access User
+ labelZh: 访问用户
+ required: true
+ type: text
+ - default: Password
+ edit: true
+ envKey: HTTP_PWD
+ labelEn: Access Password
+ labelZh: 访问密码
+ random: false
+ required: true
+ rule: paramComplexity
+ type: password
+ - default: "512m"
+ edit: true
+ envKey: MEM_USE
+ labelEn: Shared memory footprint (1gb)
+ labelZh: 共享内存占用(1gb)
+ required: true
+ type: text
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
diff --git a/apps/firefox-browser/version-116.0-r0/docker-compose.yml b/apps/firefox-browser/version-116.0-r0/docker-compose.yml
new file mode 100644
index 00000000..e4fca2a7
--- /dev/null
+++ b/apps/firefox-browser/version-116.0-r0/docker-compose.yml
@@ -0,0 +1,28 @@
+version: '3'
+services:
+ firefox:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - ${PANEL_APP_PORT_HTTP}:3000
+ - ${PANEL_APP_PORT_HTTPS}:3001
+ volumes:
+ - "${DATA_PATH}:/config"
+ security_opt:
+ - seccomp:unconfined
+ environment:
+ - PUID=1000
+ - PGID=1000
+ - TZ=Asia/Shanghai
+ - CUSTOM_USER=${HTTP_USER}
+ - PASSWORD=${HTTP_PWD}
+ shm_size: ${MEM_USE}
+ image: linuxserver/firefox:version-116.0-r0
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
\ No newline at end of file
diff --git a/apps/flarum/1.7.1/.env.sample b/apps/flarum/1.7.1/.env.sample
new file mode 100644
index 00000000..707fa709
--- /dev/null
+++ b/apps/flarum/1.7.1/.env.sample
@@ -0,0 +1,10 @@
+CONTAINER_NAME="flarum"
+PANEL_APP_PORT_HTTP="40020"
+DATA_PATH="./data"
+PANEL_DB_HOST="127.0.0.1"
+FLARUM_DB_PORT="3306"
+PANEL_DB_NAME="flarum"
+PANEL_DB_USER="flarum"
+PANEL_DB_USER_PASSWORD="MyDBPWD_brls9UwcRasl"
+PANEL_DB_PREFIX="flarum_"
+FLARUM_EXTERNAL_URL="http://localhost:40020"
\ No newline at end of file
diff --git a/apps/flarum/1.7.1/data.yml b/apps/flarum/1.7.1/data.yml
new file mode 100644
index 00000000..76a3fa97
--- /dev/null
+++ b/apps/flarum/1.7.1/data.yml
@@ -0,0 +1,78 @@
+additionalProperties:
+ formFields:
+ - child:
+ default: ""
+ envKey: PANEL_DB_HOST
+ labelEn: Database Service
+ labelZh: 数据库服务
+ required: true
+ type: service
+ default: mysql
+ labelEn: Database Service
+ labelZh: 数据库服务
+ params:
+ - envKey: FLARUM_DB_PORT
+ key: mysql
+ type: param
+ value: "3306"
+ - envKey: FLARUM_DB_PORT
+ key: postgresql
+ type: param
+ value: "5432"
+ required: true
+ type: apps
+ values:
+ - label: MySQL
+ value: mysql
+ - default: flarum
+ envKey: PANEL_DB_NAME
+ labelEn: Database
+ labelZh: 数据库名
+ random: true
+ required: true
+ rule: paramCommon
+ type: text
+ - default: flarum
+ envKey: PANEL_DB_USER
+ labelEn: User
+ labelZh: 数据库用户
+ random: true
+ required: true
+ rule: paramCommon
+ type: text
+ - default: flarum
+ envKey: PANEL_DB_USER_PASSWORD
+ labelEn: Password
+ labelZh: 数据库用户密码
+ random: true
+ required: true
+ rule: paramComplexity
+ type: password
+ - default: flarum_
+ envKey: PANEL_DB_PREFIX
+ labelEn: Database prefix
+ labelZh: 数据库前缀
+ required: true
+ type: text
+ - default: 40020
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data storage folder
+ labelZh: 数据存放文件夹
+ required: true
+ type: text
+ - default: http://localhost:40020
+ edit: true
+ envKey: FLARUM_EXTERNAL_URL
+ labelEn: External URL
+ labelZh: 外部访问地址
+ required: true
+ type: text
diff --git a/apps/flarum/1.7.1/docker-compose.yml b/apps/flarum/1.7.1/docker-compose.yml
new file mode 100644
index 00000000..5209e621
--- /dev/null
+++ b/apps/flarum/1.7.1/docker-compose.yml
@@ -0,0 +1,36 @@
+version: "3"
+services:
+ flarum:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8000"
+ volumes:
+ - "${DATA_PATH}:/data"
+ environment:
+ - TZ=Asia/Shanghai
+ - PUID=1000
+ - PGID=1000
+ - MEMORY_LIMIT=256M
+ - UPLOAD_MAX_SIZE=256M
+ - CLEAR_ENV=yes
+ - OPCACHE_MEM_SIZE=128M
+ - LISTEN_IPV6=true
+ - REAL_IP_FROM=0.0.0.0/32
+ - DB_HOST=${PANEL_DB_HOST}
+ - DB_PORT=${FLARUM_DB_PORT}
+ - DB_NAME=${PANEL_DB_NAME}
+ - DB_USER=${PANEL_DB_USER}
+ - DB_PASSWORD=${PANEL_DB_USER_PASSWORD}
+ - DB_PREFIX=${PANEL_DB_PREFIX}
+ - DB_NOPREFIX=false
+ - DB_TIMEOUT=60
+ - FLARUM_BASE_URL=${FLARUM_EXTERNAL_URL}
+ image: crazymax/flarum:1.8.0
+ labels:
+ createdBy: Apps
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/flarum/README.md b/apps/flarum/README.md
new file mode 100644
index 00000000..5fad07f3
--- /dev/null
+++ b/apps/flarum/README.md
@@ -0,0 +1,69 @@
+# 使用说明
+## 账户密码
+- 初始账户: flarum
+- 初始密码: flarum
+
+## 中文语言包
+
+> 中文语言包:
+>> - https://github.com/flarum-lang/chinese-simplified
+
+使用说明:
+
+- Flarum v0.1.0-beta.8 及以上版本
+
+进入容器终端运行以下安装中文语言包,详细可查看原项目文档。
+```
+composer require flarum-lang/chinese-simplified
+php flarum cache:clear
+```
+
+## 所使用docker镜像相关:
+
+> 项目链接
+>> - https://hub.docker.com/r/crazymax/flarum
+>> - https://github.com/crazy-max/docker-flarum
+
+# 原始相关
+
+
+
+
+
+## About Flarum
+
+**[Flarum](https://flarum.org/) is a delightfully simple discussion platform for your website.** It's fast and easy to use, with all the features you need to run a successful community. It is designed to be:
+
+* **Fast and simple.** No clutter, no bloat, no complex dependencies. Flarum is built with PHP so it’s quick and easy to deploy. The interface is powered by Mithril, a performant JavaScript framework with a tiny footprint.
+
+* **Beautiful and responsive.** This is forum software for humans. Flarum is carefully designed to be consistent and intuitive across platforms, out-of-the-box.
+
+* **Powerful and extensible.** Customize, extend, and integrate Flarum to suit your community. Flarum’s architecture is amazingly flexible, with a powerful Extension API.
+
+
+
+## Installation
+
+Read the **[Installation guide](https://docs.flarum.org/install)** to get started. For support, refer to the [documentation](https://docs.flarum.org/), and ask questions on the [community forum](https://discuss.flarum.org/) or [Discord chat](https://flarum.org/discord/).
+
+## Contributing
+
+Thank you for considering contributing to Flarum! Please read the **[Contributing guide](https://docs.flarum.org/contributing)** to learn how you can help.
+
+This repository only holds the Flarum skeleton application. Most development happens in [flarum/core](https://github.com/flarum/core).
+
+## Security Vulnerabilities
+
+If you discover a security vulnerability within Flarum, please follow our [security policy](https://github.com/flarum/core/security/policy) so we can address it promptly.
+
+## License
+
+Flarum is open-source software licensed under the [MIT License](https://github.com/flarum/flarum/blob/master/LICENSE).
+
+
diff --git a/apps/flarum/data.yml b/apps/flarum/data.yml
new file mode 100644
index 00000000..948fd17b
--- /dev/null
+++ b/apps/flarum/data.yml
@@ -0,0 +1,20 @@
+name: flarum
+tags:
+ - 建站
+title: 新一代的论坛软件,使在线讨论变得有趣
+type: 建站
+description: 新一代的论坛软件,使在线讨论变得有趣
+additionalProperties:
+ key: flarum
+ name: flarum
+ tags:
+ - WebSite
+ shortDescZh: 新一代的论坛软件,使在线讨论变得有趣
+ shortDescEn: The next-generation forum software that makes online discussion fun
+ type: website
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://flarum.org/
+ github: https://github.com/flarum/flarum
+ document: https://docs.flarum.org/
diff --git a/apps/flarum/latest/.env.sample b/apps/flarum/latest/.env.sample
new file mode 100644
index 00000000..707fa709
--- /dev/null
+++ b/apps/flarum/latest/.env.sample
@@ -0,0 +1,10 @@
+CONTAINER_NAME="flarum"
+PANEL_APP_PORT_HTTP="40020"
+DATA_PATH="./data"
+PANEL_DB_HOST="127.0.0.1"
+FLARUM_DB_PORT="3306"
+PANEL_DB_NAME="flarum"
+PANEL_DB_USER="flarum"
+PANEL_DB_USER_PASSWORD="MyDBPWD_brls9UwcRasl"
+PANEL_DB_PREFIX="flarum_"
+FLARUM_EXTERNAL_URL="http://localhost:40020"
\ No newline at end of file
diff --git a/apps/flarum/latest/data.yml b/apps/flarum/latest/data.yml
new file mode 100644
index 00000000..76a3fa97
--- /dev/null
+++ b/apps/flarum/latest/data.yml
@@ -0,0 +1,78 @@
+additionalProperties:
+ formFields:
+ - child:
+ default: ""
+ envKey: PANEL_DB_HOST
+ labelEn: Database Service
+ labelZh: 数据库服务
+ required: true
+ type: service
+ default: mysql
+ labelEn: Database Service
+ labelZh: 数据库服务
+ params:
+ - envKey: FLARUM_DB_PORT
+ key: mysql
+ type: param
+ value: "3306"
+ - envKey: FLARUM_DB_PORT
+ key: postgresql
+ type: param
+ value: "5432"
+ required: true
+ type: apps
+ values:
+ - label: MySQL
+ value: mysql
+ - default: flarum
+ envKey: PANEL_DB_NAME
+ labelEn: Database
+ labelZh: 数据库名
+ random: true
+ required: true
+ rule: paramCommon
+ type: text
+ - default: flarum
+ envKey: PANEL_DB_USER
+ labelEn: User
+ labelZh: 数据库用户
+ random: true
+ required: true
+ rule: paramCommon
+ type: text
+ - default: flarum
+ envKey: PANEL_DB_USER_PASSWORD
+ labelEn: Password
+ labelZh: 数据库用户密码
+ random: true
+ required: true
+ rule: paramComplexity
+ type: password
+ - default: flarum_
+ envKey: PANEL_DB_PREFIX
+ labelEn: Database prefix
+ labelZh: 数据库前缀
+ required: true
+ type: text
+ - default: 40020
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data storage folder
+ labelZh: 数据存放文件夹
+ required: true
+ type: text
+ - default: http://localhost:40020
+ edit: true
+ envKey: FLARUM_EXTERNAL_URL
+ labelEn: External URL
+ labelZh: 外部访问地址
+ required: true
+ type: text
diff --git a/apps/flarum/latest/docker-compose.yml b/apps/flarum/latest/docker-compose.yml
new file mode 100644
index 00000000..699f7737
--- /dev/null
+++ b/apps/flarum/latest/docker-compose.yml
@@ -0,0 +1,36 @@
+version: "3"
+services:
+ flarum:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8000"
+ volumes:
+ - "${DATA_PATH}:/data"
+ environment:
+ - TZ=Asia/Shanghai
+ - PUID=1000
+ - PGID=1000
+ - MEMORY_LIMIT=256M
+ - UPLOAD_MAX_SIZE=256M
+ - CLEAR_ENV=yes
+ - OPCACHE_MEM_SIZE=128M
+ - LISTEN_IPV6=true
+ - REAL_IP_FROM=0.0.0.0/32
+ - DB_HOST=${PANEL_DB_HOST}
+ - DB_PORT=${FLARUM_DB_PORT}
+ - DB_NAME=${PANEL_DB_NAME}
+ - DB_USER=${PANEL_DB_USER}
+ - DB_PASSWORD=${PANEL_DB_USER_PASSWORD}
+ - DB_PREFIX=${PANEL_DB_PREFIX}
+ - DB_NOPREFIX=false
+ - DB_TIMEOUT=60
+ - FLARUM_BASE_URL=${FLARUM_EXTERNAL_URL}
+ image: crazymax/flarum:latest
+ labels:
+ createdBy: Apps
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/flarum/logo.png b/apps/flarum/logo.png
new file mode 100644
index 00000000..35f6c277
Binary files /dev/null and b/apps/flarum/logo.png differ
diff --git a/apps/flexget/3.9.16/.env.sample b/apps/flexget/3.9.16/.env.sample
new file mode 100644
index 00000000..51b5f176
--- /dev/null
+++ b/apps/flexget/3.9.16/.env.sample
@@ -0,0 +1,5 @@
+CONTAINER_NAME="flexget"
+PANEL_APP_PORT_HTTP="40112"
+DATA_PATH="./data/data"
+TIME_ZONE="Asia/Shanghai"
+WEB_PASSWORD="flexget_password"
diff --git a/apps/flexget/3.9.16/data.yml b/apps/flexget/3.9.16/data.yml
new file mode 100644
index 00000000..76835a92
--- /dev/null
+++ b/apps/flexget/3.9.16/data.yml
@@ -0,0 +1,33 @@
+additionalProperties:
+ formFields:
+ - default: 40112
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data/data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+ - default: Asia/Shanghai
+ edit: true
+ envKey: TIME_ZONE
+ labelEn: Time zone
+ labelZh: 时区
+ required: true
+ type: text
+ - default: flexget
+ envKey: WEB_PASSWORD
+ labelEn: Web access password
+ labelZh: 网页访问密码
+ random: true
+ edit: true
+ required: true
+ rule: paramComplexity
+ type: password
diff --git a/apps/flexget/3.9.16/docker-compose.yml b/apps/flexget/3.9.16/docker-compose.yml
new file mode 100644
index 00000000..b847d425
--- /dev/null
+++ b/apps/flexget/3.9.16/docker-compose.yml
@@ -0,0 +1,24 @@
+version: '3'
+services:
+ flexget:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:5050"
+ volumes:
+ - ./data/config:/config
+ - ${DATA_PATH}:/data
+ environment:
+ - PUID=1000
+ - PGID=1000
+ - TZ=${TIME_ZONE}
+ - FG_WEBUI_PASSWD=${WEB_PASSWORD}
+ image: wiserain/flexget:3.9.16
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/flexget/README.md b/apps/flexget/README.md
new file mode 100644
index 00000000..87b5aeac
--- /dev/null
+++ b/apps/flexget/README.md
@@ -0,0 +1,63 @@
+# FlexGet
+
+[](https://github.com/Flexget/Flexget/actions/workflows/main.yml?query=branch%3Adevelop)
+
+[](https://pypi.python.org/pypi/Flexget)
+
+[](https://discord.gg/W6CQrJx)
+
+[](http://isitmaintained.com/project/Flexget/Flexget)
+
+[FlexGet](https://flexget.com) is a multipurpose automation tool for
+content like torrents, nzbs, podcasts, comics, series, movies, etc. It
+can use different kinds of sources like RSS-feeds, html pages, csv
+files, search engines and there are even plugins for sites that do not
+provide any kind of useful feeds.
+
+# Example
+
+Flexget uses a [YAML](http://www.yaml.org/) based configuration file.
+The following example will look in the RSS feed in the link, will match
+any item that match the series names and download it:
+
+ tasks:
+ tv:
+ rss: http://example.com/torrents.xml
+ series:
+ - some series
+ - another series
+ download: /tvshows
+
+There are numerous plugins that allow utilizing FlexGet in interesting
+ways and more are being added continuously.
+
+FlexGet is extremely useful in conjunction with applications which have
+watch directory support or provide interface for external utilities like
+FlexGet. To get a sense of the many things that can be done with FlexGet
+you can take a look in our [cookbook](https://flexget.com/Cookbook).
+
+**ChangeLog:**
+
+
+支付宝
+
+
+
+微信
+
+
+
+
+
+Like what you see? :eyes: Give us a GitHub Star! :star:
+
+
+
+Focalboard is an open source, multilingual, self-hosted project management tool that's an alternative to Trello, Notion, and Asana.
+
+It helps define, organize, track and manage work across individuals and teams. Focalboard comes in three editions:
+
+* **[Mattermost Boards](https://mattermost.com/boards/)**: Integrated with the Mattermost platform for your team to plan and collaborate.
+
+* **[Personal Desktop](https://www.focalboard.com/docs/personal-edition/desktop/)**: A standalone, single-user [macOS](https://apps.apple.com/app/apple-store/id1556908618?pt=2114704&ct=website&mt=8), [Windows](https://www.microsoft.com/store/apps/9NLN2T0SX9VF?cid=website), or [Linux](https://www.focalboard.com/download/personal-edition/desktop/#linux-desktop) desktop app for your own todos and personal projects.
+
+* **[Personal Server](https://www.focalboard.com/download/personal-edition/ubuntu/)**: A standalone, multi-user server for development and personal use.
+
+## Try Focalboard
+
+### Mattermost Boards
+
+**Mattermost Boards** combines project management tools with messaging and collaboration for teams of all sizes. To access and use **Mattermost Boards**, install or upgrade to Mattermost v6.0 or later as a [self-hosted server](https://docs.mattermost.com/guides/deployment.html?utm_source=github&utm_campaign=focalboard). After logging into Mattermost, select the menu in the top left corner and select **Boards**.
+
+### Personal Desktop (Windows, Mac or Linux Desktop)
+
+* **Windows**: Download from the [Windows App Store](https://www.microsoft.com/store/productId/9NLN2T0SX9VF) or download `focalboard-win.zip` from the [latest release](https://github.com/mattermost/focalboard/releases), unpack, and run `Focalboard.exe`.
+* **Mac**: Download from the [Mac App Store](https://apps.apple.com/us/app/focalboard-insiders/id1556908618?mt=12).
+* **Linux Desktop**: Download `focalboard-linux.tar.gz` from the [latest release](https://github.com/mattermost/focalboard/releases), unpack, and open `focalboard-app`.
+
+### Personal Server
+
+**Ubuntu**: You can download and run the compiled Focalboard **Personal Server** on Ubuntu by following [our latest install guide](https://www.focalboard.com/download/personal-edition/ubuntu/).
+
+### API Docs
+
+Boards API docs can be found over at https://htmlpreview.github.io/?https://github.com/mattermost/focalboard/blob/main/server/swagger/docs/html/index.html
+
+## Contribute to Focalboard
+
+For anyone interested in being an official maintainer of the Focalboard repository, please reach out to us on our [Focalboard Community Channel](https://community.mattermost.com/core/channels/focalboard). If there are no maintainers, and you’re still interested in adding your own improvements to the Focalboard Personal Editions, we encourage you to fork and maintain the repository.
+
+### Getting started
+
+Our [developer guide](https://developers.mattermost.com/contribute/focalboard/personal-server-setup-guide) has detailed instructions on how to set up your development environment for the **Personal Server**. It also provides more information about contributing to our open source community.
+
+Clone [mattermost-server](https://github.com/mattermost/mattermost-server) into sibling directory.
+
+Create an `.env` file in the focalboard directory that contains:
+
+```
+EXCLUDE_ENTERPRISE="1"
+```
+
+To build the server:
+
+```
+make prebuild
+make
+```
+
+To run the server:
+
+```
+ ./bin/focalboard-server
+```
+
+Then navigate your browser to [`http://localhost:8000`](http://localhost:8000) to access your Focalboard server. The port is configured in `config.json`.
+
+Once the server is running, you can rebuild just the web app via `make webapp` in a separate terminal window. Reload your browser to see the changes.
+
+### Building and running standalone desktop apps
+
+You can build standalone apps that package the server to run locally against SQLite:
+
+* **Windows**:
+ * *Requires Windows 10, [Windows 10 SDK](https://developer.microsoft.com/en-us/windows/downloads/sdk-archive/) 10.0.19041.0, and .NET 4.8 developer pack*
+ * Open a `git-bash` prompt.
+ * Run `make prebuild`
+ * The above prebuild step needs to be run only when you make changes to or want to install your npm dependencies, etc.
+ * Once the prebuild is completed, you can keep repeating the below steps to build the app & see the changes.
+ * Run `make win-wpf-app`
+ * Run `cd win-wpf/msix && focalboard.exe`
+* **Mac**:
+ * *Requires macOS 11.3+ and Xcode 13.2.1+*
+ * Run `make prebuild`
+ * The above prebuild step needs to be run only when you make changes to or want to install your npm dependencies, etc.
+ * Once the prebuild is completed, you can keep repeating the below steps to build the app & see the changes.
+ * Run `make mac-app`
+ * Run `open mac/dist/Focalboard.app`
+* **Linux**:
+ * *Tested on Ubuntu 18.04*
+ * Install `webgtk` dependencies
+ * Run `sudo apt-get install libgtk-3-dev`
+ * Run `sudo apt-get install libwebkit2gtk-4.0-dev`
+ * Run `make prebuild`
+ * The above prebuild step needs to be run only when you make changes to or want to install your npm dependencies, etc.
+ * Once the prebuild is completed, you can keep repeating the below steps to build the app & see the changes.
+ * Run `make linux-app`
+ * Uncompress `linux/dist/focalboard-linux.tar.gz` to a directory of your choice
+ * Run `focalboard-app` from the directory you have chosen
+* **Docker**:
+ * To run it locally from offical image:
+ * `docker run -it -p 80:8000 mattermost/focalboard`
+ * To build it for your current architecture:
+ * `docker build -f docker/Dockerfile .`
+ * To build it for a custom architecture (experimental):
+ * `docker build -f docker/Dockerfile --platform linux/arm64 .`
+
+Cross-compilation currently isn't fully supported, so please build on the appropriate platform. Refer to the GitHub Actions workflows (`build-mac.yml`, `build-win.yml`, `build-ubuntu.yml`) for the detailed list of steps on each platform.
+
+### Unit testing
+
+Before checking in commits, run `make ci`, which is similar to the `.gitlab-ci.yml` workflow and includes:
+
+* **Server unit tests**: `make server-test`
+* **Web app ESLint**: `cd webapp; npm run check`
+* **Web app unit tests**: `cd webapp; npm run test`
+* **Web app UI tests**: `cd webapp; npm run cypress:ci`
+
+### Translating
+
+Help translate Focalboard! The app is already translated into several languages. We welcome corrections and new language translations! You can add new languages or improve existing translations at [Weblate](https://translate.mattermost.com/engage/focalboard/).
+
+### Staying informed
+
+* **Changes**: See the [CHANGELOG](CHANGELOG.md) for the latest updates
+* **GitHub Discussions**: Join the [Developer Discussion](https://github.com/mattermost/focalboard/discussions) board
+* **Bug Reports**: [File a bug report](https://github.com/mattermost/focalboard/issues/new?assignees=&labels=bug&template=bug_report.md&title=)
+* **Chat**: Join the [Focalboard community channel](https://community.mattermost.com/core/channels/focalboard)
\ No newline at end of file
diff --git a/apps/focalboard/data.yml b/apps/focalboard/data.yml
new file mode 100644
index 00000000..5235c9d3
--- /dev/null
+++ b/apps/focalboard/data.yml
@@ -0,0 +1,20 @@
+name: Focalboard
+tags:
+ - 工具
+title: Trello,Notion 和 Asana 的开源自托管替代方案
+type: 工具
+description: Trello,Notion 和 Asana 的开源自托管替代方案
+additionalProperties:
+ key: focalboard
+ name: Focalboard
+ tags:
+ - Tool
+ shortDescZh: Trello,Notion 和 Asana 的开源自托管替代方案
+ shortDescEn: An open source, self-hosted alternative to Trello, Notion, and Asana
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://www.focalboard.com/
+ github: https://github.com/mattermost/focalboard
+ document: https://docs.mattermost.com/guides/boards.html
diff --git a/apps/focalboard/latest/.env.sample b/apps/focalboard/latest/.env.sample
new file mode 100644
index 00000000..19d9b8db
--- /dev/null
+++ b/apps/focalboard/latest/.env.sample
@@ -0,0 +1,2 @@
+CONTAINER_NAME="focalboard "
+PANEL_APP_PORT_HTTP="40098"
diff --git a/apps/focalboard/latest/data.yml b/apps/focalboard/latest/data.yml
new file mode 100644
index 00000000..3f07ebf7
--- /dev/null
+++ b/apps/focalboard/latest/data.yml
@@ -0,0 +1,11 @@
+additionalProperties:
+ formFields:
+ - default: 40098
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+
diff --git a/apps/focalboard/latest/data/config.json b/apps/focalboard/latest/data/config.json
new file mode 100644
index 00000000..185651fa
--- /dev/null
+++ b/apps/focalboard/latest/data/config.json
@@ -0,0 +1,16 @@
+{
+ "serverRoot": "http://localhost:8000",
+ "port": 8000,
+ "dbtype": "sqlite3",
+ "dbconfig": "./data/focalboard.db",
+ "postgres_dbconfig": "dbname=focalboard sslmode=disable",
+ "useSSL": false,
+ "webpath": "./pack",
+ "filespath": "./data/files",
+ "telemetry": true,
+ "session_expire_time": 2592000,
+ "session_refresh_time": 18000,
+ "localOnly": false,
+ "enableLocalMode": true,
+ "localModeSocketLocation": "/var/tmp/focalboard_local.socket"
+ }
\ No newline at end of file
diff --git a/apps/focalboard/latest/data/postgres-config.json b/apps/focalboard/latest/data/postgres-config.json
new file mode 100644
index 00000000..7dc2dcfe
--- /dev/null
+++ b/apps/focalboard/latest/data/postgres-config.json
@@ -0,0 +1,17 @@
+{
+ "serverRoot": "http://localhost:8000",
+ "port": 8000,
+ "dbtype": "postgres",
+ "dbconfig": "postgres://boardsuser:boardsuser-password@focalboard-db/boards?sslmode=disable&connect_timeout=10",
+ "postgres_dbconfig": "dbname=boards sslmode=disable",
+ "useSSL": false,
+ "webpath": "./pack",
+ "filespath": "./data/files",
+ "telemetry": true,
+ "prometheusaddress": ":9092",
+ "session_expire_time": 2592000,
+ "session_refresh_time": 18000,
+ "localOnly": false,
+ "enableLocalMode": true,
+ "localModeSocketLocation": "/var/tmp/focalboard_local.socket"
+}
\ No newline at end of file
diff --git a/apps/focalboard/latest/docker-compose.yml b/apps/focalboard/latest/docker-compose.yml
new file mode 100644
index 00000000..adaca985
--- /dev/null
+++ b/apps/focalboard/latest/docker-compose.yml
@@ -0,0 +1,23 @@
+version: '3'
+services:
+ focalboard:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8000"
+ volumes:
+ - "./data/config.json:/opt/focalboard/config.json" #sqlite
+ #- "./data/postgres-config.json:/opt/focalboard/config.json" #postgres,需要修改对应数据库信息
+ - fbdata:/opt/focalboard/data
+ image: mattermost/focalboard:latest
+ labels:
+ createdBy: "Apps"
+
+volumes:
+ fbdata:
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/focalboard/logo.png b/apps/focalboard/logo.png
new file mode 100644
index 00000000..f8489e8f
Binary files /dev/null and b/apps/focalboard/logo.png differ
diff --git a/apps/fossbilling/README.md b/apps/fossbilling/README.md
new file mode 100644
index 00000000..f13a1f63
--- /dev/null
+++ b/apps/fossbilling/README.md
@@ -0,0 +1,118 @@
+# 使用说明
+
+- 要求`MySQL8`或以上。
+
+- 注意默认资料以存储卷方式存储的。
+
+# 原始相关
+***
+
+
+
+
+
+
+
+
+
+
+[](https://github.com/FOSSBilling/FOSSBilling/actions/workflows/php-ci.yml)
+[](https://github.com/FOSSBilling/FOSSBilling/releases/latest)
+[](https://stand-with-ukraine.pp.ua)
+[](https://fossbilling.org/discord)
+[](https://opensource.org/licenses/Apache-2.0)
+[](CODE_OF_CONDUCT.md)
+[](https://www.codefactor.io/repository/github/fossbilling/fossbilling)
+[](https://opencollective.com/fossbilling)
+[](https://fossbilling.crowdin.com/FOSSBilling)
+[](https://huntr.dev/repos/fossbilling/fossbilling/)
+
+
Gold Sponsors
+
+
+
+
+
+## What is frp?
+
+frp is a fast reverse proxy that allows you to expose a local server located behind a NAT or firewall to the Internet. It currently supports **TCP** and **UDP**, as well as **HTTP** and **HTTPS** protocols, enabling requests to be forwarded to internal services via domain name.
+
+frp also offers a P2P connect mode.
+
+## Table of Contents
+
+
+
+- [frp](#frp)
+ - [What is frp?](#what-is-frp)
+ - [Table of Contents](#table-of-contents)
+ - [Development Status](#development-status)
+ - [Architecture](#architecture)
+ - [Example Usage](#example-usage)
+ - [Access your computer in a LAN network via SSH](#access-your-computer-in-a-lan-network-via-ssh)
+ - [Accessing Internal Web Services with Custom Domains in LAN](#accessing-internal-web-services-with-custom-domains-in-lan)
+ - [Forward DNS query requests](#forward-dns-query-requests)
+ - [Forward Unix Domain Socket](#forward-unix-domain-socket)
+ - [Expose a simple HTTP file server](#expose-a-simple-http-file-server)
+ - [Enable HTTPS for a local HTTP(S) service](#enable-https-for-a-local-https-service)
+ - [Expose your service privately](#expose-your-service-privately)
+ - [P2P Mode](#p2p-mode)
+ - [Features](#features)
+ - [Configuration Files](#configuration-files)
+ - [Using Environment Variables](#using-environment-variables)
+ - [Split Configures Into Different Files](#split-configures-into-different-files)
+ - [Dashboard](#dashboard)
+ - [Admin UI](#admin-ui)
+ - [Monitor](#monitor)
+ - [Prometheus](#prometheus)
+ - [Authenticating the Client](#authenticating-the-client)
+ - [Token Authentication](#token-authentication)
+ - [OIDC Authentication](#oidc-authentication)
+ - [Encryption and Compression](#encryption-and-compression)
+ - [TLS](#tls)
+ - [Hot-Reloading frpc configuration](#hot-reloading-frpc-configuration)
+ - [Get proxy status from client](#get-proxy-status-from-client)
+ - [Only allowing certain ports on the server](#only-allowing-certain-ports-on-the-server)
+ - [Port Reuse](#port-reuse)
+ - [Bandwidth Limit](#bandwidth-limit)
+ - [For Each Proxy](#for-each-proxy)
+ - [TCP Stream Multiplexing](#tcp-stream-multiplexing)
+ - [Support KCP Protocol](#support-kcp-protocol)
+ - [Support QUIC Protocol](#support-quic-protocol)
+ - [Connection Pooling](#connection-pooling)
+ - [Load balancing](#load-balancing)
+ - [Service Health Check](#service-health-check)
+ - [Rewriting the HTTP Host Header](#rewriting-the-http-host-header)
+ - [Setting other HTTP Headers](#setting-other-http-headers)
+ - [Get Real IP](#get-real-ip)
+ - [HTTP X-Forwarded-For](#http-x-forwarded-for)
+ - [Proxy Protocol](#proxy-protocol)
+ - [Require HTTP Basic Auth (Password) for Web Services](#require-http-basic-auth-password-for-web-services)
+ - [Custom Subdomain Names](#custom-subdomain-names)
+ - [URL Routing](#url-routing)
+ - [TCP Port Multiplexing](#tcp-port-multiplexing)
+ - [Connecting to frps via HTTP PROXY](#connecting-to-frps-via-http-proxy)
+ - [Range ports mapping](#range-ports-mapping)
+ - [Client Plugins](#client-plugins)
+ - [Server Manage Plugins](#server-manage-plugins)
+ - [Development Plan](#development-plan)
+ - [Contributing](#contributing)
+ - [Donation](#donation)
+ - [GitHub Sponsors](#github-sponsors)
+ - [PayPal](#paypal)
+
+
+
+## Development Status
+
+frp is currently under development. You can try the latest release version in the `master` branch, or use the `dev` branch to access the version currently in development.
+
+We are currently working on version 2 and attempting to perform some code refactoring and improvements. However, please note that it will not be compatible with version 1.
+
+We will transition from version 0 to version 1 at the appropriate time and will only accept bug fixes and improvements, rather than big feature requests.
+
+## Architecture
+
+
+
+## Example Usage
+
+To begin, download the latest program for your operating system and architecture from the [Release](https://github.com/fatedier/frp/releases) page.
+
+Next, place the `frps` binary and `frps.ini` configuration file on Server A, which has a public IP address.
+
+Finally, place the `frpc` binary and `frpc.ini` configuration file on Server B, which is located on a LAN that cannot be directly accessed from the public internet.
+
+### Access your computer in a LAN network via SSH
+
+1. Modify `frps.ini` on server A by setting the `bind_port` for frp clients to connect to:
+
+ ```ini
+ # frps.ini
+ [common]
+ bind_port = 7000
+ ```
+
+2. Start `frps` on server A:
+
+ `./frps -c ./frps.ini`
+
+3. Modify `frpc.ini` on server B and set the `server_addr` field to the public IP address of your frps server:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [ssh]
+ type = tcp
+ local_ip = 127.0.0.1
+ local_port = 22
+ remote_port = 6000
+ ```
+
+Note that the `local_port` (listened on the client) and `remote_port` (exposed on the server) are used for traffic going in and out of the frp system, while the `server_port` is used for communication between frps and frpc.
+
+4. Start `frpc` on server B:
+
+ `./frpc -c ./frpc.ini`
+
+5. To access server B from another machine through server A via SSH (assuming the username is `test`), use the following command:
+
+ `ssh -oPort=6000 test@x.x.x.x`
+
+### Accessing Internal Web Services with Custom Domains in LAN
+
+Sometimes we need to expose a local web service behind a NAT network to others for testing purposes with our own domain name.
+
+Unfortunately, we cannot resolve a domain name to a local IP. However, we can use frp to expose an HTTP(S) service.
+
+1. Modify `frps.ini` and set the HTTP port for vhost to 8080:
+
+ ```ini
+ # frps.ini
+ [common]
+ bind_port = 7000
+ vhost_http_port = 8080
+ ```
+
+2. Start `frps`:
+
+ `./frps -c ./frps.ini`
+
+3. Modify `frpc.ini` and set `server_addr` to the IP address of the remote frps server. Specify the `local_port` of your web service:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [web]
+ type = http
+ local_port = 80
+ custom_domains = www.example.com
+ ```
+
+4. Start `frpc`:
+
+ `./frpc -c ./frpc.ini`
+
+5. Map the A record of `www.example.com` to either the public IP of the remote frps server or a CNAME record pointing to your original domain.
+
+6. Visit your local web service using url `http://www.example.com:8080`.
+
+### Forward DNS query requests
+
+1. Modify `frps.ini`:
+
+ ```ini
+ # frps.ini
+ [common]
+ bind_port = 7000
+ ```
+
+2. Start `frps`:
+
+ `./frps -c ./frps.ini`
+
+3. Modify `frpc.ini` and set `server_addr` to the IP address of the remote frps server. Forward DNS query requests to the Google Public DNS server `8.8.8.8:53`:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [dns]
+ type = udp
+ local_ip = 8.8.8.8
+ local_port = 53
+ remote_port = 6000
+ ```
+
+4. Start frpc:
+
+ `./frpc -c ./frpc.ini`
+
+5. Test DNS resolution using the `dig` command:
+
+ `dig @x.x.x.x -p 6000 www.google.com`
+
+### Forward Unix Domain Socket
+
+Expose a Unix domain socket (e.g. the Docker daemon socket) as TCP.
+
+Configure `frps` as above.
+
+1. Start `frpc` with the following configuration:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [unix_domain_socket]
+ type = tcp
+ remote_port = 6000
+ plugin = unix_domain_socket
+ plugin_unix_path = /var/run/docker.sock
+ ```
+
+2. Test the configuration by getting the docker version using `curl`:
+
+ `curl http://x.x.x.x:6000/version`
+
+### Expose a simple HTTP file server
+
+Expose a simple HTTP file server to access files stored in the LAN from the public Internet.
+
+Configure `frps` as described above, then:
+
+1. Start `frpc` with the following configuration:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [test_static_file]
+ type = tcp
+ remote_port = 6000
+ plugin = static_file
+ plugin_local_path = /tmp/files
+ plugin_strip_prefix = static
+ plugin_http_user = abc
+ plugin_http_passwd = abc
+ ```
+
+2. Visit `http://x.x.x.x:6000/static/` from your browser and specify correct username and password to view files in `/tmp/files` on the `frpc` machine.
+
+### Enable HTTPS for a local HTTP(S) service
+
+You may substitute `https2https` for the plugin, and point the `plugin_local_addr` to a HTTPS endpoint.
+
+1. Start `frpc` with the following configuration:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [test_https2http]
+ type = https
+ custom_domains = test.example.com
+
+ plugin = https2http
+ plugin_local_addr = 127.0.0.1:80
+ plugin_crt_path = ./server.crt
+ plugin_key_path = ./server.key
+ plugin_host_header_rewrite = 127.0.0.1
+ plugin_header_X-From-Where = frp
+ ```
+
+2. Visit `https://test.example.com`.
+
+### Expose your service privately
+
+To mitigate risks associated with exposing certain services directly to the public network, STCP (Secret TCP) mode requires a preshared key to be used for access to the service from other clients.
+
+Configure `frps` same as above.
+
+1. Start `frpc` on machine B with the following config. This example is for exposing the SSH service (port 22), and note the `sk` field for the preshared key, and that the `remote_port` field is removed here:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [secret_ssh]
+ type = stcp
+ sk = abcdefg
+ local_ip = 127.0.0.1
+ local_port = 22
+ ```
+
+2. Start another `frpc` (typically on another machine C) with the following config to access the SSH service with a security key (`sk` field):
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [secret_ssh_visitor]
+ type = stcp
+ role = visitor
+ server_name = secret_ssh
+ sk = abcdefg
+ bind_addr = 127.0.0.1
+ bind_port = 6000
+ ```
+
+3. On machine C, connect to SSH on machine B, using this command:
+
+ `ssh -oPort=6000 127.0.0.1`
+
+### P2P Mode
+
+**xtcp** is designed to transmit large amounts of data directly between clients. A frps server is still needed, as P2P here only refers to the actual data transmission.
+
+Note that it may not work with all types of NAT devices. You might want to fallback to stcp if xtcp doesn't work.
+
+1. In `frps.ini` configure a UDP port for xtcp:
+
+ ```ini
+ # frps.ini
+ bind_udp_port = 7001
+ ```
+
+2. Start `frpc` on machine B, and expose the SSH port. Note that the `remote_port` field is removed:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [p2p_ssh]
+ type = xtcp
+ sk = abcdefg
+ local_ip = 127.0.0.1
+ local_port = 22
+ ```
+
+3. Start another `frpc` (typically on another machine C) with the configuration to connect to SSH using P2P mode:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [p2p_ssh_visitor]
+ type = xtcp
+ role = visitor
+ server_name = p2p_ssh
+ sk = abcdefg
+ bind_addr = 127.0.0.1
+ bind_port = 6000
+ ```
+
+4. On machine C, connect to SSH on machine B, using this command:
+
+ `ssh -oPort=6000 127.0.0.1`
+
+## Features
+
+### Configuration Files
+
+Read the full example configuration files to find out even more features not described here.
+
+[Full configuration file for frps (Server)](./conf/frps_full.ini)
+
+[Full configuration file for frpc (Client)](./conf/frpc_full.ini)
+
+### Using Environment Variables
+
+Environment variables can be referenced in the configuration file, using Go's standard format:
+
+```ini
+# frpc.ini
+[common]
+server_addr = {{ .Envs.FRP_SERVER_ADDR }}
+server_port = 7000
+
+[ssh]
+type = tcp
+local_ip = 127.0.0.1
+local_port = 22
+remote_port = {{ .Envs.FRP_SSH_REMOTE_PORT }}
+```
+
+With the config above, variables can be passed into `frpc` program like this:
+
+```
+export FRP_SERVER_ADDR="x.x.x.x"
+export FRP_SSH_REMOTE_PORT="6000"
+./frpc -c ./frpc.ini
+```
+
+`frpc` will render configuration file template using OS environment variables. Remember to prefix your reference with `.Envs`.
+
+### Split Configures Into Different Files
+
+You can split multiple proxy configs into different files and include them in the main file.
+
+```ini
+# frpc.ini
+[common]
+server_addr = x.x.x.x
+server_port = 7000
+includes=./confd/*.ini
+```
+
+```ini
+# ./confd/test.ini
+[ssh]
+type = tcp
+local_ip = 127.0.0.1
+local_port = 22
+remote_port = 6000
+```
+
+### Dashboard
+
+Check frp's status and proxies' statistics information by Dashboard.
+
+Configure a port for dashboard to enable this feature:
+
+```ini
+[common]
+dashboard_port = 7500
+# dashboard's username and password are both optional
+dashboard_user = admin
+dashboard_pwd = admin
+```
+
+Then visit `http://[server_addr]:7500` to see the dashboard, with username and password both being `admin`.
+
+Additionally, you can use HTTPS port by using your domains wildcard or normal SSL certificate:
+
+```ini
+[common]
+dashboard_port = 7500
+# dashboard's username and password are both optional
+dashboard_user = admin
+dashboard_pwd = admin
+dashboard_tls_mode = true
+dashboard_tls_cert_file = server.crt
+dashboard_tls_key_file = server.key
+```
+
+Then visit `https://[server_addr]:7500` to see the dashboard in secure HTTPS connection, with username and password both being `admin`.
+
+
+
+### Admin UI
+
+The Admin UI helps you check and manage frpc's configuration.
+
+Configure an address for admin UI to enable this feature:
+
+```ini
+[common]
+admin_addr = 127.0.0.1
+admin_port = 7400
+admin_user = admin
+admin_pwd = admin
+```
+
+Then visit `http://127.0.0.1:7400` to see admin UI, with username and password both being `admin`.
+
+### Monitor
+
+When dashboard is enabled, frps will save monitor data in cache. It will be cleared after process restart.
+
+Prometheus is also supported.
+
+#### Prometheus
+
+Enable dashboard first, then configure `enable_prometheus = true` in `frps.ini`.
+
+`http://{dashboard_addr}/metrics` will provide prometheus monitor data.
+
+### Authenticating the Client
+
+There are 2 authentication methods to authenticate frpc with frps.
+
+You can decide which one to use by configuring `authentication_method` under `[common]` in `frpc.ini` and `frps.ini`.
+
+Configuring `authenticate_heartbeats = true` under `[common]` will use the configured authentication method to add and validate authentication on every heartbeat between frpc and frps.
+
+Configuring `authenticate_new_work_conns = true` under `[common]` will do the same for every new work connection between frpc and frps.
+
+#### Token Authentication
+
+When specifying `authentication_method = token` under `[common]` in `frpc.ini` and `frps.ini` - token based authentication will be used.
+
+Make sure to specify the same `token` in the `[common]` section in `frps.ini` and `frpc.ini` for frpc to pass frps validation
+
+#### OIDC Authentication
+
+When specifying `authentication_method = oidc` under `[common]` in `frpc.ini` and `frps.ini` - OIDC based authentication will be used.
+
+OIDC stands for OpenID Connect, and the flow used is called [Client Credentials Grant](https://tools.ietf.org/html/rfc6749#section-4.4).
+
+To use this authentication type - configure `frpc.ini` and `frps.ini` as follows:
+
+```ini
+# frps.ini
+[common]
+authentication_method = oidc
+oidc_issuer = https://example-oidc-issuer.com/
+oidc_audience = https://oidc-audience.com/.default
+```
+
+```ini
+# frpc.ini
+[common]
+authentication_method = oidc
+oidc_client_id = 98692467-37de-409a-9fac-bb2585826f18 # Replace with OIDC client ID
+oidc_client_secret = oidc_secret
+oidc_audience = https://oidc-audience.com/.default
+oidc_token_endpoint_url = https://example-oidc-endpoint.com/oauth2/v2.0/token
+```
+
+### Encryption and Compression
+
+The features are off by default. You can turn on encryption and/or compression:
+
+```ini
+# frpc.ini
+[ssh]
+type = tcp
+local_port = 22
+remote_port = 6000
+use_encryption = true
+use_compression = true
+```
+
+#### TLS
+
+frp supports the TLS protocol between `frpc` and `frps` since v0.25.0.
+
+For port multiplexing, frp sends a first byte `0x17` to dial a TLS connection.
+
+Configure `tls_enable = true` in the `[common]` section to `frpc.ini` to enable this feature.
+
+To **enforce** `frps` to only accept TLS connections - configure `tls_only = true` in the `[common]` section in `frps.ini`. **This is optional.**
+
+**`frpc` TLS settings (under the `[common]` section):**
+```ini
+tls_enable = true
+tls_cert_file = certificate.crt
+tls_key_file = certificate.key
+tls_trusted_ca_file = ca.crt
+```
+
+**`frps` TLS settings (under the `[common]` section):**
+```ini
+tls_only = true
+tls_enable = true
+tls_cert_file = certificate.crt
+tls_key_file = certificate.key
+tls_trusted_ca_file = ca.crt
+```
+
+You will need **a root CA cert** and **at least one SSL/TLS certificate**. It **can** be self-signed or regular (such as Let's Encrypt or another SSL/TLS certificate provider).
+
+If you using `frp` via IP address and not hostname, make sure to set the appropriate IP address in the Subject Alternative Name (SAN) area when generating SSL/TLS Certificates.
+
+Given an example:
+
+* Prepare openssl config file. It exists at `/etc/pki/tls/openssl.cnf` in Linux System and `/System/Library/OpenSSL/openssl.cnf` in MacOS, and you can copy it to current path, like `cp /etc/pki/tls/openssl.cnf ./my-openssl.cnf`. If not, you can build it by yourself, like:
+```
+cat > my-openssl.cnf << EOF
+[ ca ]
+default_ca = CA_default
+[ CA_default ]
+x509_extensions = usr_cert
+[ req ]
+default_bits = 2048
+default_md = sha256
+default_keyfile = privkey.pem
+distinguished_name = req_distinguished_name
+attributes = req_attributes
+x509_extensions = v3_ca
+string_mask = utf8only
+[ req_distinguished_name ]
+[ req_attributes ]
+[ usr_cert ]
+basicConstraints = CA:FALSE
+nsComment = "OpenSSL Generated Certificate"
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid,issuer
+[ v3_ca ]
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid:always,issuer
+basicConstraints = CA:true
+EOF
+```
+
+* build ca certificates:
+```
+openssl genrsa -out ca.key 2048
+openssl req -x509 -new -nodes -key ca.key -subj "/CN=example.ca.com" -days 5000 -out ca.crt
+```
+
+* build frps certificates:
+```
+openssl genrsa -out server.key 2048
+
+openssl req -new -sha256 -key server.key \
+ -subj "/C=XX/ST=DEFAULT/L=DEFAULT/O=DEFAULT/CN=server.com" \
+ -reqexts SAN \
+ -config <(cat my-openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:localhost,IP:127.0.0.1,DNS:example.server.com")) \
+ -out server.csr
+
+openssl x509 -req -days 365 -sha256 \
+ -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
+ -extfile <(printf "subjectAltName=DNS:localhost,IP:127.0.0.1,DNS:example.server.com") \
+ -out server.crt
+```
+
+* build frpc certificates:
+```
+openssl genrsa -out client.key 2048
+openssl req -new -sha256 -key client.key \
+ -subj "/C=XX/ST=DEFAULT/L=DEFAULT/O=DEFAULT/CN=client.com" \
+ -reqexts SAN \
+ -config <(cat my-openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:client.com,DNS:example.client.com")) \
+ -out client.csr
+
+openssl x509 -req -days 365 -sha256 \
+ -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
+ -extfile <(printf "subjectAltName=DNS:client.com,DNS:example.client.com") \
+ -out client.crt
+```
+
+### Hot-Reloading frpc configuration
+
+The `admin_addr` and `admin_port` fields are required for enabling HTTP API:
+
+```ini
+# frpc.ini
+[common]
+admin_addr = 127.0.0.1
+admin_port = 7400
+```
+
+Then run command `frpc reload -c ./frpc.ini` and wait for about 10 seconds to let `frpc` create or update or remove proxies.
+
+**Note that parameters in [common] section won't be modified except 'start'.**
+
+You can run command `frpc verify -c ./frpc.ini` before reloading to check if there are config errors.
+
+### Get proxy status from client
+
+Use `frpc status -c ./frpc.ini` to get status of all proxies. The `admin_addr` and `admin_port` fields are required for enabling HTTP API.
+
+### Only allowing certain ports on the server
+
+`allow_ports` in `frps.ini` is used to avoid abuse of ports:
+
+```ini
+# frps.ini
+[common]
+allow_ports = 2000-3000,3001,3003,4000-50000
+```
+
+`allow_ports` consists of specific ports or port ranges (lowest port number, dash `-`, highest port number), separated by comma `,`.
+
+### Port Reuse
+
+`vhost_http_port` and `vhost_https_port` in frps can use same port with `bind_port`. frps will detect the connection's protocol and handle it correspondingly.
+
+We would like to try to allow multiple proxies bind a same remote port with different protocols in the future.
+
+### Bandwidth Limit
+
+#### For Each Proxy
+
+```ini
+# frpc.ini
+[ssh]
+type = tcp
+local_port = 22
+remote_port = 6000
+bandwidth_limit = 1MB
+```
+
+Set `bandwidth_limit` in each proxy's configure to enable this feature. Supported units are `MB` and `KB`.
+
+Set `bandwidth_limit_mode` to `client` or `server` to limit bandwidth on the client or server side. Default is `client`.
+
+### TCP Stream Multiplexing
+
+frp supports tcp stream multiplexing since v0.10.0 like HTTP2 Multiplexing, in which case all logic connections to the same frpc are multiplexed into the same TCP connection.
+
+You can disable this feature by modify `frps.ini` and `frpc.ini`:
+
+```ini
+# frps.ini and frpc.ini, must be same
+[common]
+tcp_mux = false
+```
+
+### Support KCP Protocol
+
+KCP is a fast and reliable protocol that can achieve the transmission effect of a reduction of the average latency by 30% to 40% and reduction of the maximum delay by a factor of three, at the cost of 10% to 20% more bandwidth wasted than TCP.
+
+KCP mode uses UDP as the underlying transport. Using KCP in frp:
+
+1. Enable KCP in frps:
+
+ ```ini
+ # frps.ini
+ [common]
+ bind_port = 7000
+ # Specify a UDP port for KCP.
+ kcp_bind_port = 7000
+ ```
+
+ The `kcp_bind_port` number can be the same number as `bind_port`, since `bind_port` field specifies a TCP port.
+
+2. Configure `frpc.ini` to use KCP to connect to frps:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ # Same as the 'kcp_bind_port' in frps.ini
+ server_port = 7000
+ protocol = kcp
+ ```
+
+### Support QUIC Protocol
+
+QUIC is a new multiplexed transport built on top of UDP.
+
+Using QUIC in frp:
+
+1. Enable QUIC in frps:
+
+ ```ini
+ # frps.ini
+ [common]
+ bind_port = 7000
+ # Specify a UDP port for QUIC.
+ quic_bind_port = 7000
+ ```
+
+ The `quic_bind_port` number can be the same number as `bind_port`, since `bind_port` field specifies a TCP port.
+
+2. Configure `frpc.ini` to use QUIC to connect to frps:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ # Same as the 'quic_bind_port' in frps.ini
+ server_port = 7000
+ protocol = quic
+ ```
+
+### Connection Pooling
+
+By default, frps creates a new frpc connection to the backend service upon a user request. With connection pooling, frps keeps a certain number of pre-established connections, reducing the time needed to establish a connection.
+
+This feature is suitable for a large number of short connections.
+
+1. Configure the limit of pool count each proxy can use in `frps.ini`:
+
+ ```ini
+ # frps.ini
+ [common]
+ max_pool_count = 5
+ ```
+
+2. Enable and specify the number of connection pool:
+
+ ```ini
+ # frpc.ini
+ [common]
+ pool_count = 1
+ ```
+
+### Load balancing
+
+Load balancing is supported by `group`.
+
+This feature is only available for types `tcp`, `http`, `tcpmux` now.
+
+```ini
+# frpc.ini
+[test1]
+type = tcp
+local_port = 8080
+remote_port = 80
+group = web
+group_key = 123
+
+[test2]
+type = tcp
+local_port = 8081
+remote_port = 80
+group = web
+group_key = 123
+```
+
+`group_key` is used for authentication.
+
+Connections to port 80 will be dispatched to proxies in the same group randomly.
+
+For type `tcp`, `remote_port` in the same group should be the same.
+
+For type `http`, `custom_domains`, `subdomain`, `locations` should be the same.
+
+### Service Health Check
+
+Health check feature can help you achieve high availability with load balancing.
+
+Add `health_check_type = tcp` or `health_check_type = http` to enable health check.
+
+With health check type **tcp**, the service port will be pinged (TCPing):
+
+```ini
+# frpc.ini
+[test1]
+type = tcp
+local_port = 22
+remote_port = 6000
+# Enable TCP health check
+health_check_type = tcp
+# TCPing timeout seconds
+health_check_timeout_s = 3
+# If health check failed 3 times in a row, the proxy will be removed from frps
+health_check_max_failed = 3
+# A health check every 10 seconds
+health_check_interval_s = 10
+```
+
+With health check type **http**, an HTTP request will be sent to the service and an HTTP 2xx OK response is expected:
+
+```ini
+# frpc.ini
+[web]
+type = http
+local_ip = 127.0.0.1
+local_port = 80
+custom_domains = test.example.com
+# Enable HTTP health check
+health_check_type = http
+# frpc will send a GET request to '/status'
+# and expect an HTTP 2xx OK response
+health_check_url = /status
+health_check_timeout_s = 3
+health_check_max_failed = 3
+health_check_interval_s = 10
+```
+
+### Rewriting the HTTP Host Header
+
+By default frp does not modify the tunneled HTTP requests at all as it's a byte-for-byte copy.
+
+However, speaking of web servers and HTTP requests, your web server might rely on the `Host` HTTP header to determine the website to be accessed. frp can rewrite the `Host` header when forwarding the HTTP requests, with the `host_header_rewrite` field:
+
+```ini
+# frpc.ini
+[web]
+type = http
+local_port = 80
+custom_domains = test.example.com
+host_header_rewrite = dev.example.com
+```
+
+The HTTP request will have the `Host` header rewritten to `Host: dev.example.com` when it reaches the actual web server, although the request from the browser probably has `Host: test.example.com`.
+
+### Setting other HTTP Headers
+
+Similar to `Host`, You can override other HTTP request headers with proxy type `http`.
+
+```ini
+# frpc.ini
+[web]
+type = http
+local_port = 80
+custom_domains = test.example.com
+host_header_rewrite = dev.example.com
+header_X-From-Where = frp
+```
+
+Note that parameter(s) prefixed with `header_` will be added to HTTP request headers.
+
+In this example, it will set header `X-From-Where: frp` in the HTTP request.
+
+### Get Real IP
+
+#### HTTP X-Forwarded-For
+
+This feature is for http proxy only.
+
+You can get user's real IP from HTTP request headers `X-Forwarded-For`.
+
+#### Proxy Protocol
+
+frp supports Proxy Protocol to send user's real IP to local services. It support all types except UDP.
+
+Here is an example for https service:
+
+```ini
+# frpc.ini
+[web]
+type = https
+local_port = 443
+custom_domains = test.example.com
+
+# now v1 and v2 are supported
+proxy_protocol_version = v2
+```
+
+You can enable Proxy Protocol support in nginx to expose user's real IP in HTTP header `X-Real-IP`, and then read `X-Real-IP` header in your web service for the real IP.
+
+### Require HTTP Basic Auth (Password) for Web Services
+
+Anyone who can guess your tunnel URL can access your local web server unless you protect it with a password.
+
+This enforces HTTP Basic Auth on all requests with the username and password specified in frpc's configure file.
+
+It can only be enabled when proxy type is http.
+
+```ini
+# frpc.ini
+[web]
+type = http
+local_port = 80
+custom_domains = test.example.com
+http_user = abc
+http_pwd = abc
+```
+
+Visit `http://test.example.com` in the browser and now you are prompted to enter the username and password.
+
+### Custom Subdomain Names
+
+It is convenient to use `subdomain` configure for http and https types when many people share one frps server.
+
+```ini
+# frps.ini
+subdomain_host = frps.com
+```
+
+Resolve `*.frps.com` to the frps server's IP. This is usually called a Wildcard DNS record.
+
+```ini
+# frpc.ini
+[web]
+type = http
+local_port = 80
+subdomain = test
+```
+
+Now you can visit your web service on `test.frps.com`.
+
+Note that if `subdomain_host` is not empty, `custom_domains` should not be the subdomain of `subdomain_host`.
+
+### URL Routing
+
+frp supports forwarding HTTP requests to different backend web services by url routing.
+
+`locations` specifies the prefix of URL used for routing. frps first searches for the most specific prefix location given by literal strings regardless of the listed order.
+
+```ini
+# frpc.ini
+[web01]
+type = http
+local_port = 80
+custom_domains = web.example.com
+locations = /
+
+[web02]
+type = http
+local_port = 81
+custom_domains = web.example.com
+locations = /news,/about
+```
+
+HTTP requests with URL prefix `/news` or `/about` will be forwarded to **web02** and other requests to **web01**.
+
+### TCP Port Multiplexing
+
+frp supports receiving TCP sockets directed to different proxies on a single port on frps, similar to `vhost_http_port` and `vhost_https_port`.
+
+The only supported TCP port multiplexing method available at the moment is `httpconnect` - HTTP CONNECT tunnel.
+
+When setting `tcpmux_httpconnect_port` to anything other than 0 in frps under `[common]`, frps will listen on this port for HTTP CONNECT requests.
+
+The host of the HTTP CONNECT request will be used to match the proxy in frps. Proxy hosts can be configured in frpc by configuring `custom_domain` and / or `subdomain` under `type = tcpmux` proxies, when `multiplexer = httpconnect`.
+
+For example:
+
+```ini
+# frps.ini
+[common]
+bind_port = 7000
+tcpmux_httpconnect_port = 1337
+```
+
+```ini
+# frpc.ini
+[common]
+server_addr = x.x.x.x
+server_port = 7000
+
+[proxy1]
+type = tcpmux
+multiplexer = httpconnect
+custom_domains = test1
+local_port = 80
+
+[proxy2]
+type = tcpmux
+multiplexer = httpconnect
+custom_domains = test2
+local_port = 8080
+```
+
+In the above configuration - frps can be contacted on port 1337 with a HTTP CONNECT header such as:
+
+```
+CONNECT test1 HTTP/1.1\r\n\r\n
+```
+and the connection will be routed to `proxy1`.
+
+### Connecting to frps via HTTP PROXY
+
+frpc can connect to frps using HTTP proxy if you set OS environment variable `HTTP_PROXY`, or if `http_proxy` is set in frpc.ini file.
+
+It only works when protocol is tcp.
+
+```ini
+# frpc.ini
+[common]
+server_addr = x.x.x.x
+server_port = 7000
+http_proxy = http://user:pwd@192.168.1.128:8080
+```
+
+### Range ports mapping
+
+Proxy with names that start with `range:` will support mapping range ports.
+
+```ini
+# frpc.ini
+[range:test_tcp]
+type = tcp
+local_ip = 127.0.0.1
+local_port = 6000-6006,6007
+remote_port = 6000-6006,6007
+```
+
+frpc will generate 8 proxies like `test_tcp_0`, `test_tcp_1`, ..., `test_tcp_7`.
+
+### Client Plugins
+
+frpc only forwards requests to local TCP or UDP ports by default.
+
+Plugins are used for providing rich features. There are built-in plugins such as `unix_domain_socket`, `http_proxy`, `socks5`, `static_file`, `http2https`, `https2http`, `https2https` and you can see [example usage](#example-usage).
+
+Specify which plugin to use with the `plugin` parameter. Configuration parameters of plugin should be started with `plugin_`. `local_ip` and `local_port` are not used for plugin.
+
+Using plugin **http_proxy**:
+
+```ini
+# frpc.ini
+[http_proxy]
+type = tcp
+remote_port = 6000
+plugin = http_proxy
+plugin_http_user = abc
+plugin_http_passwd = abc
+```
+
+`plugin_http_user` and `plugin_http_passwd` are configuration parameters used in `http_proxy` plugin.
+
+### Server Manage Plugins
+
+Read the [document](/doc/server_plugin.md).
+
+Find more plugins in [gofrp/plugin](https://github.com/gofrp/plugin).
+
+## Development Plan
+
+* Log HTTP request information in frps.
+
+## Contributing
+
+Interested in getting involved? We would like to help you!
+
+* Take a look at our [issues list](https://github.com/fatedier/frp/issues) and consider sending a Pull Request to **dev branch**.
+* If you want to add a new feature, please create an issue first to describe the new feature, as well as the implementation approach. Once a proposal is accepted, create an implementation of the new features and submit it as a pull request.
+* Sorry for my poor English. Improvements for this document are welcome, even some typo fixes.
+* If you have great ideas, send an email to fatedier@gmail.com.
+
+**Note: We prefer you to give your advise in [issues](https://github.com/fatedier/frp/issues), so others with a same question can search it quickly and we don't need to answer them repeatedly.**
+
+## Donation
+
+If frp helps you a lot, you can support us by:
+
+### GitHub Sponsors
+
+Support us by [Github Sponsors](https://github.com/sponsors/fatedier).
+
+You can have your company's logo placed on README file of this project.
+
+### PayPal
+
+Donate money by [PayPal](https://www.paypal.me/fatedier) to my account **fatedier@gmail.com**.
+
diff --git a/apps/frpc/data.yml b/apps/frpc/data.yml
new file mode 100644
index 00000000..5dcc4fcb
--- /dev/null
+++ b/apps/frpc/data.yml
@@ -0,0 +1,20 @@
+name: frpc-frp 客户端
+tags:
+ - 工具
+title: frp 是一种反向代理工具,常用于内网穿透(客户端)
+type: 工具
+description: frp 是一种反向代理工具,常用于内网穿透(客户端)
+additionalProperties:
+ key: frpc
+ name: frpc-frp 客户端
+ tags:
+ - Tool
+ shortDescZh: frp 是一种反向代理工具,常用于内网穿透(客户端)
+ shortDescEn: frp is a reverse proxy tool that is commonly used for intranet penetration(Client)
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://github.com/fatedier/frp
+ github: https://github.com/fatedier/frp
+ document: https://github.com/fatedier/frp/blob/dev/README_zh.md
diff --git a/apps/frpc/latest/.env.sample b/apps/frpc/latest/.env.sample
new file mode 100644
index 00000000..984ecd93
--- /dev/null
+++ b/apps/frpc/latest/.env.sample
@@ -0,0 +1 @@
+CONTAINER_NAME="frpc"
\ No newline at end of file
diff --git a/apps/frpc/latest/data.yml b/apps/frpc/latest/data.yml
new file mode 100644
index 00000000..04749921
--- /dev/null
+++ b/apps/frpc/latest/data.yml
@@ -0,0 +1,16 @@
+additionalProperties:
+ formFields:
+ - default: ./data/frpc.toml
+ edit: true
+ envKey: CONFIG_FILE_PATH
+ labelEn: Configuration file path
+ labelZh: 配置文件路径
+ required: true
+ type: text
+ - default: 6000
+ disabled: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port (determined by the configuration file)
+ labelZh: 端口 (由配置文件决定)
+ required: true
+ type: number
\ No newline at end of file
diff --git a/apps/frpc/latest/data/frpc.ini b/apps/frpc/latest/data/frpc.ini
new file mode 100644
index 00000000..13a8e5f6
--- /dev/null
+++ b/apps/frpc/latest/data/frpc.ini
@@ -0,0 +1,9 @@
+[common]
+server_addr = 127.0.0.1
+server_port = 7000
+
+[ssh]
+type = tcp
+local_ip = 127.0.0.1
+local_port = 22
+remote_port = 6000
diff --git a/apps/frpc/latest/data/frpc.toml b/apps/frpc/latest/data/frpc.toml
new file mode 100644
index 00000000..06f4771d
--- /dev/null
+++ b/apps/frpc/latest/data/frpc.toml
@@ -0,0 +1,37 @@
+# common
+serverAddr = "1.2.3.4"
+serverPort = 7000
+auth.method = "token"
+auth.token = "token123456"
+# supports tcp, kcp, quic, websocket and wss now, default is tcp
+transport.protocol = "tcp"
+
+# dashboard
+webServer.addr = "127.0.0.1"
+webServer.port = 6000
+webServer.user = "admin"
+webServer.password = "password123456"
+webServer.pprofEnable = false
+
+# setting
+loginFailExit = false
+transport.tcpMux = false
+transport.tls.enable = false
+# transport.tls.certFile = "client.crt"
+# transport.tls.keyFile = "client.key"
+# transport.tls.trustedCaFile = "ca.crt"
+# transport.tls.serverName = "example.com"
+
+[[proxies]]
+name = "rdp_tcp"
+type = "tcp"
+localIP = "127.0.0.1"
+localPort = 3389
+remotePort = 13389
+
+[[proxies]]
+name = "rdp_udp"
+type = "udp"
+localIP = "127.0.0.1"
+localPort = 3389
+remotePort = 13389
\ No newline at end of file
diff --git a/apps/frpc/latest/data/frpc_full.ini b/apps/frpc/latest/data/frpc_full.ini
new file mode 100644
index 00000000..29f6bcab
--- /dev/null
+++ b/apps/frpc/latest/data/frpc_full.ini
@@ -0,0 +1,365 @@
+# [common] is integral section
+[common]
+# A literal address or host name for IPv6 must be enclosed
+# in square brackets, as in "[::1]:80", "[ipv6-host]:http" or "[ipv6-host%zone]:80"
+# For single "server_addr" field, no need square brackets, like "server_addr = ::".
+server_addr = 0.0.0.0
+server_port = 7000
+
+# The maximum amount of time a dial to server will wait for a connect to complete. Default value is 10 seconds.
+# dial_server_timeout = 10
+
+# dial_server_keepalive specifies the interval between keep-alive probes for an active network connection between frpc and frps.
+# If negative, keep-alive probes are disabled.
+# dial_server_keepalive = 7200
+
+# if you want to connect frps by http proxy or socks5 proxy or ntlm proxy, you can set http_proxy here or in global environment variables
+# it only works when protocol is tcp
+# http_proxy = http://user:passwd@192.168.1.128:8080
+# http_proxy = socks5://user:passwd@192.168.1.128:1080
+# http_proxy = ntlm://user:passwd@192.168.1.128:2080
+
+# console or real logFile path like ./frpc.log
+log_file = ./frpc.log
+
+# trace, debug, info, warn, error
+log_level = info
+
+log_max_days = 3
+
+# disable log colors when log_file is console, default is false
+disable_log_color = false
+
+# for authentication, should be same as your frps.ini
+# authenticate_heartbeats specifies whether to include authentication token in heartbeats sent to frps. By default, this value is false.
+authenticate_heartbeats = false
+
+# authenticate_new_work_conns specifies whether to include authentication token in new work connections sent to frps. By default, this value is false.
+authenticate_new_work_conns = false
+
+# auth token
+token = 12345678
+
+authentication_method =
+
+# oidc_client_id specifies the client ID to use to get a token in OIDC authentication if AuthenticationMethod == "oidc".
+# By default, this value is "".
+oidc_client_id =
+
+# oidc_client_secret specifies the client secret to use to get a token in OIDC authentication if AuthenticationMethod == "oidc".
+# By default, this value is "".
+oidc_client_secret =
+
+# oidc_audience specifies the audience of the token in OIDC authentication if AuthenticationMethod == "oidc". By default, this value is "".
+oidc_audience =
+
+# oidc_scope specifies the permisssions of the token in OIDC authentication if AuthenticationMethod == "oidc". By default, this value is "".
+oidc_scope =
+
+# oidc_token_endpoint_url specifies the URL which implements OIDC Token Endpoint.
+# It will be used to get an OIDC token if AuthenticationMethod == "oidc". By default, this value is "".
+oidc_token_endpoint_url =
+
+# oidc_additional_xxx specifies additional parameters to be sent to the OIDC Token Endpoint.
+# For example, if you want to specify the "audience" parameter, you can set as follow.
+# frp will add "audience=Gold Sponsors
+
+
+
+
+
+## What is frp?
+
+frp is a fast reverse proxy that allows you to expose a local server located behind a NAT or firewall to the Internet. It currently supports **TCP** and **UDP**, as well as **HTTP** and **HTTPS** protocols, enabling requests to be forwarded to internal services via domain name.
+
+frp also offers a P2P connect mode.
+
+## Table of Contents
+
+
+
+- [frp](#frp)
+ - [What is frp?](#what-is-frp)
+ - [Table of Contents](#table-of-contents)
+ - [Development Status](#development-status)
+ - [Architecture](#architecture)
+ - [Example Usage](#example-usage)
+ - [Access your computer in a LAN network via SSH](#access-your-computer-in-a-lan-network-via-ssh)
+ - [Accessing Internal Web Services with Custom Domains in LAN](#accessing-internal-web-services-with-custom-domains-in-lan)
+ - [Forward DNS query requests](#forward-dns-query-requests)
+ - [Forward Unix Domain Socket](#forward-unix-domain-socket)
+ - [Expose a simple HTTP file server](#expose-a-simple-http-file-server)
+ - [Enable HTTPS for a local HTTP(S) service](#enable-https-for-a-local-https-service)
+ - [Expose your service privately](#expose-your-service-privately)
+ - [P2P Mode](#p2p-mode)
+ - [Features](#features)
+ - [Configuration Files](#configuration-files)
+ - [Using Environment Variables](#using-environment-variables)
+ - [Split Configures Into Different Files](#split-configures-into-different-files)
+ - [Dashboard](#dashboard)
+ - [Admin UI](#admin-ui)
+ - [Monitor](#monitor)
+ - [Prometheus](#prometheus)
+ - [Authenticating the Client](#authenticating-the-client)
+ - [Token Authentication](#token-authentication)
+ - [OIDC Authentication](#oidc-authentication)
+ - [Encryption and Compression](#encryption-and-compression)
+ - [TLS](#tls)
+ - [Hot-Reloading frpc configuration](#hot-reloading-frpc-configuration)
+ - [Get proxy status from client](#get-proxy-status-from-client)
+ - [Only allowing certain ports on the server](#only-allowing-certain-ports-on-the-server)
+ - [Port Reuse](#port-reuse)
+ - [Bandwidth Limit](#bandwidth-limit)
+ - [For Each Proxy](#for-each-proxy)
+ - [TCP Stream Multiplexing](#tcp-stream-multiplexing)
+ - [Support KCP Protocol](#support-kcp-protocol)
+ - [Support QUIC Protocol](#support-quic-protocol)
+ - [Connection Pooling](#connection-pooling)
+ - [Load balancing](#load-balancing)
+ - [Service Health Check](#service-health-check)
+ - [Rewriting the HTTP Host Header](#rewriting-the-http-host-header)
+ - [Setting other HTTP Headers](#setting-other-http-headers)
+ - [Get Real IP](#get-real-ip)
+ - [HTTP X-Forwarded-For](#http-x-forwarded-for)
+ - [Proxy Protocol](#proxy-protocol)
+ - [Require HTTP Basic Auth (Password) for Web Services](#require-http-basic-auth-password-for-web-services)
+ - [Custom Subdomain Names](#custom-subdomain-names)
+ - [URL Routing](#url-routing)
+ - [TCP Port Multiplexing](#tcp-port-multiplexing)
+ - [Connecting to frps via HTTP PROXY](#connecting-to-frps-via-http-proxy)
+ - [Range ports mapping](#range-ports-mapping)
+ - [Client Plugins](#client-plugins)
+ - [Server Manage Plugins](#server-manage-plugins)
+ - [Development Plan](#development-plan)
+ - [Contributing](#contributing)
+ - [Donation](#donation)
+ - [GitHub Sponsors](#github-sponsors)
+ - [PayPal](#paypal)
+
+
+
+## Development Status
+
+frp is currently under development. You can try the latest release version in the `master` branch, or use the `dev` branch to access the version currently in development.
+
+We are currently working on version 2 and attempting to perform some code refactoring and improvements. However, please note that it will not be compatible with version 1.
+
+We will transition from version 0 to version 1 at the appropriate time and will only accept bug fixes and improvements, rather than big feature requests.
+
+## Architecture
+
+
+
+## Example Usage
+
+To begin, download the latest program for your operating system and architecture from the [Release](https://github.com/fatedier/frp/releases) page.
+
+Next, place the `frps` binary and `frps.ini` configuration file on Server A, which has a public IP address.
+
+Finally, place the `frpc` binary and `frpc.ini` configuration file on Server B, which is located on a LAN that cannot be directly accessed from the public internet.
+
+### Access your computer in a LAN network via SSH
+
+1. Modify `frps.ini` on server A by setting the `bind_port` for frp clients to connect to:
+
+ ```ini
+ # frps.ini
+ [common]
+ bind_port = 7000
+ ```
+
+2. Start `frps` on server A:
+
+ `./frps -c ./frps.ini`
+
+3. Modify `frpc.ini` on server B and set the `server_addr` field to the public IP address of your frps server:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [ssh]
+ type = tcp
+ local_ip = 127.0.0.1
+ local_port = 22
+ remote_port = 6000
+ ```
+
+Note that the `local_port` (listened on the client) and `remote_port` (exposed on the server) are used for traffic going in and out of the frp system, while the `server_port` is used for communication between frps and frpc.
+
+4. Start `frpc` on server B:
+
+ `./frpc -c ./frpc.ini`
+
+5. To access server B from another machine through server A via SSH (assuming the username is `test`), use the following command:
+
+ `ssh -oPort=6000 test@x.x.x.x`
+
+### Accessing Internal Web Services with Custom Domains in LAN
+
+Sometimes we need to expose a local web service behind a NAT network to others for testing purposes with our own domain name.
+
+Unfortunately, we cannot resolve a domain name to a local IP. However, we can use frp to expose an HTTP(S) service.
+
+1. Modify `frps.ini` and set the HTTP port for vhost to 8080:
+
+ ```ini
+ # frps.ini
+ [common]
+ bind_port = 7000
+ vhost_http_port = 8080
+ ```
+
+2. Start `frps`:
+
+ `./frps -c ./frps.ini`
+
+3. Modify `frpc.ini` and set `server_addr` to the IP address of the remote frps server. Specify the `local_port` of your web service:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [web]
+ type = http
+ local_port = 80
+ custom_domains = www.example.com
+ ```
+
+4. Start `frpc`:
+
+ `./frpc -c ./frpc.ini`
+
+5. Map the A record of `www.example.com` to either the public IP of the remote frps server or a CNAME record pointing to your original domain.
+
+6. Visit your local web service using url `http://www.example.com:8080`.
+
+### Forward DNS query requests
+
+1. Modify `frps.ini`:
+
+ ```ini
+ # frps.ini
+ [common]
+ bind_port = 7000
+ ```
+
+2. Start `frps`:
+
+ `./frps -c ./frps.ini`
+
+3. Modify `frpc.ini` and set `server_addr` to the IP address of the remote frps server. Forward DNS query requests to the Google Public DNS server `8.8.8.8:53`:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [dns]
+ type = udp
+ local_ip = 8.8.8.8
+ local_port = 53
+ remote_port = 6000
+ ```
+
+4. Start frpc:
+
+ `./frpc -c ./frpc.ini`
+
+5. Test DNS resolution using the `dig` command:
+
+ `dig @x.x.x.x -p 6000 www.google.com`
+
+### Forward Unix Domain Socket
+
+Expose a Unix domain socket (e.g. the Docker daemon socket) as TCP.
+
+Configure `frps` as above.
+
+1. Start `frpc` with the following configuration:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [unix_domain_socket]
+ type = tcp
+ remote_port = 6000
+ plugin = unix_domain_socket
+ plugin_unix_path = /var/run/docker.sock
+ ```
+
+2. Test the configuration by getting the docker version using `curl`:
+
+ `curl http://x.x.x.x:6000/version`
+
+### Expose a simple HTTP file server
+
+Expose a simple HTTP file server to access files stored in the LAN from the public Internet.
+
+Configure `frps` as described above, then:
+
+1. Start `frpc` with the following configuration:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [test_static_file]
+ type = tcp
+ remote_port = 6000
+ plugin = static_file
+ plugin_local_path = /tmp/files
+ plugin_strip_prefix = static
+ plugin_http_user = abc
+ plugin_http_passwd = abc
+ ```
+
+2. Visit `http://x.x.x.x:6000/static/` from your browser and specify correct username and password to view files in `/tmp/files` on the `frpc` machine.
+
+### Enable HTTPS for a local HTTP(S) service
+
+You may substitute `https2https` for the plugin, and point the `plugin_local_addr` to a HTTPS endpoint.
+
+1. Start `frpc` with the following configuration:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [test_https2http]
+ type = https
+ custom_domains = test.example.com
+
+ plugin = https2http
+ plugin_local_addr = 127.0.0.1:80
+ plugin_crt_path = ./server.crt
+ plugin_key_path = ./server.key
+ plugin_host_header_rewrite = 127.0.0.1
+ plugin_header_X-From-Where = frp
+ ```
+
+2. Visit `https://test.example.com`.
+
+### Expose your service privately
+
+To mitigate risks associated with exposing certain services directly to the public network, STCP (Secret TCP) mode requires a preshared key to be used for access to the service from other clients.
+
+Configure `frps` same as above.
+
+1. Start `frpc` on machine B with the following config. This example is for exposing the SSH service (port 22), and note the `sk` field for the preshared key, and that the `remote_port` field is removed here:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [secret_ssh]
+ type = stcp
+ sk = abcdefg
+ local_ip = 127.0.0.1
+ local_port = 22
+ ```
+
+2. Start another `frpc` (typically on another machine C) with the following config to access the SSH service with a security key (`sk` field):
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [secret_ssh_visitor]
+ type = stcp
+ role = visitor
+ server_name = secret_ssh
+ sk = abcdefg
+ bind_addr = 127.0.0.1
+ bind_port = 6000
+ ```
+
+3. On machine C, connect to SSH on machine B, using this command:
+
+ `ssh -oPort=6000 127.0.0.1`
+
+### P2P Mode
+
+**xtcp** is designed to transmit large amounts of data directly between clients. A frps server is still needed, as P2P here only refers to the actual data transmission.
+
+Note that it may not work with all types of NAT devices. You might want to fallback to stcp if xtcp doesn't work.
+
+1. In `frps.ini` configure a UDP port for xtcp:
+
+ ```ini
+ # frps.ini
+ bind_udp_port = 7001
+ ```
+
+2. Start `frpc` on machine B, and expose the SSH port. Note that the `remote_port` field is removed:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [p2p_ssh]
+ type = xtcp
+ sk = abcdefg
+ local_ip = 127.0.0.1
+ local_port = 22
+ ```
+
+3. Start another `frpc` (typically on another machine C) with the configuration to connect to SSH using P2P mode:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ server_port = 7000
+
+ [p2p_ssh_visitor]
+ type = xtcp
+ role = visitor
+ server_name = p2p_ssh
+ sk = abcdefg
+ bind_addr = 127.0.0.1
+ bind_port = 6000
+ ```
+
+4. On machine C, connect to SSH on machine B, using this command:
+
+ `ssh -oPort=6000 127.0.0.1`
+
+## Features
+
+### Configuration Files
+
+Read the full example configuration files to find out even more features not described here.
+
+[Full configuration file for frps (Server)](./conf/frps_full.ini)
+
+[Full configuration file for frpc (Client)](./conf/frpc_full.ini)
+
+### Using Environment Variables
+
+Environment variables can be referenced in the configuration file, using Go's standard format:
+
+```ini
+# frpc.ini
+[common]
+server_addr = {{ .Envs.FRP_SERVER_ADDR }}
+server_port = 7000
+
+[ssh]
+type = tcp
+local_ip = 127.0.0.1
+local_port = 22
+remote_port = {{ .Envs.FRP_SSH_REMOTE_PORT }}
+```
+
+With the config above, variables can be passed into `frpc` program like this:
+
+```
+export FRP_SERVER_ADDR="x.x.x.x"
+export FRP_SSH_REMOTE_PORT="6000"
+./frpc -c ./frpc.ini
+```
+
+`frpc` will render configuration file template using OS environment variables. Remember to prefix your reference with `.Envs`.
+
+### Split Configures Into Different Files
+
+You can split multiple proxy configs into different files and include them in the main file.
+
+```ini
+# frpc.ini
+[common]
+server_addr = x.x.x.x
+server_port = 7000
+includes=./confd/*.ini
+```
+
+```ini
+# ./confd/test.ini
+[ssh]
+type = tcp
+local_ip = 127.0.0.1
+local_port = 22
+remote_port = 6000
+```
+
+### Dashboard
+
+Check frp's status and proxies' statistics information by Dashboard.
+
+Configure a port for dashboard to enable this feature:
+
+```ini
+[common]
+dashboard_port = 7500
+# dashboard's username and password are both optional
+dashboard_user = admin
+dashboard_pwd = admin
+```
+
+Then visit `http://[server_addr]:7500` to see the dashboard, with username and password both being `admin`.
+
+Additionally, you can use HTTPS port by using your domains wildcard or normal SSL certificate:
+
+```ini
+[common]
+dashboard_port = 7500
+# dashboard's username and password are both optional
+dashboard_user = admin
+dashboard_pwd = admin
+dashboard_tls_mode = true
+dashboard_tls_cert_file = server.crt
+dashboard_tls_key_file = server.key
+```
+
+Then visit `https://[server_addr]:7500` to see the dashboard in secure HTTPS connection, with username and password both being `admin`.
+
+
+
+### Admin UI
+
+The Admin UI helps you check and manage frpc's configuration.
+
+Configure an address for admin UI to enable this feature:
+
+```ini
+[common]
+admin_addr = 127.0.0.1
+admin_port = 7400
+admin_user = admin
+admin_pwd = admin
+```
+
+Then visit `http://127.0.0.1:7400` to see admin UI, with username and password both being `admin`.
+
+### Monitor
+
+When dashboard is enabled, frps will save monitor data in cache. It will be cleared after process restart.
+
+Prometheus is also supported.
+
+#### Prometheus
+
+Enable dashboard first, then configure `enable_prometheus = true` in `frps.ini`.
+
+`http://{dashboard_addr}/metrics` will provide prometheus monitor data.
+
+### Authenticating the Client
+
+There are 2 authentication methods to authenticate frpc with frps.
+
+You can decide which one to use by configuring `authentication_method` under `[common]` in `frpc.ini` and `frps.ini`.
+
+Configuring `authenticate_heartbeats = true` under `[common]` will use the configured authentication method to add and validate authentication on every heartbeat between frpc and frps.
+
+Configuring `authenticate_new_work_conns = true` under `[common]` will do the same for every new work connection between frpc and frps.
+
+#### Token Authentication
+
+When specifying `authentication_method = token` under `[common]` in `frpc.ini` and `frps.ini` - token based authentication will be used.
+
+Make sure to specify the same `token` in the `[common]` section in `frps.ini` and `frpc.ini` for frpc to pass frps validation
+
+#### OIDC Authentication
+
+When specifying `authentication_method = oidc` under `[common]` in `frpc.ini` and `frps.ini` - OIDC based authentication will be used.
+
+OIDC stands for OpenID Connect, and the flow used is called [Client Credentials Grant](https://tools.ietf.org/html/rfc6749#section-4.4).
+
+To use this authentication type - configure `frpc.ini` and `frps.ini` as follows:
+
+```ini
+# frps.ini
+[common]
+authentication_method = oidc
+oidc_issuer = https://example-oidc-issuer.com/
+oidc_audience = https://oidc-audience.com/.default
+```
+
+```ini
+# frpc.ini
+[common]
+authentication_method = oidc
+oidc_client_id = 98692467-37de-409a-9fac-bb2585826f18 # Replace with OIDC client ID
+oidc_client_secret = oidc_secret
+oidc_audience = https://oidc-audience.com/.default
+oidc_token_endpoint_url = https://example-oidc-endpoint.com/oauth2/v2.0/token
+```
+
+### Encryption and Compression
+
+The features are off by default. You can turn on encryption and/or compression:
+
+```ini
+# frpc.ini
+[ssh]
+type = tcp
+local_port = 22
+remote_port = 6000
+use_encryption = true
+use_compression = true
+```
+
+#### TLS
+
+frp supports the TLS protocol between `frpc` and `frps` since v0.25.0.
+
+For port multiplexing, frp sends a first byte `0x17` to dial a TLS connection.
+
+Configure `tls_enable = true` in the `[common]` section to `frpc.ini` to enable this feature.
+
+To **enforce** `frps` to only accept TLS connections - configure `tls_only = true` in the `[common]` section in `frps.ini`. **This is optional.**
+
+**`frpc` TLS settings (under the `[common]` section):**
+```ini
+tls_enable = true
+tls_cert_file = certificate.crt
+tls_key_file = certificate.key
+tls_trusted_ca_file = ca.crt
+```
+
+**`frps` TLS settings (under the `[common]` section):**
+```ini
+tls_only = true
+tls_enable = true
+tls_cert_file = certificate.crt
+tls_key_file = certificate.key
+tls_trusted_ca_file = ca.crt
+```
+
+You will need **a root CA cert** and **at least one SSL/TLS certificate**. It **can** be self-signed or regular (such as Let's Encrypt or another SSL/TLS certificate provider).
+
+If you using `frp` via IP address and not hostname, make sure to set the appropriate IP address in the Subject Alternative Name (SAN) area when generating SSL/TLS Certificates.
+
+Given an example:
+
+* Prepare openssl config file. It exists at `/etc/pki/tls/openssl.cnf` in Linux System and `/System/Library/OpenSSL/openssl.cnf` in MacOS, and you can copy it to current path, like `cp /etc/pki/tls/openssl.cnf ./my-openssl.cnf`. If not, you can build it by yourself, like:
+```
+cat > my-openssl.cnf << EOF
+[ ca ]
+default_ca = CA_default
+[ CA_default ]
+x509_extensions = usr_cert
+[ req ]
+default_bits = 2048
+default_md = sha256
+default_keyfile = privkey.pem
+distinguished_name = req_distinguished_name
+attributes = req_attributes
+x509_extensions = v3_ca
+string_mask = utf8only
+[ req_distinguished_name ]
+[ req_attributes ]
+[ usr_cert ]
+basicConstraints = CA:FALSE
+nsComment = "OpenSSL Generated Certificate"
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid,issuer
+[ v3_ca ]
+subjectKeyIdentifier = hash
+authorityKeyIdentifier = keyid:always,issuer
+basicConstraints = CA:true
+EOF
+```
+
+* build ca certificates:
+```
+openssl genrsa -out ca.key 2048
+openssl req -x509 -new -nodes -key ca.key -subj "/CN=example.ca.com" -days 5000 -out ca.crt
+```
+
+* build frps certificates:
+```
+openssl genrsa -out server.key 2048
+
+openssl req -new -sha256 -key server.key \
+ -subj "/C=XX/ST=DEFAULT/L=DEFAULT/O=DEFAULT/CN=server.com" \
+ -reqexts SAN \
+ -config <(cat my-openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:localhost,IP:127.0.0.1,DNS:example.server.com")) \
+ -out server.csr
+
+openssl x509 -req -days 365 -sha256 \
+ -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
+ -extfile <(printf "subjectAltName=DNS:localhost,IP:127.0.0.1,DNS:example.server.com") \
+ -out server.crt
+```
+
+* build frpc certificates:
+```
+openssl genrsa -out client.key 2048
+openssl req -new -sha256 -key client.key \
+ -subj "/C=XX/ST=DEFAULT/L=DEFAULT/O=DEFAULT/CN=client.com" \
+ -reqexts SAN \
+ -config <(cat my-openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:client.com,DNS:example.client.com")) \
+ -out client.csr
+
+openssl x509 -req -days 365 -sha256 \
+ -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
+ -extfile <(printf "subjectAltName=DNS:client.com,DNS:example.client.com") \
+ -out client.crt
+```
+
+### Hot-Reloading frpc configuration
+
+The `admin_addr` and `admin_port` fields are required for enabling HTTP API:
+
+```ini
+# frpc.ini
+[common]
+admin_addr = 127.0.0.1
+admin_port = 7400
+```
+
+Then run command `frpc reload -c ./frpc.ini` and wait for about 10 seconds to let `frpc` create or update or remove proxies.
+
+**Note that parameters in [common] section won't be modified except 'start'.**
+
+You can run command `frpc verify -c ./frpc.ini` before reloading to check if there are config errors.
+
+### Get proxy status from client
+
+Use `frpc status -c ./frpc.ini` to get status of all proxies. The `admin_addr` and `admin_port` fields are required for enabling HTTP API.
+
+### Only allowing certain ports on the server
+
+`allow_ports` in `frps.ini` is used to avoid abuse of ports:
+
+```ini
+# frps.ini
+[common]
+allow_ports = 2000-3000,3001,3003,4000-50000
+```
+
+`allow_ports` consists of specific ports or port ranges (lowest port number, dash `-`, highest port number), separated by comma `,`.
+
+### Port Reuse
+
+`vhost_http_port` and `vhost_https_port` in frps can use same port with `bind_port`. frps will detect the connection's protocol and handle it correspondingly.
+
+We would like to try to allow multiple proxies bind a same remote port with different protocols in the future.
+
+### Bandwidth Limit
+
+#### For Each Proxy
+
+```ini
+# frpc.ini
+[ssh]
+type = tcp
+local_port = 22
+remote_port = 6000
+bandwidth_limit = 1MB
+```
+
+Set `bandwidth_limit` in each proxy's configure to enable this feature. Supported units are `MB` and `KB`.
+
+Set `bandwidth_limit_mode` to `client` or `server` to limit bandwidth on the client or server side. Default is `client`.
+
+### TCP Stream Multiplexing
+
+frp supports tcp stream multiplexing since v0.10.0 like HTTP2 Multiplexing, in which case all logic connections to the same frpc are multiplexed into the same TCP connection.
+
+You can disable this feature by modify `frps.ini` and `frpc.ini`:
+
+```ini
+# frps.ini and frpc.ini, must be same
+[common]
+tcp_mux = false
+```
+
+### Support KCP Protocol
+
+KCP is a fast and reliable protocol that can achieve the transmission effect of a reduction of the average latency by 30% to 40% and reduction of the maximum delay by a factor of three, at the cost of 10% to 20% more bandwidth wasted than TCP.
+
+KCP mode uses UDP as the underlying transport. Using KCP in frp:
+
+1. Enable KCP in frps:
+
+ ```ini
+ # frps.ini
+ [common]
+ bind_port = 7000
+ # Specify a UDP port for KCP.
+ kcp_bind_port = 7000
+ ```
+
+ The `kcp_bind_port` number can be the same number as `bind_port`, since `bind_port` field specifies a TCP port.
+
+2. Configure `frpc.ini` to use KCP to connect to frps:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ # Same as the 'kcp_bind_port' in frps.ini
+ server_port = 7000
+ protocol = kcp
+ ```
+
+### Support QUIC Protocol
+
+QUIC is a new multiplexed transport built on top of UDP.
+
+Using QUIC in frp:
+
+1. Enable QUIC in frps:
+
+ ```ini
+ # frps.ini
+ [common]
+ bind_port = 7000
+ # Specify a UDP port for QUIC.
+ quic_bind_port = 7000
+ ```
+
+ The `quic_bind_port` number can be the same number as `bind_port`, since `bind_port` field specifies a TCP port.
+
+2. Configure `frpc.ini` to use QUIC to connect to frps:
+
+ ```ini
+ # frpc.ini
+ [common]
+ server_addr = x.x.x.x
+ # Same as the 'quic_bind_port' in frps.ini
+ server_port = 7000
+ protocol = quic
+ ```
+
+### Connection Pooling
+
+By default, frps creates a new frpc connection to the backend service upon a user request. With connection pooling, frps keeps a certain number of pre-established connections, reducing the time needed to establish a connection.
+
+This feature is suitable for a large number of short connections.
+
+1. Configure the limit of pool count each proxy can use in `frps.ini`:
+
+ ```ini
+ # frps.ini
+ [common]
+ max_pool_count = 5
+ ```
+
+2. Enable and specify the number of connection pool:
+
+ ```ini
+ # frpc.ini
+ [common]
+ pool_count = 1
+ ```
+
+### Load balancing
+
+Load balancing is supported by `group`.
+
+This feature is only available for types `tcp`, `http`, `tcpmux` now.
+
+```ini
+# frpc.ini
+[test1]
+type = tcp
+local_port = 8080
+remote_port = 80
+group = web
+group_key = 123
+
+[test2]
+type = tcp
+local_port = 8081
+remote_port = 80
+group = web
+group_key = 123
+```
+
+`group_key` is used for authentication.
+
+Connections to port 80 will be dispatched to proxies in the same group randomly.
+
+For type `tcp`, `remote_port` in the same group should be the same.
+
+For type `http`, `custom_domains`, `subdomain`, `locations` should be the same.
+
+### Service Health Check
+
+Health check feature can help you achieve high availability with load balancing.
+
+Add `health_check_type = tcp` or `health_check_type = http` to enable health check.
+
+With health check type **tcp**, the service port will be pinged (TCPing):
+
+```ini
+# frpc.ini
+[test1]
+type = tcp
+local_port = 22
+remote_port = 6000
+# Enable TCP health check
+health_check_type = tcp
+# TCPing timeout seconds
+health_check_timeout_s = 3
+# If health check failed 3 times in a row, the proxy will be removed from frps
+health_check_max_failed = 3
+# A health check every 10 seconds
+health_check_interval_s = 10
+```
+
+With health check type **http**, an HTTP request will be sent to the service and an HTTP 2xx OK response is expected:
+
+```ini
+# frpc.ini
+[web]
+type = http
+local_ip = 127.0.0.1
+local_port = 80
+custom_domains = test.example.com
+# Enable HTTP health check
+health_check_type = http
+# frpc will send a GET request to '/status'
+# and expect an HTTP 2xx OK response
+health_check_url = /status
+health_check_timeout_s = 3
+health_check_max_failed = 3
+health_check_interval_s = 10
+```
+
+### Rewriting the HTTP Host Header
+
+By default frp does not modify the tunneled HTTP requests at all as it's a byte-for-byte copy.
+
+However, speaking of web servers and HTTP requests, your web server might rely on the `Host` HTTP header to determine the website to be accessed. frp can rewrite the `Host` header when forwarding the HTTP requests, with the `host_header_rewrite` field:
+
+```ini
+# frpc.ini
+[web]
+type = http
+local_port = 80
+custom_domains = test.example.com
+host_header_rewrite = dev.example.com
+```
+
+The HTTP request will have the `Host` header rewritten to `Host: dev.example.com` when it reaches the actual web server, although the request from the browser probably has `Host: test.example.com`.
+
+### Setting other HTTP Headers
+
+Similar to `Host`, You can override other HTTP request headers with proxy type `http`.
+
+```ini
+# frpc.ini
+[web]
+type = http
+local_port = 80
+custom_domains = test.example.com
+host_header_rewrite = dev.example.com
+header_X-From-Where = frp
+```
+
+Note that parameter(s) prefixed with `header_` will be added to HTTP request headers.
+
+In this example, it will set header `X-From-Where: frp` in the HTTP request.
+
+### Get Real IP
+
+#### HTTP X-Forwarded-For
+
+This feature is for http proxy only.
+
+You can get user's real IP from HTTP request headers `X-Forwarded-For`.
+
+#### Proxy Protocol
+
+frp supports Proxy Protocol to send user's real IP to local services. It support all types except UDP.
+
+Here is an example for https service:
+
+```ini
+# frpc.ini
+[web]
+type = https
+local_port = 443
+custom_domains = test.example.com
+
+# now v1 and v2 are supported
+proxy_protocol_version = v2
+```
+
+You can enable Proxy Protocol support in nginx to expose user's real IP in HTTP header `X-Real-IP`, and then read `X-Real-IP` header in your web service for the real IP.
+
+### Require HTTP Basic Auth (Password) for Web Services
+
+Anyone who can guess your tunnel URL can access your local web server unless you protect it with a password.
+
+This enforces HTTP Basic Auth on all requests with the username and password specified in frpc's configure file.
+
+It can only be enabled when proxy type is http.
+
+```ini
+# frpc.ini
+[web]
+type = http
+local_port = 80
+custom_domains = test.example.com
+http_user = abc
+http_pwd = abc
+```
+
+Visit `http://test.example.com` in the browser and now you are prompted to enter the username and password.
+
+### Custom Subdomain Names
+
+It is convenient to use `subdomain` configure for http and https types when many people share one frps server.
+
+```ini
+# frps.ini
+subdomain_host = frps.com
+```
+
+Resolve `*.frps.com` to the frps server's IP. This is usually called a Wildcard DNS record.
+
+```ini
+# frpc.ini
+[web]
+type = http
+local_port = 80
+subdomain = test
+```
+
+Now you can visit your web service on `test.frps.com`.
+
+Note that if `subdomain_host` is not empty, `custom_domains` should not be the subdomain of `subdomain_host`.
+
+### URL Routing
+
+frp supports forwarding HTTP requests to different backend web services by url routing.
+
+`locations` specifies the prefix of URL used for routing. frps first searches for the most specific prefix location given by literal strings regardless of the listed order.
+
+```ini
+# frpc.ini
+[web01]
+type = http
+local_port = 80
+custom_domains = web.example.com
+locations = /
+
+[web02]
+type = http
+local_port = 81
+custom_domains = web.example.com
+locations = /news,/about
+```
+
+HTTP requests with URL prefix `/news` or `/about` will be forwarded to **web02** and other requests to **web01**.
+
+### TCP Port Multiplexing
+
+frp supports receiving TCP sockets directed to different proxies on a single port on frps, similar to `vhost_http_port` and `vhost_https_port`.
+
+The only supported TCP port multiplexing method available at the moment is `httpconnect` - HTTP CONNECT tunnel.
+
+When setting `tcpmux_httpconnect_port` to anything other than 0 in frps under `[common]`, frps will listen on this port for HTTP CONNECT requests.
+
+The host of the HTTP CONNECT request will be used to match the proxy in frps. Proxy hosts can be configured in frpc by configuring `custom_domain` and / or `subdomain` under `type = tcpmux` proxies, when `multiplexer = httpconnect`.
+
+For example:
+
+```ini
+# frps.ini
+[common]
+bind_port = 7000
+tcpmux_httpconnect_port = 1337
+```
+
+```ini
+# frpc.ini
+[common]
+server_addr = x.x.x.x
+server_port = 7000
+
+[proxy1]
+type = tcpmux
+multiplexer = httpconnect
+custom_domains = test1
+local_port = 80
+
+[proxy2]
+type = tcpmux
+multiplexer = httpconnect
+custom_domains = test2
+local_port = 8080
+```
+
+In the above configuration - frps can be contacted on port 1337 with a HTTP CONNECT header such as:
+
+```
+CONNECT test1 HTTP/1.1\r\n\r\n
+```
+and the connection will be routed to `proxy1`.
+
+### Connecting to frps via HTTP PROXY
+
+frpc can connect to frps using HTTP proxy if you set OS environment variable `HTTP_PROXY`, or if `http_proxy` is set in frpc.ini file.
+
+It only works when protocol is tcp.
+
+```ini
+# frpc.ini
+[common]
+server_addr = x.x.x.x
+server_port = 7000
+http_proxy = http://user:pwd@192.168.1.128:8080
+```
+
+### Range ports mapping
+
+Proxy with names that start with `range:` will support mapping range ports.
+
+```ini
+# frpc.ini
+[range:test_tcp]
+type = tcp
+local_ip = 127.0.0.1
+local_port = 6000-6006,6007
+remote_port = 6000-6006,6007
+```
+
+frpc will generate 8 proxies like `test_tcp_0`, `test_tcp_1`, ..., `test_tcp_7`.
+
+### Client Plugins
+
+frpc only forwards requests to local TCP or UDP ports by default.
+
+Plugins are used for providing rich features. There are built-in plugins such as `unix_domain_socket`, `http_proxy`, `socks5`, `static_file`, `http2https`, `https2http`, `https2https` and you can see [example usage](#example-usage).
+
+Specify which plugin to use with the `plugin` parameter. Configuration parameters of plugin should be started with `plugin_`. `local_ip` and `local_port` are not used for plugin.
+
+Using plugin **http_proxy**:
+
+```ini
+# frpc.ini
+[http_proxy]
+type = tcp
+remote_port = 6000
+plugin = http_proxy
+plugin_http_user = abc
+plugin_http_passwd = abc
+```
+
+`plugin_http_user` and `plugin_http_passwd` are configuration parameters used in `http_proxy` plugin.
+
+### Server Manage Plugins
+
+Read the [document](/doc/server_plugin.md).
+
+Find more plugins in [gofrp/plugin](https://github.com/gofrp/plugin).
+
+## Development Plan
+
+* Log HTTP request information in frps.
+
+## Contributing
+
+Interested in getting involved? We would like to help you!
+
+* Take a look at our [issues list](https://github.com/fatedier/frp/issues) and consider sending a Pull Request to **dev branch**.
+* If you want to add a new feature, please create an issue first to describe the new feature, as well as the implementation approach. Once a proposal is accepted, create an implementation of the new features and submit it as a pull request.
+* Sorry for my poor English. Improvements for this document are welcome, even some typo fixes.
+* If you have great ideas, send an email to fatedier@gmail.com.
+
+**Note: We prefer you to give your advise in [issues](https://github.com/fatedier/frp/issues), so others with a same question can search it quickly and we don't need to answer them repeatedly.**
+
+## Donation
+
+If frp helps you a lot, you can support us by:
+
+### GitHub Sponsors
+
+Support us by [Github Sponsors](https://github.com/sponsors/fatedier).
+
+You can have your company's logo placed on README file of this project.
+
+### PayPal
+
+Donate money by [PayPal](https://www.paypal.me/fatedier) to my account **fatedier@gmail.com**.
+
diff --git a/apps/frps/data.yml b/apps/frps/data.yml
new file mode 100644
index 00000000..13f64102
--- /dev/null
+++ b/apps/frps/data.yml
@@ -0,0 +1,20 @@
+name: frps-frp 服务端
+tags:
+ - 工具
+title: frp 是一种反向代理工具,常用于内网穿透(服务端)
+type: 工具
+description: frp 是一种反向代理工具,常用于内网穿透(服务端)
+additionalProperties:
+ key: frps
+ name: frps-frp 服务端
+ tags:
+ - Tool
+ shortDescZh: frp 是一种反向代理工具,常用于内网穿透(服务端)
+ shortDescEn: frp is a reverse proxy tool that is commonly used for intranet penetration(Server)
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://github.com/fatedier/frp
+ github: https://github.com/fatedier/frp
+ document: https://github.com/fatedier/frp/blob/dev/README_zh.md
diff --git a/apps/frps/latest/.env.sample b/apps/frps/latest/.env.sample
new file mode 100644
index 00000000..5d3caf0e
--- /dev/null
+++ b/apps/frps/latest/.env.sample
@@ -0,0 +1 @@
+CONTAINER_NAME="frps"
\ No newline at end of file
diff --git a/apps/frps/latest/data.yml b/apps/frps/latest/data.yml
new file mode 100644
index 00000000..07013e24
--- /dev/null
+++ b/apps/frps/latest/data.yml
@@ -0,0 +1,16 @@
+additionalProperties:
+ formFields:
+ - default: ./data/frps.toml
+ edit: true
+ envKey: CONFIG_FILE_PATH
+ labelEn: Configuration file path
+ labelZh: 配置文件路径
+ required: true
+ type: text
+ - default: 7000
+ disabled: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port (determined by the configuration file)
+ labelZh: 端口 (由配置文件决定)
+ required: true
+ type: number
\ No newline at end of file
diff --git a/apps/frps/latest/data/frpc.ini b/apps/frps/latest/data/frpc.ini
new file mode 100644
index 00000000..13a8e5f6
--- /dev/null
+++ b/apps/frps/latest/data/frpc.ini
@@ -0,0 +1,9 @@
+[common]
+server_addr = 127.0.0.1
+server_port = 7000
+
+[ssh]
+type = tcp
+local_ip = 127.0.0.1
+local_port = 22
+remote_port = 6000
diff --git a/apps/frps/latest/data/frpc.toml b/apps/frps/latest/data/frpc.toml
new file mode 100644
index 00000000..06f4771d
--- /dev/null
+++ b/apps/frps/latest/data/frpc.toml
@@ -0,0 +1,37 @@
+# common
+serverAddr = "1.2.3.4"
+serverPort = 7000
+auth.method = "token"
+auth.token = "token123456"
+# supports tcp, kcp, quic, websocket and wss now, default is tcp
+transport.protocol = "tcp"
+
+# dashboard
+webServer.addr = "127.0.0.1"
+webServer.port = 6000
+webServer.user = "admin"
+webServer.password = "password123456"
+webServer.pprofEnable = false
+
+# setting
+loginFailExit = false
+transport.tcpMux = false
+transport.tls.enable = false
+# transport.tls.certFile = "client.crt"
+# transport.tls.keyFile = "client.key"
+# transport.tls.trustedCaFile = "ca.crt"
+# transport.tls.serverName = "example.com"
+
+[[proxies]]
+name = "rdp_tcp"
+type = "tcp"
+localIP = "127.0.0.1"
+localPort = 3389
+remotePort = 13389
+
+[[proxies]]
+name = "rdp_udp"
+type = "udp"
+localIP = "127.0.0.1"
+localPort = 3389
+remotePort = 13389
\ No newline at end of file
diff --git a/apps/frps/latest/data/frpc_full.ini b/apps/frps/latest/data/frpc_full.ini
new file mode 100644
index 00000000..29f6bcab
--- /dev/null
+++ b/apps/frps/latest/data/frpc_full.ini
@@ -0,0 +1,365 @@
+# [common] is integral section
+[common]
+# A literal address or host name for IPv6 must be enclosed
+# in square brackets, as in "[::1]:80", "[ipv6-host]:http" or "[ipv6-host%zone]:80"
+# For single "server_addr" field, no need square brackets, like "server_addr = ::".
+server_addr = 0.0.0.0
+server_port = 7000
+
+# The maximum amount of time a dial to server will wait for a connect to complete. Default value is 10 seconds.
+# dial_server_timeout = 10
+
+# dial_server_keepalive specifies the interval between keep-alive probes for an active network connection between frpc and frps.
+# If negative, keep-alive probes are disabled.
+# dial_server_keepalive = 7200
+
+# if you want to connect frps by http proxy or socks5 proxy or ntlm proxy, you can set http_proxy here or in global environment variables
+# it only works when protocol is tcp
+# http_proxy = http://user:passwd@192.168.1.128:8080
+# http_proxy = socks5://user:passwd@192.168.1.128:1080
+# http_proxy = ntlm://user:passwd@192.168.1.128:2080
+
+# console or real logFile path like ./frpc.log
+log_file = ./frpc.log
+
+# trace, debug, info, warn, error
+log_level = info
+
+log_max_days = 3
+
+# disable log colors when log_file is console, default is false
+disable_log_color = false
+
+# for authentication, should be same as your frps.ini
+# authenticate_heartbeats specifies whether to include authentication token in heartbeats sent to frps. By default, this value is false.
+authenticate_heartbeats = false
+
+# authenticate_new_work_conns specifies whether to include authentication token in new work connections sent to frps. By default, this value is false.
+authenticate_new_work_conns = false
+
+# auth token
+token = 12345678
+
+authentication_method =
+
+# oidc_client_id specifies the client ID to use to get a token in OIDC authentication if AuthenticationMethod == "oidc".
+# By default, this value is "".
+oidc_client_id =
+
+# oidc_client_secret specifies the client secret to use to get a token in OIDC authentication if AuthenticationMethod == "oidc".
+# By default, this value is "".
+oidc_client_secret =
+
+# oidc_audience specifies the audience of the token in OIDC authentication if AuthenticationMethod == "oidc". By default, this value is "".
+oidc_audience =
+
+# oidc_scope specifies the permisssions of the token in OIDC authentication if AuthenticationMethod == "oidc". By default, this value is "".
+oidc_scope =
+
+# oidc_token_endpoint_url specifies the URL which implements OIDC Token Endpoint.
+# It will be used to get an OIDC token if AuthenticationMethod == "oidc". By default, this value is "".
+oidc_token_endpoint_url =
+
+# oidc_additional_xxx specifies additional parameters to be sent to the OIDC Token Endpoint.
+# For example, if you want to specify the "audience" parameter, you can set as follow.
+# frp will add "audience=直接利用现成的服务
+
+服务器不定时维护,不保证高可用,利用这些服务导致的账号安全问题,与本项目无关
+
+- https://go-chatgpt-api.linweiyuan.com
+- https://api.tms.im
+
+家庭网络
+
+```yaml
+ go-chatgpt-api:
+ container_name: go-chatgpt-api
+ image: linweiyuan/go-chatgpt-api
+ ports:
+ - 8080:8080
+ environment:
+ - TZ=Asia/Shanghai
+ - GO_CHATGPT_API_PROXY=
+ - GO_CHATGPT_API_PANDORA=
+ - GO_CHATGPT_API_ARKOSE_TOKEN_URL=
+ - GO_CHATGPT_API_ARKOSE_PUID=
+ restart: unless-stopped
+```
+
+服务器在直连或者通过网络代理的情况下可以正常访问 ChatGPT
+
+```yaml
+ go-chatgpt-api:
+ container_name: go-chatgpt-api
+ image: linweiyuan/go-chatgpt-api
+ ports:
+ - 8080:8080
+ environment:
+ - TZ=Asia/Shanghai
+ - GO_CHATGPT_API_PROXY=
+ - GO_CHATGPT_API_PANDORA=
+ - GO_CHATGPT_API_ARKOSE_TOKEN_URL=
+ - GO_CHATGPT_API_ARKOSE_PUID=
+ restart: unless-stopped
+```
+
+服务器访问 ChatGPT 提示 "Sorry, you have been blocked"
+
+如何验证:`curl https://chat.openai.com | grep '
+
+
+Made with [contrib.rocks](https://contrib.rocks).
+
+---
+
+
广告位
+
+---
+
+[Vultr 推荐注册](https://www.vultr.com/?ref=7372562)
+
+通过这条链接进去注册登录,并充值 `$10`,然后创建服务器用至少一个月,我可以得到佣金
+
+---
+
+微信赞赏码(经济条件允许的可以考虑支持下):
+
+
+
+
+
+# ChatGPT-API Demo
+
+[English](https://github.com/vastxie/Happy-ChatGPT/blob/main/README.md) | 简体中文
+
+一个基于 [OpenAI GPT-3.5 Turbo API](https://platform.openai.com/docs/guides/chat) 的 demo。
+
+**🍿 在线预览**: https://chatgpt.ddiu.me
+
+**🏖️ V2 版本 (Beta)**: https://v2.chatgpt.ddiu.me
+
+> ⚠️ 注意:我们的 API 密钥限制已用尽。所以演示站点现在不可用。
+
+
+
+## 本地运行
+
+### 前置环境
+
+1. **Node**: 检查您的开发环境和部署环境是否都使用 `Node v18` 或更高版本。你可以使用 [nvm](https://github.com/nvm-sh/nvm) 管理本地多个 `node` 版本。
+ ```bash
+ node -v
+ ```
+2. **PNPM**: 我们推荐使用 [pnpm](https://pnpm.io/) 来管理依赖,如果你从来没有安装过 pnpm,可以使用下面的命令安装:
+ ```bash
+ npm i -g pnpm
+ ```
+3. **OPENAI_API_KEY**: 在运行此应用程序之前,您需要从 OpenAI 获取 API 密钥。您可以在 [https://beta.openai.com/signup](https://beta.openai.com/signup) 注册 API 密钥。
+
+### 起步运行
+
+1. 安装依赖
+ ```bash
+ pnpm install
+ ```
+2. 复制 `.env.example` 文件,重命名为 `.env`,并添加你的 [OpenAI API key](https://platform.openai.com/account/api-keys) 到 `.env` 文件中
+ ```bash
+ OPENAI_API_KEY=sk-xxx...
+ ```
+3. 运行应用,本地项目运行在 `http://localhost:3000/`
+ ```bash
+ pnpm run dev
+ ```
+
+## 部署
+
+### 部署在 Vercel
+
+[](https://vercel.com/new/clone?repository-url=https%3A%2F%2Fgithub.com%2Fddiu8081%2Fchatgpt-demo&env=OPENAI_API_KEY&envDescription=OpenAI%20API%20Key&envLink=https%3A%2F%2Fplatform.openai.com%2Faccount%2Fapi-keys)
+
+
+
+> ###### 🔒 需要站点密码?
+>
+> 携带[`SITE_PASSWORD`](#environment-variables)进行部署
+>
+>
+
+
+
+### 部署在 Netlify
+
+[](https://app.netlify.com/start/deploy?repository=https://github.com/ddiu8081/chatgpt-demo#OPENAI_API_KEY=&HTTPS_PROXY=&OPENAI_API_BASE_URL=&HEAD_SCRIPTS=&PUBLIC_SECRET_KEY=&OPENAI_API_MODEL=&SITE_PASSWORD=)
+
+**分步部署教程:**
+
+1. [Fork](https://github.com/ddiu8081/chatgpt-demo/fork) 此项目,前往 [https://app.netlify.com/start](https://app.netlify.com/start) 新建站点,选择你 `fork` 完成的项目,将其与 `GitHub` 帐户连接。
+
+
+
+
+
+
+2. 选择要部署的分支,选择 `main` 分支,在项目设置中配置环境变量,环境变量配置参考下文。
+
+
+
+3. 选择默认的构建命令和输出目录,单击 `Deploy Site` 按钮开始部署站点。
+
+
+
+### 部署在 Docker
+部署之前请确认 `.env` 文件正常配置,环境变量参考下方文档,[Docker Hub address](https://hub.docker.com/r/ddiu8081/chatgpt-demo).
+
+**一键运行**
+```bash
+docker run --name=chatgpt-demo -e OPENAI_API_KEY=YOUR_OPEN_API_KEY -p 3000:3000 -d ddiu8081/chatgpt-demo:latest
+```
+`-e` 在容器中定义环境变量。
+
+**使用 Docker compose**
+```yml
+version: '3'
+
+services:
+ chatgpt-demo:
+ image: ddiu8081/chatgpt-demo:latest
+ container_name: chatgpt-demo
+ restart: always
+ ports:
+ - '3000:3000'
+ environment:
+ - OPENAI_API_KEY=YOUR_OPEN_API_KEY
+ # - HTTPS_PROXY=YOUR_HTTPS_PROXY
+ # - OPENAI_API_BASE_URL=YOUR_OPENAI_API_BASE_URL
+ # - HEAD_SCRIPTS=YOUR_HEAD_SCRIPTS
+ # - PUBLIC_SECRET_KEY=YOUR_SECRET_KEY
+ # - SITE_PASSWORD=YOUR_SITE_PASSWORD
+ # - OPENAI_API_MODEL=YOUR_OPENAI_API_MODEL
+```
+
+```bash
+# start
+docker compose up -d
+# down
+docker-compose down
+```
+
+### Sealos 部署
+
+ 1.注册 Sealos 免费账号 [sealos cloud](https://cloud.sealos.io)
+
+2.点击 `App Launchpad` 按钮
+
+
+
+3.点击 `Create Application` 按钮
+
+
+
+4.按照下图填写后,点击 `Deploy Application` 按钮
+
+
+
+```shell
+App Name: chatgpt-demo
+Image Name: ddiu8081/chatgpt-demo:latest
+CPU: 0.5Core
+Memory: 1G
+Container Ports: 3000
+Accessible to the Public: On
+Environment: OPENAI_API_KEY=YOUR_OPEN_API_KEY
+```
+
+5.获取访问链接。如果你需要自定义域名,可以点击 `Custom domain` 按钮后按照提示解析域名 CNAME
+
+
+
+6.等待 1-2 分钟后点击链接,即可进去页面
+
+
+
+### 部署在更多的服务器
+
+请参考官方部署文档:https://docs.astro.build/en/guides/deploy
+
+## 环境变量
+
+配置本地或者部署的环境变量
+
+| 名称 | 描述 | 默认 |
+| --- | --- | --- |
+| `OPENAI_API_KEY` | 你的 OpenAI API Key | `null` |
+| `HTTPS_PROXY` | 为 OpenAI API 提供代理。e.g. `http://127.0.0.1:7890` | `null` |
+| `OPENAI_API_BASE_URL` | 请求 OpenAI API 的自定义 Base URL. | `https://api.openai.com` |
+| `HEAD_SCRIPTS` | 在页面的 `` 之前注入分析或其他脚本 | `null` |
+| `PUBLIC_SECRET_KEY` | 项目的秘密字符串。用于生成 API 调用的签名 | `null` |
+| `SITE_PASSWORD` | 为网站设置密码,支持使用英文逗号创建多个密码。如果未设置,则该网站将是公开的 | `null` |
+| `OPENAI_API_MODEL` | 使用的 OpenAI 模型。[模型列表](https://platform.openai.com/docs/api-reference/models/list) | `gpt-3.5-turbo` |
+
+## 开启同步更新
+
+Fork 项目后,您需要在 Fork 项目的操作页面上手动启用工作流和上游同步操作。启用后,每天都会执行自动更新:
+
+
+
+## 常见问题
+
+Q: TypeError: fetch failed (can't connect to OpenAI Api)
+
+A: 配置环境变量 `HTTPS_PROXY`,参考:https://github.com/ddiu8081/chatgpt-demo/issues/34
+
+Q: throw new TypeError(${context} is not a ReadableStream.)
+
+A: Node 版本需要在 `v18` 或者更高,参考:https://github.com/ddiu8081/chatgpt-demo/issues/65
+
+Q: Accelerate domestic access without the need for proxy deployment tutorial?
+
+A: 你可以参考此教程:https://github.com/ddiu8081/chatgpt-demo/discussions/270
+
+## 参与贡献
+
+这个项目的存在要感谢所有做出贡献的人。
+
+感谢我们所有的支持者!🙏
+
+[](https://github.com/ddiu8081/chatgpt-demo/graphs/contributors)
+
+## License
+
+MIT © [ddiu8081](https://github.com/ddiu8081/chatgpt-demo/blob/main/LICENSE)
diff --git a/apps/happy-chatgpt/data.yml b/apps/happy-chatgpt/data.yml
new file mode 100644
index 00000000..6760dee8
--- /dev/null
+++ b/apps/happy-chatgpt/data.yml
@@ -0,0 +1,20 @@
+name: Happy-ChatGPT
+tags:
+ - 工具
+title: ChatGPT 国粹版,和 GPT 一起学习地道的中国话吧
+type: 工具
+description: ChatGPT 国粹版,和 GPT 一起学习地道的中国话吧
+additionalProperties:
+ key: happy-chatgpt
+ name: Happy-ChatGPT
+ tags:
+ - Tool
+ shortDescZh: ChatGPT 国粹版,和 GPT 一起学习地道的中国话吧
+ shortDescEn: ChatGPT (swear version), learn "authentic" Chinese with GPT
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://happy-chat-gpt.vercel.app
+ github: https://github.com/vastxie/Happy-ChatGPT
+ document: https://github.com/vastxie/Happy-ChatGPT
diff --git a/apps/happy-chatgpt/latest/.env.sample b/apps/happy-chatgpt/latest/.env.sample
new file mode 100644
index 00000000..6c4f557a
--- /dev/null
+++ b/apps/happy-chatgpt/latest/.env.sample
@@ -0,0 +1,9 @@
+CONTAINER_NAME="happy-chatgpt"
+API_BASE_URL=""
+API_KEY="sk-xxx"
+API_MODEL=""
+HEAD_SCRIPTS_VAULE=""
+HTTPS_PROXY=""
+PANEL_APP_PORT_HTTP="40117"
+PUBLIC_SECRET_KEY_VAULE=""
+SECRET_KEY="happychatgpt-pwd"
diff --git a/apps/happy-chatgpt/latest/data.yml b/apps/happy-chatgpt/latest/data.yml
new file mode 100644
index 00000000..33739be7
--- /dev/null
+++ b/apps/happy-chatgpt/latest/data.yml
@@ -0,0 +1,61 @@
+additionalProperties:
+ formFields:
+ - default: 40117
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: "sk-xxx"
+ edit: true
+ envKey: API_KEY
+ labelEn: OPENAI API KEY
+ labelZh: OPENAI API KEY
+ required: true
+ type: text
+ - default: "happychatgpt"
+ edit: true
+ envKey: SECRET_KEY
+ labelEn: Access rights key, optional (recommended)
+ labelZh: 访问权限密钥,可选(强烈建议填写)
+ random: true
+ required: false
+ rule: paramComplexity
+ type: password
+ - default: ''
+ edit: true
+ envKey: HTTPS_PROXY
+ labelEn: HTTPS proxy (http://127.0.0.1:7890)
+ labelZh: HTTPS代理 (http://127.0.0.1:7890)
+ required: false
+ type: text
+ - default: ''
+ edit: true
+ envKey: API_BASE_URL
+ labelEn: API interface address (https://api.openai.com)
+ labelZh: API接口地址 (https://api.openai.com)
+ required: false
+ type: text
+ - default: ''
+ edit: true
+ envKey: API_MODEL
+ labelEn: API model, optional (https://platform.openai.com/docs/models)
+ labelZh: API模型,可选 (https://platform.openai.com/docs/models)
+ required: false
+ type: text
+ - default: ''
+ edit: true
+ envKey: HEAD_SCRIPTS_VAULE
+ labelEn: Inject analytics or other scripts before the page
+ labelZh: 在页面的 之前注入分析或其他脚本
+ required: false
+ type: text
+ - default: ''
+ edit: true
+ envKey: PUBLIC_SECRET_KEY_VAULE
+ labelEn: The secret string for the project. The signature used to generate the API call
+ labelZh: 项目的秘密字符串。用于生成 API 调用的签名
+ required: false
+ type: text
diff --git a/apps/happy-chatgpt/latest/docker-compose.yml b/apps/happy-chatgpt/latest/docker-compose.yml
new file mode 100644
index 00000000..fc78e6e1
--- /dev/null
+++ b/apps/happy-chatgpt/latest/docker-compose.yml
@@ -0,0 +1,24 @@
+version: '3'
+services:
+ happy-chatgpt:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:3000"
+ environment:
+ - "OPENAI_API_KEY=${API_KEY}"
+ - "HTTPS_PROXY=${HTTPS_PROXY}"
+ - "OPENAI_API_BASE_URL=${API_BASE_URL}"
+ - "HEAD_SCRIPTS=${HEAD_SCRIPTS_VAULE}"
+ - "PUBLIC_SECRET_KEY=${PUBLIC_SECRET_KEY_VAULE}"
+ - "SITE_PASSWORD=${SECRET_KEY}"
+ - "OPENAI_API_MODEL=${API_MODEL}"
+ image: ddiu8081/chatgpt-demo:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/happy-chatgpt/logo.png b/apps/happy-chatgpt/logo.png
new file mode 100644
index 00000000..63da7d3d
Binary files /dev/null and b/apps/happy-chatgpt/logo.png differ
diff --git a/apps/hasty-paste/README.md b/apps/hasty-paste/README.md
new file mode 100644
index 00000000..b6ab9403
--- /dev/null
+++ b/apps/hasty-paste/README.md
@@ -0,0 +1,63 @@
+# Hasty Paste
+
+
+
+
+
+
+A fast and minimal paste bin.
+
+## Looking For Maintainers
+I don't find myself using this app much and not having infinite time; would like some assistance on maintaining this project. Since this project is mostly fully feature complete, I am looking for someone who can perform small maintenance.
+
+You can contact at the links shown [here](https://github.com/enchant97#-how-to-reach-me) (or raise an issue), if you are interested.
+
+> This project is **not** being abandoned. Any security or major fixes will still be done, if needed.
+
+## Features
+- Quickly paste and save, to share some text
+- Publicly accessible, no auth needed
+- Randomly generated id's, optional "long" id to reduce brute force attacks
+- Add expiring pastes
+- Dark theme
+- Optional syntax highlighting
+- No JavaScript needed
+- Uses minimal resources
+- REST API
+- Pick your file system
+ - Custom flat-file system
+ - :construction: S3 objects
+- Caching (Internal & Redis)
+- Lightweight Docker image (uses Alpine Linux)
+
+## Showcase
+[](docs/assets/showcase.png)
+
+## Docs
+Docs are located in the [/docs](docs/index.md) directory. Or on the site: [enchantedcode.co.uk/hasty-paste](https://enchantedcode.co.uk/hasty-paste)
+
+## Hastily Paste It CLI
+This is a simple script allowing the creation of pastes from the command-line. You can download your version [here](hastily-paste-it/README.md).
+
+## Branches
+| Name | Description | State |
+| :----------- | :--------------------- | :------------ |
+| main | Work ready for release | Stable |
+| next | Work for next version | Very Unstable |
+| historical-X | Historical versions | Unsupported |
+
+> Choose a tag/release for most stable if running project
+
+## Why Is It Called "Hasty Paste"?
+The name was chosen not because the project is written badly, but because you use it so fast without a care in the world and "Fast Paste" was already taken!
+
+## License
+This project is Copyright (c) 2023 Leo Spratt, licences shown below:
+
+Code
+
+ AGPL-3 or any later version. Full license found in `LICENSE.txt`
+
+Documentation
+
+ FDLv1.3 or any later version. Full license found in `docs/LICENSE.txt`
diff --git a/apps/hasty-paste/data.yml b/apps/hasty-paste/data.yml
new file mode 100644
index 00000000..4de4c759
--- /dev/null
+++ b/apps/hasty-paste/data.yml
@@ -0,0 +1,20 @@
+name: Hasty Paste
+tags:
+ - 工具
+title: 一个快速粘贴文本并共享的地方
+type: 工具
+description: 一个快速粘贴文本并共享的地方
+additionalProperties:
+ key: hasty-paste
+ name: Hasty Paste
+ tags:
+ - Tool
+ shortDescZh: 一个快速粘贴文本并共享的地方
+ shortDescEn: A place to quickly paste some text and share it
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://enchantedcode.co.uk/hasty-paste/
+ github: https://github.com/enchant97/hasty-paste
+ document: https://enchantedcode.co.uk/hasty-paste/
diff --git a/apps/hasty-paste/latest/.env.sample b/apps/hasty-paste/latest/.env.sample
new file mode 100644
index 00000000..7f3219b4
--- /dev/null
+++ b/apps/hasty-paste/latest/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="hasty-paste"
+PANEL_APP_PORT_HTTP="40070"
+
diff --git a/apps/hasty-paste/latest/data.yml b/apps/hasty-paste/latest/data.yml
new file mode 100644
index 00000000..62a74449
--- /dev/null
+++ b/apps/hasty-paste/latest/data.yml
@@ -0,0 +1,12 @@
+additionalProperties:
+ formFields:
+ - default: 40070
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+
+
diff --git a/apps/hasty-paste/latest/docker-compose.yml b/apps/hasty-paste/latest/docker-compose.yml
new file mode 100644
index 00000000..40e6a650
--- /dev/null
+++ b/apps/hasty-paste/latest/docker-compose.yml
@@ -0,0 +1,23 @@
+version: '3'
+services:
+ hasty-paste:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8000"
+ volumes:
+ - hpaste_data:/app/data
+ environment:
+ - TZ=Asia/Shanghai
+ image: ghcr.io/enchant97/hasty-paste:latest
+ labels:
+ createdBy: "Apps"
+
+volumes:
+ hpaste_data:
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/hasty-paste/logo.png b/apps/hasty-paste/logo.png
new file mode 100644
index 00000000..d4f911a2
Binary files /dev/null and b/apps/hasty-paste/logo.png differ
diff --git a/apps/heimdall/2.5.7/.env.sample b/apps/heimdall/2.5.7/.env.sample
new file mode 100644
index 00000000..b3db0e1c
--- /dev/null
+++ b/apps/heimdall/2.5.7/.env.sample
@@ -0,0 +1,4 @@
+CONTAINER_NAME="heimdall"
+PANEL_APP_PORT_HTTP="40049"
+PANEL_APP_PORT_HTTPS="40050"
+DATA_PATH="./data"
diff --git a/apps/heimdall/2.5.7/data.yml b/apps/heimdall/2.5.7/data.yml
new file mode 100644
index 00000000..ccdfe755
--- /dev/null
+++ b/apps/heimdall/2.5.7/data.yml
@@ -0,0 +1,26 @@
+additionalProperties:
+ formFields:
+ - default: 40049
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 40050
+ edit: true
+ envKey: PANEL_APP_PORT_HTTPS
+ labelEn: HTTPS Port
+ labelZh: HTTPS端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+
diff --git a/apps/heimdall/2.5.7/docker-compose.yml b/apps/heimdall/2.5.7/docker-compose.yml
new file mode 100644
index 00000000..dcf0fe8e
--- /dev/null
+++ b/apps/heimdall/2.5.7/docker-compose.yml
@@ -0,0 +1,23 @@
+version: '3'
+services:
+ heimdall:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ - "${PANEL_APP_PORT_HTTPS}:443"
+ volumes:
+ - "${DATA_PATH}:/config"
+ environment:
+ - PUID=1000
+ - PGID=1000
+ - TZ=Asia/Shanghai
+ image: linuxserver/heimdall:2.5.7
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/heimdall/README.md b/apps/heimdall/README.md
new file mode 100644
index 00000000..e94a8a7e
--- /dev/null
+++ b/apps/heimdall/README.md
@@ -0,0 +1,219 @@
+# Heimdall
+
+[](https://heimdall.site)
+
+[](https://discord.gg/CCjHKn4)
+[](https://hub.docker.com/r/linuxserver/heimdall/)
+[](https://www.firsttimersonly.com/)
+[](https://www.paypal.me/heimdall)
+
+___
+
+Visit the website - https://heimdall.site
+___
+
+## About
+As the name suggests Heimdall Application Dashboard is a dashboard for all your web applications. It doesn't need to be limited to applications though, you can add links to anything you like.
+
+Heimdall is an elegant solution to organise all your web applications. It’s dedicated to this purpose so you won’t lose your links in a sea of bookmarks.
+
+Why not use it as your browser start page? It even has the ability to include a search bar using either Google, Bing or DuckDuckGo.
+
+
+
+## Video
+If you want to see a quick video of it in use, go to https://youtu.be/GXnnMAxPzMc
+
+## Supported applications
+You can use the app to link to any site or application, but Foundation apps will auto fill in the icon for the app and supply a default color for the tile. In addition Enhanced apps allow you provide details to an apps API, allowing you to view live stats directly on the dashboad. For example, the NZBGet and Sabnzbd Enhanced apps will display the queue size and download speed while something is downloading.
+
+Supported applications are recognized by the title of the application as entered in the title field when adding an application. For example, to add a link to pfSense, begin by typing "p" in the title field and then select "pfSense" from the list of supported applications.
+
+[](https://apps.heimdall.site/applications/enhanced)
+
+[](https://apps.heimdall.site/applications/foundation)
+
+## Installing
+Apart from the Laravel 8 dependencies, namely PHP >= 7.4.32, BCMath PHP Extension, INTL PHP Extension, Ctype PHP Extension, Fileinfo PHP extension, JSON PHP Extension, Mbstring PHP Extension, OpenSSL PHP Extension, PDO PHP Extension, Tokenizer PHP Extension, XML PHP Extension, the only other thing Heimdall needs is sqlite support and zip support (php-zip).
+
+If you find you can't change the background make sure `php_fileinfo` is enabled in your php.ini. I believe it should be by default, but one user came across the issue on a windows system.
+
+Installation is as simple as cloning the repository somewhere, or downloading and extracting the zip/tar and pointing your httpd document root to the `/public` folder then creating the .env file and generating an encryption key (this is all taken care of for you with the docker).
+
+```
+cd /path/to/heimdall
+cp .env.example .env
+php artisan key:generate
+```
+
+For simple testing you could just go to the folder and type `php artisan serve`
+
+There is also a multi-arch Docker which supports x86-64, armhf and arm64, instructions on how to use them at
+
+- https://hub.docker.com/r/linuxserver/heimdall/
+
+## Updating
+To update your instance, simply clone this repository or download the zip/tar file with the new version and copy it over the old installation.
+
+## Search Providers
+v2.3.0 added the ability for users to customise the search options.
+
+Options are stored in `/storage/app/searchproviders.yaml` (`/config/www/searchproviders.yaml` on docker installs), feel free to rearrange the options, add new ones, delete ones you don't use, etc.
+
+Consider contributing to https://github.com/linuxserver/Heimdall/discussions/categories/search-providers to help others add new ones.
+
+The item at the top of the list `Tiles` allows you to search for apps on your dashboard by name, helpful when you have lots of icons.
+
+## New background image not being set
+If you are using the docker image or a default php install you may find images over 2MB wont get set as the background image, you just need to change the `upload_max_filesize` in the php.ini.
+
+If you are using the linuxserver.io docker image simply edit `/path/to/config/php/php-local.ini` and add `upload_max_filesize = 30M` to the end.
+
+## Docker and enhanced apps
+If you are running the docker and the EnhancedApps you are using are also in dockers, you may need to use the docker networking addresses to communicate with them.
+
+You can do this by using `http(s)://docker_name:port` in the config section. Instead of the name you can use the internal docker ip, this usually starts with `172.`
+
+## Languages
+The app has been translated into several languages; however, the quality of the translations could do with work. If you would like to improve them, or help with other translations, they are stored in `/resources/lang/`.
+
+To create a new language translation, make a new folder with the ISO 3166-1 alpha-2 code as the name, copy `app.php` from `/resources/lang/en/app.php` into your new folder and replace the English strings.
+
+When you are finished, create a pull request.
+
+Currently added languages are
+
+- Breton
+- Chinese
+- Danish
+- Dutch
+- English
+- Finnish
+- French
+- German
+- Greek
+- Hungarian
+- Italian
+- Japanese
+- Korean
+- Lombard
+- Norwegian
+- Polish
+- Portuguese
+- Russian
+- Slovenian
+- Spanish
+- Swedish
+- Turkish
+
+## Web Server Configuration
+
+### Apache
+A `.htaccess` file ships with the app, however, a lot of apache installations disallow `.htaccess` files by default.
+You will notice this due to some links not working like `/settings`.
+In addition mod-rewrite needs to be enabled if it isn't already.
+
+#### Fixes & work around options
+##### - Apache global allow .htaccess
+Find the `AllowOverride None` line in your apache configuration and change this to `AllowOverride All`
+
+##### - Apache vhost configuration allow .htaccess
+In the apache vhost configuration in the `
+
+
)
+
+## HertzBeat 赫兹跳动
+
+> 易用友好的开源实时监控告警系统,无需Agent,强大自定义监控能力。
+
+[](https://discord.gg/Fb6M73htGr)
+[](https://gitter.im/hertzbeat/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
+[](https://jq.qq.com/?_wv=1027&k=aVIVB2K9)
+
+
+
+
+
+
+
+
+
+
+
+**官网: [hertzbeat.dromara.org](https://hertzbeat.dromara.org) | [hertzbeat.com](https://hertzbeat.com)**
+
+**云服务: [tancloud.cn](https://tancloud.cn)**
+
+## 🎡 介绍
+
+> [HertzBeat赫兹跳动](https://github.com/dromara/hertzbeat) 是一个拥有强大自定义监控能力,无需 Agent 的开源实时监控告警系统。
+> 集 **监控+告警+通知** 为一体,支持对应用服务,数据库,操作系统,中间件,云原生,网络等监控,阈值告警通知一步到位。
+> 易用友好,全 WEB 页面操作,鼠标点一点就能监控告警,零上手学习成本。
+> 更自由化的阈值规则,`邮件` `Discord` `Slack` `Telegram` `钉钉` `微信` `飞书` `短信` `Webhook` 等方式及时送达。
+
+> 我们将`Http,Jmx,Ssh,Snmp,Jdbc`等协议规范可配置化,您只需在浏览器配置`YML`就能使用这些协议去自定义采集任何您想要的指标。
+> 您相信只需配置下就能立刻适配一款`K8s`或`Docker`等新的监控类型吗?
+
+> `HertzBeat`的强大自定义,多类型支持,易扩展,低耦合,希望能帮助开发者和中小团队快速搭建自有监控系统。
+> 当然我们也提供了对应的 **[SAAS版本监控云](https://console.tancloud.cn)**,中小团队和个人无需再为了监控自己的网站资源,而去部署学习一套繁琐的监控系统,**[登录即可免费开始](https://console.tancloud.cn)**。
+
+----
+
+[](https://www.bilibili.com/video/BV1LY4y1m7rH/)
+
+[](https://www.bilibili.com/video/BV1LY4y1m7rH/)
+
+----
+
+## 🥐 模块
+
+
+
+## ⛄ 已支持
+
+> 我们将监控采集类型(mysql,jvm,k8s)都定义为yml监控模版,用户可以导入这些模版来支持对应类型的监控!
+> 欢迎大家一起贡献你使用过程中自定义的通用监控类型监控模版。
+
+- [Website](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-website.yml), [Port Telnet](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-port.yml),
+ [Http Api](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-api.yml), [Ping Connect](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-ping.yml),
+ [Jvm](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-jvm.yml), [SiteMap](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-fullsite.yml),
+ [Ssl Certificate](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-ssl_cert.yml), [SpringBoot2](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-springboot2.yml),
+ [FTP Server](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-ftp.yml), [SpringBoot3](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-springboot3.yml)
+- [Mysql](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-mysql.yml), [PostgreSQL](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-postgresql.yml),
+ [MariaDB](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-mariadb.yml), [Redis](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-redis.yml),
+ [ElasticSearch](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-elasticsearch.yml), [SqlServer](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-sqlserver.yml),
+ [Oracle](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-oracle.yml), [MongoDB](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-mongodb.yml),
+ [DM](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-dm.yml), [OpenGauss](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-opengauss.yml),
+ [ClickHouse](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-clickhouse.yml), [IoTDB](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-iotdb.yml),
+ [Redis Cluster](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-redis_cluster.yml), [Redis Sentinel](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-redis_sentinel.yml)
+- [Linux](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-linux.yml), [Ubuntu](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-ubuntu.yml),
+ [CentOS](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-centos.yml), [Windows](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-windows.yml),
+ [EulerOS](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-euleros.yml), [Fedora CoreOS](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-coreos.yml),
+ [OpenSUSE](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-opensuse.yml), [Rocky Linux](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-rockylinux.yml),
+ [Red Hat](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-redhat.yml), [FreeBSD](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-freebsd.yml),
+ [AlmaLinux](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-almalinux.yml), [Debian Linux](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-debian.yml)
+- [Tomcat](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-tomcat.yml), [Nacos](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-nacos.yml),
+ [Zookeeper](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-zookeeper.yml), [RabbitMQ](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-rabbitmq.yml),
+ [Flink](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-flink.yml), [Kafka](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-kafka.yml),
+ [ShenYu](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-shenyu.yml), [DynamicTp](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-dynamic_tp.yml),
+ [Jetty](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-jetty.yml), [ActiveMQ](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-activemq.yml)
+- [Kubernetes](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-kubernetes.yml), [Docker](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-docker.yml)
+- [CiscoSwitch](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-cisco_switch.yml), [HpeSwitch](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-hpe_switch.yml),
+ [HuaweiSwitch](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-huawei_switch.yml), [TpLinkSwitch](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-tplink_switch.yml),
+ [H3cSwitch](https://raw.githubusercontent.com/dromara/hertzbeat/master/manager/src/main/resources/define/app-h3c_switch.yml)
+- 和更多自定义监控模版。
+- 通知支持 `Discord` `Slack` `Telegram` `邮件` `钉钉` `微信` `飞书` `短信` `Webhook`。
+
+## 🐕 快速开始
+
+- 如果您不想部署而是直接使用,我们提供SAAS监控云-[TanCloud探云](https://console.tancloud.cn),即刻 **[登录注册](https://console.tancloud.cn)** 免费使用。
+- 如果您是想将HertzBeat部署到内网环境搭建监控系统,请参考下面的部署文档进行操作。
+
+### 🍞 HertzBeat安装
+> HertzBeat支持通过源码安装启动,Docker容器运行和安装包方式安装部署,CPU架构支持X86/ARM64。
+
+##### 方式一:Docker方式快速安装
+
+1. `docker` 环境仅需一条命令即可开始
+
+```docker run -d -p 1157:1157 --name hertzbeat tancloud/hertzbeat```
+
+```或者使用 quay.io (若 dockerhub 网络链接超时)```
+
+```docker run -d -p 1157:1157 --name hertzbeat quay.io/tancloud/hertzbeat```
+
+2. 浏览器访问 `localhost:1157` 即可开始,默认账号密码 `admin/hertzbeat`
+
+更多配置详细步骤参考 [通过Docker方式安装HertzBeat](https://hertzbeat.com/docs/start/docker-deploy)
+
+##### 方式二:通过安装包安装
+1. 下载您系统环境对应的安装包 [GITEE Release](https://gitee.com/dromara/hertzbeat/releases) [GITHUB Release](https://github.com/dromara/hertzbeat/releases)
+2. 需要已安装`java11`环境
+3. 配置 HertzBeat 的配置文件 `hertzbeat/config/application.yml`(可选)
+4. 部署启动 `$ ./startup.sh ` 或 `startup.bat`
+5. 浏览器访问 `localhost:1157` 即可开始,默认账号密码 `admin/hertzbeat`
+
+更多配置详细步骤参考 [通过安装包安装HertzBeat](https://hertzbeat.com/docs/start/package-deploy)
+
+##### 方式三:本地代码启动
+1. 此为前后端分离项目,本地代码调试需要分别启动后端工程`manager`和前端工程`web-app`
+2. 后端:需要`maven3+`, `java11`和`lombok`环境,修改`YML`配置信息并启动`manager`服务
+3. 前端:需要`nodejs npm angular-cli`环境,待本地后端启动后,在`web-app`目录下启动 `ng serve --open`
+4. 浏览器访问 `localhost:4200` 即可开始,默认账号密码 `admin/hertzbeat`
+
+详细步骤参考 [参与贡献之本地代码启动](https://github.com/dromara/hertzbeat/blob/master/CONTRIBUTING.md)
+
+##### 方式四:Docker-Compose 统一安装 hertzbeat+mysql+iotdb/tdengine
+
+通过 [Docker-Compose 部署脚本](https://github.com/dromara/hertzbeat/blob/master/script/docker-compose) 一次性把 mysql 数据库, iotdb/tdengine 时序数据库和 hertzbeat 安装部署。
+
+详细步骤参考 [通过Docker-Compose安装HertzBeat](https://github.com/dromara/hertzbeat/blob/master/script/docker-compose/README.md)
+
+**HAVE FUN**
+
+## 🥐 路线图
+
+
+
+## ✨ Contributors
+
+Thanks these wonderful people, welcome to join us:
+[贡献者指南](https://github.com/dromara/hertzbeat/blob/master/CONTRIBUTING.md)
+
+
+
+
+
+
+##### QQ交流群
+
+加QQ群号 236915833 或 扫描下面的群二维码进群
+
+
+
+##### Channel
+
+[Gitter Channel](https://gitter.im/hertzbeat/community)
+
+[Github Discussion](https://github.com/dromara/hertzbeat/discussions)
+
+[User Club](https://support.qq.com/products/379369)
+
+##### 公众号与星球
+
+
+
+
+
+
+
+##### 友情链接
+
+- [DynamicTp](https://github.com/dromara/dynamic-tp) : 轻量级动态线程池,内置监控告警功能,集成三方中间件线程池管理,基于主流配置中心
+- [Hippo4j](https://github.com/opengoofy/hippo4j/) : 强大的动态线程池框架,附带监控报警功能
+- [Jpom](https://gitee.com/dromara/Jpom) : 简而轻的低侵入式在线构建、自动部署、日常运维、项目监控软件
+- [ArgusDBM](https://github.com/zmops/ArgusDBM) : 开源数据库一体化监控平台,致力于监控所有数据库
+
+##### 赞助
+- Postcat [开源 API 管理工具 ](https://datayi.cn/w/xRxVBBko) 简单可拓展,支持 API 测试、文档、Mock、团队协作等核心功能
+- 感谢 [吉实信息(构建全新的微波+光交易网络)](https://www.flarespeed.com) 赞助服务器采集节点
+- 感谢 [蓝易云(全新智慧上云)](https://www.tsyvps.com/aff/BZBEGYLX) 赞助服务器采集节点
+
+## 🛡️ License
+[`Apache License, Version 2.0`](https://www.apache.org/licenses/LICENSE-2.0.html)
\ No newline at end of file
diff --git a/apps/hertzbeat/data.yml b/apps/hertzbeat/data.yml
new file mode 100644
index 00000000..3b040251
--- /dev/null
+++ b/apps/hertzbeat/data.yml
@@ -0,0 +1,20 @@
+name: HertzBeat
+tags:
+ - 工具
+title: 一个易用友好的开源实时监控告警系统
+type: 工具
+description: 一个易用友好的开源实时监控告警系统
+additionalProperties:
+ key: hertzbeat
+ name: HertzBeat
+ tags:
+ - Tool
+ shortDescZh: 一个易用友好的开源实时监控告警系统
+ shortDescEn: An open source, real-time monitoring system with custom-monitoring
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://hertzbeat.com/
+ github: https://github.com/dromara/hertzbeat
+ document: https://hertzbeat.com/docs/
diff --git a/apps/hertzbeat/latest/.env.sample b/apps/hertzbeat/latest/.env.sample
new file mode 100644
index 00000000..abff47e7
--- /dev/null
+++ b/apps/hertzbeat/latest/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="hertzbeat"
+PANEL_APP_PORT_HTTP="40066"
+DATA_PATH="./data"
diff --git a/apps/hertzbeat/latest/data.yml b/apps/hertzbeat/latest/data.yml
new file mode 100644
index 00000000..5c89292a
--- /dev/null
+++ b/apps/hertzbeat/latest/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 40066
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
\ No newline at end of file
diff --git a/apps/hertzbeat/latest/docker-compose.yml b/apps/hertzbeat/latest/docker-compose.yml
new file mode 100644
index 00000000..5b32f7b2
--- /dev/null
+++ b/apps/hertzbeat/latest/docker-compose.yml
@@ -0,0 +1,22 @@
+version: '3'
+services:
+ hertzbeat:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ environment:
+ - TZ=Asia/Shanghai
+ - LANG=zh_CN.UTF-8
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:1157"
+ volumes:
+ - "${DATA_PATH}/data:/opt/hertzbeat/data"
+ - "${DATA_PATH}/logs:/opt/hertzbeat/logs"
+ image: tancloud/hertzbeat:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/hertzbeat/logo.png b/apps/hertzbeat/logo.png
new file mode 100644
index 00000000..3ff0aa1c
Binary files /dev/null and b/apps/hertzbeat/logo.png differ
diff --git a/apps/hexo/README.md b/apps/hexo/README.md
new file mode 100644
index 00000000..6ed5f7bc
--- /dev/null
+++ b/apps/hexo/README.md
@@ -0,0 +1,102 @@
+
+
+# Hexo
+
+> A fast, simple & powerful blog framework, powered by [Node.js](https://nodejs.org).
+
+[Website](https://hexo.io) |
+[Documentation](https://hexo.io/docs/) |
+[Installation Guide](https://hexo.io/docs/#Installation) |
+[Contribution Guide](https://hexo.io/docs/contributing) |
+[Code of Conduct](CODE_OF_CONDUCT.md) |
+[API](https://hexo.io/api/) |
+[Twitter](https://twitter.com/hexojs)
+
+[](https://www.npmjs.com/package/hexo)
+
+[](https://github.com/hexojs/hexo/actions?query=workflow%3ATester)
+[](https://libraries.io/npm/hexo)
+[](https://coveralls.io/r/hexojs/hexo?branch=master)
+[](https://gitter.im/hexojs/hexo)
+[](https://discord.gg/teM2Anj)
+[](https://t.me/hexojs)
+[](https://app.fossa.com/projects/git%2Bgithub.com%2Fhexojs%2Fhexo?ref=badge_shield)
+[](CODE_OF_CONDUCT.md)
+
+## Features
+
+- Blazing fast generating
+- Support for GitHub Flavored Markdown and most Octopress plugins
+- One-command deploy to GitHub Pages, Heroku, etc.
+- Powerful API for limitless extensibility
+- Hundreds of [themes](https://hexo.io/themes/) & [plugins](https://hexo.io/plugins/)
+
+## Quick Start
+
+**Install Hexo**
+
+``` bash
+$ npm install hexo-cli -g
+```
+
+Install with [brew](https://brew.sh/) on macOS and Linux:
+
+```bash
+$ brew install hexo
+```
+
+**Setup your blog**
+
+``` bash
+$ hexo init blog
+$ cd blog
+```
+
+**Start the server**
+
+``` bash
+$ hexo server
+```
+
+**Create a new post**
+
+``` bash
+$ hexo new "Hello Hexo"
+```
+
+**Generate static files**
+
+``` bash
+$ hexo generate
+```
+
+## More Information
+
+- Read the [documentation](https://hexo.io/)
+- Visit the [Awesome Hexo](https://github.com/hexojs/awesome-hexo) list
+- Find solutions in [troubleshooting](https://hexo.io/docs/troubleshooting.html)
+- Join discussion on [Google Group](https://groups.google.com/group/hexo), [Discord](https://discord.gg/teM2Anj), [Gitter](https://gitter.im/hexojs/hexo) or [Telegram](https://t.me/hexojs)
+- See the [plugin list](https://hexo.io/plugins/) and the [theme list](https://hexo.io/themes/) on wiki
+- Follow [@hexojs](https://twitter.com/hexojs) for latest news
+
+## Contributing
+
+We welcome you to join the development of Hexo. Please see [contributing document](https://hexo.io/docs/contributing). 🤗
+
+Also, we welcome PR or issue to [official-plugins](https://github.com/hexojs).
+
+## Contributors
+
+[](https://github.com/hexojs/hexo/graphs/contributors)
+
+## Backers
+
+[](https://opencollective.com/hexo)
+
+## Sponsors
+
+
+
+## License
+
+[](https://app.fossa.com/projects/git%2Bgithub.com%2Fhexojs%2Fhexo?ref=badge_large)
diff --git a/apps/hexo/data.yml b/apps/hexo/data.yml
new file mode 100644
index 00000000..3f5453e9
--- /dev/null
+++ b/apps/hexo/data.yml
@@ -0,0 +1,20 @@
+name: Hexo
+tags:
+ - 建站
+title: 快速、简洁且高效的博客框架
+type: 建站
+description: 快速、简洁且高效的博客框架
+additionalProperties:
+ key: hexo
+ name: Hexo
+ tags:
+ - WebSite
+ shortDescZh: 快速、简洁且高效的博客框架
+ shortDescEn: A fast, simple & powerful blog framework
+ type: website
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://hexo.io/
+ github: https://github.com/hexojs/hexo
+ document: https://hexo.io/docs/
diff --git a/apps/hexo/latest/.env.sample b/apps/hexo/latest/.env.sample
new file mode 100644
index 00000000..f6c6fa51
--- /dev/null
+++ b/apps/hexo/latest/.env.sample
@@ -0,0 +1,5 @@
+CONTAINER_NAME="hexo"
+PANEL_APP_PORT_HTTP="40064"
+DATA_PATH="./data"
+GIT_USERNAME="gituser"
+GIT_MAIL="user@email.com"
diff --git a/apps/hexo/latest/data.yml b/apps/hexo/latest/data.yml
new file mode 100644
index 00000000..8875e4fc
--- /dev/null
+++ b/apps/hexo/latest/data.yml
@@ -0,0 +1,31 @@
+additionalProperties:
+ formFields:
+ - default: 40064
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+ - default: ""
+ edit: true
+ envKey: GIT_USERNAME
+ labelEn: Git username
+ labelZh: Git 用户名
+ required: true
+ type: text
+ - default: ""
+ edit: true
+ envKey: GIT_MAIL
+ labelEn: Git Email
+ labelZh: Git 邮箱
+ required: true
+ type: text
\ No newline at end of file
diff --git a/apps/hexo/latest/docker-compose.yml b/apps/hexo/latest/docker-compose.yml
new file mode 100644
index 00000000..2bcb4199
--- /dev/null
+++ b/apps/hexo/latest/docker-compose.yml
@@ -0,0 +1,24 @@
+version: '3'
+services:
+ hexo:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:4000"
+ volumes:
+ - "${DATA_PATH}:/app"
+ environment:
+ - PUID=1000
+ - PGID=1000
+ - TZ=Asia/Shanghai
+ - GIT_USER=${GIT_USERNAME}
+ - GIT_EMAIL=${GIT_MAIL}
+ image: bloodstar/hexo:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/hexo/logo.png b/apps/hexo/logo.png
new file mode 100644
index 00000000..cc61dcec
Binary files /dev/null and b/apps/hexo/logo.png differ
diff --git a/apps/hexo/stable-23-07-01/.env.sample b/apps/hexo/stable-23-07-01/.env.sample
new file mode 100644
index 00000000..f6c6fa51
--- /dev/null
+++ b/apps/hexo/stable-23-07-01/.env.sample
@@ -0,0 +1,5 @@
+CONTAINER_NAME="hexo"
+PANEL_APP_PORT_HTTP="40064"
+DATA_PATH="./data"
+GIT_USERNAME="gituser"
+GIT_MAIL="user@email.com"
diff --git a/apps/hexo/stable-23-07-01/data.yml b/apps/hexo/stable-23-07-01/data.yml
new file mode 100644
index 00000000..8875e4fc
--- /dev/null
+++ b/apps/hexo/stable-23-07-01/data.yml
@@ -0,0 +1,31 @@
+additionalProperties:
+ formFields:
+ - default: 40064
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+ - default: ""
+ edit: true
+ envKey: GIT_USERNAME
+ labelEn: Git username
+ labelZh: Git 用户名
+ required: true
+ type: text
+ - default: ""
+ edit: true
+ envKey: GIT_MAIL
+ labelEn: Git Email
+ labelZh: Git 邮箱
+ required: true
+ type: text
\ No newline at end of file
diff --git a/apps/hexo/stable-23-07-01/docker-compose.yml b/apps/hexo/stable-23-07-01/docker-compose.yml
new file mode 100644
index 00000000..114f57de
--- /dev/null
+++ b/apps/hexo/stable-23-07-01/docker-compose.yml
@@ -0,0 +1,24 @@
+version: '3'
+services:
+ hexo:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:4000"
+ volumes:
+ - "${DATA_PATH}:/app"
+ environment:
+ - PUID=1000
+ - PGID=1000
+ - TZ=Asia/Shanghai
+ - GIT_USER=${GIT_USERNAME}
+ - GIT_EMAIL=${GIT_MAIL}
+ image: bloodstar/hexo:stable-23-07-01
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/hexo/taskbjorn-latest/.env.sample b/apps/hexo/taskbjorn-latest/.env.sample
new file mode 100644
index 00000000..f62b64af
--- /dev/null
+++ b/apps/hexo/taskbjorn-latest/.env.sample
@@ -0,0 +1,2 @@
+CONTAINER_NAME="hexo"
+PANEL_APP_PORT_HTTP="40064"
diff --git a/apps/hexo/taskbjorn-latest/data.yml b/apps/hexo/taskbjorn-latest/data.yml
new file mode 100644
index 00000000..793ab404
--- /dev/null
+++ b/apps/hexo/taskbjorn-latest/data.yml
@@ -0,0 +1,11 @@
+additionalProperties:
+ formFields:
+ - default: 40064
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+
diff --git a/apps/hexo/taskbjorn-latest/docker-compose.yml b/apps/hexo/taskbjorn-latest/docker-compose.yml
new file mode 100644
index 00000000..0f10518d
--- /dev/null
+++ b/apps/hexo/taskbjorn-latest/docker-compose.yml
@@ -0,0 +1,21 @@
+version: '3'
+services:
+ hexo:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:4000"
+ volumes:
+ - hexo_data:/home/hexo/.hexo
+ image: taskbjorn/hexo:alpine-latest
+ labels:
+ createdBy: "Apps"
+
+volumes:
+ hexo_data:
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/home-assistant/2023.8.0.dev20230723/.env.sample b/apps/home-assistant/2023.8.0.dev20230723/.env.sample
new file mode 100644
index 00000000..78ccb2f2
--- /dev/null
+++ b/apps/home-assistant/2023.8.0.dev20230723/.env.sample
@@ -0,0 +1,2 @@
+CONTAINER_NAME="homeassistant"
+DATA_PATH="./data"
diff --git a/apps/home-assistant/2023.8.0.dev20230723/data.yml b/apps/home-assistant/2023.8.0.dev20230723/data.yml
new file mode 100644
index 00000000..27964856
--- /dev/null
+++ b/apps/home-assistant/2023.8.0.dev20230723/data.yml
@@ -0,0 +1,10 @@
+additionalProperties:
+ formFields:
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+
diff --git a/apps/home-assistant/2023.8.0.dev20230723/docker-compose.yml b/apps/home-assistant/2023.8.0.dev20230723/docker-compose.yml
new file mode 100644
index 00000000..b48529cd
--- /dev/null
+++ b/apps/home-assistant/2023.8.0.dev20230723/docker-compose.yml
@@ -0,0 +1,13 @@
+version: '3'
+services:
+ homeassistant:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ network_mode: "host"
+ volumes:
+ - "${DATA_PATH}:/config"
+ environment:
+ - TZ=Asia/Shanghai
+ image: homeassistant/home-assistant:2023.8.0.dev20230723
+ labels:
+ createdBy: "Apps"
diff --git a/apps/home-assistant/README.md b/apps/home-assistant/README.md
new file mode 100644
index 00000000..1e199104
--- /dev/null
+++ b/apps/home-assistant/README.md
@@ -0,0 +1,33 @@
+# 使用说明
+
+- 默认访问地址
+```
+IP:8123
+```
+
+# 原始相关
+
+# Home Assistant [](https://www.home-assistant.io/join-chat/)
+
+Open source home automation that puts local control and privacy first.
+Powered by a worldwide community of tinkerers and DIY enthusiasts.
+Perfect to run on a Raspberry Pi or a local server.
+
+Check out [home-assistant.io](https://home-assistant.io) for [ademo](https://demo.home-assistant.io), [installation instructions](https://home-assistant.io/getting-started/),[tutorials](https://home-assistant.io/getting-started/automation/) and [documentation](https://home-assistant.io/docs/).
+
+[](https://demo.home-assistant.io)
+
+## Featured integrations
+
+[](https://home-assistant.io/integrations/)
+
+The system is built using a modular approach so support for other
+devices or actions can be implemented easily. See also the [section on
+architecture](https://developers.home-assistant.io/docs/architecture_index/)
+and the [section on creating your own
+components](https://developers.home-assistant.io/docs/creating_component_index/).
+
+If you run into issues while using Home Assistant or during development
+of a component, check the [Home Assistant help
+section](https://home-assistant.io/help/) of our website for further
+help and information.
diff --git a/apps/home-assistant/data.yml b/apps/home-assistant/data.yml
new file mode 100644
index 00000000..4291bdcf
--- /dev/null
+++ b/apps/home-assistant/data.yml
@@ -0,0 +1,20 @@
+name: Home Assistant
+tags:
+ - 工具
+title: 开源家庭自动化,将本地控制和隐私放在首位。
+type: 工具
+description: 开源家庭自动化,将本地控制和隐私放在首位。
+additionalProperties:
+ key: home-assistant
+ name: Home Assistant
+ tags:
+ - Tool
+ shortDescZh: 开源家庭自动化,将本地控制和隐私放在首位。
+ shortDescEn: Open source home automation that puts local control and privacy first.
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://www.home-assistant.io/
+ github: https://github.com/home-assistant/core
+ document: https://www.home-assistant.io/docs/
diff --git a/apps/home-assistant/latest/.env.sample b/apps/home-assistant/latest/.env.sample
new file mode 100644
index 00000000..78ccb2f2
--- /dev/null
+++ b/apps/home-assistant/latest/.env.sample
@@ -0,0 +1,2 @@
+CONTAINER_NAME="homeassistant"
+DATA_PATH="./data"
diff --git a/apps/home-assistant/latest/data.yml b/apps/home-assistant/latest/data.yml
new file mode 100644
index 00000000..27964856
--- /dev/null
+++ b/apps/home-assistant/latest/data.yml
@@ -0,0 +1,10 @@
+additionalProperties:
+ formFields:
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+
diff --git a/apps/home-assistant/latest/docker-compose.yml b/apps/home-assistant/latest/docker-compose.yml
new file mode 100644
index 00000000..5f2a01ea
--- /dev/null
+++ b/apps/home-assistant/latest/docker-compose.yml
@@ -0,0 +1,13 @@
+version: '3'
+services:
+ homeassistant:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ network_mode: "host"
+ volumes:
+ - "${DATA_PATH}:/config"
+ environment:
+ - TZ=Asia/Shanghai
+ image: homeassistant/home-assistant:latest
+ labels:
+ createdBy: "Apps"
diff --git a/apps/home-assistant/logo.png b/apps/home-assistant/logo.png
new file mode 100644
index 00000000..c6224471
Binary files /dev/null and b/apps/home-assistant/logo.png differ
diff --git a/apps/it-tools/2023.5.14-77f2efc/.env.sample b/apps/it-tools/2023.5.14-77f2efc/.env.sample
new file mode 100644
index 00000000..42ad887c
--- /dev/null
+++ b/apps/it-tools/2023.5.14-77f2efc/.env.sample
@@ -0,0 +1,2 @@
+CONTAINER_NAME="it-tools"
+PANEL_APP_PORT_HTTP="40116"
diff --git a/apps/it-tools/2023.5.14-77f2efc/data.yml b/apps/it-tools/2023.5.14-77f2efc/data.yml
new file mode 100644
index 00000000..3d4bb50e
--- /dev/null
+++ b/apps/it-tools/2023.5.14-77f2efc/data.yml
@@ -0,0 +1,10 @@
+additionalProperties:
+ formFields:
+ - default: 40116
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
diff --git a/apps/it-tools/2023.5.14-77f2efc/docker-compose.yml b/apps/it-tools/2023.5.14-77f2efc/docker-compose.yml
new file mode 100644
index 00000000..ed79a50e
--- /dev/null
+++ b/apps/it-tools/2023.5.14-77f2efc/docker-compose.yml
@@ -0,0 +1,16 @@
+version: '3'
+services:
+ it-tools:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ image: corentinth/it-tools:2023.5.14-77f2efc
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/it-tools/README.md b/apps/it-tools/README.md
new file mode 100644
index 00000000..828f8309
--- /dev/null
+++ b/apps/it-tools/README.md
@@ -0,0 +1,120 @@
+
+
+Useful tools for developer and people working in IT. [Have a look !](https://it-tools.tech).
+
+## Functionalities and roadmap
+
+Please check the [issues](https://github.com/CorentinTh/it-tools/issues) to see if some feature listed to be implemented.
+
+You have an idea of a tool? Submit a [feature request](https://github.com/CorentinTh/it-tools/issues/new/choose)!
+
+## Self host
+
+Self host solutions for your homelab
+
+**From docker hub:**
+
+```sh
+docker run -d --name it-tools --restart unless-stopped -p 8080:80 corentinth/it-tools:latest
+```
+
+**From github packages:**
+
+```sh
+docker run -d --name it-tools --restart unless-stopped -p 8080:80 ghcr.io/corentinth/it-tools:latest
+```
+
+**Other solutions:**
+
+- [Tipi](https://www.runtipi.io/docs/apps-available)
+- [Unraid](https://unraid.net/community/apps?q=it-tools)
+
+## Contribute
+
+### Recommended IDE Setup
+
+[VSCode](https://code.visualstudio.com/) with the following extensions:
+- [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur)
+- [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
+- [ESLint](https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint)
+- [i18n Ally](https://marketplace.visualstudio.com/items?itemName=lokalise.i18n-ally)
+
+with the following settings:
+
+```json5
+{
+ "editor.formatOnSave": false,
+ "editor.codeActionsOnSave": {
+ "source.fixAll.eslint": true
+ },
+ "i18n-ally.localesPaths": [
+ "locales",
+ "src/tools/*/locales"
+ ],
+ "i18n-ally.keystyle": "nested"
+}
+```
+
+### Type Support for `.vue` Imports in TS
+
+TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types.
+
+If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps:
+
+1. Disable the built-in TypeScript Extension
+ 1. Run `Extensions: Show Built-in Extensions` from VSCode's command palette
+ 2. Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`
+2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.
+
+### Project Setup
+
+```sh
+pnpm install
+```
+
+### Compile and Hot-Reload for Development
+
+```sh
+pnpm dev
+```
+
+### Type-Check, Compile and Minify for Production
+
+```sh
+pnpm build
+```
+
+### Run Unit Tests with [Vitest](https://vitest.dev/)
+
+```sh
+pnpm test
+```
+
+### Lint with [ESLint](https://eslint.org/)
+
+```sh
+pnpm lint
+```
+
+### Create a new tool
+
+To create a new tool, there is a script that generate the boilerplate of the new tool, simply run:
+
+```sh
+pnpm run script:create-new-tool my-tool-name
+```
+
+It will create a directory in `src/tools` with the correct files, and a the import in `src/tools/index.ts`. You will just need to add the imported tool in the proper category and develop the tool.
+
+## Credits
+
+Coded with ❤️ by [Corentin Thomasset](https://corentin-thomasset.fr/).
+
+This project is continuously deployed using [vercel.com](https://vercel.com).
+
+
+
+
+## License
+
+This project is under the [GNU GPLv3](https://github.com/CorentinTh/it-tools/blob/main/LICENSE).
diff --git a/apps/it-tools/data.yml b/apps/it-tools/data.yml
new file mode 100644
index 00000000..36f8b73d
--- /dev/null
+++ b/apps/it-tools/data.yml
@@ -0,0 +1,20 @@
+name: IT-Tools
+tags:
+ - 工具
+title: 为开发人员提供方便的在线工具集合,具有出色的用户体验
+type: 工具
+description: 为开发人员提供方便的在线工具集合,具有出色的用户体验
+additionalProperties:
+ key: it-tools
+ name: IT-Tools
+ tags:
+ - Tool
+ shortDescZh: 为开发人员提供方便的在线工具集合,具有出色的用户体验
+ shortDescEn: Collection of handy online tools for developers, with great UX
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://it-tools.tech
+ github: https://github.com/CorentinTh/it-tools
+ document: https://github.com/CorentinTh/it-tools
diff --git a/apps/it-tools/latest/.env.sample b/apps/it-tools/latest/.env.sample
new file mode 100644
index 00000000..42ad887c
--- /dev/null
+++ b/apps/it-tools/latest/.env.sample
@@ -0,0 +1,2 @@
+CONTAINER_NAME="it-tools"
+PANEL_APP_PORT_HTTP="40116"
diff --git a/apps/it-tools/latest/data.yml b/apps/it-tools/latest/data.yml
new file mode 100644
index 00000000..3d4bb50e
--- /dev/null
+++ b/apps/it-tools/latest/data.yml
@@ -0,0 +1,10 @@
+additionalProperties:
+ formFields:
+ - default: 40116
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
diff --git a/apps/it-tools/latest/docker-compose.yml b/apps/it-tools/latest/docker-compose.yml
new file mode 100644
index 00000000..915899e4
--- /dev/null
+++ b/apps/it-tools/latest/docker-compose.yml
@@ -0,0 +1,16 @@
+version: '3'
+services:
+ it-tools:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ image: corentinth/it-tools:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/it-tools/logo.png b/apps/it-tools/logo.png
new file mode 100644
index 00000000..7ac104d0
Binary files /dev/null and b/apps/it-tools/logo.png differ
diff --git a/apps/jellyfin/10.8.12/.env.sample b/apps/jellyfin/10.8.12/.env.sample
new file mode 100644
index 00000000..7bc696a4
--- /dev/null
+++ b/apps/jellyfin/10.8.12/.env.sample
@@ -0,0 +1,4 @@
+CONTAINER_NAME=jellyfin
+PANEL_APP_PORT_HTTP=8096
+CACHE_FOLDER_PATH="./data/media"
+MEDIA_FOLDER_PATH="./data/cache"
\ No newline at end of file
diff --git a/apps/jellyfin/10.8.12/data.yml b/apps/jellyfin/10.8.12/data.yml
new file mode 100644
index 00000000..1c50ece1
--- /dev/null
+++ b/apps/jellyfin/10.8.12/data.yml
@@ -0,0 +1,24 @@
+additionalProperties:
+ formFields:
+ - default: 8096
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: WebUI Port
+ labelZh: 网页端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data/media
+ edit: true
+ envKey: MEDIA_FOLDER_PATH
+ labelEn: Media folder path
+ labelZh: 媒体文件夹路径
+ required: true
+ type: text
+ - default: ./data/cache
+ edit: true
+ envKey: CACHE_FOLDER_PATH
+ labelEn: Cache folder path
+ labelZh: 缓存文件夹路径
+ required: true
+ type: text
diff --git a/apps/jellyfin/10.8.12/docker-compose.yml b/apps/jellyfin/10.8.12/docker-compose.yml
new file mode 100644
index 00000000..5f9f71a6
--- /dev/null
+++ b/apps/jellyfin/10.8.12/docker-compose.yml
@@ -0,0 +1,23 @@
+version: "3"
+services:
+ jellyfin:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8096"
+ volumes:
+ - "./data/config:/config"
+ - "${CACHE_FOLDER_PATH}:/cache"
+ - "${MEDIA_FOLDER_PATH}:/media/media"
+ devices:
+ - /dev/dri:/dev/dri # VAAPI/NVDEC/NVENC render nodes
+ #- /dev/vchiq:/dev/vchiq # MMAL/OMX on Raspberry Pi
+ image: "jellyfin/jellyfin:10.8.12"
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
\ No newline at end of file
diff --git a/apps/jellyfin/README.md b/apps/jellyfin/README.md
new file mode 100644
index 00000000..2362741b
--- /dev/null
+++ b/apps/jellyfin/README.md
@@ -0,0 +1,176 @@
+
Jellyfin
+The Free Software Media System
+
+---
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Check out our downloads page or our installation guide, then see our quick start guide. You can also build from source.
+
+Something not working right?
+Open an Issue on GitHub.
+
+Want to contribute?
+Check out our contributing choose-your-own-adventure to see where you can help, then see our contributing guide and our community standards.
+
+New idea or improvement?
+Check out our feature request hub.
+
+Don't see Jellyfin in your language?
+Check out our Weblate instance to help translate Jellyfin and its subprojects.
+
+
+
+
+
+---
+
+## Jellyfin Server
+
+This repository contains the code for Jellyfin's backend server. Note that this is only one of many projects under the Jellyfin GitHub [organization](https://github.com/jellyfin/) on GitHub. If you want to contribute, you can start by checking out our [documentation](https://jellyfin.org/docs/general/contributing/index.html) to see what to work on.
+
+## Server Development
+
+These instructions will help you get set up with a local development environment in order to contribute to this repository. Before you start, please be sure to completely read our [guidelines on development contributions](https://jellyfin.org/docs/general/contributing/development.html). Note that this project is supported on all major operating systems except FreeBSD, which is still incompatible.
+
+### Prerequisites
+
+Before the project can be built, you must first install the [.NET 7.0 SDK](https://dotnet.microsoft.com/download/dotnet) on your system.
+
+Instructions to run this project from the command line are included here, but you will also need to install an IDE if you want to debug the server while it is running. Any IDE that supports .NET 6 development will work, but two options are recent versions of [Visual Studio](https://visualstudio.microsoft.com/downloads/) (at least 2022) and [Visual Studio Code](https://code.visualstudio.com/Download).
+
+[ffmpeg](https://github.com/jellyfin/jellyfin-ffmpeg) will also need to be installed.
+
+### Cloning the Repository
+
+After dependencies are installed you will need to clone a local copy of this repository. If you just want to run the server from source you can clone this repository directly, but if you are intending to contribute code changes to the project, you should [set up your own fork](https://jellyfin.org/docs/general/contributing/development.html#set-up-your-copy-of-the-repo) of the repository. The following example shows how you can clone the repository directly over HTTPS.
+
+```bash
+git clone https://github.com/jellyfin/jellyfin.git
+```
+
+### Installing the Web Client
+
+The server is configured to host the static files required for the [web client](https://github.com/jellyfin/jellyfin-web) in addition to serving the backend by default. Before you can run the server, you will need to get a copy of the web client since they are not included in this repository directly.
+
+Note that it is also possible to [host the web client separately](#hosting-the-web-client-separately) from the web server with some additional configuration, in which case you can skip this step.
+
+There are three options to get the files for the web client.
+
+1. Download one of the finished builds from the [Azure DevOps pipeline](https://dev.azure.com/jellyfin-project/jellyfin/_build?definitionId=27). You can download the build for a specific release by looking at the [branches tab](https://dev.azure.com/jellyfin-project/jellyfin/_build?definitionId=27&_a=summary&repositoryFilter=6&view=branches) of the pipelines page.
+2. Build them from source following the instructions on the [jellyfin-web repository](https://github.com/jellyfin/jellyfin-web)
+3. Get the pre-built files from an existing installation of the server. For example, with a Windows server installation the client files are located at `C:\Program Files\Jellyfin\Server\jellyfin-web`
+
+### Running The Server
+
+The following instructions will help you get the project up and running via the command line, or your preferred IDE.
+
+#### Running With Visual Studio
+
+To run the project with Visual Studio you can open the Solution (`.sln`) file and then press `F5` to run the server.
+
+#### Running With Visual Studio Code
+
+To run the project with Visual Studio Code you will first need to open the repository directory with Visual Studio Code using the `Open Folder...` option.
+
+Second, you need to [install the recommended extensions for the workspace](https://code.visualstudio.com/docs/editor/extension-gallery#_recommended-extensions). Note that extension recommendations are classified as either "Workspace Recommendations" or "Other Recommendations", but only the "Workspace Recommendations" are required.
+
+After the required extensions are installed, you can run the server by pressing `F5`.
+
+#### Running From The Command Line
+
+To run the server from the command line you can use the `dotnet run` command. The example below shows how to do this if you have cloned the repository into a directory named `jellyfin` (the default directory name) and should work on all operating systems.
+
+```bash
+cd jellyfin # Move into the repository directory
+dotnet run --project Jellyfin.Server --webdir /absolute/path/to/jellyfin-web/dist # Run the server startup project
+```
+
+A second option is to build the project and then run the resulting executable file directly. When running the executable directly you can easily add command line options. Add the `--help` flag to list details on all the supported command line options.
+
+1. Build the project
+
+```bash
+dotnet build # Build the project
+cd Jellyfin.Server/bin/Debug/net7.0 # Change into the build output directory
+```
+
+2. Execute the build output. On Linux, Mac, etc. use `./jellyfin` and on Windows use `jellyfin.exe`.
+
+### Running The Tests
+
+This repository also includes unit tests that are used to validate functionality as part of a CI pipeline on Azure. There are several ways to run these tests.
+
+1. Run tests from the command line using `dotnet test`
+2. Run tests in Visual Studio using the [Test Explorer](https://docs.microsoft.com/en-us/visualstudio/test/run-unit-tests-with-test-explorer)
+3. Run individual tests in Visual Studio Code using the associated [CodeLens annotation](https://github.com/OmniSharp/omnisharp-vscode/wiki/How-to-run-and-debug-unit-tests)
+
+### Advanced Configuration
+
+The following sections describe some more advanced scenarios for running the server from source that build upon the standard instructions above.
+
+#### Hosting The Web Client Separately
+
+It is not necessary to host the frontend web client as part of the backend server. Hosting these two components separately may be useful for frontend developers who would prefer to host the client in a separate webpack development server for a tighter development loop. See the [jellyfin-web](https://github.com/jellyfin/jellyfin-web#getting-started) repo for instructions on how to do this.
+
+To instruct the server not to host the web content, there is a `nowebclient` configuration flag that must be set. This can specified using the command line
+switch `--nowebclient` or the environment variable `JELLYFIN_NOWEBCONTENT=true`.
+
+Since this is a common scenario, there is also a separate launch profile defined for Visual Studio called `Jellyfin.Server (nowebcontent)` that can be selected from the 'Start Debugging' dropdown in the main toolbar.
+
+**NOTE:** The setup wizard can not be run if the web client is hosted separately.
+
+---
+
+
+
+
+
+
**Joplin** is a free, open source note taking and to-do application, which can handle a large number of notes organised into notebooks. The notes are searchable, can be copied, tagged and modified either from the applications directly or from your own text editor. The notes are in [Markdown format](#markdown).
+
+Notes exported from Evernote [can be imported](#importing) into Joplin, including the formatted content (which is converted to Markdown), resources (images, attachments, etc.) and complete metadata (geolocation, updated time, created time, etc.). Plain Markdown files can also be imported.
+
+The notes can be securely [synchronised](#synchronisation) using [end-to-end encryption](#encryption) with various cloud services including Nextcloud, Dropbox, OneDrive and [Joplin Cloud](https://joplinapp.org/plans/).
+
+Full text search is available on all platforms to quickly find the information you need. The app can be customised using plugins and themes, and you can also easily create your own.
+
+The application is available for Windows, Linux, macOS, Android and iOS. A [Web Clipper](https://github.com/laurent22/joplin/blob/dev/readme/clipper.md), to save web pages and screenshots from your browser, is also available for [Firefox](https://addons.mozilla.org/firefox/addon/joplin-web-clipper/) and [Chrome](https://chrome.google.com/webstore/detail/joplin-web-clipper/alofnhikmmkdbbbgpnglcpdollgjjfek?hl=en-GB).
+
+
+macOS |
+Linux |
+
+**On Windows**, you may also use the Portable version. The [portable application](https://en.wikipedia.org/wiki/Portable_application) allows installing the software on a portable device such as a USB key. Simply copy the file JoplinPortable.exe in any directory on that USB key ; the application will then create a directory called "JoplinProfile" next to the executable file.
+
+**On Linux**, the recommended way is to use the following installation script as it will handle the desktop icon too:
+
+
+
+The install and update script supports the [following flags](https://github.com/laurent22/joplin/blob/dev/Joplin_install_and_update.sh#L50) (around line 50 at the time of this writing).
+
+## Mobile applications
+
+Operating System | Download | Alt. Download
+---|---|---
+Android | wget -O - https://raw.githubusercontent.com/laurent22/joplin/dev/Joplin_install_and_update.sh | bash
| or download the [APK file](https://objects.joplinusercontent.com/v2.11.31/joplin-v2.11.31.apk?source=JoplinWebsite&type=New)
+iOS |
| -
+
+## Terminal application
+
+Operating system | Method
+-----------------|----------------
+macOS, Linux, or Windows (via [WSL](https://msdn.microsoft.com/en-us/commandline/wsl/faq?f=255&MSPPError=-2147217396)) | **Important:** First, [install Node 12+](https://nodejs.org/en/download/package-manager/).
`NPM_CONFIG_PREFIX=~/.joplin-bin npm install -g joplin`
`sudo ln -s ~/.joplin-bin/bin/joplin /usr/bin/joplin`
By default, the application binary will be installed under `~/.joplin-bin`. You may change this directory if needed. Alternatively, if your npm permissions are setup as described [here](https://docs.npmjs.com/getting-started/fixing-npm-permissions#option-2-change-npms-default-directory-to-another-directory) (Option 2) then simply running `npm -g install joplin` would work.
+
+To start it, type `joplin`.
+
+For usage information, please refer to the full [Joplin Terminal Application Documentation](https://joplinapp.org/terminal/).
+
+## Web Clipper
+
+The Web Clipper is a browser extension that allows you to save web pages and screenshots from your browser. For more information on how to install and use it, see the [Web Clipper Help Page](https://github.com/laurent22/joplin/blob/dev/readme/clipper.md).
+
+## Unofficial Alternative Distributions
+
+There are a number of unofficial alternative Joplin distributions. If you do not want to or cannot use appimages or any of the other officially supported releases then you may wish to consider these.
+
+However these come with a caveat in that they are not officially supported so certain issues may not be supportable by the main project. Rather support requests, bug reports and general advice would need to go to the maintainers of these distributions.
+
+A community maintained list of these distributions can be found here: [Unofficial Joplin distributions](https://discourse.joplinapp.org/t/unofficial-alternative-joplin-distributions/23703)
+
+# Sponsors
+
+
+
+
+
+* * *
+
+
+| | | | |
+| :---: | :---: | :---: | :---: |
+|
[avanderberg](https://github.com/avanderberg) |
[chr15m](https://github.com/chr15m) |
[CyberXZT](https://github.com/CyberXZT) |
[dbrandonjohnson](https://github.com/dbrandonjohnson) |
+|
[dchecks](https://github.com/dchecks) |
[fats](https://github.com/fats) |
[fourstepper](https://github.com/fourstepper) |
[Hegghammer](https://github.com/Hegghammer) |
+|
[iamwillbar](https://github.com/iamwillbar) |
[jknowles](https://github.com/jknowles) |
[KentBrockman](https://github.com/KentBrockman) |
[kianenigma](https://github.com/kianenigma) |
+|
[konishi-t](https://github.com/konishi-t) |
[marcdw1289](https://github.com/marcdw1289) |
[matmoly](https://github.com/matmoly) |
[maxtruxa](https://github.com/maxtruxa) |
+|
[mcejp](https://github.com/mcejp) |
[saarantras](https://github.com/saarantras) |
[sif](https://github.com/sif) |
[taskcruncher](https://github.com/taskcruncher) |
+|
[tateisu](https://github.com/tateisu) | | | |
+
+
+
+# Table of contents
+
+- Applications
+
+ - [Desktop application](https://github.com/laurent22/joplin/blob/dev/readme/desktop.md)
+ - [Mobile applications](https://github.com/laurent22/joplin/blob/dev/readme/mobile.md)
+ - [Terminal application](https://github.com/laurent22/joplin/blob/dev/readme/terminal.md)
+ - [Web Clipper](https://github.com/laurent22/joplin/blob/dev/readme/clipper.md)
+
+- Support
+
+ - [Joplin Forum](https://discourse.joplinapp.org)
+ - [Markdown Guide](https://github.com/laurent22/joplin/blob/dev/readme/markdown.md)
+ - [How to enable end-to-end encryption](https://github.com/laurent22/joplin/blob/dev/readme/e2ee.md)
+ - [What is a conflict?](https://github.com/laurent22/joplin/blob/dev/readme/conflict.md)
+ - [How to enable debug mode](https://github.com/laurent22/joplin/blob/dev/readme/debugging.md)
+ - [About the Rich Text editor limitations](https://github.com/laurent22/joplin/blob/dev/readme/rich_text_editor.md)
+ - [External links](https://github.com/laurent22/joplin/blob/dev/readme/external_links.md)
+ - [FAQ](https://github.com/laurent22/joplin/blob/dev/readme/faq.md)
+
+- Joplin Cloud
+
+ - [Sharing a notebook](https://github.com/laurent22/joplin/blob/dev/readme/share_notebook.md)
+ - [Publishing a note](https://github.com/laurent22/joplin/blob/dev/readme/publish_note.md)
+ - [Email to Note](https://github.com/laurent22/joplin/blob/dev/readme/email_to_note.md)
+
+- Joplin API - Get Started
+
+ - [Joplin API Overview](https://github.com/laurent22/joplin/blob/dev/readme/api/overview.md)
+ - [Plugin development](https://github.com/laurent22/joplin/blob/dev/readme/api/get_started/plugins.md)
+ - [Plugin tutorial](https://github.com/laurent22/joplin/blob/dev/readme/api/tutorials/toc_plugin.md)
+
+
+- Joplin API - References
+
+ - [Plugin API](https://joplinapp.org/api/references/plugin_api/classes/joplin.html)
+ - [Data API](https://github.com/laurent22/joplin/blob/dev/readme/api/references/rest_api.md)
+ - [Plugin manifest](https://github.com/laurent22/joplin/blob/dev/readme/api/references/plugin_manifest.md)
+ - [Plugin loading rules](https://github.com/laurent22/joplin/blob/dev/readme/api/references/plugin_loading_rules.md)
+ - [Plugin theming](https://github.com/laurent22/joplin/blob/dev/readme/api/references/plugin_theming.md)
+
+- Development
+
+ - [How to build the apps](https://github.com/laurent22/joplin/blob/dev/BUILD.md)
+ - [Writing a technical spec](https://github.com/laurent22/joplin/blob/dev/readme/technical_spec.md)
+ - [Desktop application styling](https://github.com/laurent22/joplin/blob/dev/readme/spec/desktop_styling.md)
+ - [Note history spec](https://github.com/laurent22/joplin/blob/dev/readme/spec/history.md)
+ - [Synchronisation spec](https://github.com/laurent22/joplin/blob/dev/readme/spec/sync.md)
+ - [Sync Lock spec](https://github.com/laurent22/joplin/blob/dev/readme/spec/sync_lock.md)
+ - [Synchronous Scroll spec](https://github.com/laurent22/joplin/blob/dev/readme/spec/sync_scroll.md)
+ - [Overall Architecture spec](https://github.com/laurent22/joplin/blob/dev/readme/spec/architecture.md)
+ - [Plugin Architecture spec](https://github.com/laurent22/joplin/blob/dev/readme/spec/plugins.md)
+ - [Search Sorting spec](https://github.com/laurent22/joplin/blob/dev/readme/spec/search_sorting.md)
+ - [E2EE: Technical spec](https://github.com/laurent22/joplin/blob/dev/readme/spec/e2ee.md)
+ - [E2EE: Workflow](https://github.com/laurent22/joplin/blob/dev/readme/spec/e2ee/workflow.md)
+ - [Server: File URL Format](https://github.com/laurent22/joplin/blob/dev/readme/spec/server_file_url_format.md)
+ - [Server: Delta Sync](https://github.com/laurent22/joplin/blob/dev/readme/spec/server_delta_sync.md)
+ - [Server: Sharing](https://github.com/laurent22/joplin/blob/dev/readme/spec/server_sharing.md)
+ - [Read-only items](https://github.com/laurent22/joplin/blob/dev/readme/spec/read_only.md)
+
+- Google Summer of Code 2022
+
+ - [Google Summer of Code 2022](https://github.com/laurent22/joplin/blob/dev/readme/gsoc2022/index.md)
+ - [How to submit a GSoC pull request](https://github.com/laurent22/joplin/blob/dev/readme/gsoc2022/pull_request_guidelines.md)
+ - [Project Ideas](https://github.com/laurent22/joplin/blob/dev/readme/gsoc2022/ideas.md)
+
+- About
+
+ - [Changelog (Desktop App)](https://github.com/laurent22/joplin/blob/dev/readme/changelog.md)
+ - [Changelog (Android)](https://github.com/laurent22/joplin/blob/dev/readme/changelog_android.md)
+ - [Changelog (iOS)](https://github.com/laurent22/joplin/blob/dev/readme/changelog_ios.md)
+ - [Changelog (CLI App)](https://github.com/laurent22/joplin/blob/dev/readme/changelog_cli.md)
+ - [Changelog (Server)](https://github.com/laurent22/joplin/blob/dev/readme/changelog_server.md)
+ - [Guiding principles](https://github.com/laurent22/joplin/blob/dev/readme/principles.md)
+ - [Stats](https://github.com/laurent22/joplin/blob/dev/readme/stats.md)
+ - [Brand guidelines](https://joplinapp.org/brand)
+ - [Donate](https://github.com/laurent22/joplin/blob/dev/readme/donate.md)
+
+
+# Features
+
+- Desktop, mobile and terminal applications.
+- [Web Clipper](https://github.com/laurent22/joplin/blob/dev/readme/clipper.md) for Firefox and Chrome.
+- End To End Encryption (E2EE).
+- Note history (revisions).
+- Synchronisation with various services, including Nextcloud, Dropbox, WebDAV and OneDrive.
+- Offline first, so the entire data is always available on the device even without an internet connection.
+- Import Enex files (Evernote export format) and Markdown files.
+- Export JEX files (Joplin Export format) and raw files.
+- Support notes, to-dos, tags and notebooks.
+- Sort notes by multiple criteria - title, updated time, etc.
+- Support for alarms (notifications) in mobile and desktop applications.
+- Markdown notes, which are rendered with images and formatting in the desktop and mobile applications. Support for extra features such as math notation and checkboxes.
+- Choice of both Markdown and Rich Text (WYSIWYG) editors.
+- File attachment support - images are displayed, other files are linked and can be opened in the relevant application.
+- Inline display of PDF, video and audio files.
+- Goto Anything feature.
+- Search functionality.
+- Geo-location support.
+- Supports multiple languages.
+- External editor support - open notes in your favorite external editor with one click in Joplin.
+- Extensible functionality through plugin and data APIs.
+- Custom CSS support for customisation of both the rendered markdown and overall user interface.
+- Customisable layout allows toggling, movement and sizing of various elements.
+- Keyboard shortcuts are editable and allow binding of most Joplin commands with export/import functionality.
+- Multiple profile support.
+
+# Importing
+
+## Importing from Evernote
+
+Joplin was designed as a replacement for Evernote and so can import complete Evernote notebooks, as well as notes, tags, resources (attached files) and note metadata (such as author, geo-location, etc.) via ENEX files. In terms of data, the only two things that might slightly differ are:
+
+- Recognition data - Evernote images, in particular scanned (or photographed) documents have [recognition data](https://en.wikipedia.org/wiki/Optical_character_recognition) associated with them. It is the text that Evernote has been able to recognise in the document. This data is not preserved when the note are imported into Joplin. However, should it become supported in the search tool or other parts of Joplin, it should be possible to regenerate this recognition data since the actual image would still be available.
+
+- Colour, font sizes and faces - Evernote text is stored as HTML and this is converted to Markdown during the import process. For notes that are mostly plain text or with basic formatting (bold, italic, bullet points, links, etc.) this is a lossless conversion, and the note, once rendered back to HTML should be very similar. Tables are also imported and converted to Markdown tables. For very complex notes, some formatting data might be lost - in particular colours, font sizes and font faces will not be imported. The text itself however is always imported in full regardless of formatting. If it is essential that this extra data is preserved then Joplin also allows import of ENEX files as HTML.
+
+To import Evernote data, first export your Evernote notebooks to ENEX files as described [here](https://help.evernote.com/hc/en-us/articles/209005557-How-to-back-up-export-and-restore-import-notes-and-notebooks). Then follow these steps:
+
+In the **desktop application**, open File > Import > ENEX and select your file. The notes will be imported into a new separate notebook. If needed they can then be moved to a different notebook, or the notebook can be renamed, etc.
+
+In the **terminal application**, in [command-line mode](https://github.com/laurent22/joplin/blob/dev/readme/terminal.md#command-line-mode), type `import /path/to/file.enex`. This will import the notes into a new notebook named after the filename.
+
+## Importing from Markdown files
+
+Joplin can import notes from plain Markdown file. You can either import a complete directory of Markdown files or individual files.
+
+In the **desktop application**:
+* **File import**: Go to File > Import > MD - Markdown (file) and select the Markdown file. This file will then be imported to the currently selected Notebook.
+* **Directory import**: Go to File > Import > MD - Markdown (directory) and select the top level of the directory that is being imported. Directory (folder) structure will be preserved in the Notebook > Subnotebook > Note structure within Joplin.
+
+In the **terminal application**, in [command-line mode](https://github.com/laurent22/joplin/blob/dev/readme/terminal.md#command-line-mode), type `import --format md /path/to/file.md` or `import --format md /path/to/directory/`.
+
+## Importing from other applications
+
+In general the way to import notes from any application into Joplin is to convert the notes to ENEX files (Evernote format) and to import these ENEX files into Joplin using the method above. Most note-taking applications support ENEX files so it should be relatively straightforward. For help about specific applications, see below:
+
+* Standard Notes: Please see [this tutorial](https://programadorwebvalencia.com/migrate-notes-from-standard-notes-to-joplin/)
+* Tomboy Notes: Export the notes to ENEX files [as described here](https://askubuntu.com/questions/243691/how-can-i-export-my-tomboy-notes-into-evernote/608551) for example, and import these ENEX files into Joplin.
+* OneNote: First [import the notes from OneNote into Evernote](https://discussion.evernote.com/topic/107736-is-there-a-way-to-import-from-onenote-into-evernote-on-the-mac/). Then export the ENEX file from Evernote and import it into Joplin.
+* NixNote: Synchronise with Evernote, then export the ENEX files and import them into Joplin. More info [in this thread](https://discourse.joplinapp.org/t/import-from-nixnote/183/3).
+
+# Exporting
+
+Joplin can export to the JEX format (Joplin Export file), which is a tar file that can contain multiple notes, notebooks, etc. This is a lossless format in that all the notes, but also metadata such as geo-location, updated time, tags, etc. are preserved. This format is convenient for backup purposes and can be re-imported into Joplin. A "raw" format is also available. This is the same as the JEX format except that the data is saved to a directory and each item represented by a single file.
+Joplin is also capable of exporting to a number of other formats including HTML and PDF which can be done for single notes, notebooks or everything.
+
+# Synchronisation
+
+One of the goals of Joplin is to avoid being tied to any particular company or service, whether it is Evernote, Google or Microsoft. As such the synchronisation is designed without any hard dependency to any particular service. Most of the synchronisation process is done at an abstract level and access to external services, such as Nextcloud or Dropbox, is done via lightweight drivers. It is easy to support new services by creating simple drivers that provide a filesystem-like interface, i.e. the ability to read, write, delete and list items. It is also simple to switch from one service to another or to even sync to multiple services at once. Each note, notebook, tags, as well as the relation between items is transmitted as plain text files during synchronisation, which means the data can also be moved to a different application, can be easily backed up, inspected, etc.
+
+Currently, synchronisation is possible with Nextcloud, WebDAV, Dropbox, OneDrive or the local filesystem. To enable synchronisation please follow the instructions below. After that, the application will synchronise in the background whenever it is running, or you can click on "Synchronise" to start a synchronisation manually. Joplin will background sync automatically after any content change is made on the local application.
+
+If the **terminal client** has been installed, it is possible to also synchronise outside of the user interface by typing `joplin sync` from the terminal. This can be used to setup a cron script to synchronise at a regular interval. For example, this would do it every 30 minutes:
+
+` */30 * * * * /path/to/joplin sync`
+
+## Nextcloud synchronisation
+
+
Nextcloud is a self-hosted, private cloud solution. It can store documents, images and videos but also calendars, passwords and countless other things and can sync them to your laptop or phone. As you can host your own Nextcloud server, you own both the data on your device and infrastructure used for synchronisation. As such it is a good fit for Joplin. The platform is also well supported and with a strong community, so it is likely to be around for a while - since it's open source anyway, it is not a service that can be closed, it can exist on a server for as long as one chooses.
+
+In the **desktop application** or **mobile application**, go to the [Configuration screen](https://github.com/laurent22/joplin/blob/dev/readme/config_screen.md) and select Nextcloud as the synchronisation target. Then input the WebDAV URL (to get it, click on Settings in the bottom left corner of the page, in Nextcloud), this is normally `https://example.com/nextcloud/remote.php/webdav/Joplin` (**make sure to create the "Joplin" directory in Nextcloud**), and set the username and password. If it does not work, please [see this explanation](https://github.com/laurent22/joplin/issues/61#issuecomment-373282608) for more details.
+
+In the **terminal application**, you will need to set the `sync.target` config variable and all the `sync.5.path`, `sync.5.username` and `sync.5.password` config variables to, respectively the Nextcloud WebDAV URL, your username and your password. This can be done from the command line mode using:
+
+ :config sync.5.path https://example.com/nextcloud/remote.php/webdav/Joplin
+ :config sync.5.username YOUR_USERNAME
+ :config sync.5.password YOUR_PASSWORD
+ :config sync.target 5
+
+If synchronisation does not work, please consult the logs in the app profile directory - it is often due to a misconfigured URL or password. The log should indicate what the exact issue is.
+
+## WebDAV synchronisation
+
+Select the "WebDAV" synchronisation target and follow the same instructions as for Nextcloud above (for the **terminal application** you will need to select sync target 6 rather than 5)
+
+WebDAV-compatible services that are known to work with Joplin:
+
+- [Apache WebDAV Module](https://httpd.apache.org/docs/current/mod/mod_dav.html)
+- [DriveHQ](https://www.drivehq.com)
+- [Fastmail](https://www.fastmail.com/)
+- [HiDrive](https://www.strato.fr/stockage-en-ligne/) from Strato. [Setup help](https://github.com/laurent22/joplin/issues/309)
+- [Nginx WebDAV Module](https://nginx.org/en/docs/http/ngx_http_dav_module.html)
+- [Nextcloud](https://nextcloud.com/)
+- [OwnCloud](https://owncloud.org/)
+- [Seafile](https://www.seafile.com/)
+- [Stack](https://www.transip.nl/stack/)
+- [Synology WebDAV Server](https://www.synology.com/en-us/dsm/packages/WebDAVServer)
+- [WebDAV Nav](https://www.schimera.com/products/webdav-nav-server/), a macOS server.
+- [Zimbra](https://www.zimbra.com/)
+
+## Dropbox synchronisation
+
+When syncing with Dropbox, Joplin creates a sub-directory in Dropbox, in `/Apps/Joplin` and reads/writes the notes and notebooks in it. The application does not have access to anything outside this directory.
+
+In the **desktop application** or **mobile application**, select "Dropbox" as the synchronisation target in the [Configuration screen](https://github.com/laurent22/joplin/blob/dev/readme/config_screen.md) (it is selected by default). Then, to initiate the synchronisation process, click on the "Synchronise" button in the sidebar and follow the instructions.
+
+In the **terminal application**, to initiate the synchronisation process, type `:sync`. You will be asked to follow a link to authorise the application.
+
+## OneDrive synchronisation
+
+When syncing with OneDrive, Joplin creates a sub-directory in OneDrive, in /Apps/Joplin and reads/writes the notes and notebooks in it. The application does not have access to anything outside this directory.
+
+In the **desktop application** or **mobile application**, select "OneDrive" as the synchronisation target in the [Configuration screen](https://github.com/laurent22/joplin/blob/dev/readme/config_screen.md). Then, to initiate the synchronisation process, click on the "Synchronise" button in the sidebar and follow the instructions.
+
+In the **terminal application**, to initiate the synchronisation process, type `:sync`. You will be asked to follow a link to authorise the application (simply input your Microsoft credentials - you do not need to register with OneDrive).
+
+## S3 synchronisation
+
+As of Joplin 2.x.x, Joplin supports multiple S3 providers. We expose some options that will need to be configured depending on your provider of choice. We have tested with UpCloud, AWS, and Linode. others should work as well.
+
+In the **desktop application** or **mobile application**, select "S3 (Beta)" as the synchronisation target in the [Configuration screen](https://github.com/laurent22/joplin/blob/dev/readme/config_screen.md).
+
+- **S3 Bucket:** The name of your Bucket, such as `joplin-bucket`
+- **S3 URL:** Fully qualified URL; For AWS this should be `https://s3.
`office -trash` searches for all notes with the word `office` and without the word `trash`.|
+|**any:**|Return notes that satisfy any/all of the required conditions. `any:0` is the default, which means all conditions must be satisfied.|`any:1 cat dog` will return notes that have the word `cat` or `dog`.
`any:0 cat dog` will return notes with both the words `cat` and `dog`. |
+| **title:**
**body:**|Restrict your search to just the title or the body field.|`title:"hello world"` searches for notes whose title contains `hello` and `world`.
`title:hello -body:world` searches for notes whose title contains `hello` and body does not contain `world`.
+| **tag:** |Restrict the search to the notes with the specified tags.|`tag:office` searches for all notes having tag office.
`tag:office tag:important` searches for all notes having both office and important tags.
`tag:office -tag:spam` searches for notes having tag `office` which do not have tag `spam`.
`any:1 tag:office tag:spam` searches for notes having tag `office` or tag `spam`.
`tag:be*ful` does a search with wildcards.
`tag:*` returns all notes with tags.
`-tag:*` returns all notes without tags.|
+| **notebook:** | Restrict the search to the specified notebook(s). |`notebook:books` limits the search scope within `books` and all its subnotebooks.
`notebook:wheel*time` does a wildcard search.|
+| **created:**
**updated:**
**due:**| Searches for notes created/updated on dates specified using YYYYMMDD format. You can also search relative to the current day, week, month, or year. | `created:20201218` will return notes created on or after December 18, 2020.
`-updated:20201218` will return notes updated before December 18, 2020.
`created:20200118 -created:20201215` will return notes created between January 18, 2020, and before December 15, 2020.
`created:202001 -created:202003` will return notes created on or after January and before March 2020.
`updated:1997 -updated:2020` will return all notes updated between the years 1997 and 2019.
`created:day-2` searches for all notes created in the past two days.
`updated:year-0` searches all notes updated in the current year.
`-due:day+7` will return all todos which are due or will be due in the next seven days.
`-due:day-5` searches all todos that are overdue for more than 5 days.|
+| **type:** |Restrict the search to either notes or todos. | `type:note` to return all notes
`type:todo` to return all todos |
+| **iscompleted:** | Restrict the search to either completed or uncompleted todos. | `iscompleted:1` to return all completed todos
`iscompleted:0` to return all uncompleted todos|
+|**latitude:**
**longitude:**
**altitude:**|Filter by location|`latitude:40 -latitude:50` to return notes with latitude >= 40 and < 50 |
+|**resource:**|Filter by attachment MIME type|`resource:image/jpeg` to return notes with a jpeg attachment.
`-resource:application/pdf` to return notes without a pdf attachment.
`resource:image/*` to return notes with any images.|
+|**sourceurl:**|Filter by source URL|`sourceurl:https://www.google.com`
`sourceurl:*joplinapp.org` to perform a wildcard search.|
+|**id:**|Filter by note ID|`id:9cbc1b4f242043a9b8a50627508bccd5` return a note with the specified id |
+
+Note: In the CLI client you have to escape the query using `--` when using negated filters.
+Eg. `:search -- "-tag:tag1"`.
+
+The filters are implicitly connected by and/or connectives depending on the following rules:
+
+- By default, all filters are connected by "AND".
+- To override this default behaviour, use the `any` filter, in which case the search terms will be connected by "OR" instead.
+- There's an exception for the `notebook` filters which are connected by "OR". The reason being that no note can be in multiple notebooks at once.
+
+Incorrect search filters are interpreted as a phrase search, e.g. misspelled `nootebook:Example` or non-existing `https://joplinapp.org`.
+
+## Search order
+
+Notes are sorted by "relevance". Currently it means the notes that contain the requested terms the most times are on top. For queries with multiple terms, it also matters how close to each other the terms are. This is a bit experimental so if you notice a search query that returns unexpected results, please report it in the forum, providing as many details as possible to replicate the issue.
+
+# Goto Anything
+
+In the desktop application, press Ctrl+P or Cmd+P and type a note title or part of its content to jump to it. Or type # followed by a tag name, or @ followed by a notebook name.
+
+# Multiple profile support
+
+To create a new profile, open File > Switch profile and select Create new profile, enter the profile name and press OK. The app will automatically switch to this new profile, which you can now configure.
+
+To switch back to the previous profile, again open File > Switch profile and select Default.
+
+Note that profiles all share certain settings, such as language, font size, theme, etc. This is done so that you don't have reconfigure every details when switching profiles. Other settings such as sync configuration is per profile.
+
+The feature is available on desktop only for now, and should be ported to mobile relatively soon.
+
+# Donations
+
+Donations to Joplin support the development of the project. Developing quality applications mostly takes time, but there are also some expenses, such as digital certificates to sign the applications, app store fees, hosting, etc. Most of all, your donation will make it possible to keep up the current development standard.
+
+Please see the [donation page](https://github.com/laurent22/joplin/blob/dev/readme/donate.md) for information on how to support the development of Joplin.
+
+# Community
+
+Name | Description
+--- | ---
+[Support Forum](https://discourse.joplinapp.org/) | This is the main place for general discussion about Joplin, user support, software development questions, and to discuss new features. Also where the latest beta versions are released and discussed.
+[Twitter feed](https://twitter.com/joplinapp) | Follow us on Twitter
+[Mastodon feed](https://mastodon.social/@joplinapp) | Follow us on Mastodon
+[Patreon page](https://www.patreon.com/joplin) |The latest news are often posted there
+[Discord server](https://discord.gg/VSj7AFHvpq) | Our chat server
+[LinkedIn](https://www.linkedin.com/company/joplin) | Our LinkedIn page
+[Lemmy Community](https://sopuli.xyz/c/joplinapp) | Also a good place to get help
+
+# Contributing
+
+Please see the guide for information on how to contribute to the development of Joplin: https://github.com/laurent22/joplin/blob/dev/CONTRIBUTING.md
+
+# Localisation
+
+Joplin is currently available in the languages below. If you would like to contribute a **new translation**, it is quite straightforward, please follow these steps:
+
+- [Download Poedit](https://poedit.net/), the translation editor, and install it.
+- [Download the file to be translated](https://raw.githubusercontent.com/laurent22/joplin/dev/packages/tools/locales/joplin.pot).
+- In Poedit, open this .pot file, go into the Catalog menu and click Configuration. Change "Country" and "Language" to your own country and language.
+- From then you can translate the file.
+- Once it is done, please [open a pull request](https://github.com/laurent22/joplin/pulls) and add the file to it.
+
+This translation will apply to the three applications - desktop, mobile and terminal.
+
+To **update a translation**, follow the same steps as above but instead of getting the .pot file, get the .po file for your language from the table below.
+
+Current translations:
+
+
+ | Language | Po File | Last translator | Percent done
+---|---|---|---|---
+ | Arabic | [ar](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ar.po) | [Whaell O](mailto:Whaell@protonmail.com) | 79%
+
| Basque | [eu](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/eu.po) | juan.abasolo@ehu.eus | 22%
+
| Bosnian (Bosna i Hercegovina) | [bs_BA](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/bs_BA.po) | [Derviš T.](mailto:dervis.t@pm.me) | 57%
+
| Bulgarian (България) | [bg_BG](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/bg_BG.po) | | 45%
+
| Catalan | [ca](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ca.po) | [Xavi Ivars](mailto:xavi.ivars@gmail.com) | 88%
+
| Croatian (Hrvatska) | [hr_HR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/hr_HR.po) | [Milo Ivir](mailto:mail@milotype.de) | 99%
+
| Czech (Česká republika) | [cs_CZ](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/cs_CZ.po) | Fejby | 98%
+
| Dansk (Danmark) | [da_DK](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/da_DK.po) | ERYpTION | 98%
+
| Deutsch (Deutschland) | [de_DE](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/de_DE.po) | [MrKanister](mailto:pueblos_spatulas@aleeas.com) | 98%
+
| Eesti Keel (Eesti) | [et_EE](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/et_EE.po) | | 44%
+
| English (United Kingdom) | [en_GB](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/en_GB.po) | | 100%
+
| English (United States of America) | [en_US](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/en_US.po) | | 100%
+
| Español (España) | [es_ES](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/es_ES.po) | [Francisco Villaverde](mailto:teko.gr@gmail.com) | 97%
+
| Esperanto | [eo](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/eo.po) | Marton Paulo | 25%
+
| Finnish (Suomi) | [fi_FI](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/fi_FI.po) | mrkaato0 | 98%
+
| Français (France) | [fr_FR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/fr_FR.po) | Laurent Cozic | 100%
+
| Galician (España) | [gl_ES](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/gl_ES.po) | [Marcos Lans](mailto:marcoslansgarza@gmail.com) | 29%
+
| Indonesian (Indonesia) | [id_ID](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/id_ID.po) | [Wisnu Adi Santoso](mailto:waditos@gmail.com) | 88%
+
| Italiano (Italia) | [it_IT](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/it_IT.po) | [Manuel Tassi](mailto:mannivuwiki@gmail.com) | 80%
+
| Magyar (Magyarország) | [hu_HU](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/hu_HU.po) | [Magyari Balázs](mailto:balmag@gmail.com) | 77%
+
| Nederlands (België, Belgique, Belgien) | [nl_BE](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nl_BE.po) | | 78%
+
| Nederlands (Nederland) | [nl_NL](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nl_NL.po) | [MHolkamp](mailto:mholkamp@users.noreply.github.com) | 87%
+
| Norwegian (Norge, Noreg) | [nb_NO](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/nb_NO.po) | [Mats Estensen](mailto:code@mxe.no) | 87%
+
| Persian | [fa](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/fa.po) | [Kourosh Firoozbakht](mailto:kourox@protonmail.com) | 54%
+
| Polski (Polska) | [pl_PL](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pl_PL.po) | [X3NO](mailto:X3NO@disroot.org) | 89%
+
| Português (Brasil) | [pt_BR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pt_BR.po) | [Douglas Leão](mailto:djlsplays@gmail.com) | 87%
+
| Português (Portugal) | [pt_PT](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/pt_PT.po) | [Diogo Caveiro](mailto:dcaveiro@yahoo.com) | 72%
+
| Română | [ro](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ro.po) | [Cristi Duluta](mailto:cristi.duluta@gmail.com) | 50%
+
| Slovenian (Slovenija) | [sl_SI](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sl_SI.po) | [Martin Korelič](mailto:martin.korelic@protonmail.com) | 79%
+
| Svenska | [sv](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sv.po) | [Jonatan Nyberg](mailto:jonatan@autistici.org) | 99%
+
| Thai (ประเทศไทย) | [th_TH](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/th_TH.po) | | 36%
+
| Tiếng Việt | [vi](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/vi.po) | | 77%
+
| Türkçe (Türkiye) | [tr_TR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/tr_TR.po) | [Arda Kılıçdağı](mailto:arda@kilicdagi.com) | 99%
+
| Ukrainian (Україна) | [uk_UA](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/uk_UA.po) | [Vyacheslav Andreykiv](mailto:vandreykiv@gmail.com) | 71%
+
| Ελληνικά (Ελλάδα) | [el_GR](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/el_GR.po) | [Harris Arvanitis](mailto:xaris@tuta.io) | 87%
+
| Русский (Россия) | [ru_RU](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ru_RU.po) | [Dmitriy K](mailto:dmitry@atsip.ru) | 99%
+
| српски језик (Србија) | [sr_RS](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/sr_RS.po) | | 64%
+
| 中文 (简体) | [zh_CN](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/zh_CN.po) | [wh201906](mailto:wh201906@yandex.com) | 96%
+
| 中文 (繁體) | [zh_TW](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/zh_TW.po) | [Kevin Hsu](mailto:kevin.hsu.hws@gmail.com) | 88%
+
| 日本語 (日本) | [ja_JP](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ja_JP.po) | [genneko](mailto:genneko217@gmail.com) | 88%
+
| 한국어 | [ko](https://github.com/laurent22/joplin/blob/dev/packages/tools/locales/ko.po) | [Ji-Hyeon Gim](mailto:potatogim@potatogim.net) | 88%
+
+
+# Contributors
+
+Thank you to everyone who've contributed to Joplin's source code!
+
+
+| | | | | |
+| :---: | :---: | :---: | :---: | :---: |
+|
[laurent22](https://github.com/laurent22) |
[tessus](https://github.com/tessus) |
[CalebJohn](https://github.com/CalebJohn) |
[mic704b](https://github.com/mic704b) |
[roman-r-m](https://github.com/roman-r-m) |
+|
[genneko](https://github.com/genneko) |
[j-krl](https://github.com/j-krl) |
[tanrax](https://github.com/tanrax) |
[naviji](https://github.com/naviji) |
[PackElend](https://github.com/PackElend) |
+|
[rtmkrlv](https://github.com/rtmkrlv) |
[fmrtn](https://github.com/fmrtn) |
[potatogim](https://github.com/potatogim) |
[devonzuegel](https://github.com/devonzuegel) |
[anjulalk](https://github.com/anjulalk) |
+|
[gabcoh](https://github.com/gabcoh) |
[matsest](https://github.com/matsest) |
[abonte](https://github.com/abonte) |
[Abijeet](https://github.com/Abijeet) |
[ishantgupta777](https://github.com/ishantgupta777) |
+|
[JackGruber](https://github.com/JackGruber) |
[Ardakilic](https://github.com/Ardakilic) |
[rabeehrz](https://github.com/rabeehrz) |
[coderrsid](https://github.com/coderrsid) |
[foxmask](https://github.com/foxmask) |
+|
[innocuo](https://github.com/innocuo) |
[Rahulm2310](https://github.com/Rahulm2310) |
[readingsnail](https://github.com/readingsnail) |
[mablin7](https://github.com/mablin7) |
[XarisA](https://github.com/XarisA) |
+|
[jonath92](https://github.com/jonath92) |
[alexdevero](https://github.com/alexdevero) |
[Runo-saduwa](https://github.com/Runo-saduwa) |
[marcosvega91](https://github.com/marcosvega91) |
[petrz12](https://github.com/petrz12) |
+|
[rnbastos](https://github.com/rnbastos) |
[ProgramFan](https://github.com/ProgramFan) |
[zblesk](https://github.com/zblesk) |
[vsimkus](https://github.com/vsimkus) |
[moltenform](https://github.com/moltenform) |
+|
[nishantwrp](https://github.com/nishantwrp) |
[zuphilip](https://github.com/zuphilip) |
[Rishabh-malhotraa](https://github.com/Rishabh-malhotraa) |
[metbril](https://github.com/metbril) |
[WhiredPlanck](https://github.com/WhiredPlanck) |
+|
[milotype](https://github.com/milotype) |
[yaozeye](https://github.com/yaozeye) |
[ylc395](https://github.com/ylc395) |
[RenatoXSR](https://github.com/RenatoXSR) |
[RedDocMD](https://github.com/RedDocMD) |
+|
[q1011](https://github.com/q1011) |
[amitsin6h](https://github.com/amitsin6h) |
[Atalanttore](https://github.com/Atalanttore) |
[Mannivu](https://github.com/Mannivu) |
[martonpaulo](https://github.com/martonpaulo) |
+|
[mmahmoudian](https://github.com/mmahmoudian) |
[rccavalcanti](https://github.com/rccavalcanti) |
[ShaneKilkelly](https://github.com/ShaneKilkelly) |
[sinkuu](https://github.com/sinkuu) |
[stweil](https://github.com/stweil) |
+|
[conyx](https://github.com/conyx) |
[anihm136](https://github.com/anihm136) |
[archont00](https://github.com/archont00) |
[bradmcl](https://github.com/bradmcl) |
[tfinnberg](https://github.com/tfinnberg) |
+|
[amandamcg](https://github.com/amandamcg) |
[marcushill](https://github.com/marcushill) |
[nathanleiby](https://github.com/nathanleiby) |
[RaphaelKimmig](https://github.com/RaphaelKimmig) |
[Vaso3](https://github.com/Vaso3) |
+|
[sensor-freak](https://github.com/sensor-freak) |
[lkiThakur](https://github.com/lkiThakur) |
[infinity052](https://github.com/infinity052) |
[BartBucknill](https://github.com/BartBucknill) |
[mrwulf](https://github.com/mrwulf) |
+|
[chrisb86](https://github.com/chrisb86) |
[chrmoritz](https://github.com/chrmoritz) |
[Daeraxa](https://github.com/Daeraxa) |
[Elaborendum](https://github.com/Elaborendum) |
[ethan42411](https://github.com/ethan42411) |
+|
[JOJ0](https://github.com/JOJ0) |
[jalajcodes](https://github.com/jalajcodes) |
[jblunck](https://github.com/jblunck) |
[jdrobertso](https://github.com/jdrobertso) |
[Jesssullivan](https://github.com/Jesssullivan) |
+|
[jmontane](https://github.com/jmontane) |
[johanhammar](https://github.com/johanhammar) |
[solariz](https://github.com/solariz) |
[maicki](https://github.com/maicki) |
[mjjzf](https://github.com/mjjzf) |
+|
[rt-oliveira](https://github.com/rt-oliveira) |
[sebastienjust](https://github.com/sebastienjust) |
[sealch](https://github.com/sealch) |
[StarFang208](https://github.com/StarFang208) |
[Subhra264](https://github.com/Subhra264) |
+|
[SubodhDahal](https://github.com/SubodhDahal) |
[TobiasDev](https://github.com/TobiasDev) |
[Whaell](https://github.com/Whaell) |
[jyuvaraj03](https://github.com/jyuvaraj03) |
[kowalskidev](https://github.com/kowalskidev) |
+|
[alexchee](https://github.com/alexchee) |
[axq](https://github.com/axq) |
[barbowza](https://github.com/barbowza) |
[eresytter](https://github.com/eresytter) |
[lightray22](https://github.com/lightray22) |
+|
[lscolombo](https://github.com/lscolombo) |
[mrkaato](https://github.com/mrkaato) |
[pf-siedler](https://github.com/pf-siedler) |
[ruuti](https://github.com/ruuti) |
[s1nceri7y](https://github.com/s1nceri7y) |
+|
[kornava](https://github.com/kornava) |
[ShuiHuo](https://github.com/ShuiHuo) |
[ikunya](https://github.com/ikunya) |
[Ahmad45123](https://github.com/Ahmad45123) |
[bedwardly-down](https://github.com/bedwardly-down) |
+|
[dcaveiro](https://github.com/dcaveiro) |
[hexclover](https://github.com/hexclover) |
[2jaeyeol](https://github.com/2jaeyeol) |
[thackeraaron](https://github.com/thackeraaron) |
[aaronxn](https://github.com/aaronxn) |
+|
[xUser5000](https://github.com/xUser5000) |
[iamabhi222](https://github.com/iamabhi222) |
[Aksh-Konda](https://github.com/Aksh-Konda) |
[alanfortlink](https://github.com/alanfortlink) |
[AverageUser2](https://github.com/AverageUser2) |
+|
[afischer211](https://github.com/afischer211) |
[a13xk](https://github.com/a13xk) |
[apankratov](https://github.com/apankratov) |
[teterkin](https://github.com/teterkin) |
[avanderberg](https://github.com/avanderberg) |
+|
[serenitatis](https://github.com/serenitatis) |
[lex111](https://github.com/lex111) |
[Alkindi42](https://github.com/Alkindi42) |
[Jumanjii](https://github.com/Jumanjii) |
[AlphaJack](https://github.com/AlphaJack) |
+|
[Lord-Aman](https://github.com/Lord-Aman) |
[richtwin567](https://github.com/richtwin567) |
[ajilderda](https://github.com/ajilderda) |
[adrynov](https://github.com/adrynov) |
[andrewperry](https://github.com/andrewperry) |
+|
[tekdel](https://github.com/tekdel) |
[anshuman9999](https://github.com/anshuman9999) |
[rasklaad](https://github.com/rasklaad) |
[Technik-J](https://github.com/Technik-J) |
[Shaxine](https://github.com/Shaxine) |
+|
[antonio-ramadas](https://github.com/antonio-ramadas) |
[heyapoorva](https://github.com/heyapoorva) |
[assimd](https://github.com/assimd) |
[Atrate](https://github.com/Atrate) |
[Beowulf2](https://github.com/Beowulf2) |
+|
[bimlas](https://github.com/bimlas) |
[brenobaptista](https://github.com/brenobaptista) |
[brttbndr](https://github.com/brttbndr) |
[carlbordum](https://github.com/carlbordum) |
[carlosedp](https://github.com/carlosedp) |
+|
[chaifeng](https://github.com/chaifeng) |
[charles-e](https://github.com/charles-e) |
[cyy5358](https://github.com/cyy5358) |
[Chillu1](https://github.com/Chillu1) |
[Techwolf12](https://github.com/Techwolf12) |
+|
[cloudtrends](https://github.com/cloudtrends) |
[idcristi](https://github.com/idcristi) |
[damienmascre](https://github.com/damienmascre) |
[daniellandau](https://github.com/daniellandau) |
[danil-tolkachev](https://github.com/danil-tolkachev) |
+|
[darshani28](https://github.com/darshani28) |
[daukadolt](https://github.com/daukadolt) |
[NeverMendel](https://github.com/NeverMendel) |
[dervist](https://github.com/dervist) |
[diego-betto](https://github.com/diego-betto) |
+|
[erdody](https://github.com/erdody) |
[domgoodwin](https://github.com/domgoodwin) |
[b4mboo](https://github.com/b4mboo) |
[donbowman](https://github.com/donbowman) |
[sirnacnud](https://github.com/sirnacnud) |
+|
[dflock](https://github.com/dflock) |
[drobilica](https://github.com/drobilica) |
[educbraga](https://github.com/educbraga) |
[eduardokimmel](https://github.com/eduardokimmel) |
[VodeniZeko](https://github.com/VodeniZeko) |
+|
[ei-ke](https://github.com/ei-ke) |
[einverne](https://github.com/einverne) |
[eodeluga](https://github.com/eodeluga) |
[fathyar](https://github.com/fathyar) |
[fer22f](https://github.com/fer22f) |
+|
[fpindado](https://github.com/fpindado) |
[FleischKarussel](https://github.com/FleischKarussel) |
[talkdirty](https://github.com/talkdirty) |
[gmaubach](https://github.com/gmaubach) |
[gmag11](https://github.com/gmag11) |
+|
[Jackymancs4](https://github.com/Jackymancs4) |
[Glandos](https://github.com/Glandos) |
[vibraniumdev](https://github.com/vibraniumdev) |
[gusbemacbe](https://github.com/gusbemacbe) |
[HOLLYwyh](https://github.com/HOLLYwyh) |
+|
[Fvbor](https://github.com/Fvbor) |
[bennetthanna](https://github.com/bennetthanna) |
[harshitkathuria](https://github.com/harshitkathuria) |
[Vistaus](https://github.com/Vistaus) |
[ianjs](https://github.com/ianjs) |
+|
[iahmedbacha](https://github.com/iahmedbacha) |
[IrvinDominin](https://github.com/IrvinDominin) |
[ishammahajan](https://github.com/ishammahajan) |
[ffadilaputra](https://github.com/ffadilaputra) |
[JRaiden16](https://github.com/JRaiden16) |
+|
[jacobherrington](https://github.com/jacobherrington) |
[jamesadjinwa](https://github.com/jamesadjinwa) |
[jrwrigh](https://github.com/jrwrigh) |
[jaredcrowe](https://github.com/jaredcrowe) |
[volatilevar](https://github.com/volatilevar) |
+|
[innkuika](https://github.com/innkuika) |
[JoelRSimpson](https://github.com/JoelRSimpson) |
[joeltaylor](https://github.com/joeltaylor) |
[exic](https://github.com/exic) |
[JonathanPlasse](https://github.com/JonathanPlasse) |
+|
[joesfer](https://github.com/joesfer) |
[joybinchen](https://github.com/joybinchen) |
[kaustubhsh](https://github.com/kaustubhsh) |
[y-usuzumi](https://github.com/y-usuzumi) |
[xuhcc](https://github.com/xuhcc) |
+|
[kirtanprht](https://github.com/kirtanprht) |
[k0ur0x](https://github.com/k0ur0x) |
[kklas](https://github.com/kklas) |
[xmlangel](https://github.com/xmlangel) |
[troilus](https://github.com/troilus) |
+|
[lboullo0](https://github.com/lboullo0) |
[dbinary](https://github.com/dbinary) |
[marc-bouvier](https://github.com/marc-bouvier) |
[mvonmaltitz](https://github.com/mvonmaltitz) |
[mlkood](https://github.com/mlkood) |
+|
[plextoriano](https://github.com/plextoriano) |
[Marmo](https://github.com/Marmo) |
[mcejp](https://github.com/mcejp) |
[freaktechnik](https://github.com/freaktechnik) |
[martinkorelic](https://github.com/martinkorelic) |
+|
[Petemir](https://github.com/Petemir) |
[matsair](https://github.com/matsair) |
[mgroth0](https://github.com/mgroth0) |
[silentmatt](https://github.com/silentmatt) |
[maxs-test](https://github.com/maxs-test) |
+|
[MichBoi](https://github.com/MichBoi) |
[MichipX](https://github.com/MichipX) |
[MrTraduttore](https://github.com/MrTraduttore) |
[sanjarcode](https://github.com/sanjarcode) |
[Mustafa-ALD](https://github.com/Mustafa-ALD) |
+|
[NJannasch](https://github.com/NJannasch) |
[zomglings](https://github.com/zomglings) |
[Frichetten](https://github.com/Frichetten) |
[nicolas-suzuki](https://github.com/nicolas-suzuki) |
[Ouvill](https://github.com/Ouvill) |
+|
[shorty2380](https://github.com/shorty2380) |
[dist3r](https://github.com/dist3r) |
[rakleed](https://github.com/rakleed) |
[idle-code](https://github.com/idle-code) |
[bobchao](https://github.com/bobchao) |
+|
[Diadlo](https://github.com/Diadlo) |
[pranavmodx](https://github.com/pranavmodx) |
[R3dError](https://github.com/R3dError) |
[rajprakash00](https://github.com/rajprakash00) |
[rahil1304](https://github.com/rahil1304) |
+|
[rasulkireev](https://github.com/rasulkireev) |
[reinhart1010](https://github.com/reinhart1010) |
[Retew](https://github.com/Retew) |
[ambrt](https://github.com/ambrt) |
[Derkades](https://github.com/Derkades) |
+|
[fourstepper](https://github.com/fourstepper) |
[rodgco](https://github.com/rodgco) |
[Ronnie76er](https://github.com/Ronnie76er) |
[roryokane](https://github.com/roryokane) |
[ruzaq](https://github.com/ruzaq) |
+|
[szokesandor](https://github.com/szokesandor) |
[SamuelBlickle](https://github.com/SamuelBlickle) |
[livingc0l0ur](https://github.com/livingc0l0ur) |
[bronson](https://github.com/bronson) |
[semperor](https://github.com/semperor) |
+|
[shawnaxsom](https://github.com/shawnaxsom) |
[SFoskitt](https://github.com/SFoskitt) |
[kcrt](https://github.com/kcrt) |
[xissy](https://github.com/xissy) |
[tams](https://github.com/tams) |
+|
[Tekki](https://github.com/Tekki) |
[ThatcherC](https://github.com/ThatcherC) |
[TheoDutch](https://github.com/TheoDutch) |
[tbroadley](https://github.com/tbroadley) |
[Kriechi](https://github.com/Kriechi) |
+|
[tkilaker](https://github.com/tkilaker) |
[Tim-Erwin](https://github.com/Tim-Erwin) |
[tcyrus](https://github.com/tcyrus) |
[tobias-grasse](https://github.com/tobias-grasse) |
[strobeltobias](https://github.com/strobeltobias) |
+|
[kostegit](https://github.com/kostegit) |
[tbergeron](https://github.com/tbergeron) |
[Ullas-Aithal](https://github.com/Ullas-Aithal) |
[MyTheValentinus](https://github.com/MyTheValentinus) |
[vassudanagunta](https://github.com/vassudanagunta) |
+|
[vijayjoshi16](https://github.com/vijayjoshi16) |
[max-keviv](https://github.com/max-keviv) |
[vandreykiv](https://github.com/vandreykiv) |
[WisdomCode](https://github.com/WisdomCode) |
[xsak](https://github.com/xsak) |
+|
[ymitsos](https://github.com/ymitsos) |
[abolishallprivateproperty](https://github.com/abolishallprivateproperty) |
[aerotog](https://github.com/aerotog) |
[albertopasqualetto](https://github.com/albertopasqualetto) |
[asrient](https://github.com/asrient) |
+|
[bestlibre](https://github.com/bestlibre) |
[boring10](https://github.com/boring10) |
[cadolphs](https://github.com/cadolphs) |
[colorchestra](https://github.com/colorchestra) |
[cybertramp](https://github.com/cybertramp) |
+|
[dartero](https://github.com/dartero) |
[delta-emil](https://github.com/delta-emil) |
[doc75](https://github.com/doc75) |
[dsp77](https://github.com/dsp77) |
[ebayer](https://github.com/ebayer) |
+|
[elsiehupp](https://github.com/elsiehupp) |
[espinosa](https://github.com/espinosa) |
[exponentactivity](https://github.com/exponentactivity) |
[exprez135](https://github.com/exprez135) |
[fab4x](https://github.com/fab4x) |
+|
[fabianski7](https://github.com/fabianski7) |
[rasperepodvipodvert](https://github.com/rasperepodvipodvert) |
[gasolin](https://github.com/gasolin) |
[githubaccount073](https://github.com/githubaccount073) |
[hms5232](https://github.com/hms5232) |
+|
[hydrandt](https://github.com/hydrandt) |
[iamtalwinder](https://github.com/iamtalwinder) |
[jabdoa2](https://github.com/jabdoa2) |
[jduar](https://github.com/jduar) |
[jibedoubleve](https://github.com/jibedoubleve) |
+|
[johanvanheusden](https://github.com/johanvanheusden) |
[jtagcat](https://github.com/jtagcat) |
[konhi](https://github.com/konhi) |
[krzysiekwie](https://github.com/krzysiekwie) |
[lighthousebulb](https://github.com/lighthousebulb) |
+|
[luzpaz](https://github.com/luzpaz) |
[majsterkovic](https://github.com/majsterkovic) |
[mak2002](https://github.com/mak2002) |
[nmiquan](https://github.com/nmiquan) |
[nullpointer666](https://github.com/nullpointer666) |
+|
[oscaretu](https://github.com/oscaretu) |
[oskarsh](https://github.com/oskarsh) |
[osso73](https://github.com/osso73) |
[over-soul](https://github.com/over-soul) |
[pensierocrea](https://github.com/pensierocrea) |
+|
[pomeloy](https://github.com/pomeloy) |
[rhtenhove](https://github.com/rhtenhove) |
[rikanotank1](https://github.com/rikanotank1) |
[rxliuli](https://github.com/rxliuli) |
[simonsan](https://github.com/simonsan) |
+|
[stellarpower](https://github.com/stellarpower) |
[suixinio](https://github.com/suixinio) |
[sumomo-99](https://github.com/sumomo-99) |
[xtatsux](https://github.com/xtatsux) |
[taw00](https://github.com/taw00) |
+|
[tcassaert](https://github.com/tcassaert) |
[victante](https://github.com/victante) |
[Voltinus](https://github.com/Voltinus) |
[xcffl](https://github.com/xcffl) |
[yourcontact](https://github.com/yourcontact) |
+|
[zaoyifan](https://github.com/zaoyifan) |
[zawnk](https://github.com/zawnk) |
[zen-quo](https://github.com/zen-quo) |
[zozolina123](https://github.com/zozolina123) |
[xcession](https://github.com/xcession) |
+|
[paventyang](https://github.com/paventyang) |
[jackytsu](https://github.com/jackytsu) |
[zhangmx](https://github.com/zhangmx) | | |
+
diff --git a/apps/joplin-server/data.yml b/apps/joplin-server/data.yml
new file mode 100644
index 00000000..733271f4
--- /dev/null
+++ b/apps/joplin-server/data.yml
@@ -0,0 +1,20 @@
+name: Joplin Server
+tags:
+ - 工具
+title: 一个开源的记事本应用程序
+type: 工具
+description: 一个开源的记事本应用程序
+additionalProperties:
+ key: joplin-server
+ name: Joplin Server
+ tags:
+ - Tool
+ shortDescZh: 一个开源的记事本应用程序
+ shortDescEn: An open source note-taking app
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://joplinapp.org/
+ github: https://github.com/laurent22/joplin
+ document: https://joplinapp.org/help/
\ No newline at end of file
diff --git a/apps/joplin-server/latest/.env.sample b/apps/joplin-server/latest/.env.sample
new file mode 100644
index 00000000..8abb06b6
--- /dev/null
+++ b/apps/joplin-server/latest/.env.sample
@@ -0,0 +1,8 @@
+CONTAINER_NAME="joplin"
+JOPLIN_EXTERNAL_URL="http://localhost:40082"
+PANEL_APP_PORT_HTTP="40082"
+POSTGRES_DB="joplin"
+POSTGRES_HOST="postgres"
+POSTGRES_PORT="5432"
+POSTGRES_PWD=""
+POSTGRES_USER=""
diff --git a/apps/joplin-server/latest/data.yml b/apps/joplin-server/latest/data.yml
new file mode 100644
index 00000000..b76dbdb2
--- /dev/null
+++ b/apps/joplin-server/latest/data.yml
@@ -0,0 +1,57 @@
+additionalProperties:
+ formFields:
+ - default: 40082
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: HTTP Port
+ labelZh: HTTP端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ""
+ edit: true
+ envKey: POSTGRES_HOST
+ key: postgresql
+ labelEn: Postgres database Service
+ labelZh: Postgres数据库服务
+ required: true
+ type: service
+ - default: "5432"
+ edit: true
+ envKey: POSTGRES_PORT
+ labelEn: Postgres database Service Port
+ labelZh: Postgres数据库服务端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: joplin
+ edit: true
+ envKey: POSTGRES_DB
+ labelEn: Postgres database Name
+ labelZh: Postgres数据库名
+ required: true
+ rule: paramCommon
+ type: text
+ - default: ""
+ edit: true
+ envKey: POSTGRES_USER
+ labelEn: Postgres database User Name
+ labelZh: Postgres数据库用户名
+ required: true
+ rule: paramCommon
+ type: text
+ - default: ""
+ edit: true
+ envKey: POSTGRES_PWD
+ labelEn: Postgres database User Password
+ labelZh: Postgres数据库密码
+ required: true
+ rule: paramCommon
+ type: password
+ - default: http://localhost:40082
+ edit: true
+ envKey: JOPLIN_EXTERNAL_URL
+ labelEn: External URL
+ labelZh: 外部访问地址
+ required: true
+ type: text
diff --git a/apps/joplin-server/latest/docker-compose.yml b/apps/joplin-server/latest/docker-compose.yml
new file mode 100644
index 00000000..a12ca4db
--- /dev/null
+++ b/apps/joplin-server/latest/docker-compose.yml
@@ -0,0 +1,25 @@
+version: '3'
+services:
+ joplin:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:22300"
+ environment:
+ - APP_BASE_URL=${JOPLIN_EXTERNAL_URL}
+ - APP_PORT=22300
+ - POSTGRES_PASSWORD=${POSTGRES_PWD}
+ - POSTGRES_DATABASE=${POSTGRES_DB}
+ - POSTGRES_USER=${POSTGRES_USER}
+ - POSTGRES_PORT=${POSTGRES_PORT}
+ - POSTGRES_HOST=${POSTGRES_HOST}
+ - DB_CLIENT=pg
+ image: florider89/joplin-server:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/joplin-server/logo.png b/apps/joplin-server/logo.png
new file mode 100644
index 00000000..99bb2ff1
Binary files /dev/null and b/apps/joplin-server/logo.png differ
diff --git a/apps/kkfileview/4.1.0/.env.sample b/apps/kkfileview/4.1.0/.env.sample
new file mode 100644
index 00000000..b5493d0d
--- /dev/null
+++ b/apps/kkfileview/4.1.0/.env.sample
@@ -0,0 +1,2 @@
+CONTAINER_NAME="kkfileview"
+PANEL_APP_PORT_HTTP="40145"
diff --git a/apps/kkfileview/4.1.0/data.yml b/apps/kkfileview/4.1.0/data.yml
new file mode 100644
index 00000000..60234e58
--- /dev/null
+++ b/apps/kkfileview/4.1.0/data.yml
@@ -0,0 +1,10 @@
+additionalProperties:
+ formFields:
+ - default: 40145
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
diff --git a/apps/kkfileview/4.1.0/docker-compose.yml b/apps/kkfileview/4.1.0/docker-compose.yml
new file mode 100644
index 00000000..c55b893b
--- /dev/null
+++ b/apps/kkfileview/4.1.0/docker-compose.yml
@@ -0,0 +1,16 @@
+version: '3'
+services:
+ kkfileview:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8012"
+ image: keking/kkfileview:4.1.0
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/kkfileview/README.md b/apps/kkfileview/README.md
new file mode 100644
index 00000000..af05c8af
--- /dev/null
+++ b/apps/kkfileview/README.md
@@ -0,0 +1,173 @@
+# kkFileView
+文档在线预览项目解决方案,项目使用流行的spring boot搭建,易上手和部署。万能的文件预览开源项目,基本支持主流文档格式预览,如:
+1. 支持 doc, docx, xls, xlsx, xlsm, ppt, pptx, csv, tsv, dotm, xlt, xltm, dot, dotx,xlam, xla ,pages 等 Office 办公文档
+2. 支持 wps, dps, et, ett, wpt 等国产 WPS Office 办公文档
+3. 支持 odt, ods, ots, odp, otp, six, ott, fodt, fods 等OpenOffice、LibreOffice 办公文档
+4. 支持 vsd, vsdx 等 Visio 流程图文件
+5. 支持 wmf, emf 等 Windows 系统图像文件
+6. 支持 psd ,eps 等 Photoshop 软件模型文件
+7. 支持 pdf ,ofd, rtf 等文档
+8. 支持 xmind 软件模型文件
+9. 支持 bpmn 工作流文件
+10. 支持 eml 邮件文件
+11. 支持 epub 图书文档
+12. 支持 obj, 3ds, stl, ply, gltf, glb, off, 3dm, fbx, dae, wrl, 3mf, ifc, brep, step, iges, fcstd, bim 等 3D 模型文件
+13. 支持 dwg, dxf, dwf, iges , igs, dwt, dng, ifc, dwfx, stl, cf2, plt 等 CAD 模型文件
+14. 支持 txt, xml(渲染), xbrl(渲染), md(渲染), java, php, py, js, css 等所有纯文本
+15. 支持 zip, rar, jar, tar, gzip, 7z 等压缩包
+16. 支持 jpg, jpeg, png, gif, bmp, ico, jfif, webp 等图片预览(翻转,缩放,镜像)
+17. 支持 tif, tiff 图信息模型文件
+18. 支持 tga 图像格式文件
+19. 支持 svg 矢量图像格式文件
+20. 支持 mp3,wav,mp4,flv 等音视频格式文件
+21. 支持 avi,mov,rm,webm,ts,rm,mkv,mpeg,ogg,mpg,rmvb,wmv,3gp,ts,swf 等视频格式转码预览
+22. 支持 dcm 等医疗数位影像预览
+23. 支持 drawio 绘图预览
+
+> 基于当前良好的架构模式,支持的文件类型在进一步丰富中
+### 项目特性
+
+- 使用 spring-boot 开发,预览服务搭建部署非常简便
+- rest 接口提供服务,跨语言、跨平台特性(java,php,python,go,php,....)都支持,应用接入简单方便
+- 抽象预览服务接口,方便二次开发,非常方便添加其他类型文件预览支持
+- 最最重要 Apache 协议开源,代码 pull 下来想干嘛就干嘛
+
+### 官网及文档
+
+地址:[https://kkview.cn](https://kkview.cn/)
+
+### 在线体验
+> 请善待公共服务,会不定时停用
+
+地址:[https://file.kkview.cn](https://file.kkview.cn)
+
+### 项目文档(Project documentation)
+1. 详细使用文档:https://kkview.cn/zh-cn/docs/home.html
+
+### 联系我们,加入组织
+> 我们会用心回答解决大家在项目使用中的问题,也请大家在提问前至少 Google 或 baidu 过,珍爱生命远离无效的交流沟通
+
+
+
+### 文档预览效果
+#### 1. 文本预览
+支持所有类型的文本文档预览, 由于文本文档类型过多,无法全部枚举,默认开启的类型如下 txt,html,htm,asp,jsp,xml,xbrl,json,properties,md,gitignore,log,java,py,c,cpp,sql,sh,bat,m,bas,prg,cmd
+文本预览效果如下
+
+
+#### 2. 图片预览
+支持jpg,jpeg,png,gif等图片预览(翻转,缩放,镜像),预览效果如下
+
+
+#### 3. word文档预览
+支持doc,docx文档预览,word预览有两种模式:一种是每页word转为图片预览,另一种是整个word文档转成pdf,再预览pdf。两种模式的适用场景如下
+* 图片预览:word文件大,前台加载整个pdf过慢
+* pdf预览:内网访问,加载pdf快
+图片预览模式预览效果如下
+
+pdf预览模式预览效果如下
+
+
+#### 4. ppt文档预览
+支持ppt,pptx文档预览,和word文档一样,有两种预览模式
+图片预览模式预览效果如下
+
+pdf预览模式预览效果如下
+
+
+#### 5. pdf文档预览
+支持pdf文档预览,和word文档一样,有两种预览模式
+图片预览模式预览效果如下
+
+pdf预览模式预览效果如下
+
+
+#### 6. excel文档预览
+支持xls,xlsx文档预览,预览效果如下
+
+
+#### 7. 压缩文件预览
+支持zip,rar,jar,tar,gzip等压缩包,预览效果如下
+
+可点击压缩包中的文件名,直接预览文件,预览效果如下
+
+
+#### 8. 多媒体文件预览
+理论上支持所有的视频、音频文件,由于无法枚举所有文件格式,默认开启的类型如下
+mp3,wav,mp4,flv
+视频预览效果如下
+
+音频预览效果如下
+
+
+#### 9. CAD文档预览
+支持CAD dwg文档预览,和word文档一样,有两种预览模式
+图片预览模式预览效果如下
+
+pdf预览模式预览效果如下
+
+考虑说明篇幅原因,就不贴其他格式文件的预览效果了,感兴趣的可以参考下面的实例搭建下
+
+#### 10. Excel文件纯前端渲染效果
+
+
+
+#### 11. 流程图bpmn文件预览效果
+
+
+
+#### 12. 3D模型文件预览效果:
+
+
+
+#### 13. dcm医疗数位影像文件预览效果:
+
+
+
+#### 14. drawio流程图预览效果:
+
+
+
+### 快速开始
+> 项目使用技术
+- spring boot: [spring boot开发参考指南](http://www.kailing.pub/PdfReader/web/viewer.html?file=springboot)
+- freemarker
+- redisson
+- jodconverter
+
+> 依赖外部环境
+- redis (可选,默认不用)
+- OpenOffice 或者 LibreOffice( Windows 下已内置,Linux 脚本启动模式会自动安装,Mac OS 下需要手动安装)
+
+1. 第一步:pull 项目 https://github.com/kekingcn/file-online-preview.git
+
+3. 第二步:运行 ServerMain 的 main 方法,服务启动后,访问 http://localhost:8012/
+会看到如下界面,代表服务启动成功
+
+
+
+### 关于引用
+ofd 引用于 [ofdview ](https://gitee.com/cnofd/ofdview ) 开源协议 Apache-2.0
+CAD 引用于 aspose-cad 测试版本 商用请自行购买
+xmind 引用于 [ xmind-embed-viewer](https://github.com/xmindltd/xmind-embed-viewer) 开源协议 MIT
+epub 引用于 [ epub.js](https://github.com/futurepress/epub.js) 开源协议 BSD许可证
+压缩包 引用于 [sevenzipjbinding](https://github.com/borisbrodski/sevenzipjbinding )开源协议LGPL
+3D 引用于 [Online3DViewer](https://github.com/kovacsv/Online3DViewer )开源协议MIT
+drawio 引用于 [drawio](https://github.com/jgraph/drawio )开源协议 Apache-2.0
+bpmn流程图 引用于 [bpmn-js](https://github.com/bpmn-io/bpmn-js ) 自定义协议 保留水印 具体自行查看
+dcm医疗数位影像 引用于 [dcmjs](https://github.com/dcmjs-org/dcmjs )开源协议MIT
+
+### 使用登记
+如果这个项目解决了你的实际问题,可在 https://gitee.com/kekingcn/file-online-preview/issues/IGSBV
+登记下,如果节省了你的三方预览服务费用,也愿意支持下的话,可点击下方【捐助】请作者喝杯咖啡,也是非常感谢
+
+### Stars
+
+#### GitHub
+
+[](https://starchart.cc/kekingcn/kkFileView)
+
+### 鸣谢
+- 本项目诞生于[凯京集团],在取得公司高层同意后以 Apache 协议开源出来反哺社区,在此特别感谢凯京集团,以及集团领导[@唐老大](https://github.com/tangshd)的支持、@端木详笑的贡献。
+- 本项目已脱离公司由[KK开源社区]维护发展壮大,感谢所有给 kkFileView 提 Issue 、Pr 开发者
+- 本项目引入的第三方组件已在 '关于引用' 列表列出,感谢这些项目,让 kkFileView 更出色
diff --git a/apps/kkfileview/data.yml b/apps/kkfileview/data.yml
new file mode 100644
index 00000000..bf238c85
--- /dev/null
+++ b/apps/kkfileview/data.yml
@@ -0,0 +1,20 @@
+name: kkFileView
+tags:
+ - 工具
+title: 一款文件文档在线预览解决方案
+type: 工具
+description: 一款文件文档在线预览解决方案
+additionalProperties:
+ key: kkfileview
+ name: kkFileView
+ tags:
+ - Tool
+ shortDescZh: 一款文件文档在线预览解决方案
+ shortDescEn: A online preview solution for documents
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://kkview.cn/zh-cn/index.html
+ github: https://github.com/kekingcn/kkFileView
+ document: https://kkfileview.keking.cn/zh-cn/docs/home.html
diff --git a/apps/kkfileview/latest/.env.sample b/apps/kkfileview/latest/.env.sample
new file mode 100644
index 00000000..b5493d0d
--- /dev/null
+++ b/apps/kkfileview/latest/.env.sample
@@ -0,0 +1,2 @@
+CONTAINER_NAME="kkfileview"
+PANEL_APP_PORT_HTTP="40145"
diff --git a/apps/kkfileview/latest/data.yml b/apps/kkfileview/latest/data.yml
new file mode 100644
index 00000000..60234e58
--- /dev/null
+++ b/apps/kkfileview/latest/data.yml
@@ -0,0 +1,10 @@
+additionalProperties:
+ formFields:
+ - default: 40145
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
diff --git a/apps/kkfileview/latest/docker-compose.yml b/apps/kkfileview/latest/docker-compose.yml
new file mode 100644
index 00000000..4a124b64
--- /dev/null
+++ b/apps/kkfileview/latest/docker-compose.yml
@@ -0,0 +1,16 @@
+version: '3'
+services:
+ kkfileview:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8012"
+ image: keking/kkfileview:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/kkfileview/logo.png b/apps/kkfileview/logo.png
new file mode 100644
index 00000000..e12e7f78
Binary files /dev/null and b/apps/kkfileview/logo.png differ
diff --git a/apps/kms-web/1113/.env.sample b/apps/kms-web/1113/.env.sample
new file mode 100644
index 00000000..738e9ee5
--- /dev/null
+++ b/apps/kms-web/1113/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="kms-web"
+PANEL_APP_PORT_HTTP="40051"
+KMS_PORT="1688"
diff --git a/apps/kms-web/1113/data.yml b/apps/kms-web/1113/data.yml
new file mode 100644
index 00000000..2f384153
--- /dev/null
+++ b/apps/kms-web/1113/data.yml
@@ -0,0 +1,19 @@
+additionalProperties:
+ formFields:
+ - default: 40051
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 1688
+ edit: true
+ envKey: KMS_PORT
+ labelEn: KMS Port
+ labelZh: KMS端口
+ required: true
+ rule: paramPort
+ type: number
+
diff --git a/apps/kms-web/1113/docker-compose.yml b/apps/kms-web/1113/docker-compose.yml
new file mode 100644
index 00000000..549fc902
--- /dev/null
+++ b/apps/kms-web/1113/docker-compose.yml
@@ -0,0 +1,19 @@
+version: '3'
+services:
+ kms-web:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ - "${KMS_PORT}:1688"
+ environment:
+ - KMS_README_WEB=true
+ image: johngong/kms:1113
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/kms-web/README.md b/apps/kms-web/README.md
new file mode 100644
index 00000000..5ef0f38a
--- /dev/null
+++ b/apps/kms-web/README.md
@@ -0,0 +1,79 @@
+## 群晖nas自用
+
+### GitHub:
+
+[https://github.com/gshang2017/docker](https://github.com/gshang2017/docker)
+
+### 感谢以下项目:
+
+[https://github.com/Wind4/vlmcsd](https://github.com/Wind4/vlmcsd "https://github.com/Wind4/vlmcsd")
+
+### 版本:
+
+|名称|版本|说明|
+|:-|:-|:-|
+|vlmcsd|1113|amd64;arm64v8;arm32v7|
+
+### docker命令行设置:
+
+* 变量名变更
+
+ |版本|1113|1112|
+ |:-:|:-|:-|
+ |1|KMS_README_WEB|WEB|
+
+1. 下载镜像
+
+ |镜像源|命令|
+ |:-|:-|
+ |DockerHub|docker pull johngong/kms:latest|
+ |GitHub|docker pull ghcr.io/gshang2017/kms:latest|
+
+2. 创建 kms容器
+
+ docker create \
+ --name=kms \
+ -p 1688:1688 \
+ -p 80:80 \
+ --restart unless-stopped \
+ johngong/kms:latest
+
+3. 运行
+
+ docker start kms
+
+4. 停止
+
+ docker stop kms
+
+5. 删除容器
+
+ docker rm kms
+
+6. 删除镜像
+
+ docker image rm johngong/kms:latest
+
+### 变量:
+
+|参数|说明|
+|:-|:-|
+| `--name=kms` |容器名|
+| `-p 1688:1688 ` |kms服务器端口|
+| `-p 80:80` |KMS使用说明web访问端口|
+| `-e KMS_README_WEB=true` |(true\|false)KMS使用说明,默认开启|
+
+### 群晖docker设置:
+
+1. 端口
+
+|参数|说明|
+|:-|:-|
+| `本地端口1:1688` |kms服务器端口|
+| `本地端口2:80` |KMS使用说明web访问端口|
+
+2. 环境变量
+
+|参数|说明|
+|:-|:-|
+| `KMS_README_WEB=true` |(true\|false)KMS使用说明,默认开启|
diff --git a/apps/kms-web/data.yml b/apps/kms-web/data.yml
new file mode 100644
index 00000000..0ccf8589
--- /dev/null
+++ b/apps/kms-web/data.yml
@@ -0,0 +1,20 @@
+name: KMS & WEB
+tags:
+ - 工具
+title: KMS 服务端与 WEB
+type: 工具
+description: KMS 服务端与 WEB
+additionalProperties:
+ key: kms-web
+ name: KMS & WEB
+ tags:
+ - Tool
+ shortDescZh: KMS 服务端与 WEB
+ shortDescEn: KMS server and WEB
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://hub.docker.com/r/johngong/kms
+ github: https://github.com/gshang2017/docker/tree/master/kms
+ document: https://hub.docker.com/r/johngong/kms
diff --git a/apps/kms-web/latest/.env.sample b/apps/kms-web/latest/.env.sample
new file mode 100644
index 00000000..738e9ee5
--- /dev/null
+++ b/apps/kms-web/latest/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="kms-web"
+PANEL_APP_PORT_HTTP="40051"
+KMS_PORT="1688"
diff --git a/apps/kms-web/latest/data.yml b/apps/kms-web/latest/data.yml
new file mode 100644
index 00000000..2f384153
--- /dev/null
+++ b/apps/kms-web/latest/data.yml
@@ -0,0 +1,19 @@
+additionalProperties:
+ formFields:
+ - default: 40051
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 1688
+ edit: true
+ envKey: KMS_PORT
+ labelEn: KMS Port
+ labelZh: KMS端口
+ required: true
+ rule: paramPort
+ type: number
+
diff --git a/apps/kms-web/latest/docker-compose.yml b/apps/kms-web/latest/docker-compose.yml
new file mode 100644
index 00000000..2e9e20d5
--- /dev/null
+++ b/apps/kms-web/latest/docker-compose.yml
@@ -0,0 +1,19 @@
+version: '3'
+services:
+ kms-web:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ - "${KMS_PORT}:1688"
+ environment:
+ - KMS_README_WEB=true
+ image: johngong/kms:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/kms-web/logo.png b/apps/kms-web/logo.png
new file mode 100644
index 00000000..9cec3e62
Binary files /dev/null and b/apps/kms-web/logo.png differ
diff --git a/apps/koodo-reader/README.md b/apps/koodo-reader/README.md
new file mode 100644
index 00000000..4842fe5a
--- /dev/null
+++ b/apps/koodo-reader/README.md
@@ -0,0 +1,136 @@
+
+
+ Koodo Reader
+
+
+
+ 一个跨平台的电子书阅读器
+
+
+
+
+## 预览
+
+
+
+
+ 封面模式
+
+ 阅读菜单
+
+ 备份和恢复
+
+ 黑夜模式和主题色
+
+ 笔记管理
+
+
+
+
Lsky Pro
+
+☁ Your photo album on the cloud.
+
+[](http://php.net)
+[](https://github.com/lsky-org/lsky-pro/releases)
+[](https://github.com/lsky-org/lsky-pro/issues)
+[](https://github.com/lsky-org/lsky-pro)
+[](https://github.com/lsky-org/lsky-pro)
+[](https://github.com/lsky-org/lsky-pro/commits/dev)
+[](https://github.com/lsky-org/lsky-pro/blob/master/LICENSE)
+
+[官网](https://www.lsky.pro) ·
+[文档](https://docs.lsky.pro) ·
+[社区](https://github.com/lsky-org/lsky-pro/discussions) ·
+[演示](https://pic.vv1234.cn) ·
+[Telegram 群组](https://t.me/lsky_pro)
+
+> master 分支为未安装三方拓展的版本,通常包含了最新未发布版本的一些实验性新特性和修复补丁,正式版本请点击 [这里](https://github.com/lsky-org/lsky-pro/releases) 下载。
+> 发现 bug 请提交 [issues](https://github.com/lsky-org/lsky-pro/issues) (提问前建议阅读[提问的智慧](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md))
+> 有任何想法、建议、或分享,请移步 [社区](https://github.com/lsky-org/lsky-pro/discussions)
+
+
+
+
+### 📌 TODO
+* [x] 支持`本地`等多种第三方云储存 `AWS S3`、`阿里云 OSS`、`腾讯云 COS`、`七牛云`、`又拍云`、`SFTP`、`FTP`、`WebDav`、`Minio`
+* [x] 多种数据库驱动支持,`MySQL 5.7+`、`PostgreSQL 9.6+`、`SQLite 3.8.8+`、`SQL Server 2017+`
+* [x] 支持配置使用多种缓存驱动,`Memcached`、`Redis`、`DynamoDB`、等其他关系型数据库,默认以文件的方式缓存
+* [x] 多图上传、拖拽上传、粘贴上传、动态设置策略上传、复制、一键复制链接
+* [x] 强大的图片管理功能,瀑布流展示,支持鼠标右键、单选多选、重命名等操作
+* [x] 自由度极高的角色组配置,可以为每个组配置多个储存策略,同时储存策略可以配置多个角色组
+* [x] 可针对角色组设置上传文件、文件夹路径命名规则、上传频率限制、图片审核等功能
+* [x] 支持图片水印、文字水印、水印平铺、设置水印位置、X/y 轴偏移量设置、旋转角度等
+* [x] 支持通过接口上传、管理图片、管理相册
+* [x] 支持在线增量更新、跨版本更新
+* [x] 图片广场
+
+### 🛠 安装要求
+- PHP >= 8.0.2
+- BCMath PHP 扩展
+- Ctype PHP 扩展
+- DOM PHP 拓展
+- Fileinfo PHP 扩展
+- JSON PHP 扩展
+- Mbstring PHP 扩展
+- OpenSSL PHP 扩展
+- PDO PHP 扩展
+- Tokenizer PHP 扩展
+- XML PHP 扩展
+- Imagick 拓展
+- exec、shell_exec 函数
+- readlink、symlink 函数
+- putenv、getenv 函数
+- chmod、chown、fileperms 函数
+
+### 😋 鸣谢
+- [Laravel](https://laravel.com)
+- [Tailwindcss](https://tailwindcss.com)
+- [Fontawesome](https://fontawesome.com)
+- [Echarts](https://echarts.apache.org)
+- [Intervention/image](https://github.com/Intervention/image)
+- [league/flysystem](https://flysystem.thephpleague.com)
+- [overtrue](https://github.com/overtrue)
+- [Jquery](https://jquery.com)
+- [jQuery-File-Upload](https://github.com/blueimp/jQuery-File-Upload)
+- [Alpinejs](https://alpinejs.dev/)
+- [Viewer.js](https://github.com/fengyuanchen/viewerjs)
+- [DragSelect](https://github.com/ThibaultJanBeyer/DragSelect)
+- [Justified-Gallery](https://github.com/miromannino/Justified-Gallery)
+- [Clipboard.js](https://github.com/zenorocha/clipboard.js)
+
+### 💰 捐赠
+Lsky Pro 的开发和更新等,都是作者在业余时间独立开发,并免费开源使用,如果您认可我的作品,并且觉得对你有所帮助我愿意接受来自各方面的捐赠😃。
+
+
+
+### 🤩 Stargazers over time
+[](https://starchart.cc/lsky-org/lsky-pro)
+
+### 📧 联系我
+- Email: i@wispx.cn
+
+### 📃 开源许可
+[GPL 3.0](https://opensource.org/licenses/GPL-3.0)
+
+Copyright (c) 2018-present Lsky Pro.
+
diff --git a/apps/lsky-pro/data.yml b/apps/lsky-pro/data.yml
new file mode 100644
index 00000000..3a58a45b
--- /dev/null
+++ b/apps/lsky-pro/data.yml
@@ -0,0 +1,20 @@
+name: 兰空图床 Lsky-pro
+tags:
+ - 工具
+title: Lsky Pro 是一个用于在线上传、管理图片的图床程序
+type: 工具
+description: Lsky Pro 是一个用于在线上传、管理图片的图床程序
+additionalProperties:
+ key: lsky-pro
+ name: 兰空图床 Lsky-pro
+ tags:
+ - Tool
+ shortDescZh: Lsky Pro 是一个用于在线上传、管理图片的图床程序
+ shortDescEn: Lsky Pro is an image bed program for uploading and managing images online
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://hub.docker.com/r/halcyonazure/lsky-pro-docker
+ github: https://github.com/lsky-org/lsky-pro
+ document: https://docs.lsky.pro/
diff --git a/apps/lsky-pro/latest/.env.sample b/apps/lsky-pro/latest/.env.sample
new file mode 100644
index 00000000..f49247e4
--- /dev/null
+++ b/apps/lsky-pro/latest/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="lskypro"
+PANEL_APP_PORT_HTTP="40027"
+DATA_PATH="./data"
\ No newline at end of file
diff --git a/apps/lsky-pro/latest/data.yml b/apps/lsky-pro/latest/data.yml
new file mode 100644
index 00000000..bbc3f4e1
--- /dev/null
+++ b/apps/lsky-pro/latest/data.yml
@@ -0,0 +1,17 @@
+additionalProperties:
+ formFields:
+ - default: 40027
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
diff --git a/apps/lsky-pro/latest/docker-compose.yml b/apps/lsky-pro/latest/docker-compose.yml
new file mode 100644
index 00000000..d916808a
--- /dev/null
+++ b/apps/lsky-pro/latest/docker-compose.yml
@@ -0,0 +1,20 @@
+version: "3"
+services:
+ lskypro:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ volumes:
+ - "${DATA_PATH}:/var/www/html/"
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:8089"
+ environment:
+ - "WEB_PORT=8089"
+ image: halcyonazure/lsky-pro-docker:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/lsky-pro/logo.png b/apps/lsky-pro/logo.png
new file mode 100644
index 00000000..6c4c87ef
Binary files /dev/null and b/apps/lsky-pro/logo.png differ
diff --git a/apps/maddy-mail/0.7/.env.sample b/apps/maddy-mail/0.7/.env.sample
new file mode 100644
index 00000000..80eea5a2
--- /dev/null
+++ b/apps/maddy-mail/0.7/.env.sample
@@ -0,0 +1,8 @@
+CONTAINER_NAME="maddy-mail"
+MAIL_DOMAIN="example.com"
+MAIL_HOSTNAME="mail.example.com"
+SMTP_IN_PORT="25"
+IMAP4_PORT="143"
+IMAP4_PORT2="993"
+SMTP_S_PORT="465"
+SMTP_S_PORT2="587"
diff --git a/apps/maddy-mail/0.7/data.yml b/apps/maddy-mail/0.7/data.yml
new file mode 100644
index 00000000..041ab794
--- /dev/null
+++ b/apps/maddy-mail/0.7/data.yml
@@ -0,0 +1,56 @@
+additionalProperties:
+ formFields:
+ - default: 25
+ disabled: true
+ envKey: SMTP_IN_PORT
+ labelEn: SMTP inbound port
+ labelZh: SMTP 入站端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 143
+ disabled: true
+ envKey: IMAP4_PORT
+ labelEn: IMAP4 port
+ labelZh: IMAP4 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 993
+ disabled: true
+ envKey: IMAP4_PORT2
+ labelEn: IMAP4 port
+ labelZh: IMAP4 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 465
+ disabled: true
+ envKey: SMTP_S_PORT
+ labelEn: SMTP Submission ports
+ labelZh: SMTP 提交端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 587
+ disabled: true
+ envKey: SMTP_S_PORT2
+ labelEn: SMTP Submission ports
+ labelZh: SMTP 提交端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: mail.example.com
+ edit: true
+ envKey: MAIL_HOSTNAME
+ labelEn: Mail MX hostname
+ labelZh: 邮箱 MX 主机名
+ required: true
+ type: text
+ - default: example.com
+ edit: true
+ envKey: MAIL_DOMAIN
+ labelEn: Mail domain
+ labelZh: 邮箱域名
+ required: true
+ type: text
diff --git a/apps/maddy-mail/0.7/docker-compose.yml b/apps/maddy-mail/0.7/docker-compose.yml
new file mode 100644
index 00000000..a544c656
--- /dev/null
+++ b/apps/maddy-mail/0.7/docker-compose.yml
@@ -0,0 +1,29 @@
+version: '3'
+services:
+ maddymail:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${SMTP_IN_PORT}:25"
+ - "${IMAP4_PORT}:143"
+ - "${SMTP_S_PORT}:465"
+ - "${SMTP_S_PORT2}:587"
+ - "${IMAP4_PORT2}:993"
+ volumes:
+ - maddydata:/data
+ environment:
+ - MADDY_HOSTNAME=${MAIL_HOSTNAME}
+ - MADDY_DOMAIN=${MAIL_DOMAIN}
+ image: foxcpp/maddy:0.7.0
+ labels:
+ createdBy: "Apps"
+
+volumes:
+ maddydata:
+ external: true
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/maddy-mail/README.md b/apps/maddy-mail/README.md
new file mode 100644
index 00000000..ea3bd9e7
--- /dev/null
+++ b/apps/maddy-mail/README.md
@@ -0,0 +1,126 @@
+# 使用说明
+
+## 1. 准备域名证书
+使用`acme.sh`、`certbot`、手动上传等方式准备好域名证书,注意需要按需修改。
+
+证书对应域名为邮箱`MX`主机名如`mail.example.com `。
+
+## 2. 创建Docker存储卷
+```
+docker volume create maddydata
+```
+
+## 3. 安装应用
+
+应用商店安装应用,
+
+第一次安装会显示异常,容器无法正常运行,不必在意,因为缺少证书文件。
+
+忽略错误,进行下一步操作。
+
+
+## 4. 域名证书存放到存储卷
+
+存储卷默认路径如下
+`/var/lib/docker/volumes/maddydata/_data/`
+
+```
+# 进入存储卷路径
+cd $(docker volume inspect maddydata --format '{{.Mountpoint}}')
+
+# 创建证书文件夹
+mkdir -p tls
+```
+上传证书和私钥到`tls`文件夹,并重命名为
+- fullchain.pem
+- privkey.pem
+
+按要求上传完成证书文件后,容器会自动正常运行。
+
+## 5. 设置DKIM DNS解析
+### 5.1 获取DKIM值
+
+当容器正常运行后
+
+在`/var/lib/docker/volumes/maddydata/_data/dkim_keys`路径下
+
+会有个类似`example.com_default.dns`的文件
+
+其中则是需要获取的相关信息。
+
+- 注意按需修改域名
+
+终端查看
+```
+cat /var/lib/docker/volumes/maddydata/_data/dkim_keys/example.com_default.dns
+```
+
+会得到类似以下内容
+```
+default._domainkey.example.org. TXT "v=DKIM1; k=ed25519; p=nAcUUozPlhc4VPhp7hZl+owES7j7OlEv0laaDEDBAqg="
+```
+
+### 5.2 设置DNS TXT记录
+
+根据获取的信息设置`DNS解析`
+
+例子如下:
+为 `default._domainkey.example.com` 添加`TXT`记录,值设置为`v=DKIM1; k=ed25519; p=nAcUUozPlhc4VPhp7hZl+owES7j7OlEv0laaDEDBAqg=`。
+
+## 6. 设置DNS解析
+
+- 注意按需修改
+
+| 记录类型 | 域名 | 值 |
+| --- | --- | --- |
+| A | `mail.example.com` | `服务器ipv4地址` |
+| A | `example.com` | `服务器ipv4地址` |
+| AAAA | `mail.example.com` | `服务器ipv6地址(如果有)` |
+| AAAA | `example.com` | `服务器ipv6地址(如果有)` |
+| MX | `example.com` | `mail.example.com` |
+| TXT | `mail.example.com` | `v=spf1 mx ~all` |
+| TXT | `example.com` | `v=spf1 mx ~all` |
+| TXT | `_dmarc.example.com` | `v=DMARC1; p=quarantine; ruf=mailto:postmaster@example.com` |
+| TXT | `_mta-sts.example.com` | `v=STSv1; id=1` |
+| TXT | `_smtp._tls.example.com` | `v=TLSRPTv1;rua=mailto:postmaster@example.com` |
+
+## 7. 创建发送账户
+
+面板`容器`界面,连接容器终端,执行以下命令
+
+- 注意按需修改
+
+```
+maddy creds create postmaster@example.com
+
+maddy imap-acct create postmaster@example.com
+```
+结束
+
+# 原始相关
+
+Maddy Mail Server
+=====================
+> Composable all-in-one mail server.
+
+Maddy Mail Server implements all functionality required to run a e-mail
+server. It can send messages via SMTP (works as MTA), accept messages via SMTP
+(works as MX) and store messages while providing access to them via IMAP.
+In addition to that it implements auxiliary protocols that are mandatory
+to keep email reasonably secure (DKIM, SPF, DMARC, DANE, MTA-STS).
+
+It replaces Postfix, Dovecot, OpenDKIM, OpenSPF, OpenDMARC and more with one
+daemon with uniform configuration and minimal maintenance cost.
+
+**Note:** IMAP storage is "beta". If you are looking for stable and
+feature-packed implementation you may want to use Dovecot instead. maddy still
+can handle message delivery business.
+
+[](https://github.com/foxcpp/maddy/actions/workflows/cicd.yml)
+[](https://github.com/foxcpp/maddy)
+
+* [Setup tutorial](https://maddy.email/tutorials/setting-up/)
+* [Documentation](https://maddy.email/)
+
+* [IRC channel](https://webchat.oftc.net/?channels=maddy&uio=MT11bmRlZmluZWQb1)
+* [Mailing list](https://lists.sr.ht/~foxcpp/maddy)
diff --git a/apps/maddy-mail/data.yml b/apps/maddy-mail/data.yml
new file mode 100644
index 00000000..4749c12e
--- /dev/null
+++ b/apps/maddy-mail/data.yml
@@ -0,0 +1,20 @@
+name: Maddy Mail Server
+tags:
+ - 邮件服务
+title: 可组合的多合一邮件服务器
+type: 邮件服务
+description: 可组合的多合一邮件服务器
+additionalProperties:
+ key: maddy-mail
+ name: Maddy Mail Server
+ tags:
+ - Email
+ shortDescZh: 可组合的多合一邮件服务器
+ shortDescEn: Composable all-in-one mail server
+ type: tool
+ crossVersionUpdate: true
+ limit: 1
+ recommend: 0
+ website: https://maddy.email
+ github: https://github.com/foxcpp/maddy
+ document: https://maddy.email
diff --git a/apps/maddy-mail/latest/.env.sample b/apps/maddy-mail/latest/.env.sample
new file mode 100644
index 00000000..80eea5a2
--- /dev/null
+++ b/apps/maddy-mail/latest/.env.sample
@@ -0,0 +1,8 @@
+CONTAINER_NAME="maddy-mail"
+MAIL_DOMAIN="example.com"
+MAIL_HOSTNAME="mail.example.com"
+SMTP_IN_PORT="25"
+IMAP4_PORT="143"
+IMAP4_PORT2="993"
+SMTP_S_PORT="465"
+SMTP_S_PORT2="587"
diff --git a/apps/maddy-mail/latest/data.yml b/apps/maddy-mail/latest/data.yml
new file mode 100644
index 00000000..041ab794
--- /dev/null
+++ b/apps/maddy-mail/latest/data.yml
@@ -0,0 +1,56 @@
+additionalProperties:
+ formFields:
+ - default: 25
+ disabled: true
+ envKey: SMTP_IN_PORT
+ labelEn: SMTP inbound port
+ labelZh: SMTP 入站端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 143
+ disabled: true
+ envKey: IMAP4_PORT
+ labelEn: IMAP4 port
+ labelZh: IMAP4 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 993
+ disabled: true
+ envKey: IMAP4_PORT2
+ labelEn: IMAP4 port
+ labelZh: IMAP4 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 465
+ disabled: true
+ envKey: SMTP_S_PORT
+ labelEn: SMTP Submission ports
+ labelZh: SMTP 提交端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: 587
+ disabled: true
+ envKey: SMTP_S_PORT2
+ labelEn: SMTP Submission ports
+ labelZh: SMTP 提交端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: mail.example.com
+ edit: true
+ envKey: MAIL_HOSTNAME
+ labelEn: Mail MX hostname
+ labelZh: 邮箱 MX 主机名
+ required: true
+ type: text
+ - default: example.com
+ edit: true
+ envKey: MAIL_DOMAIN
+ labelEn: Mail domain
+ labelZh: 邮箱域名
+ required: true
+ type: text
diff --git a/apps/maddy-mail/latest/docker-compose.yml b/apps/maddy-mail/latest/docker-compose.yml
new file mode 100644
index 00000000..b82e853f
--- /dev/null
+++ b/apps/maddy-mail/latest/docker-compose.yml
@@ -0,0 +1,29 @@
+version: '3'
+services:
+ maddymail:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${SMTP_IN_PORT}:25"
+ - "${IMAP4_PORT}:143"
+ - "${SMTP_S_PORT}:465"
+ - "${SMTP_S_PORT2}:587"
+ - "${IMAP4_PORT2}:993"
+ volumes:
+ - maddydata:/data
+ environment:
+ - MADDY_HOSTNAME=${MAIL_HOSTNAME}
+ - MADDY_DOMAIN=${MAIL_DOMAIN}
+ image: foxcpp/maddy:latest
+ labels:
+ createdBy: "Apps"
+
+volumes:
+ maddydata:
+ external: true
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/maddy-mail/logo.png b/apps/maddy-mail/logo.png
new file mode 100644
index 00000000..1e1313c0
Binary files /dev/null and b/apps/maddy-mail/logo.png differ
diff --git a/apps/matomo/4.15.1/.env.sample b/apps/matomo/4.15.1/.env.sample
new file mode 100644
index 00000000..a65006ab
--- /dev/null
+++ b/apps/matomo/4.15.1/.env.sample
@@ -0,0 +1,8 @@
+CONTAINER_NAME="matomo"
+PANEL_APP_PORT_HTTP="40077"
+DATA_PATH="./data"
+PANEL_DB_HOST="127.0.0.1"
+PANEL_DB_NAME="matomo"
+PANEL_DB_USER="matomo"
+PANEL_DB_USER_PASSWORD="MyDBPWD_brls9UwcRasl"
+PANEL_DB_PREFIX="matomo_"
\ No newline at end of file
diff --git a/apps/matomo/4.15.1/data.yml b/apps/matomo/4.15.1/data.yml
new file mode 100644
index 00000000..4031e97a
--- /dev/null
+++ b/apps/matomo/4.15.1/data.yml
@@ -0,0 +1,68 @@
+additionalProperties:
+ formFields:
+ - child:
+ default: ""
+ envKey: PANEL_DB_HOST
+ labelEn: Database Service
+ labelZh: 数据库服务
+ required: true
+ type: service
+ default: mysql
+ labelEn: Database Service
+ labelZh: 数据库服务
+ params:
+ - envKey: MATOMO_DB_PORT
+ key: mysql
+ type: param
+ value: "3306"
+ required: true
+ type: apps
+ values:
+ - label: MySQL
+ value: mysql
+ - default: matomo
+ envKey: PANEL_DB_NAME
+ labelEn: Database
+ labelZh: 数据库名
+ random: true
+ required: true
+ rule: paramCommon
+ type: text
+ - default: matomo
+ envKey: PANEL_DB_USER
+ labelEn: User
+ labelZh: 数据库用户
+ random: true
+ required: true
+ rule: paramCommon
+ type: text
+ - default: matomo
+ envKey: PANEL_DB_USER_PASSWORD
+ labelEn: Password
+ labelZh: 数据库用户密码
+ random: true
+ required: true
+ rule: paramComplexity
+ type: password
+ - default: matomo_
+ envKey: PANEL_DB_PREFIX
+ labelEn: Database prefix
+ labelZh: 数据库前缀
+ required: true
+ type: text
+ - default: 40077
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data storage folder
+ labelZh: 数据存放文件夹
+ required: true
+ type: text
+
diff --git a/apps/matomo/4.15.1/data/matomo.conf b/apps/matomo/4.15.1/data/matomo.conf
new file mode 100644
index 00000000..05115f7a
--- /dev/null
+++ b/apps/matomo/4.15.1/data/matomo.conf
@@ -0,0 +1,69 @@
+upstream php-handler {
+ server matomo:9000;
+}
+
+server {
+ listen 80;
+
+ add_header Referrer-Policy origin; # make sure outgoing links don't show the URL to the Matomo instance
+ root /var/www/html; # replace with path to your matomo instance
+ index index.php;
+ try_files $uri $uri/ =404;
+
+ ## only allow accessing the following php files
+ location ~ ^/(index|matomo|piwik|js/index|plugins/HeatmapSessionRecording/configs).php {
+ # regex to split $uri to $fastcgi_script_name and $fastcgi_path
+ fastcgi_split_path_info ^(.+\.php)(/.+)$;
+
+ # Check that the PHP script exists before passing it
+ try_files $fastcgi_script_name =404;
+
+ include fastcgi_params;
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+ fastcgi_param PATH_INFO $fastcgi_path_info;
+ fastcgi_param HTTP_PROXY ""; # prohibit httpoxy: https://httpoxy.org/
+ fastcgi_pass php-handler;
+ }
+
+ ## deny access to all other .php files
+ location ~* ^.+\.php$ {
+ deny all;
+ return 403;
+ }
+
+ ## disable all access to the following directories
+ location ~ /(config|tmp|core|lang) {
+ deny all;
+ return 403; # replace with 404 to not show these directories exist
+ }
+ location ~ /\.ht {
+ deny all;
+ return 403;
+ }
+
+ location ~ js/container_.*_preview\.js$ {
+ expires off;
+ add_header Cache-Control 'private, no-cache, no-store';
+ }
+
+ location ~ \.(gif|ico|jpg|png|svg|js|css|htm|html|mp3|mp4|wav|ogg|avi|ttf|eot|woff|woff2|json)$ {
+ allow all;
+ ## Cache images,CSS,JS and webfonts for an hour
+ ## Increasing the duration may improve the load-time, but may cause old files to show after an Matomo upgrade
+ expires 1h;
+ add_header Pragma public;
+ add_header Cache-Control "public";
+ }
+
+ location ~ /(libs|vendor|plugins|misc/user) {
+ deny all;
+ return 403;
+ }
+
+ ## properly display textfiles in root directory
+ location ~/(.*\.md|LEGALNOTICE|LICENSE) {
+ default_type text/plain;
+ }
+}
+
+# vim: filetype=nginx
diff --git a/apps/matomo/4.15.1/docker-compose.yml b/apps/matomo/4.15.1/docker-compose.yml
new file mode 100644
index 00000000..e3ad59d9
--- /dev/null
+++ b/apps/matomo/4.15.1/docker-compose.yml
@@ -0,0 +1,40 @@
+version: '3'
+services:
+ matomo:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ volumes:
+ - "${DATA_PATH}/web:/var/www/html"
+ environment:
+ - MATOMO_DATABASE_HOST=${PANEL_DB_HOST}
+ - MATOMO_DATABASE_ADAPTER=mysql
+ - MATOMO_DATABASE_TABLES_PREFIX=${PANEL_DB_PREFIX}
+ - MATOMO_DATABASE_USERNAME=${PANEL_DB_USER}
+ - MATOMO_DATABASE_PASSWORD=${PANEL_DB_USER_PASSWORD}
+ - MATOMO_DATABASE_DBNAME=${PANEL_DB_NAME}
+ - PHP_MEMORY_LIMIT=2048M
+ image: matomo:4.15.1-fpm-alpine
+ labels:
+ createdBy: Apps
+
+ matomo-web:
+ container_name: ${CONTAINER_NAME}-web
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ volumes:
+ - "${DATA_PATH}/web:/var/www/html:z,ro"
+ - "./data/matomo.conf:/etc/nginx/conf.d/default.conf:z,ro"
+ image: nginx:alpine
+ depends_on:
+ - matomo
+ labels:
+ createdBy: Apps
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/matomo/README.md b/apps/matomo/README.md
new file mode 100644
index 00000000..2e6f100e
--- /dev/null
+++ b/apps/matomo/README.md
@@ -0,0 +1,139 @@
+# 使用说明
+
+当完成部署初始化时,注意需要按照页面提示,
+
+修改`config.ini.php`文件,将访问IP/域名加入白名单,或者取消白名单。
+
+文件所在大致路径如下,注意按需修改
+
+```
+/opt/1panel/apps/local/matomo/matomo/data/web/config
+```
+
+# 原始相关
+
+# Matomo (formerly Piwik) - matomo.org
+
+[](https://matomo.org/download/)
+[](https://builds.matomo.org/)
+[](https://matomo.org/free-software/)
+
+## Code Status
+
+[](https://github.com/matomo-org/matomo/actions/workflows/matomo-tests.yml)
+[](http://isitmaintained.com/project/matomo-org/matomo "Percentage of issues still open")
+
+## Description
+
+Matomo is the leading Free/Libre open analytics platform.
+
+Matomo is a full-featured PHP MySQL software program that you download and install on your own webserver.
+At the end of the five-minute installation process, you will be given a JavaScript code.
+Simply copy and paste this tag on websites you wish to track and access your analytics reports in real-time.
+
+Matomo aims to be a Free software alternative to Google Analytics and is already used on more than 1,400,000 websites. Privacy is built-in!
+
+## Mission Statement
+
+> « To create, as a community, the leading international open source digital analytics platform, that gives every user full control of their data. »
+
+Or in short:
+> « Liberate Web Analytics »
+
+## License
+
+Matomo is released under the GPL v3 (or later) license, see [LICENSE](https://github.com/matomo-org/matomo/blob/5.x-dev/LICENSE).
+
+## Requirements
+
+ * PHP 7.2.5 or greater
+ * MySQL version 5.5 or greater, or MariaDB
+ * PHP extension pdo and pdo_mysql, or the MySQLi extension
+ * Matomo is OS / server independent
+
+See https://matomo.org/docs/requirements/.
+
+## Install Matomo
+
+ * [Download Matomo](https://matomo.org/download/)
+ * Upload matomo to your webserver
+ * Point your browser to the directory
+ * Follow the steps
+ * Add the given javascript code to your pages
+ * (You may also generate fake data to experiment, by enabling the plugin VisitorGenerator)
+
+See https://matomo.org/docs/installation/.
+
+(When using Matomo for development you need to [install Matomo from the Git repository](https://matomo.org/faq/how-to-install/faq_18271/)).
+
+## Free trial
+
+If you do not have a server or don't want to host yourself you can use our Matomo Cloud partner service (21 day free trial): https://matomo.org/start-free-analytics-trial/
+
+## Online Demo
+
+Check out the online demo for Matomo at [demo.matomo.cloud](https://demo.matomo.cloud/).
+
+## Changelog
+
+For the list of all tickets closed in the current and past releases, see [matomo.org/changelog/](https://matomo.org/changelog/). For the list of technical changes in the Matomo platform, see [developer.matomo.org/changelog](https://developer.matomo.org/changelog).
+
+## Get involved!
+
+We believe in liberating Web Analytics, providing a free platform for simple and advanced analytics. Matomo was built by dozens of people like you,
+and we need your help to make Matomo better… Why not participate in a useful project today? [Learn how you can contribute to Matomo](https://matomo.org/get-involved).
+
+## Translations
+
+Our translations are managed on [Weblate](https://hosted.weblate.org/engage/matomo/).
+
+[](https://hosted.weblate.org/engage/matomo/)
+
+## Quality Assurance
+
+The Matomo project uses an ever-expanding comprehensive set of thousands of unit tests and hundreds of automated integration tests, system tests, JavaScript tests, and screenshot UI tests, running on a continuous integration server as part of its software quality assurance. [Learn more](https://developer.matomo.org/guides/tests).
+
+We use [BrowserStack.com](https://www.browserstack.com/) testing tool to help check the Matomo user interface is compatible with many browsers.
+
+## Security
+
+Security is a top priority at Matomo. As potential issues are discovered, we validate, patch and release fixes as quickly as we can. We have a security bug bounty program in place that rewards researchers for finding security issues and disclosing them to us.
+
+[Learn more](https://matomo.org/security/) or check out our [HackerOne program](https://hackerone.com/matomo).
+
+## Support for Matomo
+
+For **Free support**, post a message in our community forums: [forum.matomo.org](https://forum.matomo.org/)
+
+For **Professional paid support**, purchase a Matomo On-Premises Support Plan: [matomo.org/support-plans](https://matomo.org/support-plans/)
+
+## Contact
+
+Website: [matomo.org](https://matomo.org)
+
+About us: [matomo.org/team/](https://matomo.org/team/)
+
+Contact us: [matomo.org/contact/](https://matomo.org/contact/)
+
+
+## More information
+
+What makes Matomo unique from the competition:
+
+ * You own your web analytics data: since Matomo is installed on your server, the data is stored in your own database and you can get all the statistics using the powerful Matomo Analytics API.
+
+ * Matomo is a Free Software which can easily be configured to respect your visitors' privacy.
+
+ * Modern, easy to use User Interface: you can fully customize your dashboard, drag and drop widgets and more.
+
+ * Matomo features are built inside plugins: you can add new features and remove the ones you don’t need.
+ You can build your own web analytics plugins or hire a consultant to have your custom feature built-in Matomo.
+
+ * A vibrant international Open community of more than 200,000 active users (tracking even more websites!)
+
+ * Advanced Web Analytics capabilities such as E-commerce Tracking, Goal tracking, Campaign tracking,
+ Custom Variables, Email Reports, Custom Segment Editor, Geo Location, Real-time visits and maps, [and a lot more!](https://matomo.org/feature-overview/)
+
+Documentation and more info on https://matomo.org.
+
+We are together creating the best open analytics platform in the world!
diff --git a/apps/matomo/data.yml b/apps/matomo/data.yml
new file mode 100644
index 00000000..00155e31
--- /dev/null
+++ b/apps/matomo/data.yml
@@ -0,0 +1,20 @@
+name: Matomo
+tags:
+ - 工具
+title: 开源的网站分析应用程序
+type: 工具
+description: 开源的网站分析应用程序
+additionalProperties:
+ key: matomo
+ name: Matomo
+ tags:
+ - Tool
+ shortDescZh: 开源的网站分析应用程序
+ shortDescEn: Liberating Web Analytics
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://matomo.org/
+ github: https://github.com/matomo-org/matomo
+ document: https://matomo.org/docs
diff --git a/apps/matomo/latest/.env.sample b/apps/matomo/latest/.env.sample
new file mode 100644
index 00000000..a65006ab
--- /dev/null
+++ b/apps/matomo/latest/.env.sample
@@ -0,0 +1,8 @@
+CONTAINER_NAME="matomo"
+PANEL_APP_PORT_HTTP="40077"
+DATA_PATH="./data"
+PANEL_DB_HOST="127.0.0.1"
+PANEL_DB_NAME="matomo"
+PANEL_DB_USER="matomo"
+PANEL_DB_USER_PASSWORD="MyDBPWD_brls9UwcRasl"
+PANEL_DB_PREFIX="matomo_"
\ No newline at end of file
diff --git a/apps/matomo/latest/data.yml b/apps/matomo/latest/data.yml
new file mode 100644
index 00000000..4031e97a
--- /dev/null
+++ b/apps/matomo/latest/data.yml
@@ -0,0 +1,68 @@
+additionalProperties:
+ formFields:
+ - child:
+ default: ""
+ envKey: PANEL_DB_HOST
+ labelEn: Database Service
+ labelZh: 数据库服务
+ required: true
+ type: service
+ default: mysql
+ labelEn: Database Service
+ labelZh: 数据库服务
+ params:
+ - envKey: MATOMO_DB_PORT
+ key: mysql
+ type: param
+ value: "3306"
+ required: true
+ type: apps
+ values:
+ - label: MySQL
+ value: mysql
+ - default: matomo
+ envKey: PANEL_DB_NAME
+ labelEn: Database
+ labelZh: 数据库名
+ random: true
+ required: true
+ rule: paramCommon
+ type: text
+ - default: matomo
+ envKey: PANEL_DB_USER
+ labelEn: User
+ labelZh: 数据库用户
+ random: true
+ required: true
+ rule: paramCommon
+ type: text
+ - default: matomo
+ envKey: PANEL_DB_USER_PASSWORD
+ labelEn: Password
+ labelZh: 数据库用户密码
+ random: true
+ required: true
+ rule: paramComplexity
+ type: password
+ - default: matomo_
+ envKey: PANEL_DB_PREFIX
+ labelEn: Database prefix
+ labelZh: 数据库前缀
+ required: true
+ type: text
+ - default: 40077
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data storage folder
+ labelZh: 数据存放文件夹
+ required: true
+ type: text
+
diff --git a/apps/matomo/latest/data/matomo.conf b/apps/matomo/latest/data/matomo.conf
new file mode 100644
index 00000000..05115f7a
--- /dev/null
+++ b/apps/matomo/latest/data/matomo.conf
@@ -0,0 +1,69 @@
+upstream php-handler {
+ server matomo:9000;
+}
+
+server {
+ listen 80;
+
+ add_header Referrer-Policy origin; # make sure outgoing links don't show the URL to the Matomo instance
+ root /var/www/html; # replace with path to your matomo instance
+ index index.php;
+ try_files $uri $uri/ =404;
+
+ ## only allow accessing the following php files
+ location ~ ^/(index|matomo|piwik|js/index|plugins/HeatmapSessionRecording/configs).php {
+ # regex to split $uri to $fastcgi_script_name and $fastcgi_path
+ fastcgi_split_path_info ^(.+\.php)(/.+)$;
+
+ # Check that the PHP script exists before passing it
+ try_files $fastcgi_script_name =404;
+
+ include fastcgi_params;
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
+ fastcgi_param PATH_INFO $fastcgi_path_info;
+ fastcgi_param HTTP_PROXY ""; # prohibit httpoxy: https://httpoxy.org/
+ fastcgi_pass php-handler;
+ }
+
+ ## deny access to all other .php files
+ location ~* ^.+\.php$ {
+ deny all;
+ return 403;
+ }
+
+ ## disable all access to the following directories
+ location ~ /(config|tmp|core|lang) {
+ deny all;
+ return 403; # replace with 404 to not show these directories exist
+ }
+ location ~ /\.ht {
+ deny all;
+ return 403;
+ }
+
+ location ~ js/container_.*_preview\.js$ {
+ expires off;
+ add_header Cache-Control 'private, no-cache, no-store';
+ }
+
+ location ~ \.(gif|ico|jpg|png|svg|js|css|htm|html|mp3|mp4|wav|ogg|avi|ttf|eot|woff|woff2|json)$ {
+ allow all;
+ ## Cache images,CSS,JS and webfonts for an hour
+ ## Increasing the duration may improve the load-time, but may cause old files to show after an Matomo upgrade
+ expires 1h;
+ add_header Pragma public;
+ add_header Cache-Control "public";
+ }
+
+ location ~ /(libs|vendor|plugins|misc/user) {
+ deny all;
+ return 403;
+ }
+
+ ## properly display textfiles in root directory
+ location ~/(.*\.md|LEGALNOTICE|LICENSE) {
+ default_type text/plain;
+ }
+}
+
+# vim: filetype=nginx
diff --git a/apps/matomo/latest/docker-compose.yml b/apps/matomo/latest/docker-compose.yml
new file mode 100644
index 00000000..f288018b
--- /dev/null
+++ b/apps/matomo/latest/docker-compose.yml
@@ -0,0 +1,40 @@
+version: '3'
+services:
+ matomo:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ volumes:
+ - "${DATA_PATH}/web:/var/www/html"
+ environment:
+ - MATOMO_DATABASE_HOST=${PANEL_DB_HOST}
+ - MATOMO_DATABASE_ADAPTER=mysql
+ - MATOMO_DATABASE_TABLES_PREFIX=${PANEL_DB_PREFIX}
+ - MATOMO_DATABASE_USERNAME=${PANEL_DB_USER}
+ - MATOMO_DATABASE_PASSWORD=${PANEL_DB_USER_PASSWORD}
+ - MATOMO_DATABASE_DBNAME=${PANEL_DB_NAME}
+ - PHP_MEMORY_LIMIT=2048M
+ image: matomo:fpm-alpine
+ labels:
+ createdBy: Apps
+
+ matomo-web:
+ container_name: ${CONTAINER_NAME}-web
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:80"
+ volumes:
+ - "${DATA_PATH}/web:/var/www/html:z,ro"
+ - "./data/matomo.conf:/etc/nginx/conf.d/default.conf:z,ro"
+ image: nginx:alpine
+ depends_on:
+ - matomo
+ labels:
+ createdBy: Apps
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/matomo/logo.png b/apps/matomo/logo.png
new file mode 100644
index 00000000..d45bc99c
Binary files /dev/null and b/apps/matomo/logo.png differ
diff --git a/apps/mcsmanager-daemon/3.4.0/.env.sample b/apps/mcsmanager-daemon/3.4.0/.env.sample
new file mode 100644
index 00000000..775c2932
--- /dev/null
+++ b/apps/mcsmanager-daemon/3.4.0/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="mcsmanager-daemon"
+PANEL_APP_PORT_HTTP="40057"
+DATA_PATH="./data"
diff --git a/apps/mcsmanager-daemon/3.4.0/data.yml b/apps/mcsmanager-daemon/3.4.0/data.yml
new file mode 100644
index 00000000..646f7f54
--- /dev/null
+++ b/apps/mcsmanager-daemon/3.4.0/data.yml
@@ -0,0 +1,18 @@
+additionalProperties:
+ formFields:
+ - default: 40057
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+
diff --git a/apps/mcsmanager-daemon/3.4.0/docker-compose.yml b/apps/mcsmanager-daemon/3.4.0/docker-compose.yml
new file mode 100644
index 00000000..3df0e9b8
--- /dev/null
+++ b/apps/mcsmanager-daemon/3.4.0/docker-compose.yml
@@ -0,0 +1,19 @@
+version: '3'
+services:
+ mcsm-daemon:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:24444"
+ volumes:
+ - "${DATA_PATH}:/opt/mcsmanager/daemon/data"
+ - /var/run/docker.sock:/var/run/docker.sock
+ image: alisaqaq/mcsmanager-daemon:3.4.0
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/mcsmanager-daemon/README.md b/apps/mcsmanager-daemon/README.md
new file mode 100644
index 00000000..6e39d997
--- /dev/null
+++ b/apps/mcsmanager-daemon/README.md
@@ -0,0 +1,244 @@
+
+
+ 支付宝
+ 微信
+
+
+
+
+
+
+
+
+[](https://www.npmjs.com/)
+[](https://nodejs.org/en/download/)
+[](https://github.com/MCSManager)
+
+[官方网站](http://mcsmanager.com/) | [使用文档](https://docs.mcsmanager.com/) | [团队主页](https://github.com/MCSManager) | [面板端项目](https://github.com/MCSManager/MCSManager) | [网页前端项目](https://github.com/MCSManager/UI) | [守护进程项目](https://github.com/MCSManager/Daemon)
+
+
+中文 QQ 群:https://jq.qq.com/?_wv=1027&k=Pgl9ScGw
+
+中文 TG 群:https://t.me/MCSManager_dev
+
+爱发电赞助:https://afdian.net/a/mcsmanager
+
+
+
+## 这是什么?
+
+
+MCSManager 面板(简称:MCSM 面板)是一款开源,分布式,轻量级,快速部署,支持大部分游戏服务端和控制台程序的管理面板
+
+
+
+## 软件特性
+
+软件在 Minecraft 和其他游戏社区内中已有一定的流行程度,它可以帮助你集中管理多个物理服务器,动态在任何主机上创建游戏服务端,并且提供安全可靠的多用户权限系统,可以很轻松的帮助你管理多个服务器,一直在为 Minecraft,Terraria,Steam 游戏服务器管理员,运维人员和个人开发者提供健康的软件支持。
+
+
+
+
+
+
+
+
+
+
+
+## 运行环境
+
+控制面板可运行在 Windows 与 Linux 平台,无需数据库与任何系统配置,只需安装 node 环境即可快速运行,属于轻量级的 Minecraft 服务端控制面板。
+
+必须 `Node 14.17.0` 以上,无需数据库和更改任何系统配置,开箱即可运行。
+
+
+
+## 配置/数据文件
+
+配置文件: `data/SystemConfig/config.json`
+
+用户数据文件:`data/User/*.json`
+
+远程守护进程配置:`data/RemoteServiceConfig/*.json`
+
+
+
+## 软件文档
+
+地址:[https://docs.mcsmanager.com/](https://docs.mcsmanager.com/)
+
+
+
+## 安装
+
+### Windows
+
+对于 Windows 系统,**已整合成直接运行版本,下载即可运行**(使用管理员权限运行):
+
+前往:[https://mcsmanager.com/](https://mcsmanager.com/)
+
+
+
+
+### Linux
+
+**一行命令快速安装**
+
+```bash
+// 国内用户专用 gitee 加速源
+wget -qO- https://gitee.com/mcsmanager/script/raw/master/setup_cn.sh | bash
+
+// 或原始源(科学上网)
+wget -qO- https://raw.githubusercontent.com/mcsmanager/Script/master/setup.sh | bash
+```
+
+- 脚本仅适用于 AMD64 架构 Ubuntu/Centos/Debian/Archlinux。
+- 执行完成后,使用 `systemctl start mcsm-{web,daemon}` 即可启动面板服务。
+- 面板代码与运行环境自动安装在 `/opt/mcsmanager/` 目录下。
+
+
+
+**Linux 手动安装**
+
+- 若一键安装不起作用,则可以尝试此步骤手动安装。
+
+```bash
+# 切换到安装目录。如果不存在,请提前用'mkdir /opt/'创建它。
+cd /opt/
+# 下载运行时环境(Node.js)。如果你已经安装了Node.js 14+,请忽略此步骤。
+wget https://nodejs.org/dist/v14.17.6/node-v14.17.6-linux-x64.tar.gz
+# 解压档案
+tar -zxvf node-v14.17.6-linux-x64.tar.gz
+# 添加程序到系统环境变量
+ln -s /opt/node-v14.17.6-linux-x64/bin/node /usr/bin/node
+ln -s /opt/node-v14.17.6-linux-x64/bin/npm /usr/bin/npm
+
+# 准备好安装目录
+mkdir /opt/mcsmanager/
+cd /opt/mcsmanager/
+
+# 下载MCSManager
+wget https://github.com/MCSManager/MCSManager/releases/latest/download/mcsmanager_linux_release.tar.gz
+tar -zxf mcsmanager_linux_release.tar.gz
+
+# 安装依赖库
+./install-dependency.sh
+
+# 请打开两个终端或屏幕
+
+# 先启动守护程序
+./start-daemon.sh
+
+# 启动网络服务(在第二个终端)
+./start-web.sh
+
+# 为网络界面访问http://localhost:23333/
+# 一般来说,网络应用会自动扫描并连接到本地守护进程。
+```
+
+- 注意,这种安装方式不会自动注册面板到系统服务(Service),所以必须使用 `screen` 软件来管理。
+
+
+
+## 更新版本
+
+参考: https://github.com/MCSManager/MCSManager/wiki/Update-MCSManager
+
+> 如果你不是特别需要新版本的功能,或者不是为了修复安全隐患,那就不建议更新。
+
+
+
+## 项目体系
+
+整个软件运行需要三个项目的互相配合才可运行,您普通安装的代码是编译再整合后的产物。
+
+[**控制面板端**](https://github.com/MCSManager/MCSManager)
+
+- 角色:控制中心
+- 责任:负责提供网页前端的后端接口,提供 API 接口,用户数据管理和对守护进程进行通信和授权。
+
+[**网页前端**](https://github.com/MCSManager/UI)
+
+- 角色:控制中心的用户交互界面
+- 责任:以网页形式展示数据,发送请求,并且拥有与守护进程通信的能力,此项目最终产物是纯静态文件。
+
+[**守护进程**](https://github.com/MCSManager/Daemon)
+
+- 角色:被控端
+- 责任:控制本地主机的所有实例,真实进程的实际管理者,拥有与任何对象的通信能力。
+
+
+
+## 搭建开发环境
+
+此段落面向开发人员,普通用户无需关注也无需执行。
+
+所有项目全部以开发环境运行后,便可以进行开发与预览,请务必遵循开源协议。
+
+**控制面板端(MCSManager)**
+
+```bash
+git clone https://github.com/MCSManager/MCSManager.git
+cd MCSManager
+npm install
+npm run start
+# 默认将采用 ts-node 直接执行 Typescript 代码
+# 默认运行在 23333 端口
+```
+
+**网页前端(UI)**
+
+```bash
+git clone https://github.com/MCSManager/UI.git
+cd UI
+npm install
+npm run serve
+# 访问 http://localhost:8080/ 即可预览界面
+# 所有 API 请求将自动转发到 23333 端口
+```
+
+**守护进程(Daemon)**
+
+```bash
+git clone https://github.com/MCSManager/Daemon.git
+cd Daemon
+npm install
+npm run start
+# 运行后请在控制面板端连接本守护进程
+# 默认运行在 24444 端口
+```
+
+
+
+## 浏览器兼容性
+
+- 支持 `Chrome` `Firefox` `Safari` `Opera` 等现代主流浏览器。
+- 已放弃支持 `IE` 浏览器。
+
+
+
+## 国际化
+
+MCSManager 已支持中文,英文两种语言,已经实现国际化全面覆盖。
+
+软件国际化由 [Lazy](https://github.com/LazyCreeper),[KevinLu2000](https://github.com/KevinLu2000),[zijiren233](https://github.com/zijiren233) 和 [Unitwk](https://github.com/unitwk) 共同完成
+
+
+
+## 贡献
+
+如果你在使用过程中发现任何问题,可以 [提交 Issue](https://github.com/MCSManager/MCSManager/issues/new/choose) 或自行 Fork 修改后提交 Pull Request。
+
+代码需要保持现有格式,不得格式化多余代码,具体可[参考这里](https://github.com/MCSManager/MCSManager/issues/544)。
+
+
+
+## 问题报告
+
+欢迎发现的任何问题进行反馈,必当及时修复。
+
+若发现严重安全漏洞又不便公开发布,请发送邮件至: mcsmanager-dev@outlook.com。
+
+安全问题修复后将在代码中附加漏洞发现者姓名。
+
+
+
+
+## 源代码协议
+
+源代码遵循 Apache-2.0 协议。
+
+版权所有 2022 MCSManager 开发团队。
diff --git a/apps/mcsmanager-daemon/data.yml b/apps/mcsmanager-daemon/data.yml
new file mode 100644
index 00000000..c400ef5f
--- /dev/null
+++ b/apps/mcsmanager-daemon/data.yml
@@ -0,0 +1,20 @@
+name: MCSManager Daemon
+tags:
+ - 工具
+title: 支持大部分游戏服务端和控制台程序的管理面板(后端)
+type: 工具
+description: 支持大部分游戏服务端和控制台程序的管理面板(后端)
+additionalProperties:
+ key: mcsmanager-daemon
+ name: MCSManager Daemon
+ tags:
+ - Tool
+ shortDescZh: 支持大部分游戏服务端和控制台程序的管理面板(后端)
+ shortDescEn: Distributed, Docker-supported, Multilingual, and Lightweight control panel for Minecraft server and more (daemon)
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://hub.docker.com/r/alisaqaq/mcsmanager-web
+ github: https://github.com/MCSManager/MCSManager
+ document: https://docs.mcsmanager.com/
diff --git a/apps/mcsmanager-daemon/latest/.env.sample b/apps/mcsmanager-daemon/latest/.env.sample
new file mode 100644
index 00000000..775c2932
--- /dev/null
+++ b/apps/mcsmanager-daemon/latest/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="mcsmanager-daemon"
+PANEL_APP_PORT_HTTP="40057"
+DATA_PATH="./data"
diff --git a/apps/mcsmanager-daemon/latest/data.yml b/apps/mcsmanager-daemon/latest/data.yml
new file mode 100644
index 00000000..646f7f54
--- /dev/null
+++ b/apps/mcsmanager-daemon/latest/data.yml
@@ -0,0 +1,18 @@
+additionalProperties:
+ formFields:
+ - default: 40057
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+
diff --git a/apps/mcsmanager-daemon/latest/docker-compose.yml b/apps/mcsmanager-daemon/latest/docker-compose.yml
new file mode 100644
index 00000000..2f8c349e
--- /dev/null
+++ b/apps/mcsmanager-daemon/latest/docker-compose.yml
@@ -0,0 +1,19 @@
+version: '3'
+services:
+ mcsm-daemon:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:24444"
+ volumes:
+ - "${DATA_PATH}:/opt/mcsmanager/daemon/data"
+ - /var/run/docker.sock:/var/run/docker.sock
+ image: alisaqaq/mcsmanager-daemon:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/mcsmanager-daemon/logo.png b/apps/mcsmanager-daemon/logo.png
new file mode 100644
index 00000000..948029be
Binary files /dev/null and b/apps/mcsmanager-daemon/logo.png differ
diff --git a/apps/mcsmanager-web/9.9.0/.env.sample b/apps/mcsmanager-web/9.9.0/.env.sample
new file mode 100644
index 00000000..0c21b86f
--- /dev/null
+++ b/apps/mcsmanager-web/9.9.0/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="mcsmanager-web"
+PANEL_APP_PORT_HTTP="40056"
+DATA_PATH="./data"
diff --git a/apps/mcsmanager-web/9.9.0/data.yml b/apps/mcsmanager-web/9.9.0/data.yml
new file mode 100644
index 00000000..9853a74d
--- /dev/null
+++ b/apps/mcsmanager-web/9.9.0/data.yml
@@ -0,0 +1,18 @@
+additionalProperties:
+ formFields:
+ - default: 40056
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+
diff --git a/apps/mcsmanager-web/9.9.0/docker-compose.yml b/apps/mcsmanager-web/9.9.0/docker-compose.yml
new file mode 100644
index 00000000..3379cbb8
--- /dev/null
+++ b/apps/mcsmanager-web/9.9.0/docker-compose.yml
@@ -0,0 +1,18 @@
+version: '3'
+services:
+ mcsm-web:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:23333"
+ volumes:
+ - "${DATA_PATH}:/opt/mcsmanager/web/data"
+ image: alisaqaq/mcsmanager-web:9.9.0
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/mcsmanager-web/README.md b/apps/mcsmanager-web/README.md
new file mode 100644
index 00000000..6e39d997
--- /dev/null
+++ b/apps/mcsmanager-web/README.md
@@ -0,0 +1,244 @@
+
+
+
+
+[](https://www.npmjs.com/)
+[](https://nodejs.org/en/download/)
+[](https://github.com/MCSManager)
+
+[官方网站](http://mcsmanager.com/) | [使用文档](https://docs.mcsmanager.com/) | [团队主页](https://github.com/MCSManager) | [面板端项目](https://github.com/MCSManager/MCSManager) | [网页前端项目](https://github.com/MCSManager/UI) | [守护进程项目](https://github.com/MCSManager/Daemon)
+
+
+中文 QQ 群:https://jq.qq.com/?_wv=1027&k=Pgl9ScGw
+
+中文 TG 群:https://t.me/MCSManager_dev
+
+爱发电赞助:https://afdian.net/a/mcsmanager
+
+
+
+## 这是什么?
+
+
+MCSManager 面板(简称:MCSM 面板)是一款开源,分布式,轻量级,快速部署,支持大部分游戏服务端和控制台程序的管理面板
+
+
+
+## 软件特性
+
+软件在 Minecraft 和其他游戏社区内中已有一定的流行程度,它可以帮助你集中管理多个物理服务器,动态在任何主机上创建游戏服务端,并且提供安全可靠的多用户权限系统,可以很轻松的帮助你管理多个服务器,一直在为 Minecraft,Terraria,Steam 游戏服务器管理员,运维人员和个人开发者提供健康的软件支持。
+
+
+
+
+
+
+
+
+
+
+
+## 运行环境
+
+控制面板可运行在 Windows 与 Linux 平台,无需数据库与任何系统配置,只需安装 node 环境即可快速运行,属于轻量级的 Minecraft 服务端控制面板。
+
+必须 `Node 14.17.0` 以上,无需数据库和更改任何系统配置,开箱即可运行。
+
+
+
+## 配置/数据文件
+
+配置文件: `data/SystemConfig/config.json`
+
+用户数据文件:`data/User/*.json`
+
+远程守护进程配置:`data/RemoteServiceConfig/*.json`
+
+
+
+## 软件文档
+
+地址:[https://docs.mcsmanager.com/](https://docs.mcsmanager.com/)
+
+
+
+## 安装
+
+### Windows
+
+对于 Windows 系统,**已整合成直接运行版本,下载即可运行**(使用管理员权限运行):
+
+前往:[https://mcsmanager.com/](https://mcsmanager.com/)
+
+
+
+
+### Linux
+
+**一行命令快速安装**
+
+```bash
+// 国内用户专用 gitee 加速源
+wget -qO- https://gitee.com/mcsmanager/script/raw/master/setup_cn.sh | bash
+
+// 或原始源(科学上网)
+wget -qO- https://raw.githubusercontent.com/mcsmanager/Script/master/setup.sh | bash
+```
+
+- 脚本仅适用于 AMD64 架构 Ubuntu/Centos/Debian/Archlinux。
+- 执行完成后,使用 `systemctl start mcsm-{web,daemon}` 即可启动面板服务。
+- 面板代码与运行环境自动安装在 `/opt/mcsmanager/` 目录下。
+
+
+
+**Linux 手动安装**
+
+- 若一键安装不起作用,则可以尝试此步骤手动安装。
+
+```bash
+# 切换到安装目录。如果不存在,请提前用'mkdir /opt/'创建它。
+cd /opt/
+# 下载运行时环境(Node.js)。如果你已经安装了Node.js 14+,请忽略此步骤。
+wget https://nodejs.org/dist/v14.17.6/node-v14.17.6-linux-x64.tar.gz
+# 解压档案
+tar -zxvf node-v14.17.6-linux-x64.tar.gz
+# 添加程序到系统环境变量
+ln -s /opt/node-v14.17.6-linux-x64/bin/node /usr/bin/node
+ln -s /opt/node-v14.17.6-linux-x64/bin/npm /usr/bin/npm
+
+# 准备好安装目录
+mkdir /opt/mcsmanager/
+cd /opt/mcsmanager/
+
+# 下载MCSManager
+wget https://github.com/MCSManager/MCSManager/releases/latest/download/mcsmanager_linux_release.tar.gz
+tar -zxf mcsmanager_linux_release.tar.gz
+
+# 安装依赖库
+./install-dependency.sh
+
+# 请打开两个终端或屏幕
+
+# 先启动守护程序
+./start-daemon.sh
+
+# 启动网络服务(在第二个终端)
+./start-web.sh
+
+# 为网络界面访问http://localhost:23333/
+# 一般来说,网络应用会自动扫描并连接到本地守护进程。
+```
+
+- 注意,这种安装方式不会自动注册面板到系统服务(Service),所以必须使用 `screen` 软件来管理。
+
+
+
+## 更新版本
+
+参考: https://github.com/MCSManager/MCSManager/wiki/Update-MCSManager
+
+> 如果你不是特别需要新版本的功能,或者不是为了修复安全隐患,那就不建议更新。
+
+
+
+## 项目体系
+
+整个软件运行需要三个项目的互相配合才可运行,您普通安装的代码是编译再整合后的产物。
+
+[**控制面板端**](https://github.com/MCSManager/MCSManager)
+
+- 角色:控制中心
+- 责任:负责提供网页前端的后端接口,提供 API 接口,用户数据管理和对守护进程进行通信和授权。
+
+[**网页前端**](https://github.com/MCSManager/UI)
+
+- 角色:控制中心的用户交互界面
+- 责任:以网页形式展示数据,发送请求,并且拥有与守护进程通信的能力,此项目最终产物是纯静态文件。
+
+[**守护进程**](https://github.com/MCSManager/Daemon)
+
+- 角色:被控端
+- 责任:控制本地主机的所有实例,真实进程的实际管理者,拥有与任何对象的通信能力。
+
+
+
+## 搭建开发环境
+
+此段落面向开发人员,普通用户无需关注也无需执行。
+
+所有项目全部以开发环境运行后,便可以进行开发与预览,请务必遵循开源协议。
+
+**控制面板端(MCSManager)**
+
+```bash
+git clone https://github.com/MCSManager/MCSManager.git
+cd MCSManager
+npm install
+npm run start
+# 默认将采用 ts-node 直接执行 Typescript 代码
+# 默认运行在 23333 端口
+```
+
+**网页前端(UI)**
+
+```bash
+git clone https://github.com/MCSManager/UI.git
+cd UI
+npm install
+npm run serve
+# 访问 http://localhost:8080/ 即可预览界面
+# 所有 API 请求将自动转发到 23333 端口
+```
+
+**守护进程(Daemon)**
+
+```bash
+git clone https://github.com/MCSManager/Daemon.git
+cd Daemon
+npm install
+npm run start
+# 运行后请在控制面板端连接本守护进程
+# 默认运行在 24444 端口
+```
+
+
+
+## 浏览器兼容性
+
+- 支持 `Chrome` `Firefox` `Safari` `Opera` 等现代主流浏览器。
+- 已放弃支持 `IE` 浏览器。
+
+
+
+## 国际化
+
+MCSManager 已支持中文,英文两种语言,已经实现国际化全面覆盖。
+
+软件国际化由 [Lazy](https://github.com/LazyCreeper),[KevinLu2000](https://github.com/KevinLu2000),[zijiren233](https://github.com/zijiren233) 和 [Unitwk](https://github.com/unitwk) 共同完成
+
+
+
+## 贡献
+
+如果你在使用过程中发现任何问题,可以 [提交 Issue](https://github.com/MCSManager/MCSManager/issues/new/choose) 或自行 Fork 修改后提交 Pull Request。
+
+代码需要保持现有格式,不得格式化多余代码,具体可[参考这里](https://github.com/MCSManager/MCSManager/issues/544)。
+
+
+
+## 问题报告
+
+欢迎发现的任何问题进行反馈,必当及时修复。
+
+若发现严重安全漏洞又不便公开发布,请发送邮件至: mcsmanager-dev@outlook.com。
+
+安全问题修复后将在代码中附加漏洞发现者姓名。
+
+
+
+
+## 源代码协议
+
+源代码遵循 Apache-2.0 协议。
+
+版权所有 2022 MCSManager 开发团队。
diff --git a/apps/mcsmanager-web/data.yml b/apps/mcsmanager-web/data.yml
new file mode 100644
index 00000000..5dc1b4e9
--- /dev/null
+++ b/apps/mcsmanager-web/data.yml
@@ -0,0 +1,20 @@
+name: MCSManager Web
+tags:
+ - 工具
+title: 支持大部分游戏服务端和控制台程序的管理面板(前端)
+type: 工具
+description: 支持大部分游戏服务端和控制台程序的管理面板(前端)
+additionalProperties:
+ key: mcsmanager-web
+ name: MCSManager Web
+ tags:
+ - Tool
+ shortDescZh: 支持大部分游戏服务端和控制台程序的管理面板(前端)
+ shortDescEn: Distributed, Docker-supported, Multilingual, and Lightweight control panel for Minecraft server and more (webui)
+ type: tool
+ crossVersionUpdate: true
+ limit: 0
+ recommend: 0
+ website: https://hub.docker.com/r/alisaqaq/mcsmanager-web
+ github: https://github.com/MCSManager/MCSManager
+ document: https://docs.mcsmanager.com/
diff --git a/apps/mcsmanager-web/latest/.env.sample b/apps/mcsmanager-web/latest/.env.sample
new file mode 100644
index 00000000..0c21b86f
--- /dev/null
+++ b/apps/mcsmanager-web/latest/.env.sample
@@ -0,0 +1,3 @@
+CONTAINER_NAME="mcsmanager-web"
+PANEL_APP_PORT_HTTP="40056"
+DATA_PATH="./data"
diff --git a/apps/mcsmanager-web/latest/data.yml b/apps/mcsmanager-web/latest/data.yml
new file mode 100644
index 00000000..9853a74d
--- /dev/null
+++ b/apps/mcsmanager-web/latest/data.yml
@@ -0,0 +1,18 @@
+additionalProperties:
+ formFields:
+ - default: 40056
+ edit: true
+ envKey: PANEL_APP_PORT_HTTP
+ labelEn: Port
+ labelZh: 端口
+ required: true
+ rule: paramPort
+ type: number
+ - default: ./data
+ edit: true
+ envKey: DATA_PATH
+ labelEn: Data folder path
+ labelZh: 数据文件夹路径
+ required: true
+ type: text
+
diff --git a/apps/mcsmanager-web/latest/docker-compose.yml b/apps/mcsmanager-web/latest/docker-compose.yml
new file mode 100644
index 00000000..60c3bcce
--- /dev/null
+++ b/apps/mcsmanager-web/latest/docker-compose.yml
@@ -0,0 +1,18 @@
+version: '3'
+services:
+ mcsm-web:
+ container_name: ${CONTAINER_NAME}
+ restart: always
+ networks:
+ - 1panel-network
+ ports:
+ - "${PANEL_APP_PORT_HTTP}:23333"
+ volumes:
+ - "${DATA_PATH}:/opt/mcsmanager/web/data"
+ image: alisaqaq/mcsmanager-web:latest
+ labels:
+ createdBy: "Apps"
+
+networks:
+ 1panel-network:
+ external: true
diff --git a/apps/mcsmanager-web/logo.png b/apps/mcsmanager-web/logo.png
new file mode 100644
index 00000000..948029be
Binary files /dev/null and b/apps/mcsmanager-web/logo.png differ
diff --git a/apps/mdserver-web/README.md b/apps/mdserver-web/README.md
new file mode 100644
index 00000000..9c66c7eb
--- /dev/null
+++ b/apps/mdserver-web/README.md
@@ -0,0 +1,52 @@
+
+# 本应用介绍
+这是个民间制作的"mdserver-web"的"1Panel"商店版本应用;
+
+- 容器内数据目录/www
+- 默认账号 username
+- 密码 password
+
+> 原作者项目相关
+>> - https://hub.docker.com/r/ddsderek/mw
+>> - https://github.com/midoks/mdserver-web
+
+# 原项目介绍
+
+
+
mdserver-web
+
Note: We are trying to follow the browser's language tags, which are formally defined in RFC 5646, which rely on the ISO 639 standard (quite often the 639-1 code list) for language codes to be used.
+ +We would love it if you helped this project by taking a look at our Call for Contributors to see if you can make a contribution that helps us be more inclusive and support more languages.
+This api is dedicated to pistachio; she brought me great comfort in dire times. Words can't describe the debt I owe to her.
+If you enjoy this api, or just love cats, please donate to:
+ +NYC Animal Project Paypal Link
+ +NYC Animal Project is a struggling `no kill` cat shelter in the heart of new york that relies entirely on fosters and help from small donations. I can say personally having volunteered for them, even a few cents donation would make a difference for the very small organization. I fostered many kittens from them, and Pistachio was the runt that went un-adopted. She was shy, but very outgoing when she got settled. I highly recommend to foster and adopt if you can.
+ +