精简提交历史记录

This commit is contained in:
okxlin 2023-11-09 19:15:01 +08:00
commit 691aa7aac9
1529 changed files with 800341 additions and 0 deletions

View File

@ -0,0 +1,26 @@
#!/bin/bash
# This script copies the version from docker-compose.yml to config.json.
app_name=$1
old_version=$2
# find all docker-compose files under apps/$app_name (there should be only one)
docker_compose_files=$(find apps/$app_name/$old_version -name docker-compose.yml)
for docker_compose_file in $docker_compose_files
do
# Assuming that the app version will be from the first docker image
first_service=$(yq '.services | keys | .[0]' $docker_compose_file)
image=$(yq .services.$first_service.image $docker_compose_file)
# Only apply changes if the format is <image>:<version>
if [[ "$image" == *":"* ]]; then
version=$(cut -d ":" -f2- <<< "$image")
# Trim the "v" prefix
trimmed_version=${version/#"v"}
mv apps/$app_name/$old_version apps/$app_name/$trimmed_version
fi
done

View File

@ -0,0 +1,52 @@
name: Update app version in Renovate Branches
on:
push:
branches: [ 'renovate/*' ]
workflow_dispatch:
inputs:
manual-trigger:
description: 'Manually trigger Renovate'
default: ''
jobs:
update-app-version:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4
with:
fetch-depth: 0
- name: Configure repo
run: |
git config --local user.email "githubaction@githubaction.com"
git config --local user.name "github-action update-app-version"
- name: Get list of updated files by the last commit in this branch separated by space
id: updated-files
run: |
echo "::set-output name=files::$(git diff-tree --no-commit-id --name-only -r ${{ github.sha }} | tr '\n' ' ')"
- name: Run renovate-app-version.sh on updated files
run: |
IFS=' ' read -ra files <<< "${{ steps.updated-files.outputs.files }}"
for file in "${files[@]}"; do
if [[ $file == *"docker-compose.yml"* ]]; then
app_name=$(echo $file | cut -d'/' -f 2)
old_version=$(echo $file | cut -d'/' -f 3)
chmod +x .github/workflows/renovate-app-version.sh
.github/workflows/renovate-app-version.sh $app_name $old_version
fi
done
- name: Commit & Push Changes
run: |
IFS=' ' read -ra files <<< "${{ steps.updated-files.outputs.files }}"
for file in "${files[@]}"; do
if [[ $file == *"docker-compose.yml"* ]]; then
app_name=$(echo $file | cut -d'/' -f 2)
git add "apps/$app_name/*" && git commit -m "Update app version [skip ci]" --no-verify && git push || true
fi
done

25
.github/workflows/renovate.yml vendored Normal file
View File

@ -0,0 +1,25 @@
name: Renovate
on:
schedule:
- cron: "0 0 * * *"
push:
branches:
- localApps
workflow_dispatch:
inputs:
manual-trigger:
description: 'Manually trigger Renovate'
default: ''
jobs:
renovate:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1
- name: Run Renovate
uses: renovatebot/github-action@v39.1.1
with:
useSlim: false
token: ${{ secrets.GITHUBTOKEN }}

154
README.md Normal file
View File

@ -0,0 +1,154 @@
## 打赏链接
[**点我打赏,用爱发电**](https://afdian.net/a/dockerapps)
[![**点我打赏,用爱发电**](./docs/afdian-logo.png)](https://afdian.net/a/dockerapps)
* * *
## 目录
- [打赏链接](#打赏链接)
- [目录](#目录)
- [免责声明](#免责声明)
- [1. 镜像容器适配](#1-镜像容器适配)
- [2. 法律遵守](#2-法律遵守)
- [3. 免责声明接受](#3-免责声明接受)
- [1. 简介](#1-简介)
- [1Panel第三方应用商店应用分类合集与介绍](#1panel第三方应用商店应用分类合集与介绍)
- [2. 使用方式](#2-使用方式)
- [2.1 国内网络](#21-国内网络)
- [2.1.1 使用 git 命令获取应用](#211-使用-git-命令获取应用)
- [2.1.2 使用压缩包方式获取应用](#212-使用压缩包方式获取应用)
- [2.2 国际互联网络](#22-国际互联网络)
- [2.2.1 使用 git 命令获取应用](#221-使用-git-命令获取应用)
- [2.2.2 使用压缩包方式获取应用](#222-使用压缩包方式获取应用)
- [3. 备注](#3-备注)
- [4. 应用一览图](#4-应用一览图)
***
## 免责声明
### 1. 镜像容器适配
本项目仅针对原`docker`镜像容器运行进行针对`1panel`应用商店的适配。我们不对任何原始镜像的有效性做出任何明示或暗示的保证或声明,并且不对使用本仓库应用所造成的任何影响负责。用户在使用本项目时应自行承担风险。
### 2. 法律遵守
用户在使用本仓库时必须遵守所在国家与地区的法律法规。某些应用可能受到特定国家法律的限制,用户需自行了解并遵守相关法律要求。本仓库不对用户违反法律法规所产生的任何后果负责。
### 3. 免责声明接受
用户在导入本仓库并使用其中的应用时,即表示用户已经阅读、理解并同意接受本免责声明的所有条款和条件。
请注意,本免责声明仅针对本仓库的使用情况,并不包括其他第三方应用或服务。对于与本仓库链接的第三方内容,我们不对其准确性、完整性、可靠性或合法性负责。
在使用本仓库之前,请确保已经阅读、理解并接受了本免责声明的所有条款和条件。
***
## 1. 简介
这是一些适配`1Panel`商店`2.0`版本的docker应用配置。
致力于一键运行各种 Docker 应用。无需复杂配置,享受便利和高效。
### 1Panel第三方应用商店应用分类合集与介绍
- https://1p.131.gs
**感谢作者[@包子叔](https://github.com/baozishu)**
## 2. 使用方式
默认`1Panel`安装在`/opt/`路径下,如果不是按需修改以下。
### 2.1 国内网络
#### 2.1.1 使用 git 命令获取应用
`1panel`计划任务类型`Shell 脚本`的计划任务框里,添加并执行以下命令,或者终端运行以下命令,
```shell
git clone -b localApps https://ghproxy.com/https://github.com/okxlin/appstore /opt/1panel/resource/apps/local/appstore-localApps
cp -rf /opt/1panel/resource/apps/local/appstore-localApps/apps/* /opt/1panel/resource/apps/local/
rm -r /opt/1panel/resource/apps/local/appstore-localApps
```
然后应用商店刷新本地应用即可。
#### 2.1.2 使用压缩包方式获取应用
`1panel`计划任务类型`Shell 脚本`的计划任务框里,添加并执行以下命令,或者终端运行以下命令,
```shell
wget -P /opt/1panel/resource/apps/local https://ghproxy.com/https://github.com/okxlin/appstore/archive/refs/heads/localApps.zip
unzip -o -d /opt/1panel/resource/apps/local/ /opt/1panel/resource/apps/local/localApps.zip
cp -rf /opt/1panel/resource/apps/local/appstore-localApps/apps/* /opt/1panel/resource/apps/local/
rm -r /opt/1panel/resource/apps/local/appstore-localApps
rm /opt/1panel/resource/apps/local/localApps.zip
```
然后应用商店刷新本地应用即可。
### 2.2 国际互联网络
#### 2.2.1 使用 git 命令获取应用
`1panel`计划任务类型`Shell 脚本`的计划任务框里,添加并执行以下命令,或者终端运行以下命令,
```shell
git clone -b localApps https://github.com/okxlin/appstore /opt/1panel/resource/apps/local/appstore-localApps
cp -rf /opt/1panel/resource/apps/local/appstore-localApps/apps/* /opt/1panel/resource/apps/local/
rm -r /opt/1panel/resource/apps/local/appstore-localApps
```
然后应用商店刷新本地应用即可。
#### 2.2.2 使用压缩包方式获取应用
`1panel`计划任务类型`Shell 脚本`的计划任务框里,添加并执行以下命令,或者终端运行以下命令,
```shell
wget -P /opt/1panel/resource/apps/local https://github.com/okxlin/appstore/archive/refs/heads/localApps.zip
unzip -o -d /opt/1panel/resource/apps/local/ /opt/1panel/resource/apps/local/localApps.zip
cp -rf /opt/1panel/resource/apps/local/appstore-localApps/apps/* /opt/1panel/resource/apps/local/
rm -r /opt/1panel/resource/apps/local/appstore-localApps
rm /opt/1panel/resource/apps/local/localApps.zip
```
然后应用商店刷新本地应用即可。
## 3. 备注
**未显示在本地应用列表里的,表示未完全适配应用商店面板操作**
**但是支持直接终端运行。**
以rustdesk为例
```shell
# 进入 rustdesk 的最新版本目录
cd /opt/1panel/resource/apps/local/rustdesk/versions/latest/
# 复制 .env.sample 为 .env
cp .env.sample .env
# 编辑 .env 文件,修改参数
nano .env
# 启动 RustDesk
docker-compose up -d
# 查看连接所需密钥
cat ./data/hbbs/id_ed25519.pub
```
## 4. 应用一览图
![](./docs/app-list.png)

72
apps/115pc/README.md Normal file
View File

@ -0,0 +1,72 @@
# 115网盘Linux版本的Docker封装
[![Docker Automated build](https://img.shields.io/docker/automated/jlesage/baseimage-gui.svg)](https://hub.docker.com/r/funcman/115pc/)
## 紧急提示
我发现在使用一段时间后,会出现无法继续使用的问题。
最近终于抽出时间仔细看了一下临时的解决方法就是把Web浏览器中的115pc相关的Cookie清除掉。
操作方法比如:<https://support.google.com/chrome/answer/95647>
## 拉取镜像
```shell
docker pull funcman/115pc:latest
```
## 创建容器
```shell
docker create --name=115pc \
-p 11580:5800 \
-p 11591:5900 \
-v <YourConfigDir>:/config \
-v <YourDownloadDir>:/Downloads/115download \
--restart always \
funcman/115pc:latest
```
## 启停
```shell
docker start 115pc
docker stop 115pc
```
*启动之后,可通过 `http://<ip>:11580`进行访问*
## 参数
|名称 |说明 |
|:- |:- |
|`APP_NAME` |应用名称默认115pc |
|`APP_VERSION` |指定115客户端版本号默认2.0.5.5 |
|`USER_ID` |指定容器内的用户ID默认root |
|`GROUP_ID` |指定容器内的组ID默认root |
|`ENABLE_CJK_FONT` |默认1不建议修改 |
|`DISPLAY_WIDTH` |应用界面宽度默认1920 |
|`DISPLAY_HEIGHT` |应用界面高度默认1080 |
|`APT_SOURCE_HOST` |Apt更新源地址默认为科技大镜像mirrors.ustc.edu.cn |
*更多参数设置,请参考:<https://github.com/jlesage/docker-baseimage-gui>*
## 注意事项
1. 考虑到Docker运行的特殊性在每次容器启动时都会改回***下载路径***设置,以达到固化路径的作用。
2. 同时由于v1.0.6.7这个版本后期版本未特别验证至少到v2.0.5.5依然如此115客户端默认的设置中下载路径有多余的换行符亦使用强制改回配置的方式实现。
3. 副作用是其他设置也会被一并改回,若有特殊需求,请自行修改代码。
4. 由于`jlesage/baseimage-gui`默认情况下,在容器内使用`app`用户运行程序会造成115客户端无权限使用默认下载路径。
5. 采用修改参数`USER_ID`和`GROUP_ID`为`root`的手法解决了事项4的问题目前没找到更好的方法。
6. 由于默认使用了`root`用户导致115客户端下载的文件的权限在其他用户面前为只读所以尽量使用115客户端删除下载文件。
7. **不支持**115客户端的在线升级主要是因为升级过程中需要输入115所在主机系统的登录密码但是输入设置的密码会提示密码不正确。
## 感谢
* [jlesage/baseimage-gui](https://hub.docker.com/r/jlesage/baseimage-gui)提供的X图形应用容器基础镜像使用它可以轻松将Linux图形应用程序以Web和VNC的方式使用。
* CALTyang制作的[115pc-docker](https://github.com/CALTyang/115pc-docker)我这里fork了他的代码并进一步折腾解决了一些小问题收获很多。

20
apps/115pc/data.yml Normal file
View File

@ -0,0 +1,20 @@
name: 115网盘
tags:
- 工具
title: 115网盘是115科技推出的云存储服务
type: 工具
description: 115网盘是115科技推出的云存储服务
additionalProperties:
key: 115pc
name: 115网盘
tags:
- Tool
shortDescZh: 115网盘是115科技推出的云存储服务
shortDescEn: 115 network disk is a cloud storage service launched by 115 Technology
type: tool
crossVersionUpdate: true
limit: 0
recommend: 0
website: https://115.com
github: https://www.github.com/funcman/docker_115pc
document: https://www.github.com/funcman/docker_115pc

View File

@ -0,0 +1,8 @@
CONTAINER_NAME="115pc"
APT_SOURCE="mirrors.ustc.edu.cn"
CONFIG_PATH="./data/config"
DOWNLOAD_PATH="./data/downloads"
PANEL_APP_PORT_HTTP="40088"
VNC_DISPLAY_HEIGHT="1080"
VNC_DISPLAY_WIDTH="1920"
VNC_PASSWORD="VNCPassword"

View File

@ -0,0 +1,54 @@
additionalProperties:
formFields:
- default: 40088
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: WebUI Port
labelZh: 网页端口
required: true
rule: paramPort
type: number
- default: VNCPassword
edit: true
envKey: VNC_PASSWORD
labelEn: Access Password
labelZh: 访问密码
random: false
required: true
rule: paramComplexity
type: password
- default: ./data/config
edit: true
envKey: CONFIG_PATH
labelEn: Config file path
labelZh: 配置文件所在路径
required: true
type: text
- default: ./data/downloads
edit: true
envKey: DOWNLOAD_PATH
labelEn: Download folder path
labelZh: 下载文件夹路径
required: true
type: text
- default: mirrors.ustc.edu.cn
edit: true
envKey: APT_SOURCE
labelEn: apt source
labelZh: apt 源
required: true
type: text
- default: 1920
edit: true
envKey: VNC_DISPLAY_WIDTH
labelEn: VNC display width
labelZh: VNC显示宽度
required: true
type: number
- default: 1080
edit: true
envKey: VNC_DISPLAY_HEIGHT
labelEn: VNC display height
labelZh: VNC显示高度
required: true
type: number

View File

@ -0,0 +1,26 @@
version: "3"
services:
115pc:
container_name: ${CONTAINER_NAME}
restart: always
networks:
- 1panel-network
environment:
- "TZ=Asia/Shanghai"
- "VNC_PASSWORD=${VNC_PASSWORD}"
- "DISPLAY_WIDTH=${VNC_DISPLAY_WIDTH}"
- "DISPLAY_HEIGHT=${VNC_DISPLAY_HEIGHT}"
- "ENABLE_CJK_FONT=1"
- "APT_SOURCE_HOST=${APT_SOURCE}"
ports:
- "${PANEL_APP_PORT_HTTP}:5800"
volumes:
- "${CONFIG_PATH}:/config"
- "${DOWNLOAD_PATH}:/Downloads/115download"
image: funcman/115pc:latest
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true

BIN
apps/115pc/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,4 @@
CONTAINER_NAME="1panel"
PANEL_APP_PORT_HTTP="10086"
DATA_PATH="./data"
TIME_ZONE="Asia/Shanghai"

View File

@ -0,0 +1,24 @@
additionalProperties:
formFields:
- default: 10086
disabled: 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: Asia/Shanghai
edit: true
envKey: TIME_ZONE
labelEn: Time zone
labelZh: 时区
required: true
type: text

View File

@ -0,0 +1,15 @@
version: '3'
services:
1panel:
container_name: ${CONTAINER_NAME}
restart: always
network_mode: "host"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
- ${DATA_PATH}:/opt
environment:
- TZ=${TIME_ZONE}
image: moelin/1panel:v1.8.0
labels:
createdBy: "Apps"

111
apps/1panel/README.md Normal file
View File

@ -0,0 +1,111 @@
# 使用说明
### 镜像Githubhttps://github.com/okxlin/docker-1panel
### 镜像Docker Hubhttps://hub.docker.com/r/moelin/1panel
如果更新了更高版本的镜像,实际是更新了对应版本的二进制程序,面板显示的相关版本还需要手动更新,具体操作可以查看[**Github**](https://github.com/okxlin/docker-1panel)。
***
- 默认端口:`10086`
- 默认账户:`1panel`
- 默认密码:`1panel_password`
- 默认入口:`entrance`
***
- 不可调整参数
- `/var/run/docker.sock`的相关映射
***
- 可调整参数
- `/www/data/1panel-data:/opt` 文件存储映射
- `TZ=Asia/Shanghai` 时区设置
- `1panel` 容器名
- `/var/lib/docker/volumes:/var/lib/docker/volumes` 存储卷映射
***
**架构平台对应镜像**
- amd64
- arm64
- armv7
- ppc64le
- s390x
> 2023年9月3日已经更新单标签多镜像
```
docker pull moelin/1panel:latest
```
# 原始相关
***
[README_EN.md](https://github.com/1Panel-dev/1Panel/blob/dev/README_EN.md)
<p align="center"><a href="https://1panel.cn"><img src="http://1panel.oss-cn-hangzhou.aliyuncs.com/img/1panel-logo.png" alt="1Panel" width="300" /></a></p>
<p align="center"><b>现代化、开源的 Linux 服务器运维管理面板</b></p>
<p align="center">
<a href="https://www.gnu.org/licenses/gpl-3.0.html"><img src="https://shields.io/github/license/1Panel-dev/1Panel" alt="License: GPL v3"></a>
<a href="https://app.codacy.com/gh/1Panel-dev/1Panel?utm_source=github.com&utm_medium=referral&utm_content=1Panel-dev/1Panel&utm_campaign=Badge_Grade_Dashboard"><img src="https://app.codacy.com/project/badge/Grade/da67574fd82b473992781d1386b937ef" alt="Codacy"></a>
<a href="https://github.com/1Panel-dev/1Panel/releases"><img src="https://img.shields.io/github/v/release/1Panel-dev/1Panel" alt="GitHub release"></a>
<a href="https://github.com/1Panel-dev/1Panel"><img src="https://img.shields.io/github/stars/1Panel-dev/1Panel?color=%231890FF&style=flat-square" alt="Stars"></a>
<a href="https://app.fossa.com/projects/git%2Bgithub.com%2F1Panel-dev%2F1Panel?ref=badge_shield"><img src="https://app.fossa.com/api/projects/git%2Bgithub.com%2F1Panel-dev%2F1Panel.svg?type=shield" alt="FOSSA Status"></a>
</p>
------------------------------
1Panel 是一个现代化、开源的 Linux 服务器运维管理面板。1Panel 的功能和优势包括:
- **快速建站**:深度集成 Wordpress 和 [Halo](https://github.com/halo-dev/halo/)域名绑定、SSL 证书配置等一键搞定;
- **高效管理**:通过 Web 端轻松管理 Linux 服务器,包括主机监控、文件管理、数据库管理、容器管理等;
- **安全可靠**:基于容器来管理和部署应用,最小漏洞暴露面,提供防火墙和日志审计等功能;
- **一键备份**:支持一键备份和恢复,备份数据到各类云端存储,永不丢失。
## UI 展示
![UI展示](https://resource.fit2cloud.com/1panel/img/overview.png)
## 快速开始
**在线体验**
- 环境地址:<https://demo.1panel.cn/>
- 用户名demo
- 密码1panel
**一键安装**
执行如下命令一键安装 1Panel:
```sh
curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh
```
**学习资料**
- [在线文档](https://1panel.cn/docs/)
- [教学视频](https://space.bilibili.com/510493147/channel/collectiondetail?sid=1199760)
- [社区论坛](https://bbs.fit2cloud.com/c/1p/7)
**加入微信交流群**
<img src="https://1panel.cn/img/wechat-group.jpg" width="156" height="156"/>
## 安全说明
如果您在使用过程中发现任何安全问题,请通过以下方式直接联系我们:
- 邮箱support@fit2cloud.com
- 电话400-052-0755
## Star History
[![Star History Chart](https://api.star-history.com/svg?repos=1Panel-dev/1Panel&type=Date)](https://star-history.com/#1Panel-dev/1Panel&Date)
## FOSSA Status
[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2F1Panel-dev%2F1Panel.svg?type=large)](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
<https://www.gnu.org/licenses/gpl-3.0.html>
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

20
apps/1panel/data.yml Normal file
View File

@ -0,0 +1,20 @@
name: 1Panel
tags:
- 工具
title: 现代化、开源的 Linux 服务器运维管理面板
type: 工具
description: 现代化、开源的 Linux 服务器运维管理面板
additionalProperties:
key: 1panel
name: 1Panel
tags:
- Tool
shortDescZh: 现代化、开源的 Linux 服务器运维管理面板
shortDescEn: Modern and Open-Source Linux Server Operation and Management Panel
type: tool
crossVersionUpdate: true
limit: 1
recommend: 0
website: https://1panel.cn
github: https://github.com/1Panel-dev/1Panel
document: https://1panel.cn/docs

View File

@ -0,0 +1,4 @@
CONTAINER_NAME="1panel"
PANEL_APP_PORT_HTTP="10086"
DATA_PATH="./data"
TIME_ZONE="Asia/Shanghai"

View File

@ -0,0 +1,24 @@
additionalProperties:
formFields:
- default: 10086
disabled: 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: Asia/Shanghai
edit: true
envKey: TIME_ZONE
labelEn: Time zone
labelZh: 时区
required: true
type: text

View File

@ -0,0 +1,15 @@
version: '3'
services:
1panel:
container_name: ${CONTAINER_NAME}
restart: always
network_mode: "host"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /var/lib/docker/volumes:/var/lib/docker/volumes
- ${DATA_PATH}:/opt
environment:
- TZ=${TIME_ZONE}
image: moelin/1panel:latest
labels:
createdBy: "Apps"

BIN
apps/1panel/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

58
apps/aaPanel/README.md Normal file
View File

@ -0,0 +1,58 @@
# 使用说明
这是个民间制作的`aaPanel`的`1Panel`商店版本应用;
- WebUI入口`http://IP地址:面板端口/aapanel`
- 默认账号:`aapanel`
- 密码:`aapanel123`
- 容器内root密码`aapanel123`
> 容器内数据
- 网站目录:`/www/wwwroot`
- MySQL目录:`/www/server/data`
- 域名数据:`/www/server/panel/vhost`
> 原作者项目相关
>> - https://hub.docker.com/r/aapanel/aapanel
>> - https://github.com/aaPanel/aaPanel
- 提示:为数据持久化运行,相关数据以存储卷方式存储。
# 原项目介绍
* 宝塔面板的国际版
* 在GitHub开源的版本
# aaPanel Docker Deployment
The docker image is officially released by aaPanel
Maintained by: [aaPanel](https://www.aapanel.com)
##How to use
`$docker run -d -p 8886:8888 -p 22:21 -p 443:443 -p 80:80 -p 889:888 -v ~/website_data:/www/wwwroot -v ~/mysql_data:/www/server/data -v ~/vhost:/www/server/panel/vhost aapanel/aapanel:lib`
Now you can access aaPanel at http://youripaddress:8886/ from your host system.
Default username:`aapanel`
Default password:`aapanel123`
####Port usage analysis
Control Panel : 8888
Phpmyadmin : 888
####Dir usage analysis
Website data : /www/wwwroot
Mysql data : /www/server/data
Vhost file : /www/server/panel/vhost
**Note: after the deployment is complete, please immediately modify the user name and password in the panel settings and add the installation entry**

20
apps/aaPanel/data.yml Normal file
View File

@ -0,0 +1,20 @@
name: aaPanel
tags:
- 工具
title: 宝塔面板国际版开源的Linux面板
type: 工具
description: 宝塔面板国际版开源的Linux面板
additionalProperties:
key: aaPanel
name: aaPanel
tags:
- Tool
shortDescZh: 宝塔面板国际版开源的Linux面板
shortDescEn: BT-Panel International Edition, the open source Linux panel
type: tool
crossVersionUpdate: false
limit: 0
recommend: 0
website: https://www.aapanel.com/new/index.html
github: https://github.com/aaPanel/aaPanel
document: https://github.com/aaPanel/aaPanel

View File

@ -0,0 +1,7 @@
CONTAINER_NAME="aapanel"
PANEL_APP_PORT_HTTP="7200"
HTTP_PORT="10080"
HTTPS_PORT="10443"
PHPMYADMIN_PORT="10888"
SSH_PORT="20022"
FTP_PORT="20021"

View File

@ -0,0 +1,50 @@
additionalProperties:
formFields:
- default: 7200
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: Web Panel Port
labelZh: 面板端口
required: true
rule: paramPort
type: number
- default: 10080
edit: true
envKey: HTTP_PORT
labelEn: HTTP Port
labelZh: HTTP端口
required: true
rule: paramPort
type: number
- default: 10443
edit: true
envKey: HTTPS_PORT
labelEn: HTTPS Port
labelZh: HTTPS端口
required: true
rule: paramPort
type: number
- default: 10888
edit: true
envKey: PHPMYADMIN_PORT
labelEn: phpMyAdmin Port
labelZh: phpMyAdmin端口
required: true
rule: paramPort
type: number
- default: 20022
edit: true
envKey: SSH_PORT
labelEn: SSH Port
labelZh: 面板内SSH端口
required: true
rule: paramPort
type: number
- default: 20021
edit: true
envKey: FTP_PORT
labelEn: SSH Port
labelZh: 面板内FTP端口
required: true
rule: paramPort
type: number

View File

@ -0,0 +1,24 @@
version: "3"
services:
aapanel:
container_name: ${CONTAINER_NAME}
restart: always
networks:
- 1panel-network
ports:
- "${PANEL_APP_PORT_HTTP}:7800"
- "${HTTP_PORT}:80"
- "${HTTPS_PORT}:443"
- "${PHPMYADMIN_PORT}:888"
- "${SSH_PORT}:22"
- "${FTP_PORT}:21"
volumes:
- aapanel:/www
image: "aapanel/aapanel:lib"
labels:
createdBy: "Apps"
volumes:
aapanel:
networks:
1panel-network:
external: true

BIN
apps/aaPanel/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

@ -0,0 +1,13 @@
CONTAINER_NAME="adguardhome"
PLAIN_DNS_PORT="20053"
DHCP_PORT1="20067"
DHCP_PORT2="20068"
HTTP_PORT="23000"
PANEL_APP_PORT_HTTP="23001"
DOH_PORT="20443"
DOT_PORT="853"
QUIC_PORT1="20784"
QUIC_PORT2="8853"
DNS_CRYPT_PORT="5443"
WORK_PATH="./data/work"
CONFIG_PATH="./data/conf"

View File

@ -0,0 +1,96 @@
additionalProperties:
formFields:
- default: 20053
edit: true
envKey: PLAIN_DNS_PORT
labelEn: Plain DNS port
labelZh: 普通DNS端口
required: true
rule: paramPort
type: number
- default: 20067
edit: true
envKey: DHCP_PORT1
labelEn: DHCP service port 1
labelZh: DHCP服务端口1
required: true
rule: paramPort
type: number
- default: 20068
edit: true
envKey: DHCP_PORT2
labelEn: DHCP service port 2
labelZh: DHCP服务端口2
required: true
rule: paramPort
type: number
- default: 23000
edit: true
envKey: HTTP_PORT
labelEn: HTTP web port
labelZh: HTTP网页端口
required: true
rule: paramPort
type: number
- default: 23001
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: Initial setup web page port
labelZh: 初始设置网页端口
required: true
rule: paramPort
type: number
- default: 20443
edit: true
envKey: DOH_PORT
labelEn: DOH service port
labelZh: DOH服务端口
required: true
rule: paramPort
type: number
- default: 853
edit: true
envKey: DOT_PORT
labelEn: DOT service port
labelZh: DOT服务端口
required: true
rule: paramPort
type: number
- default: 20784
edit: true
envKey: QUIC_PORT1
labelEn: QUIC service port 1
labelZh: QUIC服务端口1
required: true
rule: paramPort
type: number
- default: 8853
edit: true
envKey: QUIC_PORT2
labelEn: QUIC service port 2
labelZh: QUIC服务端口2
required: true
rule: paramPort
type: number
- default: 5443
edit: true
envKey: DNS_CRYPT_PORT
labelEn: DNS Crypt service port
labelZh: DNS Crypt服务端口
required: true
rule: paramPort
type: number
- default: ./data/work
edit: true
envKey: WORK_PATH
labelEn: Work data folder path
labelZh: 工作数据文件夹路径
required: true
type: text
- default: ./data/conf
edit: true
envKey: CONFIG_PATH
labelEn: Configuration folder path
labelZh: 配置文件夹路径
required: true
type: text

View File

@ -0,0 +1,32 @@
version: '3'
services:
adguardhome:
container_name: ${CONTAINER_NAME}
restart: always
networks:
- 1panel-network
ports:
- ${PLAIN_DNS_PORT}:53/tcp
- ${PLAIN_DNS_PORT}:53/udp
- ${DHCP_PORT1}:67/udp
- ${DHCP_PORT2}:68/udp
- ${HTTP_PORT}:80/tcp
- ${DOH_PORT}:443/tcp
- ${DOH_PORT}:443/udp
- ${PANEL_APP_PORT_HTTP}:3000/tcp
- ${DOT_PORT}:853/tcp
- ${QUIC_PORT1}:784/udp
- ${DOT_PORT}:853/udp
- ${QUIC_PORT2}:8853/udp
- ${DNS_CRYPT_PORT}:5443/tcp
- ${DNS_CRYPT_PORT}:5443/udp
volumes:
- ${WORK_PATH}:/opt/adguardhome/work
- ${CONFIG_PATH}:/opt/adguardhome/conf
image: adguard/adguardhome:v0.107.40
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true

529
apps/adguardhome/README.md Normal file
View File

@ -0,0 +1,529 @@
&nbsp;
<p align="center">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="doc/adguard_home_darkmode.svg">
<img alt="AdGuard Home" src="https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/doc/adguard_home_lightmode.svg" width="300px">
</picture>
</p>
<h3 align="center">Privacy protection center for you and your devices</h3>
<p align="center">
Free and open source, powerful network-wide ads & trackers blocking DNS
server.
</p>
<p align="center">
<a href="https://adguard.com/">AdGuard.com</a> |
<a href="https://github.com/AdguardTeam/AdGuardHome/wiki">Wiki</a> |
<a href="https://reddit.com/r/Adguard">Reddit</a> |
<a href="https://twitter.com/AdGuard">Twitter</a> |
<a href="https://t.me/adguard_en">Telegram</a>
<br/><br/>
<a href="https://codecov.io/github/AdguardTeam/AdGuardHome?branch=master">
<img src="https://img.shields.io/codecov/c/github/AdguardTeam/AdGuardHome/master.svg" alt="Code Coverage"/>
</a>
<a href="https://goreportcard.com/report/AdguardTeam/AdGuardHome">
<img src="https://goreportcard.com/badge/github.com/AdguardTeam/AdGuardHome" alt="Go Report Card"/>
</a>
<a href="https://hub.docker.com/r/adguard/adguardhome">
<img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/adguard/adguardhome.svg?maxAge=604800"/>
</a>
<br/>
<a href="https://github.com/AdguardTeam/AdGuardHome/releases">
<img src="https://img.shields.io/github/release/AdguardTeam/AdGuardHome/all.svg" alt="Latest release"/>
</a>
<a href="https://snapcraft.io/adguard-home">
<img alt="adguard-home" src="https://snapcraft.io/adguard-home/badge.svg"/>
</a>
</p>
<br/>
<p align="center">
<img src="https://cdn.adtidy.org/public/Adguard/Common/adguard_home.gif" width="800"/>
</p>
<hr/>
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)
## <a href="#getting-started" id="getting-started" name="getting-started">Getting Started</a>
### <a href="#automated-install-linux-and-mac" id="automated-install-linux-and-mac" name="automated-install-linux-and-mac">Automated install (Unix)</a>
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 <channel>` to use specified channel;
* `-r` to reinstall AdGuard Home;
* `-u` to uninstall AdGuard Home;
* `-v` for verbose output.
Note that options `-r` and `-u` are mutually exclusive.
### <a href="#alternative-methods" id="alternative-methods" name="alternative-methods">Alternative methods</a>
#### <a href="#manual-installation" id="manual-installation" name="manual-installation">Manual installation</a>
Please read the **[Getting Started][wiki-start]** article on our Wiki to learn
how to install AdGuard Home manually, and how to configure your devices to use
it.
#### <a href="#docker" id="docker" name="docker">Docker</a>
You can use our official Docker image on [Docker Hub].
#### <a href="#snap-store" id="snap-store" name="snap-store">Snap Store</a>
If you're running **Linux,** there's a secure and easy way to install AdGuard
Home: get it from the [Snap Store].
[Docker Hub]: https://hub.docker.com/r/adguard/adguardhome
[Snap Store]: https://snapcraft.io/adguard-home
[wiki-start]: https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started
### <a href="#guides" id="guides" name="guides">Guides</a>
See our [Wiki][wiki].
[wiki]: https://github.com/AdguardTeam/AdGuardHome/wiki
### <a href="#api" id="api" name="api">API</a>
If you want to integrate with AdGuard Home, you can use our [REST API][openapi].
Alternatively, you can use this [python client][pyclient], which is used to
build the [AdGuard Home Hass.io Add-on][hassio].
[hassio]: https://www.home-assistant.io/integrations/adguard/
[openapi]: https://github.com/AdguardTeam/AdGuardHome/tree/master/openapi
[pyclient]: https://pypi.org/project/adguardhome/
## <a href="#comparison" id="comparison" name="comparison">Comparing AdGuard Home to other solutions</a>
### <a href="#comparison-adguard-dns" id="comparison-adguard-dns" name="comparison-adguard-dns">How is this different from public AdGuard DNS servers?</a>
Running your own AdGuard Home server allows you to do much more than using a
public DNS server. It's a completely different level. See for yourself:
* Choose what exactly the server blocks and permits.
* Monitor your network activity.
* Add your own custom filtering rules.
* **Most importantly, it's your own server, and you are the only one who's in
control.**
### <a href="#comparison-pi-hole" id="comparison-pi-hole" name="comparison-pi-hole">How does AdGuard Home compare to Pi-Hole</a>
At this point, AdGuard Home has a lot in common with Pi-Hole. Both block ads
and trackers using the so-called “DNS sinkholing” method and both allow
customizing what's blocked.
<aside>
We're not going to stop here. DNS sinkholing is not a bad starting point, but
this is just the beginning.
</aside>
AdGuard Home provides a lot of features out-of-the-box with no need to install
and configure additional software. We want it to be simple to the point when
even casual users can set it up with minimal effort.
**Disclaimer:** some of the listed features can be added to Pi-Hole by
installing additional software or by manually using SSH terminal and
reconfiguring one of the utilities Pi-Hole consists of. However, in our
opinion, this cannot be legitimately counted as a Pi-Hole's feature.
| Feature | AdGuard&nbsp;Home | Pi-Hole |
|-------------------------------------------------------------------------|-------------------|-----------------------------------------------------------|
| Blocking ads and trackers | ✅ | ✅ |
| Customizing blocklists | ✅ | ✅ |
| Built-in DHCP server | ✅ | ✅ |
| HTTPS for the Admin interface | ✅ | Kind of, but you'll need to manually configure lighttpd |
| Encrypted DNS upstream servers (DNS-over-HTTPS, DNS-over-TLS, DNSCrypt) | ✅ | ❌ (requires additional software) |
| Cross-platform | ✅ | ❌ (not natively, only via Docker) |
| Running as a DNS-over-HTTPS or DNS-over-TLS server | ✅ | ❌ (requires additional software) |
| Blocking phishing and malware domains | ✅ | ❌ (requires non-default blocklists) |
| Parental control (blocking adult domains) | ✅ | ❌ |
| Force Safe search on search engines | ✅ | ❌ |
| Per-client (device) configuration | ✅ | ✅ |
| Access settings (choose who can use AGH DNS) | ✅ | ❌ |
| Running [without root privileges][wiki-noroot] | ✅ | ❌ |
[wiki-noroot]: https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#running-without-superuser
### <a href="#comparison-adblock" id="comparison-adblock" name="comparison-adblock">How does AdGuard Home compare to traditional ad blockers</a>
It depends.
DNS sinkholing is capable of blocking a big percentage of ads, but it lacks
the flexibility and the power of traditional ad blockers. You can get a good
impression about the difference between these methods by reading [this
article][blog-adaway], which compares AdGuard for Android (a traditional ad
blocker) to hosts-level ad blockers (which are almost identical to DNS-based
blockers in their capabilities). This level of protection is enough for some
users.
Additionally, using a DNS-based blocker can help to block ads, tracking and
analytics requests on other types of devices, such as SmartTVs, smart speakers
or other kinds of IoT devices (on which you can't install traditional ad
blockers).
### <a href="#comparison-limitations" id="comparison-limitations" name="comparison-limitations">Known limitations</a>
Here are some examples of what cannot be blocked by a DNS-level blocker:
* YouTube, Twitch ads;
* Facebook, Twitter, Instagram sponsored posts.
Essentially, any advertising that shares a domain with content cannot be blocked
by a DNS-level blocker.
Is there a chance to handle this in the future? DNS will never be enough to do
this. Our only option is to use a content blocking proxy like what we do in the
standalone AdGuard applications. We're [going to bring][issue-1228] this
feature support to AdGuard Home in the future. Unfortunately, even in this
case, there still will be cases when this won't be enough or would require quite
a complicated configuration.
[blog-adaway]: https://adguard.com/blog/adguard-vs-adaway-dns66.html
[issue-1228]: https://github.com/AdguardTeam/AdGuardHome/issues/1228
## <a href="#how-to-build" id="how-to-build" name="how-to-build">How to build from source</a>
### <a href="#prerequisites" id="prerequisites" name="prerequisites">Prerequisites</a>
Run `make init` to prepare the development environment.
You will need this to build AdGuard Home:
* [Go](https://golang.org/dl/) v1.19 or later;
* [Node.js](https://nodejs.org/en/download/) v10.16.2 or later;
* [npm](https://www.npmjs.com/) v6.14 or later;
* [yarn](https://yarnpkg.com/) v1.22.5 or later.
### <a href="#building" id="building" name="building">Building</a>
Open your terminal and execute these commands:
```sh
git clone https://github.com/AdguardTeam/AdGuardHome
cd AdGuardHome
make
```
**NOTE:** The non-standard `-j` flag is currently not supported, so building
with `make -j 4` or setting your `MAKEFLAGS` to include, for example, `-j 4` is
likely to break the build. If you do have your `MAKEFLAGS` set to that, and you
don't want to change it, you can override it by running `make -j 1`.
Check the [`Makefile`][src-makefile] to learn about other commands.
#### <a href="#building-cross" id="building-cross" name="building-cross">Building for a different platform</a>
You can build AdGuard Home for any OS/ARCH that Go supports. In order to do
this, specify `GOOS` and `GOARCH` environment variables as macros when running
`make`.
For example:
```sh
env GOOS='linux' GOARCH='arm64' make
```
or:
```sh
make GOOS='linux' GOARCH='arm64'
```
#### <a href="#preparing-releases" id="preparing-releases" name="preparing-releases">Preparing releases</a>
You'll need [`snapcraft`] to prepare a release build. Once installed, run the
following command:
```sh
make build-release CHANNEL='...' VERSION='...'
```
See the [`build-release` target documentation][targ-release].
#### <a href="#docker-image" id="docker-image" name="docker-image">Docker image</a>
Run `make build-docker` to build the Docker image locally (the one that we
publish to DockerHub). Please note, that we're using [Docker Buildx][buildx] to
build our official image.
You may need to prepare before using these builds:
* (Linux-only) Install Qemu:
```sh
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes --credential yes
```
* Prepare the builder:
```sh
docker buildx create --name buildx-builder --driver docker-container --use
```
See the [`build-docker` target documentation][targ-docker].
#### <a href="#debugging-the-frontend" id="debugging-the-frontend" name="debugging-the-frontend">Debugging the frontend</a>
When you need to debug the frontend without recompiling the production version
every time, for example to check how your labels would look on a form, you can
run the frontend build a development environment.
1. In a separate terminal, run:
```sh
( cd ./client/ && env NODE_ENV='development' npm run watch )
```
2. Run your `AdGuardHome` binary with the `--local-frontend` flag, which
instructs AdGuard Home to ignore the built-in frontend files and use those
from the `./build/` directory.
3. Now any changes you make in the `./client/` directory should be recompiled
and become available on the web UI. Make sure that you disable the browser
cache to make sure that you actually get the recompiled version.
[`snapcraft`]: https://snapcraft.io/
[buildx]: https://docs.docker.com/buildx/working-with-buildx/
[src-makefile]: https://github.com/AdguardTeam/AdGuardHome/blob/master/Makefile
[targ-docker]: https://github.com/AdguardTeam/AdGuardHome/tree/master/scripts#build-dockersh-build-a-multi-architecture-docker-image
[targ-release]: https://github.com/AdguardTeam/AdGuardHome/tree/master/scripts#build-releasesh-build-a-release-for-all-platforms
## <a href="#contributing" id="contributing" name="contributing">Contributing</a>
You are welcome to fork this repository, make your changes and [submit a pull
request][pr]. Please make sure you follow our [code guidelines][guide] though.
Please note that we don't expect people to contribute to both UI and backend
parts of the program simultaneously. Ideally, the backend part is implemented
first, i.e. configuration, API, and the functionality itself. The UI part can
be implemented later in a different pull request by a different person.
[guide]: https://github.com/AdguardTeam/CodeGuidelines/
[pr]: https://github.com/AdguardTeam/AdGuardHome/pulls
### <a href="#test-unstable-versions" id="test-unstable-versions" name="test-unstable-versions">Test unstable versions</a>
There are two update channels that you can use:
* `beta`: beta versions of AdGuard Home. More or less stable versions,
usually released every two weeks or more often.
* `edge`: the newest version of AdGuard Home from the development branch. New
updates are pushed to this channel daily.
There are three options how you can install an unstable version:
1. [Snap Store]: look for the `beta` and `edge` channels.
2. [Docker Hub]: look for the `beta` and `edge` tags.
3. Standalone builds. Use the automated installation script or look for the
available builds [on the Wiki][wiki-platf].
Script to install a beta version:
```sh
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -c beta
```
Script to install an edge version:
```sh
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -c edge
```
[wiki-platf]: https://github.com/AdguardTeam/AdGuardHome/wiki/Platforms
### <a href="#reporting-issues" id="reporting-issues" name="reporting-issues">Report issues</a>
If you run into any problem or have a suggestion, head to [this page][iss] and
click on the “New issue” button.
[iss]: https://github.com/AdguardTeam/AdGuardHome/issues
### <a href="#translate" id="translate" name="translate">Help with translations</a>
If you want to help with AdGuard Home translations, please learn more about
translating AdGuard products [in our Knowledge Base][kb-trans]. You can
contribute to the [AdGuardHome project on CrowdIn][crowdin].
[crowdin]: https://crowdin.com/project/adguard-applications/en#/adguard-home
[kb-trans]: https://kb.adguard.com/en/general/adguard-translations
### <a href="#help-other" id="help-other" name="help-other">Other</a>
Another way you can contribute is by [looking for issues][iss-help] marked as
`help wanted`, asking if the issue is up for grabs, and sending a PR fixing the
bug or implementing the feature.
[iss-help]: https://github.com/AdguardTeam/AdGuardHome/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22
## <a href="#uses" id="uses" name="uses">Projects that use AdGuard Home</a>
<!--
TODO(a.garipov): Use reference links.
-->
* [AdGuard Home Remote](https://apps.apple.com/app/apple-store/id1543143740):
iOS app by [Joost](https://rocketscience-it.nl/).
* [Python library](https://github.com/frenck/python-adguardhome) by
[@frenck](https://github.com/frenck).
* [Home Assistant add-on](https://github.com/hassio-addons/addon-adguard-home)
by [@frenck](https://github.com/frenck).
* [OpenWrt LUCI app](https://github.com/kongfl888/luci-app-adguardhome) by
[@kongfl888](https://github.com/kongfl888) (originally by
[@rufengsuixing](https://github.com/rufengsuixing)).
* [Prometheus exporter for AdGuard
Home](https://github.com/ebrianne/adguard-exporter) by
[@ebrianne](https://github.com/ebrianne).
* [Terminal-based, real-time traffic monitoring and statistics for your AdGuard Home
instance](https://github.com/Lissy93/AdGuardian-Term) by
[@Lissy93](https://github.com/Lissy93)
* [AdGuard Home on GLInet
routers](https://forum.gl-inet.com/t/adguardhome-on-gl-routers/10664) by
[Gl-Inet](https://gl-inet.com/).
* [Cloudron app](https://git.cloudron.io/cloudron/adguard-home-app) by
[@gramakri](https://github.com/gramakri).
* [Asuswrt-Merlin-AdGuardHome-Installer](https://github.com/jumpsmm7/Asuswrt-Merlin-AdGuardHome-Installer)
by [@jumpsmm7](https://github.com/jumpsmm7) aka
[@SomeWhereOverTheRainBow](https://www.snbforums.com/members/somewhereovertherainbow.64179/).
* [Node.js library](https://github.com/Andrea055/AdguardHomeAPI) by
[@Andrea055](https://github.com/Andrea055/).
## <a href="#acknowledgments" id="acknowledgments" name="acknowledgments">Acknowledgments</a>
<!--
TODO(a.garipov): Use reference links.
-->
This software wouldn't have been possible without:
* [Go](https://golang.org/dl/) and its libraries:
* [gcache](https://github.com/bluele/gcache)
* [miekg's dns](https://github.com/miekg/dns)
* [go-yaml](https://github.com/go-yaml/yaml)
* [service](https://godoc.org/github.com/kardianos/service)
* [dnsproxy](https://github.com/AdguardTeam/dnsproxy)
* [urlfilter](https://github.com/AdguardTeam/urlfilter)
* [Node.js](https://nodejs.org/) and its libraries:
* And many more Node.js packages.
* [React.js](https://reactjs.org)
* [Tabler](https://github.com/tabler/tabler)
* [whotracks.me data](https://github.com/cliqz-oss/whotracks.me)
You might have seen that [CoreDNS] was mentioned here before, but we've stopped
using it in AdGuard Home.
For the full list of all Node.js packages in use, please take a look at
[`client/package.json`][src-packagejson] file.
[CoreDNS]: https://coredns.io
[src-packagejson]: https://github.com/AdguardTeam/AdGuardHome/blob/master/client/package.json
## <a href="#privacy" id="privacy" name="privacy">Privacy</a>
Our main idea is that you are the one, who should be in control of your data.
So it is only natural, that AdGuard Home does not collect any usage statistics,
and does not use any web services unless you configure it to do so. See also
the [full privacy policy][privacy] with every bit that *could in theory be sent*
by AdGuard Home is available.
[privacy]: https://adguard.com/en/privacy/home.html

20
apps/adguardhome/data.yml Normal file
View File

@ -0,0 +1,20 @@
name: AdGuardHome
tags:
- 工具
title: 自由且开源的功能强大的网络广告和跟踪器屏蔽DNS服务器
type: 工具
description: 自由且开源的功能强大的网络广告和跟踪器屏蔽DNS服务器
additionalProperties:
key: adguardhome
name: AdGuardHome
tags:
- Tool
shortDescZh: 自由且开源的功能强大的网络广告和跟踪器屏蔽DNS服务器
shortDescEn: Free and open source, powerful network-wide ads & trackers blocking DNS server
type: tool
crossVersionUpdate: true
limit: 0
recommend: 0
website: https://hub.docker.com/r/adguard/adguardhome
github: https://github.com/AdguardTeam/AdGuardHome
document: https://github.com/AdguardTeam/AdGuardHome/wiki

View File

@ -0,0 +1,13 @@
CONTAINER_NAME="adguardhome"
PLAIN_DNS_PORT="20053"
DHCP_PORT1="20067"
DHCP_PORT2="20068"
HTTP_PORT="23000"
PANEL_APP_PORT_HTTP="23001"
DOH_PORT="20443"
DOT_PORT="853"
QUIC_PORT1="20784"
QUIC_PORT2="8853"
DNS_CRYPT_PORT="5443"
WORK_PATH="./data/work"
CONFIG_PATH="./data/conf"

View File

@ -0,0 +1,96 @@
additionalProperties:
formFields:
- default: 20053
edit: true
envKey: PLAIN_DNS_PORT
labelEn: Plain DNS port
labelZh: 普通DNS端口
required: true
rule: paramPort
type: number
- default: 20067
edit: true
envKey: DHCP_PORT1
labelEn: DHCP service port 1
labelZh: DHCP服务端口1
required: true
rule: paramPort
type: number
- default: 20068
edit: true
envKey: DHCP_PORT2
labelEn: DHCP service port 2
labelZh: DHCP服务端口2
required: true
rule: paramPort
type: number
- default: 23000
edit: true
envKey: HTTP_PORT
labelEn: HTTP web port
labelZh: HTTP网页端口
required: true
rule: paramPort
type: number
- default: 23001
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: Initial setup web page port
labelZh: 初始设置网页端口
required: true
rule: paramPort
type: number
- default: 20443
edit: true
envKey: DOH_PORT
labelEn: DOH service port
labelZh: DOH服务端口
required: true
rule: paramPort
type: number
- default: 853
edit: true
envKey: DOT_PORT
labelEn: DOT service port
labelZh: DOT服务端口
required: true
rule: paramPort
type: number
- default: 20784
edit: true
envKey: QUIC_PORT1
labelEn: QUIC service port 1
labelZh: QUIC服务端口1
required: true
rule: paramPort
type: number
- default: 8853
edit: true
envKey: QUIC_PORT2
labelEn: QUIC service port 2
labelZh: QUIC服务端口2
required: true
rule: paramPort
type: number
- default: 5443
edit: true
envKey: DNS_CRYPT_PORT
labelEn: DNS Crypt service port
labelZh: DNS Crypt服务端口
required: true
rule: paramPort
type: number
- default: ./data/work
edit: true
envKey: WORK_PATH
labelEn: Work data folder path
labelZh: 工作数据文件夹路径
required: true
type: text
- default: ./data/conf
edit: true
envKey: CONFIG_PATH
labelEn: Configuration folder path
labelZh: 配置文件夹路径
required: true
type: text

View File

@ -0,0 +1,32 @@
version: '3'
services:
adguardhome:
container_name: ${CONTAINER_NAME}
restart: always
networks:
- 1panel-network
ports:
- ${PLAIN_DNS_PORT}:53/tcp
- ${PLAIN_DNS_PORT}:53/udp
- ${DHCP_PORT1}:67/udp
- ${DHCP_PORT2}:68/udp
- ${HTTP_PORT}:80/tcp
- ${DOH_PORT}:443/tcp
- ${DOH_PORT}:443/udp
- ${PANEL_APP_PORT_HTTP}:3000/tcp
- ${DOT_PORT}:853/tcp
- ${QUIC_PORT1}:784/udp
- ${DOT_PORT}:853/udp
- ${QUIC_PORT2}:8853/udp
- ${DNS_CRYPT_PORT}:5443/tcp
- ${DNS_CRYPT_PORT}:5443/udp
volumes:
- ${WORK_PATH}:/opt/adguardhome/work
- ${CONFIG_PATH}:/opt/adguardhome/conf
image: adguard/adguardhome:latest
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true

BIN
apps/adguardhome/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

@ -0,0 +1,22 @@
AIS_DB_PORT="3306"
AIS_PLATFORM="mysql"
ALI_ACCESS_ID=""
ALI_ACCESS_SECRET=""
ALI_SMS_PERMIT=""
ALI_SMS_SIGN=""
ALI_SMS_TEMPLATE=""
CONTAINER_NAME="ais-ninja"
EMAIL_SENDER=""
GOOGLE_CLIENT_ID=""
PANEL_APP_PORT_HTTP="40043"
PANEL_DB_HOST="mysql"
PANEL_DB_NAME="ais-ninja_Nk3BFS"
PANEL_DB_USER="ais-ninja_XpfeJ6"
PANEL_DB_USER_PASSWORD="ais-ninja_ZECQzW"
REDIS_HOST="redis"
REDIS_PASS="REDIS_PASSWORD"
REDIS_PORT=6379
SMTP_HOST=""
SMTP_PASSWORD=""
SMTP_PORT="587"
SMTP_USER=""

View File

@ -0,0 +1,163 @@
additionalProperties:
formFields:
- child:
default: ""
envKey: PANEL_DB_HOST
labelEn: Database Service
labelZh: 数据库服务
required: true
type: service
default: mysql
envKey: AIS_PLATFORM
labelEn: Database Service
labelZh: 数据库服务
params:
- envKey: AIS_DB_PORT
key: mysql
type: param
value: "3306"
- envKey: AIS_DB_PORT
key: postgresql
type: param
value: "5432"
required: true
type: apps
values:
- label: MySQL
value: mysql
- default: ais-ninja
envKey: PANEL_DB_NAME
labelEn: Database
labelZh: 数据库名
random: true
required: true
rule: paramCommon
type: text
- default: ais-ninja
envKey: PANEL_DB_USER
labelEn: User
labelZh: 数据库用户
random: true
required: true
rule: paramCommon
type: text
- default: ais-ninja
envKey: PANEL_DB_USER_PASSWORD
labelEn: Password
labelZh: 数据库用户密码
random: true
required: true
rule: paramComplexity
type: password
- default: ""
edit: true
envKey: REDIS_HOST
key: redis
labelEn: Redis Service
labelZh: Redis服务
required: true
type: service
- default: "6379"
edit: true
envKey: REDIS_PORT
labelEn: Redis Service Port
labelZh: Redis服务端口
required: true
rule: paramPort
type: number
- default: ""
edit: true
envKey: REDIS_PASS
labelEn: Redis Service Password
labelZh: Redis服务密码
required: true
rule: paramCommon
type: password
- default: 40043
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: Port
labelZh: 端口
required: true
rule: paramPort
type: number
- default: ""
edit: true
envKey: SMTP_HOST
labelEn: SMTP HOST
labelZh: SMTP 主机
required: false
rule: paramExtUrl
type: text
- default: "587"
edit: true
envKey: SMTP_PORT
labelEn: SMTP Port
labelZh: SMTP 端口
required: false
rule: paramPort
type: number
- default: ""
edit: true
envKey: EMAIL_SENDER
labelEn: Email service sender email address
labelZh: 邮箱服务发送方邮箱地址
required: false
type: text
- default: ""
edit: true
envKey: SMTP_USER
labelEn: Email service user name
labelZh: 邮箱服务用户名
required: false
type: text
- default: ""
edit: true
envKey: SMTP_PASSWORD
labelEn: Email service password
labelZh: 邮箱服务密码
required: false
rule: paramCommon
type: password
- default: ""
edit: true
envKey: GOOGLE_CLIENT_ID
labelEn: Google login client_id
labelZh: 谷歌登录的client_id
required: false
type: text
- default: ""
edit: true
envKey: ALI_ACCESS_ID
labelEn: Alibaba Cloud accessKey ID
labelZh: 阿里云accessKey ID
required: false
type: text
- default: ""
edit: true
envKey: ALI_ACCESS_SECRET
labelEn: Alibaba Cloud accessKeySecret
labelZh: 阿里云 accessKeySecret
required: false
type: text
- default: ""
edit: true
envKey: ALI_SMS_PERMIT
labelEn: Enable mobile sign-in registration (true or false)
labelZh: 启用手机登录注册(true or false)
required: false
type: text
- default: ""
edit: true
envKey: ALI_SMS_SIGN
labelEn: Alibaba Cloud SMS verification code service signature
labelZh: 阿里云短信验证码服务签名
required: false
type: text
- default: ""
edit: true
envKey: ALI_SMS_TEMPLATE
labelEn: Alibaba Cloud verification code SMS template, which must include {code}
labelZh: 阿里云验证码短信模板,需要包含 {code}
required: false
type: text

View File

@ -0,0 +1,35 @@
version: '3'
services:
ais-ninja:
container_name: ${CONTAINER_NAME}
restart: always
networks:
- 1panel-network
ports:
- "${PANEL_APP_PORT_HTTP}:80"
environment:
DATABASE_NAME: ${PANEL_DB_NAME}
DATABASE_PORT: ${AIS_DB_PORT}
DATABASE_HOST: ${PANEL_DB_HOST}
DATABASE_USER: ${PANEL_DB_USER}
DATABASE_PASSWORD: ${PANEL_DB_USER_PASSWORD}
DATABASE_SYNC: 'true'
REDIS_URL: redis://:${REDIS_PASS}@${REDIS_HOST}:${REDIS_PORT}/0
EMAIL_HOST: ${SMTP_HOST}
EMAIL_PORT: ${SMTP_PORT}
EMAIL_FROM: ${EMAIL_SENDER}
EMAIL_AUTH_USER: ${SMTP_USER}
EMAIL_AUTH_PASS: ${SMTP_PASSWORD}
SOCIAL_GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID}
ALI_ACCESS_KEY_ID: ${ALI_ACCESS_ID}
ALI_ACCESS_KEY_SECRET: ${ALI_ACCESS_SECRET}
ALI_SMS_ENABLE: ${ALI_SMS_PERMIT}
ALI_SMS_SIGN_NAME: ${ALI_SMS_SIGN}
ALI_SMS_TEMPLATE_CODE: ${ALI_SMS_TEMPLATE}
image: jarvis2f/ais-ninja:v1.0.8
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true

200
apps/ais-ninja/README.md Normal file
View File

@ -0,0 +1,200 @@
# 使用说明
- 管理员账户密码请通过查看容器日志获取;
- 访问地址加`/admin`即是管理员面板。
# 原始相关
# ais-ninja
[English README]([README_en.md](https://github.com/jarvis2f/ais-ninja/blob/main/README_en.md))
## 介绍
![intro.gif](https://github.com/jarvis2f/ais-ninja/raw/main/doc%2Fintro.gif)
ais-ninja 是一个基于 chatgpt 的 Web 应用程序。它基于 [ChatGpt-Web](https://github.com/79E/ChatGpt-Web).
* 重构了后端代码。
* 多语言支持。
* 支持插件系统。
## 插件列表
> 欢迎贡献你开发的插件,如何开发可以查看 [插件开发文档](#插件开发)。
| 插件名称 | 插件介绍 |
|----------------------------------------|-------------------|
| [Baidu Search](plugins%2Fbaidu-search) | 百度搜索 |
| [DuckDuckGo](plugins%2FDuckDuckGo) | DuckDuckGo 搜索 |
| [Google Search](plugins%2Fgoogle) | 谷歌搜索 |
| [imdb](plugins%2Fimdb) | IMDB电影搜索API需要付费 |
| [internet](plugins%2Finternet) | 联网插件 |
| [ipinfo.io](plugins%2Fipinfo.io) | ip 信息查询 |
| [newsdata.io](plugins%2Fnewsdata.io) | 新闻查询 |
| [seniverse](plugins%2Fseniverse) | 天气查询 |
| [themoviedb](plugins%2Fthemoviedb) | 电影信息查询 |
## 部署
### docker
```shell
docker run -d \
--name ais-ninja \
--hostname ais-ninja \
-p 6789:80 \
-e PUID=0 \
-e DATABASE_NAME=ais_ninja \
-e DATABASE_PORT=3306 \
-e DATABASE_HOST=host \
-e DATABASE_USER=root \
-e DATABASE_PASSWORD=123456 \
-e DATABASE_SYNC='true' \
-e REDIS_URL=redis://${url}:6379/0 \
jarvis2f/ais-ninja:v1.0.2
```
### docker-compose
1. 创建文件夹 `ais_ninja` 创建 `docker-compose.yml` 文件.
```shell
mkdir ais.ninja && cd ais.ninja
touch docker-compose.yml
```
2. 复制 [docker-compose.yml](https://github.com/jarvis2f/ais-ninja/blob/main/deploy/docker-compose.yml) 到 `docker-compose.yml` 文件中
3. 修改 `docker-compose.yml` 中的环境变量
4. 运行 `docker-compose up -d` 启动服务
运行 `docker logs ais-ninja-app` 查看日志。如果看到如下日志,则说明服务启动成功。首次启动会生成默认管理员帐户和密码。
```shell
[12:47:52.887] INFO (43): Logger initialized: info
[12:47:57.798] INFO (config/43): Config file path: /app/server/config.json
[12:47:58.308] INFO (db/43): Database connected
[12:47:58.822] INFO (db/43): Database synced
[12:47:58.832] INFO (redis/43): Redis connected
[12:47:58.851] WARN (openai/43): No OpenAI tokens provided
[12:47:58.851] INFO (app/43): OpenAI clients initialized
[12:47:58.860] INFO (app/43): Server running on port 5174
[12:47:58.861] INFO (db/43): Administrator initialized: ${administrator account} ${administrator password}
```
后台地址:`http://localhost:6789/admin`
### 环境变量
> 本项目中的大部分配置项都是通过环境变量来设置的。
>
> 你也可以修改 `config.json` 文件去设置环境变量。
> 然后运行 `docker run -d --name ais-ninja -v /path/to/config.json:/app/server/config.json jarvis2f/ais-ninja:1.0.0`
> 启动服务.
| Environment Variable | Description |
|---------------------------|---------------------------------------------------------------------------|
| `DATABASE_NAME` | 数据库名称 |
| `DATABASE_PORT` | 数据库端口 |
| `DATABASE_HOST` | 数据库地址 |
| `DATABASE_USER` | 数据库用户名 |
| `DATABASE_PASSWORD` | 数据库密码 |
| `DATABASE_SYNC` | 项目启动是否自动同步数据库表结构。 true or false |
| `REDIS_URL` | Redis 地址,格式: redis[s]://[[username][:password]@][host][:port][/db-number] |
| `EMAIL_ENABLE` | 启用邮箱登录注册 true or false |
| `EMAIL_HOST` | 邮箱服务地址 |
| `EMAIL_PORT` | 邮箱服务端口 |
| `EMAIL_FROM` | 邮箱服务发送方邮箱地址 |
| `EMAIL_AUTH_USER` | 邮箱服务用户名 |
| `EMAIL_AUTH_PASS` | 邮箱服务密码 |
| `SOCIAL_GOOGLE_CLIENT_ID` | 谷歌登录的client_id |
| `ALI_ACCESS_KEY_ID` | 阿里云 accessKeyId |
| `ALI_ACCESS_KEY_SECRET` | 阿里云 accessKeySecret |
| `ALI_SMS_ENABLE` | 启用手机登录注册 true or false |
| `ALI_SMS_SIGN_NAME` | 阿里云短信验证码服务签名 |
| `ALI_SMS_TEMPLATE_CODE` | 阿里云验证码短信模板,需要包含 {code} |
## 插件开发
项目启动之后可以到后台 -> 系统配置中填写仓库地址:`https://github.com/jarvis2f/ais-ninja.git`
导入本仓库 [plugins](https://github.com/jarvis2f/ais-ninja/blob/main/plugins) 下的插件。
### 创建对话插件
可以先看下[ OpenAI 的文档](https://platform.openai.com/docs/guides/gpt/function-calling)。
对话中会将插件中的方法以下方这种格式传递给 ChatGPT 的接口ChatGPT 会返回需要调用的插件方法名称和参数。
```json
{
"functions": [
{
"name": "search_weather",
"description": "Query china real time weather information from seniverse.com",
"parameters": {
"type": "object",
"properties": {
"location": {
"type": "string",
"description": "China Pinyin Location name, e.g. beijing"
}
},
"required": [
"location"
]
}
}
]
}
```
系统中一个插件可以有多个 function, 用户安装一个插件之后会把插件中的所有 function 传递给 ChatGPT。
插件使用 JavaScript 编写,可以参考 [plugins](https://github.com/jarvis2f/ais-ninja/blob/main/plugins)中的代码。
可以使用的库:
* [fetch](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch) 发起网络请求
* [dayjs](https://day.js.org/) 时间处理
* [lodash](https://lodash.com/) 工具库
* [jsdom](https://github.com/jsdom/jsdom) 操作 DOM
* [puppeteer-core](https://www.npmjs.com/package/puppeteer-core) 模拟浏览器
* ais ais_ninja 提供的一些函数
* ais.createCompletion 调用 OpenAI 的 Completion API
* ais.createChatCompletion 调用 OpenAI 的 Chat Completion API
* ais_progress(content:string) 不需要 require,返回给用户当前方法的调用进度
[plugins](./plugins) 目录格式:
* `plugins/${plugin_name}/index.js` 插件代码
* `plugins/${plugin_name}/desc.md` 插件介绍
* `plugins/${plugin_name}/plugin.json` 插件信息
### 插件变量
可以将一些私有的 key 设为插件变量,这样就不会暴露在代码中。在 plugin.json 中的 variables 字段中定义变量。
```json
{
"name": "weather",
"description": "Query china real time weather information from seniverse.com",
"variables": {
"SENIVERSE_KEY": "Your API Key"
}
}
```
在前台插件编辑中编写变量保存,然后就可以在代码中使用 `process.env.SENIVERSE_KEY` 获取变量。
### 查看插件日志
可以使用 `console.log` 打印日志。在插件页面中打开调试按钮,会将日志输出到浏览器的 console 中。
```
📣📣📣function_call - [心知天气](search_weather)(ae9bc196-4bfe-43a9-8060-2d2e2ec601c5)
{
"name": "10000__search_weather",
"arguments": "{\n\"location\": \"shanghai\"\n}"
}
📣📣📣function_response - []()(ae9bc196-4bfe-43a9-8060-2d2e2ec601c5)
{
"status": "The API key is invalid.",
"status_code": "AP010003"
}
```

20
apps/ais-ninja/data.yml Normal file
View File

@ -0,0 +1,20 @@
name: ais-ninja
tags:
- 工具
title: 基于 ChatGPT 的 Web 应用程序
type: 工具
description: 基于 ChatGPT 的 Web 应用程序
additionalProperties:
key: ais-ninja
name: ais-ninja
tags:
- Tool
shortDescZh: 基于 ChatGPT 的 Web 应用程序
shortDescEn: ChatGPT-based web applications
type: tool
crossVersionUpdate: true
limit: 0
recommend: 0
website: https://github.com/jarvis2f/ais-ninja
github: https://github.com/jarvis2f/ais-ninja
document: https://github.com/jarvis2f/ais-ninja

View File

@ -0,0 +1,22 @@
AIS_DB_PORT="3306"
AIS_PLATFORM="mysql"
ALI_ACCESS_ID=""
ALI_ACCESS_SECRET=""
ALI_SMS_PERMIT=""
ALI_SMS_SIGN=""
ALI_SMS_TEMPLATE=""
CONTAINER_NAME="ais-ninja"
EMAIL_SENDER=""
GOOGLE_CLIENT_ID=""
PANEL_APP_PORT_HTTP="40043"
PANEL_DB_HOST="mysql"
PANEL_DB_NAME="ais-ninja_Nk3BFS"
PANEL_DB_USER="ais-ninja_XpfeJ6"
PANEL_DB_USER_PASSWORD="ais-ninja_ZECQzW"
REDIS_HOST="redis"
REDIS_PASS="REDIS_PASSWORD"
REDIS_PORT=6379
SMTP_HOST=""
SMTP_PASSWORD=""
SMTP_PORT="587"
SMTP_USER=""

View File

@ -0,0 +1,163 @@
additionalProperties:
formFields:
- child:
default: ""
envKey: PANEL_DB_HOST
labelEn: Database Service
labelZh: 数据库服务
required: true
type: service
default: mysql
envKey: AIS_PLATFORM
labelEn: Database Service
labelZh: 数据库服务
params:
- envKey: AIS_DB_PORT
key: mysql
type: param
value: "3306"
- envKey: AIS_DB_PORT
key: postgresql
type: param
value: "5432"
required: true
type: apps
values:
- label: MySQL
value: mysql
- default: ais-ninja
envKey: PANEL_DB_NAME
labelEn: Database
labelZh: 数据库名
random: true
required: true
rule: paramCommon
type: text
- default: ais-ninja
envKey: PANEL_DB_USER
labelEn: User
labelZh: 数据库用户
random: true
required: true
rule: paramCommon
type: text
- default: ais-ninja
envKey: PANEL_DB_USER_PASSWORD
labelEn: Password
labelZh: 数据库用户密码
random: true
required: true
rule: paramComplexity
type: password
- default: ""
edit: true
envKey: REDIS_HOST
key: redis
labelEn: Redis Service
labelZh: Redis服务
required: true
type: service
- default: "6379"
edit: true
envKey: REDIS_PORT
labelEn: Redis Service Port
labelZh: Redis服务端口
required: true
rule: paramPort
type: number
- default: ""
edit: true
envKey: REDIS_PASS
labelEn: Redis Service Password
labelZh: Redis服务密码
required: true
rule: paramCommon
type: password
- default: 40043
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: Port
labelZh: 端口
required: true
rule: paramPort
type: number
- default: ""
edit: true
envKey: SMTP_HOST
labelEn: SMTP HOST
labelZh: SMTP 主机
required: false
rule: paramExtUrl
type: text
- default: "587"
edit: true
envKey: SMTP_PORT
labelEn: SMTP Port
labelZh: SMTP 端口
required: false
rule: paramPort
type: number
- default: ""
edit: true
envKey: EMAIL_SENDER
labelEn: Email service sender email address
labelZh: 邮箱服务发送方邮箱地址
required: false
type: text
- default: ""
edit: true
envKey: SMTP_USER
labelEn: Email service user name
labelZh: 邮箱服务用户名
required: false
type: text
- default: ""
edit: true
envKey: SMTP_PASSWORD
labelEn: Email service password
labelZh: 邮箱服务密码
required: false
rule: paramCommon
type: password
- default: ""
edit: true
envKey: GOOGLE_CLIENT_ID
labelEn: Google login client_id
labelZh: 谷歌登录的client_id
required: false
type: text
- default: ""
edit: true
envKey: ALI_ACCESS_ID
labelEn: Alibaba Cloud accessKey ID
labelZh: 阿里云accessKey ID
required: false
type: text
- default: ""
edit: true
envKey: ALI_ACCESS_SECRET
labelEn: Alibaba Cloud accessKeySecret
labelZh: 阿里云 accessKeySecret
required: false
type: text
- default: ""
edit: true
envKey: ALI_SMS_PERMIT
labelEn: Enable mobile sign-in registration (true or false)
labelZh: 启用手机登录注册(true or false)
required: false
type: text
- default: ""
edit: true
envKey: ALI_SMS_SIGN
labelEn: Alibaba Cloud SMS verification code service signature
labelZh: 阿里云短信验证码服务签名
required: false
type: text
- default: ""
edit: true
envKey: ALI_SMS_TEMPLATE
labelEn: Alibaba Cloud verification code SMS template, which must include {code}
labelZh: 阿里云验证码短信模板,需要包含 {code}
required: false
type: text

View File

@ -0,0 +1,35 @@
version: '3'
services:
ais-ninja:
container_name: ${CONTAINER_NAME}
restart: always
networks:
- 1panel-network
ports:
- "${PANEL_APP_PORT_HTTP}:80"
environment:
DATABASE_NAME: ${PANEL_DB_NAME}
DATABASE_PORT: ${AIS_DB_PORT}
DATABASE_HOST: ${PANEL_DB_HOST}
DATABASE_USER: ${PANEL_DB_USER}
DATABASE_PASSWORD: ${PANEL_DB_USER_PASSWORD}
DATABASE_SYNC: 'true'
REDIS_URL: redis://:${REDIS_PASS}@${REDIS_HOST}:${REDIS_PORT}/0
EMAIL_HOST: ${SMTP_HOST}
EMAIL_PORT: ${SMTP_PORT}
EMAIL_FROM: ${EMAIL_SENDER}
EMAIL_AUTH_USER: ${SMTP_USER}
EMAIL_AUTH_PASS: ${SMTP_PASSWORD}
SOCIAL_GOOGLE_CLIENT_ID: ${GOOGLE_CLIENT_ID}
ALI_ACCESS_KEY_ID: ${ALI_ACCESS_ID}
ALI_ACCESS_KEY_SECRET: ${ALI_ACCESS_SECRET}
ALI_SMS_ENABLE: ${ALI_SMS_PERMIT}
ALI_SMS_SIGN_NAME: ${ALI_SMS_SIGN}
ALI_SMS_TEMPLATE_CODE: ${ALI_SMS_TEMPLATE}
image: jarvis2f/ais-ninja:latest
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true

BIN
apps/ais-ninja/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

289
apps/alist-tvbox/README.md Normal file
View File

@ -0,0 +1,289 @@
# 使用说明
**默认用户名:`admin` 密码:`admin`**
# 原始相关
***
# AList-TvBox
AList代理支持xiaoya版AList界面管理。
## 简明教程
1. 准备工作安装Docker
2. 安装AList-TvBox
```bash
sudo bash -c "$(curl -fsSL https://d.har01d.cn/update_xiaoya.sh)"
```
3. 打开管理界面http://your-ip:4567/#/accounts
默认用户名admin 密码admin
4. 获取并填写阿里token、开放token
5. 将订阅地址[http://your-ip:4567/sub/0](http://your-ip:4567/sub/0) 输入到TvBox配置
## 功能
- 管理界面
- 海报墙
- 多个AList站点
- 多个阿里云盘账号
- 挂载我的云盘
- 自动签到
- 自动刷新阿里Token
- 自定义TvBox配置
- 安全订阅配置
- TvBox配置聚合
- 添加阿里云盘分享
- 添加PikPak分享
- 支持BiliBili
- 管理AList服务
- 小雅配置文件管理
- 构建索引
- 在线日志
## 安装
### 一键安装
#### 小雅集成版
不需要再安装小雅版Docker。
如果找不到bash就替换为sh。
如果找不到sudo就用root账号登录去掉sudo后运行。
```bash
sudo bash -c "$(curl -fsSL https://d.har01d.cn/update_xiaoya.sh)"
```
使用其它配置目录:
```bash
sudo bash -c "$(curl -fsSL https://d.har01d.cn/update_xiaoya.sh)" -s /home/user/atv
```
使用其它端口:
- 第一个参数是挂载的数据目录,默认是/etc/xiaoya。
- 第二个参数是管理界面端口默认是4567。
- 第三个参数是小雅AList端口默认是5344。
```bash
sudo bash -c "$(curl -fsSL https://d.har01d.cn/update_xiaoya.sh)" -s /home/alist 8080
sudo bash -c "$(curl -fsSL https://d.har01d.cn/update_xiaoya.sh)" -s /home/alist 8080 5544
```
OpenWrt去掉sudo或者已经是root账号
```bash
bash -c "$(curl -fsSL https://d.har01d.cn/update_xiaoya.sh)"
```
如果没有安装curl:
```bash
wget https://d.har01d.cn/update_xiaoya.sh; sh ./update_xiaoya.sh
```
#### 内存优化版
目前仅支持Linux x86_64平台。
```bash
wget https://d.har01d.cn/update_xiaoya.sh -O update_xiaoya.sh && sh ./update_xiaoya.sh -t native
```
#### host网络模式
使用host网络模式运行
```bash
sudo bash -c "$(curl -fsSL https://d.har01d.cn/update_hostmode.sh)"
```
使用的端口:
6789 - nginx
5233 - httpd
5234 - AList
4567 - 管理应用
#### NAS
对于群辉等NAS系统请挂载Docker的/data目录到群辉文件系统否则数据不会保留。
### 海报展示
#### 浏览目录
![浏览目录](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/poster1.jpg)
#### 搜索界面
![搜索界面](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/poster2.jpg)
#### 播放界面
![播放界面](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/poster3.jpg)
## 管理
打开管理网页http://your-ip:4567/
默认用户名admin 密码admin
点击右上角菜单,进入用户界面修改用户名和密码。
### 站点
![站点列表](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_sites.png)
小雅版默认添加了站点:`http://localhost`,如果配置有域名,自行修改地址。
为什么是`http://localhost` 因为小雅用80端口代理了容器内的AList 5244端口。
管理程序运行在同一个容器内能够直接访问80端口。
访问AList请加端口http://your-ip:5344/ 。使用Docker映射的端口默认是5344.
自己可以添加三方站点取代了xiaoya的套娃。会自动识别版本如果不能正确识别请手动配置版本。
![添加站点](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_site_config.png)
如果AList开启了强制登录会自动填写认证token。
![站点数据](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_site_data.png)
### 账号
![账号列表](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_account.png)
第一次启动会自动读取/data/mytoken.txt,/data/myopentoken.txt,/data/temp_transfer_folder_id.txt里面的内容以后这些文件不再生效。
![账号详情](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_account_detail.png)
#### 转存文件夹ID
在阿里网盘网页版上创建一个转存目录比如“temp”.
然后点击目录,浏览器显示的 URL
https://www.aliyundrive.com/drive/folder/640xxxxxxxxxxxxxxxxxxxca8a 最后一串就是。
### 订阅
tvbox/my.json和juhe.json不能在TvBox直接使用请使用订阅地址
![订阅列表](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_sub.png)
![添加订阅](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_sub_config.png)
添加订阅支持多个URL用逗号隔开。定制部分基本和TvBox的配置json一致添加了站点白名单`sites-whitelist`和黑名单`sites-blacklist`。
定制属于高级功能不懂TvBox配置格式不要轻易改动。
站点`key`是必须的其它字段可选。对于livesrulesparsesdoh类型`name`字段是必须的。
站点名称可以加前缀通过订阅URL前面加前缀使用`@`分割。比如:`饭@http://饭太硬.top/tv,菜@https://tvbox.cainisi.cf`
替换功能:
在配置页面->高级设置里面找到阿里Token地址然后在订阅-定制里面自替换token。
```json
{
"sites-blacklist": ["说明1","说明2", "说明3","说明4","公告", "ext_live_protocol", "cc"],
"sites": [
]
}
```
![订阅预览](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_sub_data.png)
### 资源
第一次启动会自动读取/data/alishare_list.txt文件里面的分享内容并保存到数据库以后这个文件就不再生效。
可以在界面批量导入文件里面的分享内容,批量删除分享。
添加资源如果路径以/开头就会创建在根目录下。否则在/🈴我的阿里分享/下面。
![分享列表](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_shares.png)
### 海报墙模式
![海报](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_poster.jpg)
![海报1](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_poster1.jpg)
添加一个小雅站点并打开搜索功能。
![](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_source.jpg)
可以自定义类别。在文件管理界面,添加一个文件/data/category.txt内容是要显示的小雅目录。
可以自定义名称,冒号后面是自定义的名字。 在分类下面可以加子目录作为筛选条件,用两个空格开始。
<pre>
每日更新
电视剧/国产剧
电视剧/美剧
美剧(已刮削):美剧ℹ
</pre>
[示例文件](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/category.txt)
![类别](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_category.png)
![filter](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_filter.jpg)
### BiliBili
目前只有影视TV支持高清高速的DASH格式视频。
拖动行可以改变顺序,需要点击保存按钮才能生效。
打开、关闭显示开关后,需要点击保存按钮才能生效。
![BiliBili](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_bilibili.png)
登录后才能使用TvBox第三个站源。
![扫码登录](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_bilibili_login.png)
或者使用已有的cookie登录。
打开上报播放记录B站才能看到播放记录。
![配置](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_bilibili_config.png)
添加搜索关键词作为一级分类:
![搜索](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_bilibili_search.png)
添加频道作为一级分类:
![频道](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_bilibili_channel.png)
### 配置
![配置页面](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_config.png)
开启安全订阅在订阅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
### 索引
对于阿里云盘资源,建议使用文件数量少的路径,并限速,防止被封号。
![索引页面](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_index.png)
![索引模板](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_index_template.png)
### 别名
把一些路径合并成一个路径。
![别名页面](https://raw.githubusercontent.com/power721/alist-tvbox/master/doc/atv_alias.png)
### 日志
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还是生效的可以在文件页面编辑。

20
apps/alist-tvbox/data.yml Normal file
View File

@ -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

View File

@ -0,0 +1,4 @@
CONTAINER_NAME="alist-tvbox"
PANEL_APP_PORT_HTTP="40161"
PANEL_APP_PORT_XIAOYA="40162"
DATA_PATH="./data"

View File

@ -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

View File

@ -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

BIN
apps/alist-tvbox/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

@ -0,0 +1,4 @@
CONTAINER_NAME="alist"
PANEL_APP_PORT_HTTP="40034"
DATA_PATH="./data/data"
MOUNT_PATH="./data/mnt"

View File

@ -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

View File

@ -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

144
apps/alist/README.md Normal file
View File

@ -0,0 +1,144 @@
# 使用说明
- 账户与密码
查看容器日志,或者容器功能界面找到`alist`的容器,点击终端连接到容器内部, 运行
```
./alist admin
```
# 原始相关
<div align="center">
<a href="https://alist.nn.ci"><img height="100px" alt="logo" src="https://cdn.jsdelivr.net/gh/alist-org/logo@main/logo.svg"/></a>
<p><em>🗂一个支持多存储的文件列表程序,使用 Gin 和 Solidjs。</em></p>
<div>
<a href="https://goreportcard.com/report/github.com/alist-org/alist/v3">
<img src="https://goreportcard.com/badge/github.com/alist-org/alist/v3" alt="latest version" />
</a>
<a href="https://github.com/Xhofe/alist/blob/main/LICENSE">
<img src="https://img.shields.io/github/license/Xhofe/alist" alt="License" />
</a>
<a href="https://github.com/Xhofe/alist/actions?query=workflow%3ABuild">
<img src="https://img.shields.io/github/actions/workflow/status/Xhofe/alist/build.yml?branch=main" alt="Build status" />
</a>
<a href="https://github.com/Xhofe/alist/releases">
<img src="https://img.shields.io/github/release/Xhofe/alist" alt="latest version" />
</a>
<a title="Crowdin" target="_blank" href="https://crwd.in/alist">
<img src="https://badges.crowdin.net/alist/localized.svg">
</a>
</div>
<div>
<a href="https://github.com/Xhofe/alist/discussions">
<img src="https://img.shields.io/github/discussions/Xhofe/alist?color=%23ED8936" alt="discussions" />
</a>
<a href="https://discord.gg/F4ymsH4xv2">
<img src="https://img.shields.io/discord/1018870125102895134?logo=discord" alt="discussions" />
</a>
<a href="https://github.com/Xhofe/alist/releases">
<img src="https://img.shields.io/github/downloads/Xhofe/alist/total?color=%239F7AEA&logo=github" alt="Downloads" />
</a>
<a href="https://hub.docker.com/r/xhofe/alist">
<img src="https://img.shields.io/docker/pulls/xhofe/alist?color=%2348BB78&logo=docker&label=pulls" alt="Downloads" />
</a>
<a href="https://alist.nn.ci/zh/guide/sponsor.html">
<img src="https://img.shields.io/badge/%24-sponsor-F87171.svg" alt="sponsor" />
</a>
</div>
</div>
---
[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] 跨存储复制文件
## 文档
<https://alist.nn.ci/zh/>
## Demo
<https://al.nn.ci>
## 讨论
一般问题请到[讨论论坛](https://github.com/Xhofe/alist/discussions) **issue仅针对错误报告和功能请求。**
## 赞助
AList 是一个开源软件如果你碰巧喜欢这个项目并希望我继续下去请考虑赞助我或提供一个单一的捐款感谢所有的爱和支持https://alist.nn.ci/zh/guide/sponsor.html
### 特别赞助
- [找资源 - 阿里云盘资源搜索引擎](https://zhaoziyuan.la/)
- [KinhDown 百度云盘不限速下载永久免费已稳定运行3年非常可靠Q群 -> 786799372](https://kinhdown.com)
- [JetBrains: Essential tools for software developers and teams](https://www.jetbrains.com/)
## 贡献者
Thanks goes to these wonderful people:
[![Contributors](http://contributors.nn.ci/api?repo=alist-org/alist&repo=alist-org/alist-web&repo=alist-org/docs)](https://github.com/alist-org/alist/graphs/contributors)
## 许可
`AList` 是在 AGPL-3.0 许可下许可的开源软件。
## 免责声明
- 本程序为免费开源项目旨在分享网盘文件方便下载以及学习golang使用时请遵守相关法律法规请勿滥用
- 本程序通过调用官方sdk/接口实现,无破坏官方接口行为;
- 本程序仅做302重定向/流量转发,不拦截、存储、篡改任何用户数据;
- 在使用本程序之前你应了解并承担相应的风险包括但不限于账号被ban下载限速等与本程序无关
- 如有侵权,请通过[邮件](mailto:i@nn.ci)与我联系,会及时处理。
---
> [@博客](https://nn.ci/) · [@GitHub](https://github.com/Xhofe) · [@Telegram群](https://t.me/alist_chat) · [@Discord](https://discord.gg/F4ymsH4xv2)

20
apps/alist/data.yml Normal file
View File

@ -0,0 +1,20 @@
name: Alist
tags:
- 工具
title: 一个支持多存储的文件列表程序
type: 工具
description: 一个支持多存储的文件列表程序
additionalProperties:
key: alist
name: Alist
tags:
- Tool
shortDescZh: 一个支持多存储的文件列表程序
shortDescEn: A file list program that supports multiple storage
type: tool
crossVersionUpdate: true
limit: 0
recommend: 0
website: https://github.com/alist-org/alist
github: https://github.com/alist-org/alist
document: https://alist.nn.ci/zh/

View File

@ -0,0 +1,4 @@
CONTAINER_NAME="alist"
PANEL_APP_PORT_HTTP="40034"
DATA_PATH="./data/data"
MOUNT_PATH="./data/mnt"

View File

@ -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

View File

@ -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:latest
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true

BIN
apps/alist/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.6 KiB

52
apps/als/README.md Normal file
View File

@ -0,0 +1,52 @@
[![docker image build](https://github.com/wikihost-opensource/als/actions/workflows/docker-image.yml/badge.svg)](https://github.com/wikihost-opensource/als/actions/workflows/docker-image.yml)
# ALS - Another Looking-glass Server
## Quick start
```
docker run -d --name looking-glass --restart always --network host wikihostinc/looking-glass-server
```
[DEMO](http://lg.hk1-bgp.hkg.50network.com/)
## Host Requirements
- Can run docker (yes, only docker is required)
## Image Environment Variables
| Key | Example | Default | Description |
| ------------------------- | ---------------------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------- |
| LISTEN_IP | 127.0.0.1 | (all ip) | which IP address will be listen use |
| HTTP_PORT | 80 | 80 | which HTTP port should use |
| SPEEDTEST_FILE_LIST | 100MB 1GB | 1MB 10MB 100MB 1GB | size of static test files, separate with space |
| LOCATION | "this is location" | (from maxmind database, ip via PUBLIC_IPV4 or PUBLIC_IPV6) | location string |
| MAXMIND_KEY | THE_KEY | (empty) | about more https://dev.maxmind.com/geoip/geolite2-free-geolocation-data |
| PUBLIC_IPV4 | 1.1.1.1 | (fetch from http://ifconfig.co) | The IPv4 address of the server |
| PUBLIC_IPV6 | fe80::1 | (fetch from http://ifconfig.co) | The IPv6 address of the server |
| DISPLAY_TRAFFIC | true | true | Toggle the streaming traffic graph |
| ENABLE_SPEEDTEST | true | true | Toggle the speedtest feature |
| UTILITIES_PING | true | true | Toggle the ping feature |
| UTILITIES_SPEEDTESTDOTNET | true | true | Toggle the speedtest.net feature |
| UTILITIES_FAKESHELL | true | true | Toggle the HTML Shell feature |
| UTILITIES_IPERF3 | true | true | Toggle the iperf3 feature |
| UTILITIES_IPERF3_PORT_MIN | 30000 | 30000 | iperf3 listen port range - from |
| UTILITIES_IPERF3_PORT_MAX | 31000 | 31000 | iperf3 listen port range - to |
| SPONSOR_MESSAGE | "Test message" or "/tmp/als_readme.md" or "http://some_host/114514.md" | '' | Show server sponsor message (support markdown file, required mapping file to container) |
## Features
- [x] HTML 5 Speed Test
- [x] Ping - IPv4
- [x] iPerf3 server
- [x] Streaming traffic graph
- [x] Speedtest.net Client
- [x] Online shell box (limited commands)
## Thanks to
https://github.com/librespeed/speedtest
## License
Code is licensed under MIT Public License.
* If you wish to support my efforts, keep the "Powered by LookingGlass" link intact.

20
apps/als/data.yml Normal file
View File

@ -0,0 +1,20 @@
name: ALS
tags:
- 工具
title: Another Looking-glass Server测速服务端
type: 工具
description: Another Looking-glass Server测速服务端
additionalProperties:
key: als
name: ALS
tags:
- Tool
shortDescZh: Another Looking-glass Server测速服务端
shortDescEn: Another Looking-glass Server,Speed measurement server
type: tool
crossVersionUpdate: false
limit: 0
recommend: 0
website: https://github.com/wikihost-opensource/als
github: https://github.com/wikihost-opensource/als
document: https://github.com/wikihost-opensource/als

View File

@ -0,0 +1,2 @@
CONTAINER_NAME="looking-glass"
PANEL_APP_PORT_HTTP="20080"

10
apps/als/latest/data.yml Normal file
View File

@ -0,0 +1,10 @@
additionalProperties:
formFields:
- default: 20080
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: WebUI Port
labelZh: 网页端口
required: true
rule: paramPort
type: number

View File

@ -0,0 +1,12 @@
version: "3"
services:
als:
container_name: ${CONTAINER_NAME}
restart: always
network_mode: "host"
environment:
- HTTP_PORT=${PANEL_APP_PORT_HTTP}
image: wikihostinc/looking-glass-server
labels:
createdBy: "Apps"

BIN
apps/als/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -0,0 +1,3 @@
CONTAINER_NAME="answer"
PANEL_APP_PORT_HTTP="40065"
DATA_PATH="./data"

View File

@ -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

View File

@ -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:1.2.0
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true

39
apps/answer/README.md Normal file
View File

@ -0,0 +1,39 @@
<a href="https://answer.dev">
<img alt="logo" src="https://github.com/answerdev/answer/raw/main/docs/img/logo.svg" height="99px">
</a>
# Answer - 构建问答社区
一款问答形式的知识社区开源软件,你可以使用它快速建立你的问答社区,用于产品技术支持、客户支持、用户交流等。
了解更多关于该项目的内容,请访问 [answer.dev](https://answer.dev).
[![LICENSE](https://img.shields.io/github/license/answerdev/answer)](https://github.com/answerdev/answer/blob/main/LICENSE)
[![Language](https://img.shields.io/badge/language-go-blue.svg)](https://golang.org/)
[![Language](https://img.shields.io/badge/language-react-blue.svg)](https://reactjs.org/)
[![Go Report Card](https://goreportcard.com/badge/github.com/answerdev/answer)](https://goreportcard.com/report/github.com/answerdev/answer)
[![Discord](https://img.shields.io/badge/discord-chat-5865f2?logo=discord&logoColor=f5f5f5)](https://discord.gg/Jm7Y4cbUej)
## 截图
![screenshot](https://github.com/answerdev/answer/raw/main/docs/img/screenshot.png)
## 快速开始
### 使用 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)

20
apps/answer/data.yml Normal file
View File

@ -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

View File

@ -0,0 +1,3 @@
CONTAINER_NAME="answer"
PANEL_APP_PORT_HTTP="40065"
DATA_PATH="./data"

View File

@ -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

View File

@ -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

BIN
apps/answer/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

121
apps/aria2-pro/README.md Normal file
View File

@ -0,0 +1,121 @@
**English** | [中文](https://p3terx.com/archives/docker-aria2-pro.html)
# Aria2 Pro Docker
[![LICENSE](https://img.shields.io/github/license/P3TERX/Aria2-Pro-Docker?style=flat-square&label=LICENSE)](https://github.com/P3TERX/Aria2-Pro-Docker/blob/master/LICENSE)
[![GitHub Stars](https://img.shields.io/github/stars/P3TERX/Aria2-Pro-Docker.svg?style=flat-square&label=Stars&logo=github)](https://github.com/P3TERX/Aria2-Pro-Docker/stargazers)
[![GitHub forks](https://img.shields.io/github/forks/P3TERX/Aria2-Pro-Docker.svg?style=flat-square&label=Forks&logo=github)](https://github.com/P3TERX/Aria2-Pro-Docker/fork)
[![Docker Stars](https://img.shields.io/docker/stars/p3terx/aria2-pro.svg?style=flat-square&label=Stars&logo=docker)](https://hub.docker.com/r/p3terx/aria2-pro)
[![Docker Pulls](https://img.shields.io/docker/pulls/p3terx/aria2-pro.svg?style=flat-square&label=Pulls&logo=docker&color=orange)](https://hub.docker.com/r/p3terx/aria2-pro)
![GitHub Workflow Status](https://img.shields.io/github/workflow/status/P3TERX/Aria2-Pro-Docker/Docker%20images%20build%20test?label=Actions&logo=github&style=flat-square)
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 `<TOKEN>` field ):
```
docker run -d \
--name aria2-pro \
--restart unless-stopped \
--log-opt max-size=1m \
-e PUID=$UID \
-e PGID=$GID \
-e UMASK_SET=022 \
-e RPC_SECRET=<TOKEN> \
-e RPC_PORT=6800 \
-p 6800:6800 \
-e LISTEN_PORT=6888 \
-p 6888:6888 \
-p 6888:6888/udp \
-v $PWD/aria2-config:/config \
-v $PWD/aria2-downloads:/downloads \
p3terx/aria2-pro
```
- Then you need a WebUI for control, such as [AriaNg](https://github.com/mayswind/AriaNg). [This link](http://ariang.mayswind.net/latest) is provided by the developer and can be used directly. Or use Docker to deploy it yourself:
```
docker run -d \
--name ariang \
--log-opt max-size=1m \
--restart unless-stopped \
-p 6880:6880 \
p3terx/ariang
```
> **TIPS:** It is important for the firewall to open ports.
### Docker Compose
- Download [Compose file](https://github.com/P3TERX/Aria2-Pro-Docker/blob/master/docker-compose.yml)
```
wget git.io/aria2-pro.yml
```
- Edit Compose file
```
vim aria2-pro.yml
```
- Compose up
```
docker-compose -f aria2-pro.yml up -d
```
### Other
- [Docker templates for UNRAID](https://github.com/P3TERX/unraid-docker-templates)
- [Docker Tutorial for Synology DSM (Chinese)](https://p3terx.com/archives/synology-nas-docker-advanced-tutorial-deploy-aria2-pro.html)
## Parameters
| Parameter | Function |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `-e PUID=$UID`<br>`-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=<TOKEN>` | Set RPC secret authorization token. Default: `P3TERX` |
| `-e RPC_PORT=6800` | Set RPC listen port. |
| `-p 6800:6800` | bind RPC listen port. |
| `-e LISTEN_PORT=6888` | Set TCP/UDP port number for BitTorrent/DHT listen. |
| `-p 6888:6888` | Bind BT listen port (TCP). |
| `-p 6888:6888/udp` | Bind DHT lisen port (UDP). |
| `-v <PATH>:/config` | Contains all relevant configuration files. |
| `-v <PATH>:/downloads` | Location of downloads on disk. |
| `-e DISK_CACHE=<SIZE>` | Set up disk cache. SIZE can include `K` or `M` (1K = 1024, 1M = 1024K), e.g `64M`. |
| `-e IPV6_MODE=<BOOLEAN>` | Whether to enable IPv6 support for Aria2. Optional: `true` or `false`. Set the options `disable-ipv6=false` and `enable-dht6=true` in the configuration file(aria2.conf). |
| `-e UPDATE_TRACKERS=<BOOLEAN>` | Whether to update BT Trackers List automatically. Optional: `true` or `flase`, default if left unset is `true` |
| `-e CUSTOM_TRACKER_URL=<URL>` | Custom BT Trackers List URL. If not set, it will be get from https://trackerslist.com/all_aria2.txt. |
| `-e TZ=Asia/Shanghai` | Specify a timezone to use e.g. `Asia/Shanghai` |
## Advanced
I am working hard on my English, so this part may be explained in detail later. If you can read Chinese, read the details in [my blog](https://p3terx.com/archives/docker-aria2-pro.html).
## Credits
* [aria2](https://github.com/aria2/aria2)
* [P3TERX/aria2.conf](https://github.com/P3TERX/aria2.conf)
* [P3TERX/Aria2-Pro-Core](https://github.com/P3TERX/Aria2-Pro-Core)
* [just-containers/s6-overlay](https://github.com/just-containers/s6-overlay)
* [XIU2/TrackersListCollection](https://github.com/XIU2/TrackersListCollection)
## License
[MIT](https://github.com/P3TERX/Aria2-Pro-Docker/blob/master/LICENSE) © P3TERX

20
apps/aria2-pro/data.yml Normal file
View File

@ -0,0 +1,20 @@
name: Aria2-Pro
tags:
- 工具
title: 更好用的 Aria2 Docker 容器镜像
type: 工具
description: 更好用的 Aria2 Docker 容器镜像
additionalProperties:
key: aria2-pro
name: Aria2-Pro
tags:
- Tool
shortDescZh: 更好用的 Aria2 Docker 容器镜像
shortDescEn: A better-performing Aria2 Docker container image
type: tool
crossVersionUpdate: false
limit: 0
recommend: 0
website: https://github.com/P3TERX/Aria2-Pro-Docker
github: https://github.com/P3TERX/Aria2-Pro-Docker
document: https://p3terx.com/archives/docker-aria2-pro.html

View File

@ -0,0 +1,7 @@
CONTAINER_NAME="aria2-pro"
RPC_PORT_VALUE="6800"
PANEL_APP_PORT_HTTP="6888"
TOKEN="aria2trIyiPhA0l"
CONFIG_PATH="./data/config"
DOWNLOAD_PATH="./data/downloads"
TRACKER_URL="https://trackerslist.com/all_aria2.txt"

View File

@ -0,0 +1,47 @@
additionalProperties:
formFields:
- default: 6800
edit: true
envKey: RPC_PORT_VALUE
labelEn: RPC port
labelZh: RPC端口
required: true
rule: paramPort
type: number
- default: 6888
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: Listening port
labelZh: 监听端口
required: true
rule: paramPort
type: number
- default: aria2
envKey: TOKEN
labelEn: RPC secret
labelZh: RPC密钥
random: true
required: true
rule: paramCommon
type: text
- default: ./data/config
edit: true
envKey: CONFIG_PATH
labelEn: Path to the configuration file
labelZh: 配置文件所在路径
required: true
type: text
- default: ./data/downloads
edit: true
envKey: DOWNLOAD_PATH
labelEn: Download folder path
labelZh: 下载文件夹路径
required: true
type: text
- default: https://trackerslist.com/all_aria2.txt
edit: true
envKey: TRACKER_URL
labelEn: TRACKER URL
labelZh: TRACKER链接
required: true
type: text

View File

@ -0,0 +1,36 @@
version: '3'
services:
aria2-pro:
container_name: ${CONTAINER_NAME}
restart: always
ports:
- "${RPC_PORT_VALUE}:${RPC_PORT_VALUE}"
- "${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP}"
- "${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP}/udp"
environment:
- "PUID=${UID}"
- "PGID=${GID}"
- "UMASK_SET=022"
- "RPC_SECRET=${TOKEN}"
- "RPC_PORT=${RPC_PORT_VALUE}"
- "LISTEN_PORT=${PANEL_APP_PORT_HTTP}"
- "DISK_CACHE=64M"
- "IPV6_MODE=true"
- "UPDATE_TRACKERS=true"
- "CUSTOM_TRACKER_URL=${TRACKER_URL}"
- "TZ=Asia/Shanghai"
volumes:
- "${CONFIG_PATH}:/config"
- "${DOWNLOAD_PATH}:/downloads"
logging:
options:
max-size: 1m
networks:
- 1panel-network
image: p3terx/aria2-pro:latest
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true

BIN
apps/aria2-pro/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

View File

@ -0,0 +1,3 @@
CONTAINER_NAME="artalk"
PANEL_APP_PORT_HTTP="40159"
DATA_PATH="./data"

View File

@ -0,0 +1,17 @@
additionalProperties:
formFields:
- default: 40159
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

View File

@ -0,0 +1,18 @@
version: '3'
services:
artalk:
container_name: ${CONTAINER_NAME}
restart: always
networks:
- 1panel-network
ports:
- "${PANEL_APP_PORT_HTTP}:23366"
volumes:
- "${DATA_PATH}:/data"
image: artalk/artalk-go:2.6.4
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true

82
apps/artalk/README.md Normal file
View File

@ -0,0 +1,82 @@
# 使用说明
## Artalk 设置账号密码
以下两种方式相同。
### 1. 宿主机
```
docker exec -it artalk artalk admin
```
- 修改`artalk`改为容器名
- 如 `1Panel-localartalk-tYWg`
- 更改后
```
docker exec -it 1Panel-localartalk-tYWg artalk admin
```
### 2. 面板执行
面板`容器`界面,连接容器终端,执行以下命令
```
artalk admin
```
# 原始相关
<p align="center">
<img src="https://user-images.githubusercontent.com/22412567/171680920-6e74b77c-c565-487b-bff1-4f94976ecbe7.png" alt="Artalk" width="100%">
</p>
# Artalk
[![](https://img.shields.io/npm/v/artalk.svg?style=flat-square)](https://www.npmjs.com/package/artalk)
[![](https://img.shields.io/npm/dt/artalk.svg?style=flat-square)](https://www.npmjs.com/package/artalk)
[![](https://badgen.net/bundlephobia/minzip/artalk?style=flat-square)](https://bundlephobia.com/package/artalk)
[![Docker Pulls](https://img.shields.io/docker/pulls/artalk/artalk-go?style=flat-square)](https://hub.docker.com/r/artalk/artalk-go)
[![CircleCI](https://circleci.com/gh/ArtalkJS/Artalk/tree/master.svg?style=svg)](https://circleci.com/gh/ArtalkJS/Artalk/tree/master)
> 🌌 Golang 自托管评论系统
[English](https://github.com/ArtalkJS/Artalk/blob/master/README.en.md) / [官方文档](https://artalk.js.org) / [最新版本](https://github.com/ArtalkJS/Artalk/releases)
---
- 🍃 轻量 (~30kB)
- 👨‍👧‍👦 安全 (自托管)
- 🐳 易上手 (防脱发)
- 🍱 Golang 后端 (快速 / 跨平台)
- 🌊 Vanilla × TypeScript × Vite (纯天然 / 无依赖)
## 特性
- 侧 边 栏 :支持多站点集中化管理
- 通知中心:红点的标记 / 提及列表
- 身份验证:徽标自定义 / 密码验证
- 评论审核:反垃圾检测 / 频率限制
- 表情符号:插入表情包 / 快速导入
- 邮件提醒:模版自定义 / 多管理员
- 站点隔离:管理员分配 / 多个站点
- 页面管理:标题可显示 / 快速跳转
- 图片上传:上传到本地 / 多种图床
- 多元推送:支持 钉钉 飞书 TG
- 无限层级:可切换为平铺模式
- 评论投票:赞同还是反对评论
- 评论排序:按热度或时间排序
- 评论置顶:重要消息置顶显示
- 只看作者:仅显示作者的评论
- 说说模式:仅自己可发布评论
- 异步处理:发送评论无需等待
- 滚动加载:评论内容分页处置
- 自动保存:用户输入防丢功能
- 自动填充:用户链接自动填充
- 实时预览:评论内容实时预览
- 夜间模式:防止眼部疾病伤害
- 评论折叠:这个不打算给你康
- 数据备份:防止评论数据丢失
- 数据迁移:快速切换评论系统
- Markdown默认支持 MD 语法
- 支持 Latex提供集成 Katex 插件
- 使用 [Vite](https://github.com/vitejs/vite):属于开发者的极致体验
更多内容请查看:[“**介绍文档**”](https://artalk.js.org/guide/intro.html)

20
apps/artalk/data.yml Normal file
View File

@ -0,0 +1,20 @@
name: Artalk
tags:
- 工具
title: 一款简洁的自托管评论系统
type: 工具
description: 一款简洁的自托管评论系统
additionalProperties:
key: artalk
name: Artalk
tags:
- Tool
shortDescZh: 一款简洁的自托管评论系统
shortDescEn: A concise self hosted comment system
type: tool
crossVersionUpdate: true
limit: 0
recommend: 0
website: https://artalk.js.org
github: https://github.com/ArtalkJS/Artalk
document: https://artalk.js.org/guide/intro.html

View File

@ -0,0 +1,3 @@
CONTAINER_NAME="artalk"
PANEL_APP_PORT_HTTP="40159"
DATA_PATH="./data"

View File

@ -0,0 +1,17 @@
additionalProperties:
formFields:
- default: 40159
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

View File

@ -0,0 +1,18 @@
version: '3'
services:
artalk:
container_name: ${CONTAINER_NAME}
restart: always
networks:
- 1panel-network
ports:
- "${PANEL_APP_PORT_HTTP}:23366"
volumes:
- "${DATA_PATH}:/data"
image: artalk/artalk-go:latest
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true

BIN
apps/artalk/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

@ -0,0 +1,6 @@
CONTAINER_NAME="audiobookshelf"
DATA_PATH1="./data/audiobooks"
DATA_PATH2="./data/podcasts"
DATA_PATH3="./data/metadata"
DATA_PATH="./data/config"
PANEL_APP_PORT_HTTP="40096"

View File

@ -0,0 +1,38 @@
additionalProperties:
formFields:
- default: 40096
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: Port
labelZh: 端口
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/audiobooks
edit: true
envKey: DATA_PATH1
labelEn: audiobooks folder path
labelZh: audiobooks 文件夹路径
required: true
type: text
- default: ./data/podcasts
edit: true
envKey: DATA_PATH2
labelEn: podcasts folder path
labelZh: podcasts 文件夹路径
required: true
type: text
- default: ./data/metadata
edit: true
envKey: DATA_PATH3
labelEn: metadata folder path
labelZh: metadata 文件夹路径
required: true
type: text

View File

@ -0,0 +1,21 @@
version: '3'
services:
audiobookshelf:
container_name: ${CONTAINER_NAME}
restart: always
networks:
- 1panel-network
ports:
- "${PANEL_APP_PORT_HTTP}:80"
volumes:
- "${DATA_PATH1}:/audiobooks"
- "${DATA_PATH2}:/podcasts"
- "${DATA_PATH}:/config"
- "${DATA_PATH3}:/metadata"
image: advplyr/audiobookshelf:2.5.0
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true

View File

@ -0,0 +1,308 @@
<br />
<div align="center">
<img alt="Audiobookshelf Banner" src="https://github.com/advplyr/audiobookshelf/raw/master/images/banner.svg" width="600">
<p align="center">
<br />
<a href="https://audiobookshelf.org/docs">Documentation</a>
·
<a href="https://audiobookshelf.org/guides">User Guides</a>
·
<a href="https://audiobookshelf.org/support">Support</a>
</p>
</div>
# About
Audiobookshelf is a self-hosted audiobook and podcast server.
### Features
* Fully **open-source**, including the [android & iOS app](https://github.com/advplyr/audiobookshelf-app) *(in beta)*
* Stream all audio formats on the fly
* Search and add podcasts to download episodes w/ auto-download
* Multi-user support w/ custom permissions
* Keeps progress per user and syncs across devices
* Auto-detects library updates, no need to re-scan
* Upload books and podcasts w/ bulk upload drag and drop folders
* Backup your metadata + automated daily backups
* Progressive Web App (PWA)
* Chromecast support on the web app and android app
* Fetch metadata and cover art from several sources
* Chapter editor and chapter lookup (using [Audnexus API](https://audnex.us/))
* Merge your audio files into a single m4b
* Embed metadata and cover image into your audio files (using [Tone](https://github.com/sandreas/tone))
* Basic ebook support and ereader
* Epub, pdf, cbr, cbz
* Send ebook to device (i.e. Kindle)
* Open RSS feeds for podcasts and audiobooks
Is there a feature you are looking for? [Suggest it](https://github.com/advplyr/audiobookshelf/issues/new/choose)
Join us on [Discord](https://discord.gg/pJsjuNCKRq) or [Matrix](https://matrix.to/#/#audiobookshelf:matrix.org)
### Android App (beta)
Try it out on the [Google Play Store](https://play.google.com/store/apps/details?id=com.audiobookshelf.app)
### iOS App (beta)
Available using Test Flight: https://testflight.apple.com/join/wiic7QIW - [Join the discussion](https://github.com/advplyr/audiobookshelf-app/discussions/60)
### Build your own tools & clients
Check out the [API documentation](https://api.audiobookshelf.org/)
<br />
<img alt="Library Screenshot" src="https://github.com/advplyr/audiobookshelf/raw/master/images/DemoLibrary.png" />
<br />
# 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.
<br />
# Installation
See [install docs](https://www.audiobookshelf.org/docs)
<br />
# 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.
<img alt="NGINX Web socket" src="https://user-images.githubusercontent.com/67830747/153679106-b2a7f5b9-0702-48c6-9740-b26b401986e9.png" />
### 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 <sub>.<domain>.<tld>;
access_log /var/log/nginx/audiobookshelf.access.log;
error_log /var/log/nginx/audiobookshelf.error.log;
ssl_certificate /path/to/certificate;
ssl_certificate_key /path/to/key;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
proxy_pass http://<URL_to_forward_to>;
proxy_redirect http:// https://;
}
}
```
### Apache Reverse Proxy
Add this to the site config file on your Apache server after you have changed the relevant parts in the <> brackets, and inserted your certificate paths.
For this to work you must enable at least the following mods using `a2enmod`:
- `ssl`
- `proxy`
- `proxy_http`
- `proxy_balancer`
- `proxy_wstunnel`
- `rewrite`
```bash
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName <sub>.<domain>.<tld>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
ProxyPreserveHost On
ProxyPass / http://localhost:<audiobookshelf_port>/
RewriteEngine on
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/?(.*) "ws://localhost:<audiobookshelf_port>/$1" [P,L]
# unless you're doing something special this should be generated by a
# tool like certbot by let's encrypt
SSLCertificateFile /path/to/cert/file
SSLCertificateKeyFile /path/to/key/file
</VirtualHost>
</IfModule>
```
Some SSL certificates like those signed by Let's Encrypt require ACME validation. To allow Let's Encrypt to write and confirm
the ACME challenge, edit your VirtualHost definition to prevent proxying traffic that queries `/.well-known` and instead
serve that directly:
```bash
<VirtualHost *:443>
# ...
# create the directory structure /.well-known/acme-challenges
# within DocumentRoot and give the HTTP user recursive write
# access to it.
DocumentRoot /path/to/local/directory
ProxyPreserveHost On
ProxyPass /.well-known !
ProxyPass / http://localhost:<audiobookshelf_port>/
# ...
</VirtualHost>
```
### SWAG Reverse Proxy
[See LinuxServer.io config sample](https://github.com/linuxserver/reverse-proxy-confs/blob/master/audiobookshelf.subdomain.conf.sample)
### Synology Reverse Proxy
1. Open Control Panel > Application Portal
2. Change to the Reverse Proxy tab
3. Select the proxy rule for which you want to enable Websockets and click on Edit
4. Change to the "Custom Header" tab
5. Click Create > WebSocket
6. Click Save
[from @silentArtifact](https://github.com/advplyr/audiobookshelf/issues/241#issuecomment-1036732329)
### [Traefik Reverse Proxy](https://doc.traefik.io/traefik/)
Middleware relating to CORS will cause the app to report Unknown Error when logging in. To prevent this don't apply any of the following headers to the router for this site:
<ul>
<li>accessControlAllowMethods</li>
<li>accessControlAllowOriginList</li>
<li>accessControlMaxAge</li>
</ul>
From [@Dondochaka](https://discord.com/channels/942908292873723984/942914154254176257/945074590374318170) and [@BeastleeUK](https://discord.com/channels/942908292873723984/942914154254176257/970366039294611506)
<br />
### Example Caddyfile - [Caddy Reverse Proxy](https://caddyserver.com/docs/caddyfile/directives/reverse_proxy)
```
subdomain.domain.com {
encode gzip zstd
reverse_proxy <LOCAL_IP>:<PORT>
}
```
# Run from source
# Contributing
This application is built using [NodeJs](https://nodejs.org/).
### Dev Container Setup
The easiest way to begin developing this project is to use a dev container. An introduction to dev containers in VSCode can be found [here](https://code.visualstudio.com/docs/devcontainers/containers).
Required Software:
* [Docker Desktop](https://www.docker.com/products/docker-desktop/)
* [VSCode](https://code.visualstudio.com/download)
*Note, it is possible to use other container software than Docker and IDEs other than VSCode. However, this setup is more complicated and not covered here.*
<div>
<details>
<summary>Install the required software on Windows with <a href=(https://docs.microsoft.com/en-us/windows/package-manager/winget/#production-recommended)>winget</a></summary>
<p>
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
```
</p>
</details>
</div>
<div>
<details>
<summary>Install the required software on MacOS with <a href=(https://snapcraft.io/)>homebrew</a></summary>
<p>
```sh
brew install --cask docker visual-studio-code
```
</p>
</details>
</div>
<div style="padding-bottom: 1em">
<details>
<summary>Install the required software on Linux with <a href=(https://brew.sh/)>snap</a></summary>
<p>
```sh
sudo snap install docker; \
sudo snap install code --classic
```
</p>
</details>
</div>
After installing these packages, you can now install the [Remote Development](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack) extension for VSCode. After installing this extension open the command pallet (`ctrl+shift+p` or `cmd+shift+p`) and select the command `>Dev Containers: Rebuild and Reopen in Container`. This will cause the development environment container to be built and launched.
You are now ready to start development!
### Manual Environment Setup
If you don't want to use the dev container, you can still develop this project. First, you will need to install [NodeJs](https://nodejs.org/) (version 16) and [FFmpeg](https://ffmpeg.org/).
Next you will need to create a `dev.js` file in the project's root directory. This contains configuration information and paths unique to your development environment. You can find an example of this file in `.devcontainer/dev.js`.
You are now ready to build the client:
```sh
npm ci
cd client
npm ci
npm run generate
cd ..
```
### Development Commands
After setting up your development environment, either using the dev container or using your own custom environment, the following commands will help you run the server and client.
To run the server, you can use the command `npm run dev`. This will use the client that was built when you ran `npm run generate` in the client directory or when you started the dev container. If you make changes to the server, you will need to restart the server. If you make changes to the client, you will need to run the command `(cd client; npm run generate)` and then restart the server. By default the client runs at `localhost:3333`, though the port can be configured in `dev.js`.
You can also build a version of the client that supports live reloading. To do this, start the server, then run the command `(cd client; npm run dev)`. This will run a separate instance of the client at `localhost:3000` that will be automatically updated as you make changes to the client.
If you are using VSCode, this project includes a couple of pre-defined targets to speed up this process. First, if you build the project (`ctrl+shift+b` or `cmd+shift+b`) it will automatically generate the client. Next, there are debug commands for running the server and client. You can view these targets using the debug panel (bring it up with (`ctrl+shift+d` or `cmd+shift+d`):
* `Debug server`—Run the server.
* `Debug client (nuxt)`—Run the client with live reload.
* `Debug server and client (nuxt)`—Runs both the preceding two debug targets.
# How to Support
[See the incomplete "How to Support" page](https://www.audiobookshelf.org/support)

View File

@ -0,0 +1,20 @@
name: Audiobookshelf
tags:
- 工具
title: 一个自托管有声读物和播客服务器
type: 工具
description: 一个自托管有声读物和播客服务器
additionalProperties:
key: audiobookshelf
name: Audiobookshelf
tags:
- Tool
shortDescZh: 一个自托管有声读物和播客服务器
shortDescEn: A Self-hosted audiobook and podcast server
type: tool
crossVersionUpdate: true
limit: 0
recommend: 0
website: https://www.audiobookshelf.org/
github: https://github.com/advplyr/audiobookshelf
document: https://www.audiobookshelf.org/docs

View File

@ -0,0 +1,6 @@
CONTAINER_NAME="audiobookshelf"
DATA_PATH1="./data/audiobooks"
DATA_PATH2="./data/podcasts"
DATA_PATH3="./data/metadata"
DATA_PATH="./data/config"
PANEL_APP_PORT_HTTP="40096"

View File

@ -0,0 +1,38 @@
additionalProperties:
formFields:
- default: 40096
edit: true
envKey: PANEL_APP_PORT_HTTP
labelEn: Port
labelZh: 端口
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/audiobooks
edit: true
envKey: DATA_PATH1
labelEn: audiobooks folder path
labelZh: audiobooks 文件夹路径
required: true
type: text
- default: ./data/podcasts
edit: true
envKey: DATA_PATH2
labelEn: podcasts folder path
labelZh: podcasts 文件夹路径
required: true
type: text
- default: ./data/metadata
edit: true
envKey: DATA_PATH3
labelEn: metadata folder path
labelZh: metadata 文件夹路径
required: true
type: text

View File

@ -0,0 +1,21 @@
version: '3'
services:
audiobookshelf:
container_name: ${CONTAINER_NAME}
restart: always
networks:
- 1panel-network
ports:
- "${PANEL_APP_PORT_HTTP}:80"
volumes:
- "${DATA_PATH1}:/audiobooks"
- "${DATA_PATH2}:/podcasts"
- "${DATA_PATH}:/config"
- "${DATA_PATH3}:/metadata"
image: advplyr/audiobookshelf:latest
labels:
createdBy: "Apps"
networks:
1panel-network:
external: true

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -0,0 +1,8 @@
CONTAINER_NAME="aurora"
DATA_PATH="./data"
PANEL_APP_PORT_HTTP="40036"
PANEL_DB_NAME="aurora_2NEat7"
PANEL_DB_USER="aurora_MiTsmn"
PANEL_DB_USER_PASSWORD="aurora_NMXeah"
SECRECY_KEY="aurora_CHQxSd"
SSH_KEY_PATH="/root/.ssh/id_rsa"

View File

@ -0,0 +1,56 @@
additionalProperties:
formFields:
- default: aurora
envKey: PANEL_DB_NAME
labelEn: Database
labelZh: 数据库名
random: true
required: true
rule: paramCommon
type: text
- default: aurora
envKey: PANEL_DB_USER
labelEn: User
labelZh: 数据库用户
random: true
required: true
rule: paramCommon
type: text
- default: aurora
envKey: PANEL_DB_USER_PASSWORD
labelEn: Password
labelZh: 数据库用户密码
random: true
required: true
rule: paramComplexity
type: password
- default: 40036
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: /root/.ssh/id_rsa
edit: true
envKey: SSH_KEY_PATH
labelEn: SSH key file
labelZh: SSH 私钥文件
required: true
type: text
- default: aurora
envKey: SECRECY_KEY
labelEn: Secret Key
labelZh: 保密密码
random: true
required: true
rule: paramComplexity
type: password

View File

@ -0,0 +1,100 @@
version: "3"
services:
worker:
container_name: ${CONTAINER_NAME}-worker
restart: always
networks:
- aurora-network
- aurora-worker
volumes:
- ${SSH_KEY_PATH}:/app/ansible/env/ssh_key
- ${DATA_PATH}/aurora:/app/ansible/priv_data_dirs
environment:
TZ: 'Asia/Shanghai'
DATABASE_URL: postgresql://${PANEL_DB_USER}:${PANEL_DB_USER_PASSWORD}@postgres:5432/${PANEL_DB_NAME}
TRAFFIC_INTERVAL_SECONDS: 600
DDNS_INTERVAL_SECONDS: 120
command: bash worker.sh
image: leishi1313/aurora-admin-backend:0.18.6
depends_on:
- redis
labels:
createdBy: Apps
backend:
container_name: ${CONTAINER_NAME}-backend
restart: always
networks:
- aurora-network
volumes:
- ${DATA_PATH}/aurora:/app/ansible/priv_data_dirs
environment:
TZ: 'Asia/Shanghai'
PYTHONPATH: .
DATABASE_URL: postgresql://${PANEL_DB_USER}:${PANEL_DB_USER_PASSWORD}@postgres:5432/${PANEL_DB_NAME}
SECREY_KEY: ${SECRECY_KEY}
image: leishi1313/aurora-admin-backend:0.18.6
command: bash -c "while !</dev/tcp/postgres/5432; do sleep 1; done; alembic upgrade heads && python app/main.py"
depends_on:
- postgres
- redis
labels:
createdBy: Apps
nginx:
container_name: ${CONTAINER_NAME}-nginx
restart: always
networks:
- aurora-network
image: leishi1313/aurora-admin-frontend:0.18.6
environment:
TZ: 'Asia/Shanghai'
ports:
- "${PANEL_APP_PORT_HTTP}:80"
depends_on:
- backend
labels:
createdBy: Apps
redis:
container_name: ${CONTAINER_NAME}-redis
restart: always
networks:
- aurora-network
environment:
TZ: 'Asia/Shanghai'
image: redis:latest
labels:
createdBy: Apps
postgres:
container_name: ${CONTAINER_NAME}-postgres
restart: always
networks:
- aurora-network
volumes:
- "${DATA_PATH}/db-data:/var/lib/postgresql/data"
environment:
TZ: 'Asia/Shanghai'
POSTGRES_USER: ${PANEL_DB_USER}
POSTGRES_PASSWORD: ${PANEL_DB_USER_PASSWORD}
POSTGRES_DB: ${PANEL_DB_NAME}
image: postgres:13-alpine
labels:
createdBy: Apps
networks:
aurora-worker:
external: true
enable_ipv6: false
driver: bridge
driver_opts:
com.docker.network.enable_ipv6: "true"
ipam:
driver: default
config:
- subnet: fd00:ea23:9c80:4a54:e242:5f97::/96
gateway: fd00:ea23:9c80:4a54:e242:5f97::1
aurora-network:
external: true
driver: bridge

Some files were not shown because too many files have changed in this diff Show More