diff --git a/appstore/acg-faka/1.3.8/.env b/appstore/acg-faka/1.3.8/.env new file mode 100644 index 00000000..5d6bd942 --- /dev/null +++ b/appstore/acg-faka/1.3.8/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +ACG_FAKA_ROOT_PATH=/home/acg-faka + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + diff --git a/appstore/acg-faka/1.3.8/data.yml b/appstore/acg-faka/1.3.8/data.yml new file mode 100644 index 00000000..efdeb2f9 --- /dev/null +++ b/appstore/acg-faka/1.3.8/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: "/home/acg-faka" + edit: true + envKey: ACG_FAKA_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number diff --git a/appstore/acg-faka/1.3.8/docker-compose.yml b/appstore/acg-faka/1.3.8/docker-compose.yml new file mode 100644 index 00000000..323cf174 --- /dev/null +++ b/appstore/acg-faka/1.3.8/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + acg-faka: + container_name: acg-faka + env_file: + - ./envs/global.env + - .env + image: qyg2297248353/acg-faka:v1.3.8 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${ACG_FAKA_ROOT_PATH}/data:/var/www/html diff --git a/appstore/acg-faka/1.3.8/envs/default.env b/appstore/acg-faka/1.3.8/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/acg-faka/1.3.8/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/acg-faka/1.3.8/envs/global.env b/appstore/acg-faka/1.3.8/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/acg-faka/1.3.8/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/acg-faka/1.3.8/scripts/init.sh b/appstore/acg-faka/1.3.8/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/acg-faka/1.3.8/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/acg-faka/1.3.8/scripts/uninstall.sh b/appstore/acg-faka/1.3.8/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/acg-faka/1.3.8/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/acg-faka/1.3.8/scripts/upgrade.sh b/appstore/acg-faka/1.3.8/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/acg-faka/1.3.8/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/acg-faka/README.md b/appstore/acg-faka/README.md new file mode 100644 index 00000000..343480a6 --- /dev/null +++ b/appstore/acg-faka/README.md @@ -0,0 +1,77 @@ +# 异次元店铺系统V3 + +二次元发卡系统 + +![异次元店铺系统](https://file.lifebus.top/imgs/acg_faka_cover.png) + +异次元店铺系统乃荔枝店铺系统3.0完全从0代码的重构版本,原生php开发,数据库底层使用Eloquent +ORM,模板渲染使用Smarty3.1以及PHP原生渲染,会话保持全程使用session。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 支付系统,拥有强悍的插件扩展能力,现目今已经支持全网任意平台,任意支付渠道。 ++ 云更新,如果系统升级新版本,你无需进行繁琐操作,只需要在你的店铺后台就可以无缝完成升级。 ++ 商品销售,支持商品配图、会员价、游客价、邮件通知、卡密预选(用户可以预选自己想购买的那个账号或者卡号)、API对接、强制登录购买、强悍的自定义控件功能、限时秒杀、批发优惠、优惠卷、等众多功能。 ++ 分站系统,前台用户可以开通分站,分站可以独立运行,也可以卖主站商品,有点类似商业店铺了。 ++ 会员系统,会员/商户融为一体,支持会员等级,以及商户等级完全自定义,以及商品可自定义会员等级对应价格。 ++ 推广/代理系统,拥有三级分销返佣功能,注册账号即实现自动发展下级。 ++ 共享店铺系统,可以在后台直接对接别人的店铺,通过扣除余额来进行无感知进货。 ++ 应用商店,拥有众多插件以及模板,让你的店铺变得格外强大。 ++ 界面美观,完美支持PC和手机,真正的内外二次元文化。 ++ 强悍的扩展能力,你可以通过本程序在几分钟之内快速的实现你任意想实现的在线购物功能,例子如下: + + 游戏方面,物品购买即时到玩家背包 + + 商业软件余额充值 + + 商业软件自动授权 + + 论坛/社区VIP自动开通 + + 只要你想得到,没有做不到。 + +## 环境说明 + ++ PHP 8.0+ (推荐使用PHP8.0) ++ MySQL 5.7+ (推荐使用MySQL8.0) + +请自行安装 MySQL 并创建数据库,配置用户名和密码。 + +## 安装说明 + +> 首次启动将会检查环境,如果环境不满足要求将会提示错误信息。 +> +> 第二步将会检查数据库连接,如果数据库连接失败将会提示错误信息。 +> +> 第三步将会进行程序安装。 + +### 数据库填写 + +数据库主机端口非 3306 时,请按照以下格式填写: +`127.0.0.1:3306` + +## 使用说明 + +> 管理员后台地址:`/admin.php` + +### 支付配置 + +进入`支付管理`,在`支付插件`中点击`获取更多插件`,搜索 `支付宝` 等关键词,进行安装,然后进入支付配置,填写支付宝的相关配置,保存即可。 + +进入`支付管理`,在`支付接口` 中点击`添加支付接口`,选择支付插件,填写相关配置,保存即可。默认安装会存在一些不可用支付接口配置,删除即可,不影响使用。 + +余额支付接口是系统默认的支付接口,不可删除,如果你的店铺需要余额支付,请确保余额支付接口是启用状态。 + +## 版本计划 + +| 版本 | 状态 | 积极支持截止时间 | 安全维护截止时间 | 发布或预计发布时间 | +|-----|------|------------|------------|------------| +| 4.0 | 公测中 | - | - | 2024-10-18 | +| 3.0 | 安全支持 | 2024-08-20 | 长期 | 2022-06-20 | +| 2.0 | 停止维护 | 2020-07-21 | 2020-12-31 | 2020-07-21 | +| 1.0 | 停止维护 | 2020-07-17 | 2020-12-31 | 2020-07-17 | + +- 积极支持将包含常规迭代周期的 BUG 修复、安全问题修复、功能迭代和功能新增; +- 安全维护仅包含安全问题的修复; +- 停止维护状态的版本将不会再进行任何的代码变更,请尽快根据升级指南升级到最新的版本以便得到更好的支持; + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/acg-faka/data.yml b/appstore/acg-faka/data.yml new file mode 100644 index 00000000..cb212e31 --- /dev/null +++ b/appstore/acg-faka/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: acg-faka + name: 异次元店铺系统V3 + tags: + - WebSite + - Tool + - Local + shortDescZh: 二次元发卡系统 + shortDescEn: Secondary Card Issuing System + type: website + crossVersionUpdate: true + limit: 0 + website: https://faka.wiki/ + github: https://github.com/lizhipay/acg-faka/ + document: https://faka.wiki/ diff --git a/appstore/acg-faka/logo.png b/appstore/acg-faka/logo.png new file mode 100644 index 00000000..c3579acb Binary files /dev/null and b/appstore/acg-faka/logo.png differ diff --git a/appstore/alist-aria2/3.40.0/.env b/appstore/alist-aria2/3.40.0/.env new file mode 100644 index 00000000..6f75a8f4 --- /dev/null +++ b/appstore/alist-aria2/3.40.0/.env @@ -0,0 +1,30 @@ +# 数据持久化路径 [必填] +ALIST_ROOT_PATH=/home/alist + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5244 + +# 加密密钥 +JWT_SECRET= + +# 站点 URL +SITE_URL= + +# 登录过期时间 (小时) [必填] +TOKEN_EXPIRES_IN=48 + +# 延时启动 (秒) [必填] +DELAYED_START=0 + +# 最大连接数 [必填] +max_connections=0 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/alist-aria2/3.40.0/data.yml b/appstore/alist-aria2/3.40.0/data.yml new file mode 100644 index 00000000..0f4fc7a2 --- /dev/null +++ b/appstore/alist-aria2/3.40.0/data.yml @@ -0,0 +1,74 @@ +additionalProperties: + formFields: + - default: "/home/alist" + edit: true + envKey: ALIST_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 5244 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: JWT_SECRET + labelZh: 加密密钥 + labelEn: Encryption key + required: false + type: password + - default: "" + edit: true + envKey: SITE_URL + labelZh: 站点 URL + labelEn: Site URL + required: false + rule: paramExtUrl + type: text + - default: 48 + edit: true + envKey: TOKEN_EXPIRES_IN + labelZh: 登录过期时间 (小时) + labelEn: Login expiration time (hours) + required: true + type: number + - default: 0 + edit: true + envKey: DELAYED_START + labelZh: 延时启动 (秒) + labelEn: Delayed start (seconds) + required: true + type: number + - default: 0 + edit: true + envKey: max_connections + labelZh: 最大连接数 + labelEn: Maximum connections + required: true + type: number + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/alist-aria2/3.40.0/docker-compose.yml b/appstore/alist-aria2/3.40.0/docker-compose.yml new file mode 100644 index 00000000..16f4f634 --- /dev/null +++ b/appstore/alist-aria2/3.40.0/docker-compose.yml @@ -0,0 +1,27 @@ +networks: + 1panel-network: + external: true +services: + alist-aria2: + container_name: alist-aria2 + env_file: + - ./envs/global.env + - .env + environment: + - PUID=0 + - PGID=0 + - UMASK=022 + - FORCE=false + image: xhofe/alist-aria2:v3.40.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5244 + restart: always + volumes: + - ${ALIST_ROOT_PATH}/data:/opt/alist/data + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/alist-aria2/3.40.0/envs/default.env b/appstore/alist-aria2/3.40.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/alist-aria2/3.40.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/alist-aria2/3.40.0/envs/global.env b/appstore/alist-aria2/3.40.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/alist-aria2/3.40.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/alist-aria2/3.40.0/scripts/init.sh b/appstore/alist-aria2/3.40.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/alist-aria2/3.40.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/alist-aria2/3.40.0/scripts/uninstall.sh b/appstore/alist-aria2/3.40.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/alist-aria2/3.40.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/alist-aria2/3.40.0/scripts/upgrade.sh b/appstore/alist-aria2/3.40.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/alist-aria2/3.40.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/alist-aria2/README.md b/appstore/alist-aria2/README.md new file mode 100644 index 00000000..3bc465a1 --- /dev/null +++ b/appstore/alist-aria2/README.md @@ -0,0 +1,90 @@ +# AList + +一个支持多种存储的文件列表程序 + +![AList](https://file.lifebus.top/imgs/alist_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 使用简单 + + AList 从一开始就设计为易于安装,并且可以在所有平台上使用。 + ++ 多种存储 + + AList 支持多个存储提供商,包括本地存储、阿里云盘、OneDrive、Google Drive 等,且易于拓展。 + ++ 支持 WebDAV + + AList 支持所有 WebDAV 存储,这是一种用于访问文件的标准。 + ++ 黑暗模式 + + 自由切换明暗模式 + ++ 受保护的路由 + + 为特定路径添加密码保护和身份验证 + ++ 文件预览 + + 支持视频、音频、文档、PDF、图片预览等,甚至支持 ipa 安装 + ++ 打包下载/批量下载 + + 使用浏览器的 stream api 支持打包下载,无需使用服务器 / 使用Aria2进行批量下载支持文件夹 + ++ 单点登录 + + 使用单点登录快速登录AList + ++ 自动注册AList帐号 + + 使用单点登录自动注册为AList帐号快速注册 + ++ 离线下载 + + 将种子内容离线下载到指定的目录內,需要苛刻的网络环境 + ++ 保险箱加密/解密 文件 + + 任何人都可以安全地将加密数据存储在远程存储提供商上。数据存储在保险箱中,提供商只能看到保险箱,看不到您的数据。 + ++ 更多新功能 + + 包括文本编辑器、README/HTML 渲染、文件永久链接、Cloudflare Workers 代理等 + +## 安装说明 + +当前版本预装 `aria2` 用于下载 + +> 默认用户名:`admin` +> +> 默认密码:首次启动,可通过日志查询,或重置密码 + +### 重置密码 + ++ 随机生成一个密码 + +```shell +alist admin random +``` + ++ 设置指定密码 + +```shell +alist admin set {PASSWORD} +``` + +### 反向代理 + +> Nginx 配置示例 + +```conf +location / { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $host:$server_port; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Range $http_range; + proxy_set_header If-Range $http_if_range; + proxy_redirect off; + proxy_pass http://127.0.0.1:5244; + # 文件最大上传大小 20GB + client_max_body_size 20000m; +} +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/alist-aria2/data.yml b/appstore/alist-aria2/data.yml new file mode 100644 index 00000000..2663218b --- /dev/null +++ b/appstore/alist-aria2/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: alist-aria2 + name: Alist Aira2插件版 + tags: + - WebSite + - Storage + - Local + shortDescZh: 一个支持多种存储的文件列表程序 + shortDescEn: A file list program that supports multiple storage methods + type: website + crossVersionUpdate: true + limit: 0 + website: https://alist.nn.ci/ + github: https://github.com/alist-org/alist/ + document: https://alist.nn.ci/guide/ diff --git a/appstore/alist-aria2/logo.png b/appstore/alist-aria2/logo.png new file mode 100644 index 00000000..443d69ee Binary files /dev/null and b/appstore/alist-aria2/logo.png differ diff --git a/appstore/alist-ffmpeg/3.40.0/.env b/appstore/alist-ffmpeg/3.40.0/.env new file mode 100644 index 00000000..6f75a8f4 --- /dev/null +++ b/appstore/alist-ffmpeg/3.40.0/.env @@ -0,0 +1,30 @@ +# 数据持久化路径 [必填] +ALIST_ROOT_PATH=/home/alist + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5244 + +# 加密密钥 +JWT_SECRET= + +# 站点 URL +SITE_URL= + +# 登录过期时间 (小时) [必填] +TOKEN_EXPIRES_IN=48 + +# 延时启动 (秒) [必填] +DELAYED_START=0 + +# 最大连接数 [必填] +max_connections=0 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/alist-ffmpeg/3.40.0/data.yml b/appstore/alist-ffmpeg/3.40.0/data.yml new file mode 100644 index 00000000..0f4fc7a2 --- /dev/null +++ b/appstore/alist-ffmpeg/3.40.0/data.yml @@ -0,0 +1,74 @@ +additionalProperties: + formFields: + - default: "/home/alist" + edit: true + envKey: ALIST_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 5244 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: JWT_SECRET + labelZh: 加密密钥 + labelEn: Encryption key + required: false + type: password + - default: "" + edit: true + envKey: SITE_URL + labelZh: 站点 URL + labelEn: Site URL + required: false + rule: paramExtUrl + type: text + - default: 48 + edit: true + envKey: TOKEN_EXPIRES_IN + labelZh: 登录过期时间 (小时) + labelEn: Login expiration time (hours) + required: true + type: number + - default: 0 + edit: true + envKey: DELAYED_START + labelZh: 延时启动 (秒) + labelEn: Delayed start (seconds) + required: true + type: number + - default: 0 + edit: true + envKey: max_connections + labelZh: 最大连接数 + labelEn: Maximum connections + required: true + type: number + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/alist-ffmpeg/3.40.0/docker-compose.yml b/appstore/alist-ffmpeg/3.40.0/docker-compose.yml new file mode 100644 index 00000000..817ce4fd --- /dev/null +++ b/appstore/alist-ffmpeg/3.40.0/docker-compose.yml @@ -0,0 +1,27 @@ +networks: + 1panel-network: + external: true +services: + alist: + container_name: alist-ffmpeg + env_file: + - ./envs/global.env + - .env + environment: + - PUID=0 + - PGID=0 + - UMASK=022 + - FORCE=false + image: xhofe/alist:v3.40.0-ffmpeg + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5244 + restart: always + volumes: + - ${ALIST_ROOT_PATH}/data:/opt/alist/data + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/alist-ffmpeg/3.40.0/envs/default.env b/appstore/alist-ffmpeg/3.40.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/alist-ffmpeg/3.40.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/alist-ffmpeg/3.40.0/envs/global.env b/appstore/alist-ffmpeg/3.40.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/alist-ffmpeg/3.40.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/alist-ffmpeg/3.40.0/scripts/init.sh b/appstore/alist-ffmpeg/3.40.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/alist-ffmpeg/3.40.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/alist-ffmpeg/3.40.0/scripts/uninstall.sh b/appstore/alist-ffmpeg/3.40.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/alist-ffmpeg/3.40.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/alist-ffmpeg/3.40.0/scripts/upgrade.sh b/appstore/alist-ffmpeg/3.40.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/alist-ffmpeg/3.40.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/alist-ffmpeg/README.md b/appstore/alist-ffmpeg/README.md new file mode 100644 index 00000000..4d71c704 --- /dev/null +++ b/appstore/alist-ffmpeg/README.md @@ -0,0 +1,90 @@ +# AList + +一个支持多种存储的文件列表程序 + +![AList](https://file.lifebus.top/imgs/alist_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 使用简单 + + AList 从一开始就设计为易于安装,并且可以在所有平台上使用。 + ++ 多种存储 + + AList 支持多个存储提供商,包括本地存储、阿里云盘、OneDrive、Google Drive 等,且易于拓展。 + ++ 支持 WebDAV + + AList 支持所有 WebDAV 存储,这是一种用于访问文件的标准。 + ++ 黑暗模式 + + 自由切换明暗模式 + ++ 受保护的路由 + + 为特定路径添加密码保护和身份验证 + ++ 文件预览 + + 支持视频、音频、文档、PDF、图片预览等,甚至支持 ipa 安装 + ++ 打包下载/批量下载 + + 使用浏览器的 stream api 支持打包下载,无需使用服务器 / 使用Aria2进行批量下载支持文件夹 + ++ 单点登录 + + 使用单点登录快速登录AList + ++ 自动注册AList帐号 + + 使用单点登录自动注册为AList帐号快速注册 + ++ 离线下载 + + 将种子内容离线下载到指定的目录內,需要苛刻的网络环境 + ++ 保险箱加密/解密 文件 + + 任何人都可以安全地将加密数据存储在远程存储提供商上。数据存储在保险箱中,提供商只能看到保险箱,看不到您的数据。 + ++ 更多新功能 + + 包括文本编辑器、README/HTML 渲染、文件永久链接、Cloudflare Workers 代理等 + +## 安装说明 + +当前版本预装 `ffmpeg` 用于封面截取 + +> 默认用户名:`admin` +> +> 默认密码:首次启动,可通过日志查询,或重置密码 + +### 重置密码 + ++ 随机生成一个密码 + +```shell +alist admin random +``` + ++ 设置指定密码 + +```shell +alist admin set {PASSWORD} +``` + +### 反向代理 + +> Nginx 配置示例 + +```conf +location / { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $host:$server_port; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Range $http_range; + proxy_set_header If-Range $http_if_range; + proxy_redirect off; + proxy_pass http://127.0.0.1:5244; + # 文件最大上传大小 20GB + client_max_body_size 20000m; +} +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/alist-ffmpeg/data.yml b/appstore/alist-ffmpeg/data.yml new file mode 100644 index 00000000..6dc93d8f --- /dev/null +++ b/appstore/alist-ffmpeg/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: alist-ffmpeg + name: Alist FFMpeg插件版 + tags: + - WebSite + - Storage + - Local + shortDescZh: 一个支持多种存储的文件列表程序 + shortDescEn: A file list program that supports multiple storage methods + type: website + crossVersionUpdate: true + limit: 0 + website: https://alist.nn.ci/ + github: https://github.com/alist-org/alist/ + document: https://alist.nn.ci/guide/ diff --git a/appstore/alist-ffmpeg/logo.png b/appstore/alist-ffmpeg/logo.png new file mode 100644 index 00000000..443d69ee Binary files /dev/null and b/appstore/alist-ffmpeg/logo.png differ diff --git a/appstore/alist/3.40.0/.env b/appstore/alist/3.40.0/.env new file mode 100644 index 00000000..6f75a8f4 --- /dev/null +++ b/appstore/alist/3.40.0/.env @@ -0,0 +1,30 @@ +# 数据持久化路径 [必填] +ALIST_ROOT_PATH=/home/alist + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5244 + +# 加密密钥 +JWT_SECRET= + +# 站点 URL +SITE_URL= + +# 登录过期时间 (小时) [必填] +TOKEN_EXPIRES_IN=48 + +# 延时启动 (秒) [必填] +DELAYED_START=0 + +# 最大连接数 [必填] +max_connections=0 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/alist/3.40.0/data.yml b/appstore/alist/3.40.0/data.yml new file mode 100644 index 00000000..0f4fc7a2 --- /dev/null +++ b/appstore/alist/3.40.0/data.yml @@ -0,0 +1,74 @@ +additionalProperties: + formFields: + - default: "/home/alist" + edit: true + envKey: ALIST_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 5244 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: JWT_SECRET + labelZh: 加密密钥 + labelEn: Encryption key + required: false + type: password + - default: "" + edit: true + envKey: SITE_URL + labelZh: 站点 URL + labelEn: Site URL + required: false + rule: paramExtUrl + type: text + - default: 48 + edit: true + envKey: TOKEN_EXPIRES_IN + labelZh: 登录过期时间 (小时) + labelEn: Login expiration time (hours) + required: true + type: number + - default: 0 + edit: true + envKey: DELAYED_START + labelZh: 延时启动 (秒) + labelEn: Delayed start (seconds) + required: true + type: number + - default: 0 + edit: true + envKey: max_connections + labelZh: 最大连接数 + labelEn: Maximum connections + required: true + type: number + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/alist/3.40.0/docker-compose.yml b/appstore/alist/3.40.0/docker-compose.yml new file mode 100644 index 00000000..54af2601 --- /dev/null +++ b/appstore/alist/3.40.0/docker-compose.yml @@ -0,0 +1,27 @@ +networks: + 1panel-network: + external: true +services: + alist: + container_name: alist + env_file: + - ./envs/global.env + - .env + environment: + - PUID=0 + - PGID=0 + - UMASK=022 + - FORCE=false + image: xhofe/alist:v3.40.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5244 + restart: always + volumes: + - ${ALIST_ROOT_PATH}/data:/opt/alist/data + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/alist/3.40.0/envs/default.env b/appstore/alist/3.40.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/alist/3.40.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/alist/3.40.0/envs/global.env b/appstore/alist/3.40.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/alist/3.40.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/alist/3.40.0/scripts/init.sh b/appstore/alist/3.40.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/alist/3.40.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/alist/3.40.0/scripts/uninstall.sh b/appstore/alist/3.40.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/alist/3.40.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/alist/3.40.0/scripts/upgrade.sh b/appstore/alist/3.40.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/alist/3.40.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/alist/README.md b/appstore/alist/README.md new file mode 100644 index 00000000..723b35ff --- /dev/null +++ b/appstore/alist/README.md @@ -0,0 +1,88 @@ +# AList + +一个支持多种存储的文件列表程序 + +![AList](https://file.lifebus.top/imgs/alist_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 使用简单 + + AList 从一开始就设计为易于安装,并且可以在所有平台上使用。 + ++ 多种存储 + + AList 支持多个存储提供商,包括本地存储、阿里云盘、OneDrive、Google Drive 等,且易于拓展。 + ++ 支持 WebDAV + + AList 支持所有 WebDAV 存储,这是一种用于访问文件的标准。 + ++ 黑暗模式 + + 自由切换明暗模式 + ++ 受保护的路由 + + 为特定路径添加密码保护和身份验证 + ++ 文件预览 + + 支持视频、音频、文档、PDF、图片预览等,甚至支持 ipa 安装 + ++ 打包下载/批量下载 + + 使用浏览器的 stream api 支持打包下载,无需使用服务器 / 使用Aria2进行批量下载支持文件夹 + ++ 单点登录 + + 使用单点登录快速登录AList + ++ 自动注册AList帐号 + + 使用单点登录自动注册为AList帐号快速注册 + ++ 离线下载 + + 将种子内容离线下载到指定的目录內,需要苛刻的网络环境 + ++ 保险箱加密/解密 文件 + + 任何人都可以安全地将加密数据存储在远程存储提供商上。数据存储在保险箱中,提供商只能看到保险箱,看不到您的数据。 + ++ 更多新功能 + + 包括文本编辑器、README/HTML 渲染、文件永久链接、Cloudflare Workers 代理等 + +## 安装说明 + +> 默认用户名:`admin` +> +> 默认密码:首次启动,可通过日志查询,或重置密码 + +### 重置密码 + ++ 随机生成一个密码 + +```shell +alist admin random +``` + ++ 设置指定密码 + +```shell +alist admin set {PASSWORD} +``` + +### 反向代理 + +> Nginx 配置示例 + +```conf +location / { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $host:$server_port; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Range $http_range; + proxy_set_header If-Range $http_if_range; + proxy_redirect off; + proxy_pass http://127.0.0.1:5244; + # 文件最大上传大小 20GB + client_max_body_size 20000m; +} +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/alist/data.yml b/appstore/alist/data.yml new file mode 100644 index 00000000..335133e3 --- /dev/null +++ b/appstore/alist/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: alist + name: Alist + tags: + - WebSite + - Storage + - Local + shortDescZh: 一个支持多种存储的文件列表程序 + shortDescEn: A file list program that supports multiple storage methods + type: website + crossVersionUpdate: true + limit: 0 + website: https://alist.nn.ci/ + github: https://github.com/alist-org/alist/ + document: https://alist.nn.ci/guide/ diff --git a/appstore/alist/logo.png b/appstore/alist/logo.png new file mode 100644 index 00000000..443d69ee Binary files /dev/null and b/appstore/alist/logo.png differ diff --git a/appstore/ani-rss/1.1.202/.env b/appstore/ani-rss/1.1.202/.env new file mode 100644 index 00000000..dfdf9854 --- /dev/null +++ b/appstore/ani-rss/1.1.202/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +ANI_RSS_ROOT_PATH=/home/ani-rss + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=7789 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/ani-rss/1.1.202/data.yml b/appstore/ani-rss/1.1.202/data.yml new file mode 100644 index 00000000..1e348edc --- /dev/null +++ b/appstore/ani-rss/1.1.202/data.yml @@ -0,0 +1,38 @@ +additionalProperties: + formFields: + - default: "/home/ani-rss" + edit: true + envKey: ANI_RSS_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 7789 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/ani-rss/1.1.202/docker-compose.yml b/appstore/ani-rss/1.1.202/docker-compose.yml new file mode 100644 index 00000000..daf251e9 --- /dev/null +++ b/appstore/ani-rss/1.1.202/docker-compose.yml @@ -0,0 +1,28 @@ +networks: + 1panel-network: + external: true +services: + ani-rss: + container_name: ani-rss + env_file: + - ./envs/global.env + - .env + environment: + - PORT=7789 + - CONFIG=/config + - TZ=Asia/Shanghai + image: wushuo894/ani-rss:v1.1.202 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:7789 + restart: always + volumes: + - ${ANI_RSS_ROOT_PATH}/config:/config + - ${ANI_RSS_ROOT_PATH}/downloads:/downloads + - ${ANI_RSS_ROOT_PATH}/Media:/Media + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/ani-rss/1.1.202/envs/default.env b/appstore/ani-rss/1.1.202/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/ani-rss/1.1.202/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/ani-rss/1.1.202/envs/global.env b/appstore/ani-rss/1.1.202/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/ani-rss/1.1.202/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/ani-rss/1.1.202/scripts/init.sh b/appstore/ani-rss/1.1.202/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/ani-rss/1.1.202/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/ani-rss/1.1.202/scripts/uninstall.sh b/appstore/ani-rss/1.1.202/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/ani-rss/1.1.202/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/ani-rss/1.1.202/scripts/upgrade.sh b/appstore/ani-rss/1.1.202/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/ani-rss/1.1.202/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/ani-rss/README.md b/appstore/ani-rss/README.md new file mode 100644 index 00000000..7d449587 --- /dev/null +++ b/appstore/ani-rss/README.md @@ -0,0 +1,17 @@ +# ANI-RSS + +自动追番、订阅、下载 蜜柑RSS动漫 + +![ANI-RSS](https://file.lifebus.top/imgs/ani_orss_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 安装说明 + +> 默认用户名:`admin` +> +> 默认密码:`admin` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/ani-rss/data.yml b/appstore/ani-rss/data.yml new file mode 100644 index 00000000..449c2863 --- /dev/null +++ b/appstore/ani-rss/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: ani-rss + name: ANI-RSS + tags: + - WebSite + - Tool + - Local + shortDescZh: 自动追番、订阅、下载 蜜柑RSS动漫 + shortDescEn: Automatically subscribe to and download Mikan RSS anime + type: website + crossVersionUpdate: true + limit: 0 + website: https://docs.wushuo.top/ + github: https://github.com/wushuo894/ani-rss/ + document: https://docs.wushuo.top/ diff --git a/appstore/ani-rss/logo.png b/appstore/ani-rss/logo.png new file mode 100644 index 00000000..89e27175 Binary files /dev/null and b/appstore/ani-rss/logo.png differ diff --git a/appstore/artalk/2.9.1/.env b/appstore/artalk/2.9.1/.env new file mode 100644 index 00000000..849d2479 --- /dev/null +++ b/appstore/artalk/2.9.1/.env @@ -0,0 +1,60 @@ +# 数据库服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化路径 [必填] +ARTALK_ROOT_PATH=/home/artalk + +# API 端口 [必填] +PANEL_APP_PORT_HTTP=23366 + +# 应用密钥 [必填] +ATK_APP_KEY= + +# 管理员用户名 [必填] +ATK_ADMIN_USERS_0_NAME=admin + +# 管理员邮箱 [必填] +ATK_ADMIN_USERS_0_EMAIL=admin@admin.com + +# 管理员密码 [必填] +ATK_ADMIN_USERS_0_PASSWORD=(bcrypt)$2y$10$ti4vZYIrxVN8rLcYXVgXCO.GJND0dyI49r7IoF3xqIx8bBRmIBZRm + +# 管理员徽章名称 [必填] +ATK_ADMIN_USERS_0_BADGE_NAME=管理员 + +# 管理员徽章颜色 [必填] +ATK_ADMIN_USERS_0_BADGE_COLOR=#0083FF + +# 站点名称 [必填] +ATK_SITE_DEFAULT=Artalk 的博客 + +# 受信任的域名 (多个域名用空格分隔) [必填] +ATK_TRUSTED_DOMAINS= + +# 登录超时时间 (秒) [必填] +ATK_LOGIN_TIMEOUT=259200 + +# 站点语言 [必填] +ATK_LOCALE=zh-CN + +# IP 地址精度 [必填] +ATK_IP_REGION_PRECISION=province + +# 数据库 类型 [必填] +ATK_DB_TYPE=pgsql + +# 数据库 主机地址 [必填] +ATK_DB_HOST=127.0.0.1 + +# 数据库 端口 [必填] +ATK_DB_PORT=5432 + +# 数据库 名称 [必填] +ATK_DB_NAME=artalk + +# 数据库 用户名 [必填] +ATK_DB_USER=artalk + +# 数据库 密码 [必填] +ATK_DB_PASSWORD= + diff --git a/appstore/artalk/2.9.1/data.yml b/appstore/artalk/2.9.1/data.yml new file mode 100644 index 00000000..00064241 --- /dev/null +++ b/appstore/artalk/2.9.1/data.yml @@ -0,0 +1,187 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: postgresql + envKey: PANEL_DB_TYPE + labelZh: 数据库服务 (前置检查) + labelEn: Database Service + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/artalk" + edit: true + envKey: ARTALK_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 23366 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: API 端口 + labelEn: API Port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: ATK_APP_KEY + labelZh: 应用密钥 + labelEn: App key + required: true + type: password + - default: "admin" + edit: true + envKey: ATK_ADMIN_USERS_0_NAME + labelZh: 管理员用户名 + labelEn: Admin username + required: true + type: text + - default: "admin@admin.com" + edit: true + envKey: ATK_ADMIN_USERS_0_EMAIL + labelZh: 管理员邮箱 + labelEn: Admin email + required: true + type: text + - default: "(bcrypt)$2y$10$ti4vZYIrxVN8rLcYXVgXCO.GJND0dyI49r7IoF3xqIx8bBRmIBZRm" + edit: true + envKey: ATK_ADMIN_USERS_0_PASSWORD + labelZh: 管理员密码 + labelEn: Admin password + required: true + type: text + - default: "管理员" + edit: true + envKey: ATK_ADMIN_USERS_0_BADGE_NAME + labelZh: 管理员徽章名称 + labelEn: Admin badge name + required: true + type: text + - default: "#0083FF" + edit: true + envKey: ATK_ADMIN_USERS_0_BADGE_COLOR + labelZh: 管理员徽章颜色 + labelEn: Admin badge color + required: true + type: text + - default: "Artalk 的博客" + edit: true + envKey: ATK_SITE_DEFAULT + labelZh: 站点名称 + labelEn: Site name + required: true + type: text + - default: "" + edit: true + envKey: ATK_TRUSTED_DOMAINS + labelZh: 受信任的域名 (多个域名用空格分隔) + labelEn: Trusted domains (separated by spaces) + required: true + type: text + - default: 259200 + edit: true + envKey: ATK_LOGIN_TIMEOUT + labelZh: 登录超时时间 (秒) + labelEn: Login timeout (seconds) + required: true + type: number + - default: "zh-CN" + edit: true + envKey: ATK_LOCALE + labelZh: 站点语言 + labelEn: Site language + required: true + type: select + values: + - label: 简体中文 + value: "zh-CN" + - label: English + value: "en" + - label: 繁体中文 + value: "zh-TW" + - label: 日本語 + value: "ja" + - label: Français + value: "fr" + - label: Deutsch + value: "ko" + - label: Русский + value: "ru" + - default: "province" + edit: true + envKey: ATK_IP_REGION_PRECISION + labelZh: IP 地址精度 + labelEn: IP address precision + required: true + type: select + values: + - label: 国家 + value: "country" + - label: 省份 + value: "province" + - label: 城市 + value: "city" + - default: "pgsql" + edit: true + envKey: ATK_DB_TYPE + labelZh: 数据库 类型 + labelEn: Database Type + required: true + type: select + values: + - label: PostgreSQL + value: "pgsql" + - label: MySQL (MariaDB, Percona) + value: "mysql" + - default: "127.0.0.1" + edit: true + envKey: ATK_DB_HOST + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: ATK_DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "artalk" + edit: true + envKey: ATK_DB_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + rule: paramCommon + type: text + - default: "artalk" + edit: true + envKey: ATK_DB_USER + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "" + edit: true + envKey: ATK_DB_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + random: true + required: true + rule: paramComplexity + type: password diff --git a/appstore/artalk/2.9.1/docker-compose.yml b/appstore/artalk/2.9.1/docker-compose.yml new file mode 100644 index 00000000..44b20e34 --- /dev/null +++ b/appstore/artalk/2.9.1/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + artalk: + container_name: artalk + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + - ATK_DEBUG=false + - ATK_HOST=0.0.0.0 + - ATK_PORT=23366 + - ATK_IP_REGION_ENABLED=true + - ATK_DB_TABLE_PREFIX=atk_ + image: artalk/artalk-go:2.9.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:23366 + restart: always + volumes: + - ${ARTALK_ROOT_PATH}/data:/data diff --git a/appstore/artalk/2.9.1/envs/default.env b/appstore/artalk/2.9.1/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/artalk/2.9.1/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/artalk/2.9.1/envs/global.env b/appstore/artalk/2.9.1/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/artalk/2.9.1/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/artalk/2.9.1/scripts/init.sh b/appstore/artalk/2.9.1/scripts/init.sh new file mode 100644 index 00000000..5e9dcca0 --- /dev/null +++ b/appstore/artalk/2.9.1/scripts/init.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + DATA_DIR="$ARTALK_ROOT_PATH/data" + + mkdir -p "$DATA_DIR" + + OUTPUT_FILE="$DATA_DIR/ip2region.xdb" + + URL1="https://gh-proxy.com/?q=https%3A%2F%2Fgithub.com%2Flionsoul2014%2Fip2region%2Fblob%2Fmaster%2Fdata%2Fip2region.xdb" + URL2="https://github.com/lionsoul2014/ip2region/raw/master/data/ip2region.xdb" + + curl -L "$URL1" -o "$OUTPUT_FILE" || curl -L "$URL2" -o "$OUTPUT_FILE" + + chmod -R 777 "$DATA_DIR" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/artalk/2.9.1/scripts/uninstall.sh b/appstore/artalk/2.9.1/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/artalk/2.9.1/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/artalk/2.9.1/scripts/upgrade.sh b/appstore/artalk/2.9.1/scripts/upgrade.sh new file mode 100644 index 00000000..5e9dcca0 --- /dev/null +++ b/appstore/artalk/2.9.1/scripts/upgrade.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + DATA_DIR="$ARTALK_ROOT_PATH/data" + + mkdir -p "$DATA_DIR" + + OUTPUT_FILE="$DATA_DIR/ip2region.xdb" + + URL1="https://gh-proxy.com/?q=https%3A%2F%2Fgithub.com%2Flionsoul2014%2Fip2region%2Fblob%2Fmaster%2Fdata%2Fip2region.xdb" + URL2="https://github.com/lionsoul2014/ip2region/raw/master/data/ip2region.xdb" + + curl -L "$URL1" -o "$OUTPUT_FILE" || curl -L "$URL2" -o "$OUTPUT_FILE" + + chmod -R 777 "$DATA_DIR" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/artalk/README.md b/appstore/artalk/README.md new file mode 100644 index 00000000..56cb2598 --- /dev/null +++ b/appstore/artalk/README.md @@ -0,0 +1,95 @@ +# Artalk + +一个自托管的评论系统 + +![Artalk](https://file.lifebus.top/imgs/artalk_cover.png) + +Artalk 是一款简单易用但功能丰富的评论系统,你可以开箱即用地部署并置入任何博客、网站、Web 应用。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 亮点 + +🍃 前端 ~40KB,纯天然 Vanilla JS + +🍱 后端 Golang,高效轻量跨平台 + +🐳 通过 Docker 一键部署,方便快捷 + +🌈 开源程序,自托管,隐私至上 + +## 特性 + +| 特性 | 描述 | +|:---:|:-------------------------| +| 📚 | 侧边栏: 快速管理、直观浏览 | +| 🔐 | 社交登录: 通过社交账号快速登录 | +| 💌 | 邮件通知: 多种发送方式、邮件模板 | +| 📢 | 多元推送: 多种推送方式、通知模版 | +| 🔔 | 站内通知: 红点标记、提及列表 | +| 🔒 | 验证码: 多种验证类型、频率限制 | +| 🚫 | 评论审核: 内容检测、垃圾拦截 | +| 📸 | 图片上传: 自定义上传、支持图床 | +| 📝 | Markdown: 支持 Markdown 语法 | +| 😄 | 表情包: 兼容 OwO,快速集成 | +| 🌐 | 多站点: 站点隔离、集中管理 | +| 👤 | 管理员: 密码验证、徽章标识 | +| 📑 | 页面管理: 快速查看、标题一键跳转 | +| 📊 | 浏览量统计: 轻松统计网页浏览量 | +| 📖 | 层级结构: 嵌套分页列表、滚动加载 | +| 🔼 | 评论投票: 赞同或反对评论 | +| 🔄 | 评论排序: 多种排序方式,自由选择 | +| 🔍 | 评论搜索: 快速搜索评论内容 | +| 🔝 | 评论置顶: 重要消息置顶显示 | +| 👀 | 仅看作者: 仅显示作者的评论 | +| 🔗 | 评论跳转: 快速跳转到引用的评论 | +| 💾 | 自动保存: 输入内容防丢功能 | +| 🌍 | IP 属地: 用户 IP 属地展示 | +| 📦 | 数据迁移: 自由迁移、快速备份 | +| 🖼️ | 图片灯箱: 图片灯箱快速集成 | +| 📱 | 图片懒加载: 延迟加载图片,优化体验 | +| 📐 | Latex: Latex 公式解析集成 | +| 🌙 | 夜间模式: 夜间模式切换 | +| 🔧 | 扩展插件: 创造更多可能性 | +| 🌐 | 多语言: 多国语言切换 | +| 💻 | 命令行: 命令行操作管理能力 | +| 📜 | API 文档: 提供 OpenAPI 格式文档 | +| 🚀 | 程序升级: 版本检测,一键升级 | + +## 安装说明 + +### `应用密钥` 配置 + +数据加密密钥,非管理员密码。 + +### `管理员密码` 配置 + +管理员密码,用于登录后台管理。 + +基本格式:`(加密方式)加密后的密码` + +示例密码:`123456` + +#### 加密方式:`md5` + +填写案例:`(md5)e10adc3949ba59abbe56e057f20f883e` + +#### 加密方式:`bcrypt` + +填写案例:`(bcrypt)$2a$10$yS/EhHU1xqjNpboe8DWkb.AvWdBb5/.Ny3reXy8SltlVaquiSGwzu` + +### `受信任的域名 (多个域名用空格分隔)` 配置 + +填写允许访问的域名,多个域名用空格分隔。 + +如果您需要将插件使用在以下博客地址: + ++ `https://blog1.com` + ++ `https://blog2.com` + +填写案例:`https://blog1.com https://blog2.com` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/artalk/data.yml b/appstore/artalk/data.yml new file mode 100644 index 00000000..cac77a54 --- /dev/null +++ b/appstore/artalk/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: artalk + name: Artalk + tags: + - WebSite + - Tool + - Middleware + - Local + shortDescZh: 一个自托管的评论系统 + shortDescEn: A Self-hosted Comment System + type: website + crossVersionUpdate: true + limit: 0 + website: https://artalk.js.org/ + github: https://github.com/ArtalkJS/Artalk/ + document: https://artalk.js.org/guide/intro.html diff --git a/appstore/artalk/logo.png b/appstore/artalk/logo.png new file mode 100644 index 00000000..c7a5bac9 Binary files /dev/null and b/appstore/artalk/logo.png differ diff --git a/appstore/auto-lady/1.1.202/.env b/appstore/auto-lady/1.1.202/.env new file mode 100644 index 00000000..a6f1eb1e --- /dev/null +++ b/appstore/auto-lady/1.1.202/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +AUTO_LADY_ROOT_PATH=/home/auto-lady + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/auto-lady/1.1.202/data.yml b/appstore/auto-lady/1.1.202/data.yml new file mode 100644 index 00000000..668b067c --- /dev/null +++ b/appstore/auto-lady/1.1.202/data.yml @@ -0,0 +1,38 @@ +additionalProperties: + formFields: + - default: "/home/auto-lady" + edit: true + envKey: AUTO_LADY_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/auto-lady/1.1.202/docker-compose.yml b/appstore/auto-lady/1.1.202/docker-compose.yml new file mode 100644 index 00000000..0b9cb9db --- /dev/null +++ b/appstore/auto-lady/1.1.202/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + auto-lady: + container_name: auto-lady + env_file: + - ./envs/global.env + - .env + image: orekiiiiiiiiiiiii/auto-lady:1.4.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${AUTO_LADY_ROOT_PATH}/config:/data + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/auto-lady/1.1.202/envs/default.env b/appstore/auto-lady/1.1.202/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/auto-lady/1.1.202/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/auto-lady/1.1.202/envs/global.env b/appstore/auto-lady/1.1.202/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/auto-lady/1.1.202/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/auto-lady/1.1.202/scripts/init.sh b/appstore/auto-lady/1.1.202/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/auto-lady/1.1.202/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/auto-lady/1.1.202/scripts/uninstall.sh b/appstore/auto-lady/1.1.202/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/auto-lady/1.1.202/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/auto-lady/1.1.202/scripts/upgrade.sh b/appstore/auto-lady/1.1.202/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/auto-lady/1.1.202/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/auto-lady/README.md b/appstore/auto-lady/README.md new file mode 100644 index 00000000..9f9b4255 --- /dev/null +++ b/appstore/auto-lady/README.md @@ -0,0 +1,22 @@ +# AutoLady + +自动化订阅AV影片 + +![AutoLady](https://file.lifebus.top/imgs/autolady_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 应用说明 + +> 目前仅支持 MT,FSM,PTT 三个 PT 站点的 AV 采集订阅 +> +> 账号密码可在 `日志` 查看 + +## 应用配置 + ++ qBittorrent 下载器 ++ PT 站点密钥 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/auto-lady/data.yml b/appstore/auto-lady/data.yml new file mode 100644 index 00000000..bd838efe --- /dev/null +++ b/appstore/auto-lady/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: auto-lady + name: AutoLady + tags: + - WebSite + - Tool + - Local + shortDescZh: 自动化订阅AV影片 + shortDescEn: AutoLady is a tool for automatically subscribing to AV movies + type: website + crossVersionUpdate: true + limit: 0 + website: https://catcat.blog/ + github: https://catcat.blog/ + document: https://catcat.blog/docker-autolady.html diff --git a/appstore/auto-lady/logo.png b/appstore/auto-lady/logo.png new file mode 100644 index 00000000..2512e2b9 Binary files /dev/null and b/appstore/auto-lady/logo.png differ diff --git a/appstore/baota/9.0/.env b/appstore/baota/9.0/.env new file mode 100644 index 00000000..9bae1626 --- /dev/null +++ b/appstore/baota/9.0/.env @@ -0,0 +1,27 @@ +# 数据持久化路径 [必填] +BAOTA_ROOT_PATH=/home/baota + +# 网络模式 [必填] +NETWORK_MODE=host + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8888 + +# 网站服务 HTTP [必填] +PANEL_APP_PORT_WEB_HTTP=80 + +# 网站服务 HTTPS [必填] +PANEL_APP_PORT_WEB_HTTPS=443 + +# SSH 端口 [必填] +PANEL_APP_PORT_SSH=22 + +# FTP 端口 [必填] +PANEL_APP_PORT_FTP=21 + +# MySQL 端口 [必填] +PANEL_APP_PORT_MYSQL=3306 + +# phpMyAdmin 端口 [必填] +PANEL_APP_PORT_PHPADMIN=888 + diff --git a/appstore/baota/9.0/data.yml b/appstore/baota/9.0/data.yml new file mode 100644 index 00000000..4d13b5b6 --- /dev/null +++ b/appstore/baota/9.0/data.yml @@ -0,0 +1,81 @@ +additionalProperties: + formFields: + - default: "/home/baota" + edit: true + envKey: BAOTA_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "host" + edit: true + envKey: NETWORK_MODE + labelEn: Drive path + labelZh: 网络模式 + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: 8888 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 80 + edit: true + envKey: PANEL_APP_PORT_WEB_HTTP + labelZh: 网站服务 HTTP + labelEn: Website service HTTP + required: true + rule: paramPort + type: number + - default: 443 + edit: true + envKey: PANEL_APP_PORT_WEB_HTTPS + labelZh: 网站服务 HTTPS + labelEn: Website service HTTPS + required: true + rule: paramPort + type: number + - default: 22 + edit: true + envKey: PANEL_APP_PORT_SSH + labelZh: SSH 端口 + labelEn: SSH port + required: true + rule: paramPort + type: number + - default: 21 + edit: true + envKey: PANEL_APP_PORT_FTP + labelZh: FTP 端口 + labelEn: FTP port + required: true + rule: paramPort + type: number + - default: 3306 + edit: true + envKey: PANEL_APP_PORT_MYSQL + labelZh: MySQL 端口 + labelEn: MySQL port + required: true + rule: paramPort + type: number + - default: 888 + edit: true + envKey: PANEL_APP_PORT_PHPADMIN + labelZh: phpMyAdmin 端口 + labelEn: phpMyAdmin port + required: true + rule: paramPort + type: number diff --git a/appstore/baota/9.0/docker-compose.yml b/appstore/baota/9.0/docker-compose.yml new file mode 100644 index 00000000..01ec3d41 --- /dev/null +++ b/appstore/baota/9.0/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + baota: + container_name: baota + env_file: + - ./envs/global.env + - .env + image: btpanel/baota:9.0_lts_latest + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8888 + - ${PANEL_APP_PORT_WEB_HTTP}:80 + - ${PANEL_APP_PORT_WEB_HTTPS}:443 + - ${PANEL_APP_PORT_FTP}:21 + - ${PANEL_APP_PORT_SSH}:22 + - ${PANEL_APP_PORT_MYSQL}:3306 + - ${PANEL_APP_PORT_PHPADMIN}:888 + restart: always + volumes: + - ${BAOTA_ROOT_PATH}/wwwroot:/www/wwwroot + - ${BAOTA_ROOT_PATH}/data:/www/server/data + - ${BAOTA_ROOT_PATH}/vhost:/www/server/panel/vhost diff --git a/appstore/baota/9.0/envs/default.env b/appstore/baota/9.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/baota/9.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/baota/9.0/envs/global.env b/appstore/baota/9.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/baota/9.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/baota/9.0/scripts/init.sh b/appstore/baota/9.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/baota/9.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/baota/9.0/scripts/uninstall.sh b/appstore/baota/9.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/baota/9.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/baota/9.0/scripts/upgrade.sh b/appstore/baota/9.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/baota/9.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/baota/README.md b/appstore/baota/README.md new file mode 100644 index 00000000..185fe7e9 --- /dev/null +++ b/appstore/baota/README.md @@ -0,0 +1,30 @@ +# 宝塔 + +宝塔,安全高效的服务器运维面板 + +![宝塔](https://file.lifebus.top/imgs/baota_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +宝塔面板是一款服务器管理软件,支持windows和linux系统,可以通过Web端轻松管理服务器,提升运维效率。例如:创建管理网站、FTP、数据库,拥有可视化文件管理器,可视化软件管理器,可视化CPU、内存、流量监控图表,计划任务等功能。 + +## 安装说明 + +> 默认地址 `http://127.0.0.1:8888/btpanel` +> +> 默认用户:`btpanel` +> +> 默认密码:`btpaneldocker` +> +> 默认SSH密码:`btpaneldocker` + +### 网络模式 + +当使用 主机模式 时,所有端口映射都无效,直接访问默认端口即可。 + + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/baota/data.yml b/appstore/baota/data.yml new file mode 100644 index 00000000..3001aeaf --- /dev/null +++ b/appstore/baota/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: baota + name: 宝塔 + tags: + - WebSite + - Middleware + - Local + shortDescZh: 宝塔,安全高效的服务器运维面板 + shortDescEn: Baota, a secure and efficient server operation and maintenance panel + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.bt.cn/ + github: https://www.bt.cn/ + document: https://www.bt.cn/ diff --git a/appstore/baota/logo.png b/appstore/baota/logo.png new file mode 100644 index 00000000..26421c5b Binary files /dev/null and b/appstore/baota/logo.png differ diff --git a/appstore/bark/2.1.5/.env b/appstore/bark/2.1.5/.env new file mode 100644 index 00000000..7696b28a --- /dev/null +++ b/appstore/bark/2.1.5/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +BARK_ROOT_PATH=/home/bark + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 数据库链接 +BARK_SERVER_DSN= + +# 用户名 (服务基础验证) +BARK_SERVER_BASIC_AUTH_USER= + +# 密码 (服务基础验证) +BARK_SERVER_BASIC_AUTH_PASSWORD= + diff --git a/appstore/bark/2.1.5/data.yml b/appstore/bark/2.1.5/data.yml new file mode 100644 index 00000000..2ff188a8 --- /dev/null +++ b/appstore/bark/2.1.5/data.yml @@ -0,0 +1,38 @@ +additionalProperties: + formFields: + - default: "/home/bark" + edit: true + envKey: BARK_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: BARK_SERVER_DSN + labelZh: 数据库链接 + labelEn: Database URL + required: false + type: text + - default: "" + edit: true + envKey: BARK_SERVER_BASIC_AUTH_USER + labelZh: 用户名 (服务基础验证) + labelEn: Basic Auth User + required: false + type: text + - default: "" + edit: true + envKey: BARK_SERVER_BASIC_AUTH_PASSWORD + labelZh: 密码 (服务基础验证) + labelEn: Basic Auth Password + required: false + type: text diff --git a/appstore/bark/2.1.5/docker-compose.yml b/appstore/bark/2.1.5/docker-compose.yml new file mode 100644 index 00000000..f42b9164 --- /dev/null +++ b/appstore/bark/2.1.5/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + bark: + container_name: bark + env_file: + - ./envs/global.env + - .env + environment: + - BARK_SERVER_ADDRESS=0.0.0.0:8080 + - BARK_SERVER_URL_PREFIX=/ + - BARK_SERVER_DATA_DIR=/data + - BARK_SERVER_SERVERLESS=false + image: finab/bark-server:v2.1.5 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${BARK_ROOT_PATH}/data:/data diff --git a/appstore/bark/2.1.5/envs/default.env b/appstore/bark/2.1.5/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/bark/2.1.5/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/bark/2.1.5/envs/global.env b/appstore/bark/2.1.5/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/bark/2.1.5/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/bark/2.1.5/scripts/init.sh b/appstore/bark/2.1.5/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/bark/2.1.5/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/bark/2.1.5/scripts/uninstall.sh b/appstore/bark/2.1.5/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/bark/2.1.5/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/bark/2.1.5/scripts/upgrade.sh b/appstore/bark/2.1.5/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/bark/2.1.5/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/bark/README.md b/appstore/bark/README.md new file mode 100644 index 00000000..199d1359 --- /dev/null +++ b/appstore/bark/README.md @@ -0,0 +1,125 @@ +# Bark + +一款注重隐私、安全可控的自定义通知推送工具。 + +![Bark](https://file.lifebus.top/imgs/bark_logo.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 免费、轻量!简单调用接口即可给自己的iPhone发送推送。 ++ 依赖苹果APNs,及时、稳定、可靠 ++ 不会消耗设备的电量, 基于系统推送服务与推送扩展,APP本体并不需要运行。 ++ 隐私安全,可以通过一些方式确保包含作者本人在内的所有人都无法窃取你的隐私。 + +## 安装说明 + +### `数据库链接` 配置 + +MySQL DSN 数据库链接 + +格式: + +```shell +user:pass@tcp(host)/dbname + +# 例如 +root:123456@tcp(127.0.0.1:3306)/bark +``` + +#### 参数说明 + +| 参数 | 说明 | +|--------|--------| +| user | 数据库用户名 | +| pass | 数据库密码 | +| host | 数据库地址 | +| dbname | 数据库名称 | + +使用其他端口时 `host` 格式为 `host:port` + +## [URL格式](https://bark.day.app/#/tutorial?id=url格式) + +URL由推送key、参数 title、参数 body 组成。有下面两种组合方式 + +#### 服务基础验证 + +可选项,验证方式为 `Basic`,具体格式为 `Basic base64(username:password)`,其中 `base64(username:password)` +为 `username:password` 的 `base64` 编码结果。 + ++ 用户名 (服务基础验证) ++ 密码 (服务基础验证) + +``` +/:key/:body +/:key/:title/:body +``` + +## [请求方式](https://bark.day.app/#/tutorial?id=请求方式) + +##### [GET 请求参数拼接在 URL 后面,例如:](https://bark.day.app/#/tutorial?id=get-请求参数拼接在-url-后面,例如:) + +```sh +curl https://api.day.app/your_key/推送内容?group=分组©=复制 +``` + +*手动拼接参数到URL上时,请注意URL编码问题,可以参考阅读[常见问题:URL编码](https://bark.day.app/#/faq?id=推送特殊字符导致推送失败,比如-推送内容包含链接,或推送异常-比如-变成空格)* + +##### [POST 请求参数放在请求体中,例如:](https://bark.day.app/#/tutorial?id=post-请求参数放在请求体中,例如:) + +```sh +curl -X POST https://api.day.app/your_key \ + -d'body=推送内容&group=分组©=复制' +``` + +##### [POST 请求支持JSON,例如:](https://bark.day.app/#/tutorial?id=post-请求支持json,例如:) + +```sh +curl -X "POST" "https://api.day.app/your_key" \ + -H 'Content-Type: application/json; charset=utf-8' \ + -d $'{ + "body": "Test Bark Server", + "title": "Test Title", + "badge": 1, + "category": "myNotificationCategory", + "sound": "minuet.caf", + "icon": "https://day.app/assets/images/avatar.jpg", + "group": "test", + "url": "https://mritd.com" +}' +``` + +##### [JSON 请求 key 可以放进请求体中,URL 路径须为 /push,例如](https://bark.day.app/#/tutorial?id=json-请求-key-可以放进请求体中url-路径须为-push,例如) + +```sh +curl -X "POST" "https://api.day.app/push" \ + -H 'Content-Type: application/json; charset=utf-8' \ + -d $'{ + "body": "Test Bark Server", + "title": "Test Title", + "device_key": "your_key" +}' +``` + +## [请求参数](https://bark.day.app/#/tutorial?id=请求参数) + +支持的参数列表,具体效果可在APP内预览。 + +| 参数 | 说明 | +|-----------|---------------------------------------------------------------------------------------------| +| title | 推送标题 | +| body | 推送内容 | +| level | 推送中断级别。 active:默认值,系统会立即亮屏显示通知 timeSensitive:时效性通知,可在专注状态下显示通知。 passive:仅将通知添加到通知列表,不会亮屏提醒。 | +| badge | 推送角标,可以是任意数字 | +| autoCopy | iOS14.5以下自动复制推送内容,iOS14.5以上需手动长按推送或下拉推送 | +| copy | 复制推送时,指定复制的内容,不传此参数将复制整个推送内容。 | +| sound | 可以为推送设置不同的铃声 | +| icon | 为推送设置自定义图标,设置的图标将替换默认Bark图标。 图标会自动缓存在本机,相同的图标 URL 仅下载一次。 | +| group | 对消息进行分组,推送将按group分组显示在通知中心中。 也可在历史消息列表中选择查看不同的群组。 | +| isArchive | 传 1 保存推送,传其他的不保存推送,不传按APP内设置来决定是否保存。 | +| url | 点击推送时,跳转的URL ,支持URL Scheme 和 Universal Link | + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/bark/data.yml b/appstore/bark/data.yml new file mode 100644 index 00000000..fd1c11c3 --- /dev/null +++ b/appstore/bark/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: bark + name: Bark + tags: + - WebSite + - Middleware + - Tool + - Local + shortDescZh: 通知推送工具 + shortDescEn: Notification push tool + type: website + crossVersionUpdate: true + limit: 0 + website: https://bark.day.app/ + github: https://github.com/finb/bark/ + document: https://bark.day.app/ diff --git a/appstore/bark/logo.png b/appstore/bark/logo.png new file mode 100644 index 00000000..eba752a8 Binary files /dev/null and b/appstore/bark/logo.png differ diff --git a/appstore/bitmagnet/0.9.5/.env b/appstore/bitmagnet/0.9.5/.env new file mode 100644 index 00000000..de3bd35e --- /dev/null +++ b/appstore/bitmagnet/0.9.5/.env @@ -0,0 +1,33 @@ +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# 数据持久化路径 [必填] +BITMAGNET_ROOT_PATH=/home/bitmagnet + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3333 + +# BitTorrent 端口 [必填] +PANEL_APP_PORT_BT=3334 + +# 数据库 主机地址 [必填] +POSTGRES_HOST=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 名称 [必填] +POSTGRES_NAME=bitmagnet + +# 数据库 用户名 [必填] +POSTGRES_USER=bitmagnet + +# 数据库 密码 [必填] +POSTGRES_PASSWORD= + +# 获取 TMDB 元数据 [必填] +TMDB_ENABLED=true + +# TMDB API 密钥 +TMDB_API_KEY= + diff --git a/appstore/bitmagnet/0.9.5/data.yml b/appstore/bitmagnet/0.9.5/data.yml new file mode 100644 index 00000000..328f0a77 --- /dev/null +++ b/appstore/bitmagnet/0.9.5/data.yml @@ -0,0 +1,97 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_POSTGRES_SERVICE + required: true + type: service + default: postgresql + envKey: PANEL_POSTGRES_TYPE + labelZh: Postgres 服务 (前置检查) + labelEn: Postgres Service (Pre-check) + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - default: "/home/bitmagnet" + edit: true + envKey: BITMAGNET_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3333 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 3334 + edit: true + envKey: PANEL_APP_PORT_BT + labelZh: BitTorrent 端口 + labelEn: BitTorrent port + required: true + rule: paramPort + type: number + - default: "127.0.0.1" + edit: true + envKey: POSTGRES_HOST + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "bitmagnet" + edit: true + envKey: POSTGRES_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + rule: paramCommon + type: text + - default: "bitmagnet" + edit: true + envKey: POSTGRES_USER + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "" + edit: true + envKey: POSTGRES_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + random: true + required: true + rule: paramComplexity + type: password + - default: "true" + edit: true + envKey: TMDB_ENABLED + labelZh: 获取 TMDB 元数据 + labelEn: Fetch TMDB metadata + required: true + type: select + values: + - label: 允许 + value: "true" + - label: 禁止 + value: "false" + - default: "" + edit: true + envKey: TMDB_API_KEY + labelZh: TMDB API 密钥 + labelEn: TMDB API Key + required: false + type: text diff --git a/appstore/bitmagnet/0.9.5/docker-compose.yml b/appstore/bitmagnet/0.9.5/docker-compose.yml new file mode 100644 index 00000000..989080b1 --- /dev/null +++ b/appstore/bitmagnet/0.9.5/docker-compose.yml @@ -0,0 +1,36 @@ +networks: + 1panel-network: + external: true +services: + bitmagnet: + command: + - worker + - run + - --all + container_name: bitmagnet + dns: + - 1.1.1.1 + - 114.114.114.114 + env_file: + - ./envs/global.env + - .env + environment: + - LOG_FILE_ROTATOR_ENABLED=true + - LOG_LEVEL=info + - LOG_DEVELOPMENT=false + - LOG_JSON=false + - DHT_CRAWLER_SAVE_FILES_THRESHOLD=100 + - PROCESSOR_CONCURRENCY=1 + image: ghcr.io/bitmagnet-io/bitmagnet:v0.9.5 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3333 + - ${PANEL_APP_PORT_BT}:3334/tcp + - ${PANEL_APP_PORT_BT}:3334/udp + restart: always + volumes: + - ${BITMAGNET_ROOT_PATH}/config:/root/.config/bitmagnet + - ${BITMAGNET_ROOT_PATH}/bitmagnet:/root/.local/share/bitmagnet diff --git a/appstore/bitmagnet/0.9.5/envs/default.env b/appstore/bitmagnet/0.9.5/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/bitmagnet/0.9.5/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/bitmagnet/0.9.5/envs/global.env b/appstore/bitmagnet/0.9.5/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/bitmagnet/0.9.5/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/bitmagnet/0.9.5/scripts/init.sh b/appstore/bitmagnet/0.9.5/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/bitmagnet/0.9.5/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/bitmagnet/0.9.5/scripts/uninstall.sh b/appstore/bitmagnet/0.9.5/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/bitmagnet/0.9.5/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/bitmagnet/0.9.5/scripts/upgrade.sh b/appstore/bitmagnet/0.9.5/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/bitmagnet/0.9.5/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/bitmagnet/README.md b/appstore/bitmagnet/README.md new file mode 100644 index 00000000..a2b7c3d9 --- /dev/null +++ b/appstore/bitmagnet/README.md @@ -0,0 +1,60 @@ +# Bitmagnet + +自托管的 BitTorrent 索引器,DHT 爬虫,内容分类器和带 Web UI,GraphQL API 以及 Servarr 堆栈集成的 torrent 搜索引擎。 + +![Bitmagnet](https://file.lifebus.top/imgs/bitmagnet_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +DHT 爬虫是 Bitmagnet 的杀手锏,使其独一无二。那么它是什么呢? Translation: + +你可能知道,可以在你的 BitTorrent 客户端中启用 DHT,这允许你找到正在向分布式哈希表(DHT)宣布磁贴哈希的对等方,而不是向集中式跟踪器。 +DHT 的较不为人知的功能是,它允许您爬取它所知道的信息哈希。这就是 Bitmagnet 的 DHT 爬虫的工作方式 - 它爬取 DHT +网络,请求每个发现的信息哈希的元数据。然后通过尝试对其进行分类并将其与已知的内容关联(如电影和电视节目)进一步丰富这些元数据。 +然后允许你搜索它所索引的一切。 + +这意味着 Bitmagnet 不依赖于任何外部跟踪器或磁力链接索引器。它是一个自包含、自托管的磁力链接索引器,通过 DHT +连接到全球网络中的对等节点,并不断发现新的内容。 + +## 功能与路线图 + +### 当前已实现的功能 + +- [x] DHT 爬虫和协议实现 +- [x] 通用的 BitTorrent 索引器:bitmagnet 可以从任何来源索引磁力链接,而不仅仅是 DHT 网络——目前这仅可以通过 `/import` + 端点实现;更友好的方法正在开发中,请参见以下高优先级功能 +- [x] 一个高度可定制的内容分类器,目前可以识别多种类型的内容,以及与之相关的关键属性,如语言、分辨率、来源(蓝光、网络翻录等),并从包括电影数据库在内的多个数据源补充信息。 +- [x] [一个用于从任何来源摄入磁力链接的导入工具,例如 RARBG 备份](https://bitmagnet.io/guides/import.html) +- [x] 翻译文本: torrent 搜索引擎 +- [x] GraphQL API:当前提供单个搜索查询;还包含一个嵌入式 GraphQL playground 在 `/graphql` +- [x] 在 Angular 中实现的网络用户界面:当前这是一个简单的单页应用,通过 GraphQL API 提供搜索查询的用户界面 +- [x] [一个与 Torznab 兼容的端点,用于与 Serverr 堆栈集成](https://bitmagnet.io/guides/servarr- [ ]integration.html) + +### 高优先级功能尚未实现 + +- [ ] 一个 WebUI 仪表板,显示诸如爬虫吞吐量、任务队列、数据库大小等信息。 +- [ ] 认证,API 密钥,访问级别等。 +- [ ] 管理员 API,一般来说,一个更完整的 GraphQL API +- [ ] 更完整的网络 UI +- [ ] 保存了对特定内容的搜索,以启用除以下功能外的自定义 feeds +- [ ] 与 Prowlarr 索引器代理的双向集成:目前,Bitmagnet 可以作为 Prowlarr 中的索引器添加;双向集成将允许 Bitmagnet 从 + Prowlarr 中配置的任何索引器爬取内容,解锁许多新的内容来源 +- [ ] 更多文档和更多测试! + +### 管道梦想特性 + +事情开始变得有些模糊。目前所有关注点都在实现上述核心功能,但这些想法在未来可能会被探索: + +- [ ] 原地播种:在您的计算机上识别属于索引磁贴的文件,并在移动、重命名或删除磁贴的部分后,允许这些文件原地播种 +- [ ] 与流行的 BitTorrent 客户端集成 +- [ ] 某种联盟:允许朋友连接实例并汇集索引努力,可能涉及众包手动内容策展,以补充自动分类器 +- [ ] 看起来像是去中心化的私人追踪器;我可能指的是部分基于个人信任,并手动剔除任何不良行为者的东西;我可能会对创建看起来有点像 + Tribler 的东西持谨慎态度,尽管这是一个有趣的研究项目,但似乎已经证明,在协议层面上实现信任、声誉和隐私的开销太大,无法成为与原始的 + BitTorrent 相比具有吸引力的替代方案,尽管 BitTorrent 存在一些缺陷 +- [ ] BitTorrent v2 协议的支持:是否会有更广泛的采用使其成为有价值的功能还有待观察 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/bitmagnet/data.yml b/appstore/bitmagnet/data.yml new file mode 100644 index 00000000..2b5fc0fc --- /dev/null +++ b/appstore/bitmagnet/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: bitmagnet + name: Bitmagnet + tags: + - WebSite + - Middleware + - Local + shortDescZh: 自托管的 BitTorrent 索引器 + shortDescEn: Self-hosted BitTorrent indexer + type: website + crossVersionUpdate: true + limit: 0 + website: https://bitmagnet.io/ + github: https://github.com/bitmagnet-io/bitmagnet/ + document: https://bitmagnet.io/ diff --git a/appstore/bitmagnet/logo.png b/appstore/bitmagnet/logo.png new file mode 100644 index 00000000..bbdbe194 Binary files /dev/null and b/appstore/bitmagnet/logo.png differ diff --git a/appstore/casdoor/1.758.0/.env b/appstore/casdoor/1.758.0/.env new file mode 100644 index 00000000..e29aa1fc --- /dev/null +++ b/appstore/casdoor/1.758.0/.env @@ -0,0 +1,45 @@ +# 数据库 服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# 数据持久化路径 [必填] +CASDOOR_ROOT_PATH=/home/casdoor + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8000 + +# 数据库 类型 [必填] +DB_TYPE=postgres + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 用户名 [必填] +DB_USER=casdoor + +# 数据库 密码 [必填] +DB_PASSWD= + +# 数据库 名称 [必填] +DB_NAME=casdoor + +# Redis 主机 [必填] +REDIS_HOSTNAME=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 索引 [必填] +REDIS_DBINDEX=0 + +# Redis 密码 +REDIS_PASSWORD= + +# Socks5 代理 (地区网络限制) +socks5Proxy= + diff --git a/appstore/casdoor/1.758.0/config/init_data.json b/appstore/casdoor/1.758.0/config/init_data.json new file mode 100644 index 00000000..a08a677f --- /dev/null +++ b/appstore/casdoor/1.758.0/config/init_data.json @@ -0,0 +1,490 @@ +{ + "organizations": [ + { + "owner": "", + "name": "", + "displayName": "", + "websiteUrl": "", + "favicon": "", + "passwordType": "plain", + "passwordSalt": "", + "passwordOptions": [ + "AtLeast6" + ], + "countryCodes": [ + "US", + "GB", + "ES", + "FR", + "DE", + "CN", + "JP", + "KR", + "VN", + "ID", + "SG", + "IN", + "IT", + "MY", + "TR", + "DZ", + "IL", + "PH", + "NL", + "PL", + "FI", + "SE", + "UA", + "KZ" + ], + "defaultAvatar": "", + "defaultApplication": "", + "tags": [], + "languages": [ + "en", + "zh", + "es", + "fr", + "de", + "id", + "ja", + "ko", + "ru", + "vi", + "it", + "ms", + "tr", + "ar", + "he", + "nl", + "pl", + "fi", + "sv", + "uk", + "kk", + "fa" + ], + "masterPassword": "", + "defaultPassword": "", + "initScore": 2000, + "enableSoftDeletion": false, + "isProfilePublic": true, + "accountItems": [] + } + ], + "applications": [ + { + "owner": "", + "name": "", + "displayName": "", + "logo": "", + "homepageUrl": "", + "organization": "", + "cert": "", + "enablePassword": true, + "enableSignUp": true, + "clientId": "", + "clientSecret": "", + "providers": [ + { + "name": "", + "canSignUp": true, + "canSignIn": true, + "canUnlink": false, + "prompted": false, + "alertType": "None" + } + ], + "signinMethods": [ + { + "name": "Password", + "displayName": "Password", + "rule": "All" + }, + { + "name": "Verification code", + "displayName": "Verification code", + "rule": "All" + }, + { + "name": "WebAuthn", + "displayName": "WebAuthn", + "rule": "None" + }, + { + "name": "Face ID", + "displayName": "Face ID", + "rule": "None" + } + ], + "signupItems": [ + { + "name": "ID", + "visible": false, + "required": true, + "prompted": false, + "rule": "Random" + }, + { + "name": "Username", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Display name", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Password", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Confirm password", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Email", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Phone", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Agreement", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + } + ], + "grantTypes": [ + "authorization_code", + "password", + "client_credentials", + "token", + "id_token", + "refresh_token" + ], + "redirectUris": [ + "http://localhost:9000/callback" + ], + "tokenFormat": "JWT", + "tokenFields": [], + "expireInHours": 168, + "failedSigninLimit": 5, + "failedSigninFrozenTime": 15 + } + ], + "users": [ + { + "owner": "", + "name": "", + "type": "normal-user", + "password": "", + "displayName": "", + "avatar": "", + "email": "", + "phone": "", + "countryCode": "", + "address": [], + "affiliation": "", + "tag": "", + "score": 2000, + "ranking": 1, + "isAdmin": true, + "isForbidden": false, + "isDeleted": false, + "signupApplication": "", + "createdIp": "", + "groups": [] + } + ], + "providers": [ + { + "owner": "", + "name": "", + "displayName": "", + "category": "", + "type": "" + } + ], + "certs": [ + { + "owner": "", + "name": "", + "displayName": "", + "scope": "JWT", + "type": "x509", + "cryptoAlgorithm": "RS256", + "bitSize": 4096, + "expireInYears": 20, + "certificate": "", + "privateKey": "" + } + ], + "ldaps": [ + { + "id": "", + "owner": "", + "serverName": "", + "host": "", + "port": 389, + "username": "", + "password": "", + "baseDn": "", + "autoSync": 0, + "lastSync": "" + } + ], + "models": [ + { + "owner": "", + "name": "", + "modelText": "", + "displayName": "" + } + ], + "permissions": [ + { + "actions": [], + "displayName": "", + "effect": "", + "isEnabled": true, + "model": "", + "name": "", + "owner": "", + "resourceType": "", + "resources": [], + "roles": [], + "users": [] + } + ], + "payments": [ + { + "currency": "", + "detail": "", + "displayName": "", + "invoiceRemark": "", + "invoiceTaxId": "", + "invoiceTitle": "", + "invoiceType": "", + "invoiceUrl": "", + "message": "", + "name": "", + "organization": "", + "owner": "", + "payUrl": "", + "personEmail": "", + "personIdCard": "", + "personName": "", + "personPhone": "", + "price": 0, + "productDisplayName": "", + "productName": "", + "provider": "", + "returnUrl": "", + "state": "", + "tag": "", + "type": "", + "user": "" + } + ], + "products": [ + { + "currency": "", + "detail": "", + "displayName": "", + "image": "", + "name": "", + "owner": "", + "price": 0, + "providers": [], + "quantity": 0, + "returnUrl": "", + "sold": 0, + "state": "", + "tag": "" + } + ], + "resources": [ + { + "owner": "", + "name": "", + "user": "", + "provider": "", + "application": "", + "tag": "", + "parent": "", + "fileName": "", + "fileType": "", + "fileFormat": "", + "url": "", + "description": "" + } + ], + "roles": [ + { + "displayName": "", + "isEnabled": true, + "name": "", + "owner": "", + "roles": [], + "users": [] + } + ], + "syncers": [ + { + "affiliationTable": "", + "avatarBaseUrl": "", + "database": "", + "databaseType": "", + "errorText": "", + "host": "", + "isEnabled": false, + "name": "", + "organization": "", + "owner": "", + "password": "", + "port": 0, + "syncInterval": 0, + "table": "", + "tableColumns": [ + { + "casdoorName": "", + "isHashed": true, + "name": "", + "type": "", + "values": [] + } + ], + "tablePrimaryKey": "", + "type": "", + "user": "" + } + ], + "tokens": [ + { + "accessToken": "", + "application": "", + "code": "", + "codeChallenge": "", + "codeExpireIn": 0, + "codeIsUsed": true, + "createdTime": "", + "expiresIn": 0, + "name": "", + "organization": "", + "owner": "", + "refreshToken": "", + "scope": "", + "tokenType": "", + "user": "" + } + ], + "webhooks": [ + { + "contentType": "", + "events": [], + "headers": [ + { + "name": "", + "value": "" + } + ], + "isEnabled": true, + "isUserExtended": true, + "method": "", + "name": "", + "organization": "", + "owner": "", + "url": "" + } + ], + "groups": [ + { + "owner": "", + "name": "", + "displayName": "", + "manager": "", + "contactEmail": "", + "type": "", + "parent_id": "", + "isTopGroup": true, + "title": "", + "key": "", + "children": "", + "isEnabled": true + } + ], + "adapters": [ + { + "owner": "", + "name": "", + "table": "", + "useSameDb": true, + "type": "", + "databaseType": "", + "database": "", + "host": "", + "port": 0, + "user": "", + "password": "" + } + ], + "enforcers": [ + { + "owner": "", + "name": "", + "displayName": "", + "description": "", + "model": "", + "adapter": "", + "enforcer": "" + } + ], + "plans": [ + { + "owner": "", + "name": "", + "displayName": "", + "description": "", + "price": 0, + "currency": "", + "period": "", + "product": "", + "paymentProviders": [], + "isEnabled": true, + "role": "" + } + ], + "pricings": [ + { + "owner": "", + "name": "", + "displayName": "", + "description": "", + "plans": [], + "isEnabled": true, + "trialDuration": 0, + "application": "" + } + ] +} diff --git a/appstore/casdoor/1.758.0/data.yml b/appstore/casdoor/1.758.0/data.yml new file mode 100644 index 00000000..f520206d --- /dev/null +++ b/appstore/casdoor/1.758.0/data.yml @@ -0,0 +1,138 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: postgresql + edit: true + envKey: PANEL_DB_TYPE + labelZh: 数据库 服务 (前置检查) + labelEn: Database Service (Pre-check) + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - child: + default: "" + envKey: PANEL_REDIS_SERVICE + required: true + type: service + default: redis + envKey: PANEL_REDIS_TYPE + labelZh: Redis 服务 (前置检查) + labelEn: Redis Service (Pre-check) + required: true + type: apps + values: + - label: Redis + value: redis + - default: "/home/casdoor" + edit: true + envKey: CASDOOR_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: postgres + edit: true + envKey: DB_TYPE + labelZh: 数据库 类型 + labelEn: Database Type + required: true + type: select + values: + - label: PostgreSQL + value: postgres + - label: MySQL (MariaDB, Percona) + value: mysql + - default: "127.0.0.1" + edit: true + envKey: DB_HOSTNAME + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "casdoor" + edit: true + envKey: DB_USER + labelZh: 数据库 用户名 + labelEn: Database User + required: true + type: text + - default: "" + edit: true + envKey: DB_PASSWD + labelEn: Database Password + labelZh: 数据库 密码 + random: true + required: true + rule: paramComplexity + type: password + - default: "casdoor" + edit: true + envKey: DB_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text + - default: "127.0.0.1" + edit: true + envKey: REDIS_HOSTNAME + labelZh: Redis 主机 + labelEn: Redis Host + required: true + type: text + - default: 6379 + edit: true + envKey: REDIS_PORT + labelZh: Redis 端口 + labelEn: Redis Port + required: true + rule: paramPort + type: number + - default: 0 + edit: true + envKey: REDIS_DBINDEX + labelZh: Redis 索引 + labelEn: Redis Index + required: true + type: number + - default: "" + edit: true + envKey: REDIS_PASSWORD + labelZh: Redis 密码 + labelEn: Redis Password + required: false + type: password + - default: "" + edit: true + envKey: socks5Proxy + labelZh: Socks5 代理 (地区网络限制) + labelEn: Socks5 Proxy (Region Network Restriction) + required: false + type: text diff --git a/appstore/casdoor/1.758.0/docker-compose.yml b/appstore/casdoor/1.758.0/docker-compose.yml new file mode 100644 index 00000000..ca045ecd --- /dev/null +++ b/appstore/casdoor/1.758.0/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + casdoor: + container_name: casdoor + env_file: + - ./envs/global.env + - ./envs/casdoor.env + - .env + environment: + - driverName=${DB_TYPE} + - dbName=${DB_NAME} + - verificationCodeTimeout=10 + - appname=casdoor + - authState=casdoor + image: casbin/casdoor:v1.758.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8000 + restart: always + volumes: + - ${CASDOOR_ROOT_PATH}/files:/files diff --git a/appstore/casdoor/1.758.0/envs/casdoor.env b/appstore/casdoor/1.758.0/envs/casdoor.env new file mode 100644 index 00000000..cb7db866 --- /dev/null +++ b/appstore/casdoor/1.758.0/envs/casdoor.env @@ -0,0 +1,31 @@ +appname=casdoor +httpport=8000 +runmode=prod +copyrequestbody=true +driverName=mysql +dataSourceName= +dbName=casdoor +tableNamePrefix= +showSql=false +redisEndpoint= +defaultStorageProvider= +isCloudIntranet=false +authState=casdoor +socks5Proxy= +verificationCodeTimeout=10 +initScore=0 +logPostOnly=true +isUsernameLowered=false +origin= +originFrontend= +staticBaseUrl=https://cdn.casbin.org +isDemoMode=false +batchSize=100 +enableGzip=true +ldapServerPort=389 +radiusServerPort=1812 +radiusSecret=secret +quota={"organization": -1, "user": -1, "application": -1, "provider": -1} +logConfig={"filename": "logs/casdoor.log", "maxdays":99999, "perm":"0770"} +initDataFil="./init_data.json" +frontendBaseDi="../casdoor" diff --git a/appstore/casdoor/1.758.0/envs/default.env b/appstore/casdoor/1.758.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/casdoor/1.758.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/casdoor/1.758.0/envs/global.env b/appstore/casdoor/1.758.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/casdoor/1.758.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/casdoor/1.758.0/scripts/init.sh b/appstore/casdoor/1.758.0/scripts/init.sh new file mode 100644 index 00000000..cbf317ef --- /dev/null +++ b/appstore/casdoor/1.758.0/scripts/init.sh @@ -0,0 +1,33 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/casdoor.env" >> .env + + if [ "$DB_TYPE" == "mysql" ]; then + echo "dataSourceName=$DB_USER:$DB_PASSWD@tcp($DB_HOSTNAME:$DB_PORT)/" >> .env + fi + + if [ "$DB_TYPE" == "postgres" ]; then + echo "dataSourceName=\"user=$DB_USER password=$DB_PASSWD host=$DB_HOSTNAME port=$DB_PORT sslmode=disable dbname=$DB_NAME\"" >> .env + fi + + if [ -n "$REDIS_PASSWORD" ]; then + echo "redisEndpoint=$REDIS_HOSTNAME:$REDIS_PORT,$REDIS_DBINDEX,$REDIS_PASSWORD" >> .env + else + echo "redisEndpoint=$REDIS_HOSTNAME:$REDIS_PORT,$REDIS_DBINDEX" >> .env + fi + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/casdoor/1.758.0/scripts/uninstall.sh b/appstore/casdoor/1.758.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/casdoor/1.758.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/casdoor/1.758.0/scripts/upgrade.sh b/appstore/casdoor/1.758.0/scripts/upgrade.sh new file mode 100644 index 00000000..e32cd1c6 --- /dev/null +++ b/appstore/casdoor/1.758.0/scripts/upgrade.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/casdoor.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/casdoor/README.md b/appstore/casdoor/README.md new file mode 100644 index 00000000..0ecb25d5 --- /dev/null +++ b/appstore/casdoor/README.md @@ -0,0 +1,95 @@ +# Casdoor + +Casdoor 是一个 UI 优先的身份访问管理 (IAM)/单点登录 (SSO) 平台,其 Web UI 支持 OAuth +2.0、OIDC、SAML、CAS、LDAP、SCIM、WebAuthn、TOTP、MFA、RADIUS、Google Workspace、活动目录和 Kerberos。 + +![Casdoor](https://file.lifebus.top/imgs/casdoor_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Casdoor是一个基于OAuth 2.0、OIDC、SAML 和 CAS 的,UI-first的身份和访问管理(IAM)/单点登录(SSO)平台。 + +Casdoor是由Casbin社区通过Golang和React进行开发。 + +Casdoor旨在提供一个强大的认证平台来处理用户管理问题。 + ++ ⚡️ 强大的功能和极简的配置。 支持使用 登录和传统的用户名/密码登录,只需几个步骤,Casdoor即可帮助您构建您的用户管理系统。 + ++ 💥 前后端分离架构。 Casdoor提供可随心所欲的网页界面并支持高并发。 + ++ 🥂 活跃的开源社区。 Casdoor是开源的,并有专业团队积极维护中。 + ++ 🌐 多语言支持。 Casdoor支持多种语言,包括中文、英文、法文、以及更多语言。 + +## 特性 + ++ Casdoor 遵循前后端分离架构,采用 Golang 进行开发。 它支持高同步,提供基于网页的用户界面管理,并支持10多种语言的本地化。 + ++ Casdoor 支持第三方应用登录,如 GitHub、谷歌、QQ、微信等,并支持通过插件扩展第三方登录。 + ++ Casdoor 支持基于 Cassbin 的授权管理。 它支持 ACL、RBAC、ABAC 和 RESTful鉴权管理模式。 + ++ Casdoor 提供了手机验证码、电子邮件验证码以及重置密码的功能。 + ++ Casdoor 支持日志的审计和记录。 + ++ Casdoor 可以使用阿里云、腾讯云、七牛云提供的图片CDN云存储功能。 + ++ Casdoor 允许自定义注册、登录以及找回密码页面。 + ++ 通过数据库同步支持与现有系统的集成,从而能够顺利过渡到 Casdoor。 + ++ Casdoor 支持主流数据库: MySQL、PostgreSQL、SQL Server 等, 并支持扩展插件以支持新的数据库。 + +## 安装说明 + +> 全局管理员账户:'built-in/admin' +> 解释:'built-in' 是内置的组织名,'admin' 是内置的用户名。 +> +> 默认用户名:`admin` +> 默认密码:`123` + +### 数据库支持 + +当前仅支持 `MySQL` 和 `PostgreSQL` 数据库。 + +官方支持使用 'SQLite' 数据库,但不建议在生产环境中使用。因此,我们放弃了 'SQLite' 数据库的配置选项。 + +同时还有一些其他数据库的支持,但是这些数据库的支持并不完善,因此我们也放弃了这些数据库的配置选项。 + +### 存储 `本地文件系统` + +Casdoor 支持将用户头像等文件存储在本地文件系统中。默认情况下,Casdoor 会将文件存储在容器内部 `/home/user/casdoor/files` +目录下。 + +我们将其挂载在 持久化目录 `/home/casdoor` 下,以便于数据的持久化。 + +### `Socks5 代理 (地区网络限制)` 配置 + +如果您的网络环境受到地区网络限制,您可以通过配置 `Socks5 代理` 来解决这个问题。 + +格式:host:port + +socks5Proxy 是 SOCKS 代理服务器 IP 地址。 +设置代理端口,因为我们有与Google相关的服务,或者使用Google、GitHub、Facebook、LinkedIn或Steam作为OAuth提供商,这在某些地区可能会受到网络限制。 + +### 数据初始化 `init_data.json` 配置 + +Casdoor 会在第一次启动时,自动初始化数据库。您可以通过配置 `init_data.json` 文件来初始化数据库。 + +配置自定义的 `init_data.json` 文件,需要挂载到容器中。 + +需要修改 `docker-compose.yml` 文件中的 `volumes` 部分,添加自定义配置的挂载,将 `init_data.json` 文件挂载到容器中,覆盖默认配置。 + +```yaml +volumes: + - ./config/init_data.json:/init_data.json +``` + +其中 `./config/init_data.json` 为默认配置文件所在路径,您可以根据实际情况进行修改为自定义绝对文件路径即可。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/casdoor/data.yml b/appstore/casdoor/data.yml new file mode 100644 index 00000000..cc551758 --- /dev/null +++ b/appstore/casdoor/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: casdoor + name: Casdoor + tags: + - WebSite + - Middleware + - Tool + - Local + shortDescZh: 身份和访问管理(IAM)/单点登录(SSO)平台 + shortDescEn: Identity and Access Management (IAM)/Single Sign-On (SSO) platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://casdoor.org/ + github: https://github.com/casdoor/casdoor/ + document: https://casdoor.org/zh/docs/overview/ diff --git a/appstore/casdoor/logo.png b/appstore/casdoor/logo.png new file mode 100644 index 00000000..21114837 Binary files /dev/null and b/appstore/casdoor/logo.png differ diff --git a/appstore/certimate/0.2.21/.env b/appstore/certimate/0.2.21/.env new file mode 100644 index 00000000..95ab5a0a --- /dev/null +++ b/appstore/certimate/0.2.21/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +CERTIMATE_ROOT_PATH=/home/certimate + +# Web UI 端口 [必填] +PANEL_APP_PORT_HTTP=8090 + diff --git a/appstore/certimate/0.2.21/data.yml b/appstore/certimate/0.2.21/data.yml new file mode 100644 index 00000000..c0168363 --- /dev/null +++ b/appstore/certimate/0.2.21/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: "/home/certimate" + edit: true + envKey: CERTIMATE_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8090 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Web UI 端口 + labelEn: Web UI port + required: true + rule: paramPort + type: number diff --git a/appstore/certimate/0.2.21/docker-compose.yml b/appstore/certimate/0.2.21/docker-compose.yml new file mode 100644 index 00000000..c750adda --- /dev/null +++ b/appstore/certimate/0.2.21/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + certimate: + container_name: certimate + env_file: + - ./envs/global.env + - .env + image: usual2970/certimate:v0.2.21 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8090 + restart: always + volumes: + - ${CERTIMATE_ROOT_PATH}/data:/app/pb_data diff --git a/appstore/certimate/0.2.21/envs/default.env b/appstore/certimate/0.2.21/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/certimate/0.2.21/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/certimate/0.2.21/envs/global.env b/appstore/certimate/0.2.21/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/certimate/0.2.21/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/certimate/0.2.21/scripts/init.sh b/appstore/certimate/0.2.21/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/certimate/0.2.21/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/certimate/0.2.21/scripts/uninstall.sh b/appstore/certimate/0.2.21/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/certimate/0.2.21/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/certimate/0.2.21/scripts/upgrade.sh b/appstore/certimate/0.2.21/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/certimate/0.2.21/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/certimate/README.md b/appstore/certimate/README.md new file mode 100644 index 00000000..23b05c6c --- /dev/null +++ b/appstore/certimate/README.md @@ -0,0 +1,58 @@ +# Certimate + +SSL证书管理工具 + +![Certimate](https://file.lifebus.top/imgs/certimate_cover.png) + +开源的SSL证书管理工具,可以帮助你自动申请、部署SSL证书,并在证书即将过期时自动续期。 + +An open-source SSL certificate management tool that helps you automatically apply for and deploy SSL certificates, as +well as automatically renew them when they are about to expire. + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +做个人产品或在小企业负责运维的同学,需要管理多个域名,要给域名申请证书。但手动申请证书有以下缺点: + +😱麻烦:申请、部署证书虽不困难,但也挺麻烦的,尤其是维护多个域名的时候。 + +😭易忘:当前免费证书有效期仅90天,这就要求定期操作,增加工作量的同时,也很容易忘掉,导致网站无法访问。 + +Certimate 就是为了解决上述问题而产生的,它具有以下特点: + ++ 操作简单:自动申请、部署、续期 SSL 证书,全程无需人工干预。 ++ 支持私有部署:部署方法简单,只需下载二进制文件执行即可。二进制文件、docker 镜像全部用 github actions 生成,过程透明,可自行审计。 ++ 数据安全:由于是私有部署,所有数据均存储在本地,不会保存在服务商的服务器,确保数据的安全性。 + +## 概念 + +Certimate 的工作流程如下: + ++ 用户通过 Certimate 管理页面填写申请证书的信息,包括域名、dns 服务商的授权信息、以及要部署到的服务商的授权信息。 ++ Certimate 向证书场商的 API 发起申请请求,获取 SSL 证书。 ++ Certimate 存储证书信息,包括证书内容、私钥、证书有效期等,并在证书即将过期时自动续期。 ++ Certimate 向服务商的 API 发起部署请求,将证书部署到服务商的服务器上。 + +这就涉及域名、dns 服务商的授权信息、部署服务商的授权信息等。 + +## 支持的服务商列表 + +| 服务商 | 是否域名服务商 | 是否部署服务 | 备注 | +|------------|---------|--------|------------------------------------------| +| 阿里云 | 是 | 是 | 支持阿里云注册的域名,支持部署到阿里云 CDN,OSS | +| 腾讯云 | 是 | 是 | 支持腾讯云注册的域名,支持部署到腾讯云 CDN | +| 七牛云 | 否 | 是 | 七牛云没有注册域名服务,支持部署到七牛云 CDN | +| CloudFlare | 是 | 否 | 支持 CloudFlare 注册的域名,CloudFlare 服务自带SSL证书 | +| SSH | 否 | 是 | 支持部署到 SSH 服务器 | +| WEBHOOK | 否 | 是 | 支持回调到 WEBHOOK | + +## 安装说明 + +> 用户名 `admin@certimate.fun` +> +> 密码:`1234567890` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/certimate/data.yml b/appstore/certimate/data.yml new file mode 100644 index 00000000..9284f549 --- /dev/null +++ b/appstore/certimate/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: certimate + name: Certimate + tags: + - WebSite + - Tool + - Middleware + - Local + shortDescZh: SSL证书管理工具 + shortDescEn: SSL Certificate Management Tool + type: website + crossVersionUpdate: true + limit: 0 + website: https://docs.certimate.me/ + github: https://github.com/usual2970/certimate/ + document: https://docs.certimate.me/docs/intro/ diff --git a/appstore/certimate/logo.png b/appstore/certimate/logo.png new file mode 100644 index 00000000..e95ace5c Binary files /dev/null and b/appstore/certimate/logo.png differ diff --git a/appstore/cookie-cloud/README.md b/appstore/cookie-cloud/README.md new file mode 100644 index 00000000..13972082 --- /dev/null +++ b/appstore/cookie-cloud/README.md @@ -0,0 +1,25 @@ +# CookieCloud + +CookieCloud 是一个用于将 cookie 与您的自托管服务器同步的小工具,允许您将浏览器 cookie +和本地存储同步到您的手机和云端。它具有内置的端到端加密功能,并允许您设置同步间隔。 + +![CookieCloud](https://file.lifebus.top/imgs/cookie_cloud_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 浏览器插件 + ++ [Edge Store](https://microsoftedge.microsoft.com/addons/detail/cookiecloud/bffenpfpjikaeocaihdonmgnjjdpjkeo) + ++ [Chrome Store](https://chrome.google.com/webstore/detail/cookiecloud/ffjiejobkoibkjlhjnlgmcnnigeelbdl) + +## FAQ 常问问题 + ++ 目前,同步只是单向的,这意味着一个浏览器可以上传,而另一个浏览器可以下载。 ++ 该浏览器扩展正式支持 Chrome 和 Edge。其他基于 Chromium 的浏览器可能可以工作,但尚未经过测试。使用源代码 cd extension && + pnpm build --target=firefox-mv2 自行编译Firefox版本。 ++ 请注意,Firefox 的 cookie 格式与 Chrome 的不同,并且它们不能混合。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/cookie-cloud/data.yml b/appstore/cookie-cloud/data.yml new file mode 100644 index 00000000..af2d3860 --- /dev/null +++ b/appstore/cookie-cloud/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: cookie-cloud + name: CookieCloud + tags: + - WebSite + - Tool + - Runtime + - Local + shortDescZh: 自架服务器同步Cookie的小工具 + shortDescEn: A small tool to synchronize cookies on self-built servers + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/easychen/CookieCloud/ + github: https://github.com/easychen/CookieCloud/ + document: https://github.com/easychen/CookieCloud/ diff --git a/appstore/cookie-cloud/latest/.env b/appstore/cookie-cloud/latest/.env new file mode 100644 index 00000000..4b9ff31a --- /dev/null +++ b/appstore/cookie-cloud/latest/.env @@ -0,0 +1,9 @@ +# 端口 [必填] +PANEL_APP_PORT_HTTP=8088 + +# 数据持久化路径 [必填] +COOKIECLOUD_ROOT_PATH=/home/cookie-cloud + +# 网站路径 [必填] +API_ROOT=/ + diff --git a/appstore/cookie-cloud/latest/data.yml b/appstore/cookie-cloud/latest/data.yml new file mode 100644 index 00000000..3e1af1d1 --- /dev/null +++ b/appstore/cookie-cloud/latest/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: 8088 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: "/home/cookie-cloud" + edit: true + envKey: COOKIECLOUD_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "/" + edit: true + envKey: API_ROOT + labelZh: 网站路径 + labelEn: Web path + required: true + type: text diff --git a/appstore/cookie-cloud/latest/docker-compose.yml b/appstore/cookie-cloud/latest/docker-compose.yml new file mode 100644 index 00000000..553edc05 --- /dev/null +++ b/appstore/cookie-cloud/latest/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + cookie-cloud: + container_name: cookie-cloud + env_file: + - ./envs/global.env + - .env + image: easychen/cookiecloud:latest + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8088 + restart: always + volumes: + - ${COOKIECLOUD_ROOT_PATH}/data:/data/api/data diff --git a/appstore/cookie-cloud/latest/envs/default.env b/appstore/cookie-cloud/latest/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/cookie-cloud/latest/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/cookie-cloud/latest/envs/global.env b/appstore/cookie-cloud/latest/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/cookie-cloud/latest/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/cookie-cloud/latest/scripts/init.sh b/appstore/cookie-cloud/latest/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/cookie-cloud/latest/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/cookie-cloud/latest/scripts/uninstall.sh b/appstore/cookie-cloud/latest/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/cookie-cloud/latest/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/cookie-cloud/latest/scripts/upgrade.sh b/appstore/cookie-cloud/latest/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/cookie-cloud/latest/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/cookie-cloud/logo.png b/appstore/cookie-cloud/logo.png new file mode 100644 index 00000000..00c7408c Binary files /dev/null and b/appstore/cookie-cloud/logo.png differ diff --git a/appstore/deeplx/0.9.8.3/.env b/appstore/deeplx/0.9.8.3/.env new file mode 100644 index 00000000..481ea76a --- /dev/null +++ b/appstore/deeplx/0.9.8.3/.env @@ -0,0 +1,15 @@ +# API 端口 [必填] +PANEL_APP_PORT_HTTP=1188 + +# 访问令牌以保护您的 API +TOKEN= + +# DeepL官方提供的API Auth Key +AUTHKEY= + +# DeepL Pro 帐户 dl_session cookie +DL_SESSION= + +# http代理服务器地址 +PROXY= + diff --git a/appstore/deeplx/0.9.8.3/data.yml b/appstore/deeplx/0.9.8.3/data.yml new file mode 100644 index 00000000..da742d36 --- /dev/null +++ b/appstore/deeplx/0.9.8.3/data.yml @@ -0,0 +1,39 @@ +additionalProperties: + formFields: + - default: 1188 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: API 端口 + labelEn: API Port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: TOKEN + labelZh: 访问令牌以保护您的 API + labelEn: Access Token to protect your API + required: false + type: text + - default: "" + edit: true + envKey: AUTHKEY + labelZh: DeepL官方提供的API Auth Key + labelEn: Official API Auth Key provided by DeepL + required: false + type: text + - default: "" + edit: true + envKey: DL_SESSION + labelZh: DeepL Pro 帐户 dl_session cookie + labelEn: DeepL Pro account dl_session cookie + required: false + type: text + - default: "" + edit: true + envKey: PROXY + labelZh: http代理服务器地址 + labelEn: http proxy server address + required: false + rule: paramExtUrl + type: text diff --git a/appstore/deeplx/0.9.8.3/docker-compose.yml b/appstore/deeplx/0.9.8.3/docker-compose.yml new file mode 100644 index 00000000..2c1edc52 --- /dev/null +++ b/appstore/deeplx/0.9.8.3/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + deeplx: + container_name: deeplx + env_file: + - ./envs/global.env + - .env + environment: + - PORT=1188 + image: qyg2297248353/deeplx:v0.9.8.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:1188 + restart: always diff --git a/appstore/deeplx/0.9.8.3/envs/default.env b/appstore/deeplx/0.9.8.3/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/deeplx/0.9.8.3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/deeplx/0.9.8.3/envs/global.env b/appstore/deeplx/0.9.8.3/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/deeplx/0.9.8.3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/deeplx/0.9.8.3/scripts/init.sh b/appstore/deeplx/0.9.8.3/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/deeplx/0.9.8.3/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/deeplx/0.9.8.3/scripts/uninstall.sh b/appstore/deeplx/0.9.8.3/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/deeplx/0.9.8.3/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/deeplx/0.9.8.3/scripts/upgrade.sh b/appstore/deeplx/0.9.8.3/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/deeplx/0.9.8.3/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/deeplx/README.md b/appstore/deeplx/README.md new file mode 100644 index 00000000..01a62fe9 --- /dev/null +++ b/appstore/deeplx/README.md @@ -0,0 +1,121 @@ +# DeepLX + +强大的 DeepL 翻译 API + +![DeepLX](https://file.lifebus.top/imgs/deeplx_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +DeepLX 最初由 zu1k 命名并发布,尽管 zu1k 此后已停止维护它并删除了相关存储库。 + +感谢zu1k的贡献。 + +这是zu1k设计的DeepLX Docker镜像的备份,没有任何修改。 + +## 安装说明 + +### http代理服务器地址 + +> 基本格式 + +```shell +# 无鉴权代理 +http://127.0.0.1:7890 +# 有鉴权代理 +http://:@127.0.0.1:7890 +``` + +### 访问令牌以保护您的 API + +> 请注意,如果您不使用访问令牌,您的 API 可能会被滥用。 + +接口调用时,您可以使用 `X-Access-Token` 请求头来传递访问令牌。 + +### DeepL官方提供的API Auth Key + +开通DeepL API后,您将获得一个API Auth Key,您可以使用它来访问DeepL API。 + +### DeepL Pro 帐户 dl_session cookie + +如果您有DeepL Pro帐户,您可以使用 `dl_session` cookie 来访问DeepL API。 + +## 接口简介 + +### 免费端点 + +模拟DeepL iOS客户端发起翻译请求。无限制,但在一定时间内频繁请求会导致429错误。 + +接口:`/translate` +请求方式:POST +请求头: + +| Header | Description | Value | +|:----------------|:--------------------------------------|:---------------------------| +| `Content-Type` | The content type of the request body. | `application/json` | +| `Authorization` | The access token to protect your API. | `Bearer your_access_token` | + +> 如果无法使用 `Authorization` 请求头,您可以使用 `URL Params` 传递 `Authorization`。 +> +> 例如:`/translate?token=your_access_token` + +请求体: + +| 参数名 | 字段类型 | 描述 | 是否必须 | +|:--------------|:---------|:--------|:-------| +| `text` | `string` | 待翻译字段。 | `true` | +| `source_lang` | `string` | 源语言代码 | `true` | +| `target_lang` | `string` | 目标语言代码。 | `true` | + +请求体 JSON 示例: + +```json +{ + "text": "你听说过这个吗?", + "source_lang": "ZH", + "target_lang": "EN" +} +``` + +响应体: + +```json +{ + "alternatives": [ + "Did you hear about this?", + "You've heard about this?", + "You've heard of this?" + ], + "code": 200, + "data": "Have you heard about this?", + "id": 8356681003, + "method": "Free", + "source_lang": "ZH", + "target_lang": "EN" +} +``` + +### 专业端点 + +模拟 DeepL 专业版账户发起翻译请求。无限制,可有效避免 429 问题,但需要提供专业账户的 dl_session 参数,否则无法使用。 + +接口:`/v1/translate` +请求方式:POST + +> 其他参数与免费端点相同。 + +### 官方端点 + +模拟 DeepL 官方 API 发起翻译请求。无限制,但在一定时间内频繁请求将导致 429 错误。 + +接口:`/v2/translate` +请求方式:POST + +> 其他参数与免费端点相同。 +> +> 更多官方API配置请参考 [DeepL 官方文档](https://developers.deepl.com/docs/api-reference/translate) + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/deeplx/data.yml b/appstore/deeplx/data.yml new file mode 100644 index 00000000..a2e0b8a1 --- /dev/null +++ b/appstore/deeplx/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: deeplx + name: DeepLX + tags: + - Tool + - Middleware + - Local + shortDescZh: DeepL 免费API + shortDescEn: DeepL Free API + type: tool + crossVersionUpdate: true + limit: 0 + website: https://www.deepl.com/ + github: https://github.com/OwO-Network/DeepLX + document: https://deeplx.owo.network/ diff --git a/appstore/deeplx/logo.png b/appstore/deeplx/logo.png new file mode 100644 index 00000000..3314de2b Binary files /dev/null and b/appstore/deeplx/logo.png differ diff --git a/appstore/dockge/1.4.2/.env b/appstore/dockge/1.4.2/.env new file mode 100644 index 00000000..226dbf45 --- /dev/null +++ b/appstore/dockge/1.4.2/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +DOCKGE_ROOT_PATH=/home/dockge + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5001 + diff --git a/appstore/dockge/1.4.2/data.yml b/appstore/dockge/1.4.2/data.yml new file mode 100644 index 00000000..368664a9 --- /dev/null +++ b/appstore/dockge/1.4.2/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: "/home/dockge" + edit: true + envKey: DOCKGE_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 5001 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number diff --git a/appstore/dockge/1.4.2/docker-compose.yml b/appstore/dockge/1.4.2/docker-compose.yml new file mode 100644 index 00000000..7256cb6f --- /dev/null +++ b/appstore/dockge/1.4.2/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true +services: + dockge: + container_name: dockge + env_file: + - ./envs/global.env + - .env + environment: + - DOCKGE_STACKS_DIR=/opt/dockge/stacks + image: louislam/dockge:1.4.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5001 + restart: always + volumes: + - ${DOCKGE_ROOT_PATH}/data:/app/data + - ${DOCKGE_ROOT_PATH}/stacks:/opt/dockge/stacks + - /var/run/docker.sock:/var/run/docker.sock diff --git a/appstore/dockge/1.4.2/envs/default.env b/appstore/dockge/1.4.2/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/dockge/1.4.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/dockge/1.4.2/envs/global.env b/appstore/dockge/1.4.2/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/dockge/1.4.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/dockge/1.4.2/scripts/init.sh b/appstore/dockge/1.4.2/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/dockge/1.4.2/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/dockge/1.4.2/scripts/uninstall.sh b/appstore/dockge/1.4.2/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/dockge/1.4.2/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/dockge/1.4.2/scripts/upgrade.sh b/appstore/dockge/1.4.2/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/dockge/1.4.2/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/dockge/README.md b/appstore/dockge/README.md new file mode 100644 index 00000000..e5594a3b --- /dev/null +++ b/appstore/dockge/README.md @@ -0,0 +1,25 @@ +# Dockge + +一个花哨、易用、反应灵敏的自托管 docker compose.yaml 堆栈型管理器。 + +![Dockge](https://file.lifebus.top/imgs/dockge_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 🧑‍💼 管理您的 compose.yaml 文件 + + 创建/编辑/启动/停止/重新启动/删除 + + 更新 Docker 镜像 ++ ⌨️ compose.yaml 的交互式编辑器 ++ 🦦 交互式网络终端 ++ 🕷️ (1.4.0 🆕) 多代理支持 - 您可以在一个界面中管理来自不同 Docker 主机的多个堆栈 ++ 🏪 将 docker run ... 命令转换为 compose.yaml ++ 📙 基于文件的结构 - Dockge 不会劫持您的撰写文件,它们会像往常一样存储在您的驱动器上。您可以使用普通的 docker compose + 命令与它们交互 ++ 🚄 反应式 - 一切都是响应式的。进度(Pull/Up/Down)和终端输出是实时的 ++ 🐣 易于使用且精美的 UI - 如果您喜欢 Uptime Kuma 的 UI/UX,您也会喜欢这个 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/dockge/data.yml b/appstore/dockge/data.yml new file mode 100644 index 00000000..b906bb5b --- /dev/null +++ b/appstore/dockge/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: dockge + name: Dockge + tags: + - WebSite + - Middleware + - Tool + - Local + shortDescZh: 面向堆栈的管理器 + shortDescEn: Stack-oriented manager + type: website + crossVersionUpdate: true + limit: 0 + website: https://dockge.kuma.pet/ + github: https://github.com/louislam/dockge/ + document: https://github.com/louislam/dockge/wiki/ diff --git a/appstore/dockge/logo.png b/appstore/dockge/logo.png new file mode 100644 index 00000000..a58944c2 Binary files /dev/null and b/appstore/dockge/logo.png differ diff --git a/appstore/dozzle/8.8.2/.env b/appstore/dozzle/8.8.2/.env new file mode 100644 index 00000000..b4dd4db5 --- /dev/null +++ b/appstore/dozzle/8.8.2/.env @@ -0,0 +1,3 @@ +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + diff --git a/appstore/dozzle/8.8.2/data.yml b/appstore/dozzle/8.8.2/data.yml new file mode 100644 index 00000000..482f7b27 --- /dev/null +++ b/appstore/dozzle/8.8.2/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number diff --git a/appstore/dozzle/8.8.2/docker-compose.yml b/appstore/dozzle/8.8.2/docker-compose.yml new file mode 100644 index 00000000..bdead699 --- /dev/null +++ b/appstore/dozzle/8.8.2/docker-compose.yml @@ -0,0 +1,32 @@ +networks: + 1panel-network: + external: true +services: + dozzle: + container_name: dozzle + env_file: + - ./envs/global.env + - .env + environment: + - DOZZLE_ADDR=:8080 + - DOZZLE_BASE=/ + - DOZZLE_LEVEL=info + healthcheck: + interval: 3s + retries: 5 + start_period: 30s + test: + - CMD + - /dozzle + - healthcheck + timeout: 30s + image: amir20/dozzle:v8.8.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - /var/run/docker.sock:/var/run/docker.sock diff --git a/appstore/dozzle/8.8.2/envs/default.env b/appstore/dozzle/8.8.2/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/dozzle/8.8.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/dozzle/8.8.2/envs/global.env b/appstore/dozzle/8.8.2/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/dozzle/8.8.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/dozzle/8.8.2/scripts/init.sh b/appstore/dozzle/8.8.2/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/dozzle/8.8.2/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/dozzle/8.8.2/scripts/uninstall.sh b/appstore/dozzle/8.8.2/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/dozzle/8.8.2/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/dozzle/8.8.2/scripts/upgrade.sh b/appstore/dozzle/8.8.2/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/dozzle/8.8.2/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/dozzle/README.md b/appstore/dozzle/README.md new file mode 100644 index 00000000..f5b79137 --- /dev/null +++ b/appstore/dozzle/README.md @@ -0,0 +1,33 @@ +# Dozzle + +Dozzle是一个轻量级的小应用程序,有一个基于web的界面来监控Docker日志。它不存储任何日志文件。它仅用于实时监视容器日志。 + +![Dozzle](https://file.lifebus.top/imgs/dozzle_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + +🔍 智能模糊搜索容器名称 + +🔦 使用正则表达式,搜索日志 + +📊 使用 SQL 查询搜索日志 + +🏎 小的内存占用 + +📓 多日志查看的分屏 + +🈷️ 实时统计,包括内存和 CPU 使用情况 + +🚨 多用户身份验证,支持代理转发授权 + +🐳 集群模式支持 + +🛜 监控多个 Docker 主机的代理模式 + +🌙 深色模式 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/dozzle/data.yml b/appstore/dozzle/data.yml new file mode 100644 index 00000000..fedd6854 --- /dev/null +++ b/appstore/dozzle/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: dozzle + name: Dozzle + tags: + - WebSite + - Middleware + - Tool + - Local + shortDescZh: 一个轻量级的小应用程序,有一个基于web的界面来监控Docker日志 + shortDescEn: web-based interface to monitor Docker logs + type: website + crossVersionUpdate: true + recommend: 0 + website: https://dozzle.dev/ + github: https://github.com/amir20/dozzle/ + document: https://dozzle.dev/ diff --git a/appstore/dozzle/logo.png b/appstore/dozzle/logo.png new file mode 100644 index 00000000..e21fa789 Binary files /dev/null and b/appstore/dozzle/logo.png differ diff --git a/appstore/dpanel-lite/1.3.0/.env b/appstore/dpanel-lite/1.3.0/.env new file mode 100644 index 00000000..0ea1a574 --- /dev/null +++ b/appstore/dpanel-lite/1.3.0/.env @@ -0,0 +1,12 @@ +# 数据持久化路径 [必填] +DPANEL_ROOT_PATH=/home/dpanel + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 管理员 用户名 [必填] +INSTALL_USERNAME=admin + +# 管理员 密码 [必填] +INSTALL_PASSWORD=admin + diff --git a/appstore/dpanel-lite/1.3.0/data.yml b/appstore/dpanel-lite/1.3.0/data.yml new file mode 100644 index 00000000..5950bd50 --- /dev/null +++ b/appstore/dpanel-lite/1.3.0/data.yml @@ -0,0 +1,31 @@ +additionalProperties: + formFields: + - default: "/home/dpanel" + edit: true + envKey: DPANEL_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "admin" + edit: true + envKey: INSTALL_USERNAME + labelZh: 管理员 用户名 + labelEn: Admin Username + required: true + type: text + - default: "admin" + edit: true + envKey: INSTALL_PASSWORD + labelZh: 管理员 密码 + labelEn: Admin Password + required: true + type: text diff --git a/appstore/dpanel-lite/1.3.0/docker-compose.yml b/appstore/dpanel-lite/1.3.0/docker-compose.yml new file mode 100644 index 00000000..4465fbb5 --- /dev/null +++ b/appstore/dpanel-lite/1.3.0/docker-compose.yml @@ -0,0 +1,33 @@ +networks: + 1panel-network: + external: true +services: + dpanel: + container_name: dpanel-lite + env_file: + - ./envs/global.env + - .env + environment: + - APP_NAME=${CONTAINER_NAME} + image: dpanel/dpanel:1.3.0-lite + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${DPANEL_ROOT_PATH}/data:/dpanel + - ${DPANEL_ROOT_PATH}/compose:/dpanel/compose + - /var/run/docker.sock:/var/run/docker.sock + dpanel-plugin-explorer: + command: + - sh + - -c + - tail -f /dev/null + container_name: dpanel-plugin-explorer + image: alpine:latest + pid: host + privileged: true + restart: unless-stopped diff --git a/appstore/dpanel-lite/1.3.0/envs/default.env b/appstore/dpanel-lite/1.3.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/dpanel-lite/1.3.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/dpanel-lite/1.3.0/envs/global.env b/appstore/dpanel-lite/1.3.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/dpanel-lite/1.3.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/dpanel-lite/1.3.0/scripts/init.sh b/appstore/dpanel-lite/1.3.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/dpanel-lite/1.3.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/dpanel-lite/1.3.0/scripts/uninstall.sh b/appstore/dpanel-lite/1.3.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/dpanel-lite/1.3.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/dpanel-lite/1.3.0/scripts/upgrade.sh b/appstore/dpanel-lite/1.3.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/dpanel-lite/1.3.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/dpanel-lite/README.md b/appstore/dpanel-lite/README.md new file mode 100644 index 00000000..053ceece --- /dev/null +++ b/appstore/dpanel-lite/README.md @@ -0,0 +1,33 @@ +# DPanel + +Docker可视化管理面板 + +![Dockge](https://file.lifebus.top/imgs/dpanel_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Docker 可视化面板系统,提供完善的 docker 管理功能。 + +该应用为 轻量版 DPanel,不包含域名管理、证书管理等功能。 + +## 安装说明 + +
+
+ ⚠️ +
+ 警告
+ 该应用申请使用 `特权模式`, 将允许应用在容器内部执行特权操作,如挂载宿主机目录、访问宿主机设备等。 +
+
+
+ +> 默认用户名:`admin` +> +> 默认密码:`admin` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/dpanel-lite/data.yml b/appstore/dpanel-lite/data.yml new file mode 100644 index 00000000..7e5d40ea --- /dev/null +++ b/appstore/dpanel-lite/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: dpanel-lite + name: DPanel Lite + tags: + - WebSite + - Tool + - Local + shortDescZh: Docker可视化管理面板 + shortDescEn: Docker visual management panel + type: website + crossVersionUpdate: true + limit: 0 + website: https://dpanel.cc/ + github: https://github.com/donknap/dpanel/ + document: https://dpanel.cc/ diff --git a/appstore/dpanel-lite/logo.png b/appstore/dpanel-lite/logo.png new file mode 100644 index 00000000..ac30ad10 Binary files /dev/null and b/appstore/dpanel-lite/logo.png differ diff --git a/appstore/dpanel/1.3.0/.env b/appstore/dpanel/1.3.0/.env new file mode 100644 index 00000000..90204b3c --- /dev/null +++ b/appstore/dpanel/1.3.0/.env @@ -0,0 +1,18 @@ +# 数据持久化路径 [必填] +DPANEL_ROOT_PATH=/home/dpanel + +# WebUI 端口 [必填] +PANEL_APP_PORT_ADMIN=8080 + +# HTTP 服务端口 [必填] +PANEL_APP_PORT_HTTP=80 + +# HTTPS 服务端口 [必填] +PANEL_APP_PORT_HTTPS=443 + +# 管理员 用户名 [必填] +INSTALL_USERNAME=admin + +# 管理员 密码 [必填] +INSTALL_PASSWORD=admin + diff --git a/appstore/dpanel/1.3.0/data.yml b/appstore/dpanel/1.3.0/data.yml new file mode 100644 index 00000000..01bfbe8a --- /dev/null +++ b/appstore/dpanel/1.3.0/data.yml @@ -0,0 +1,47 @@ +additionalProperties: + formFields: + - default: "/home/dpanel" + edit: true + envKey: DPANEL_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_ADMIN + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 80 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: HTTP 服务端口 + labelEn: HTTP service port + required: true + rule: paramPort + type: number + - default: 443 + edit: true + envKey: PANEL_APP_PORT_HTTPS + labelZh: HTTPS 服务端口 + labelEn: HTTPS service port + required: true + rule: paramPort + type: number + - default: "admin" + edit: true + envKey: INSTALL_USERNAME + labelZh: 管理员 用户名 + labelEn: Admin Username + required: true + type: text + - default: "admin" + edit: true + envKey: INSTALL_PASSWORD + labelZh: 管理员 密码 + labelEn: Admin Password + required: true + type: text diff --git a/appstore/dpanel/1.3.0/docker-compose.yml b/appstore/dpanel/1.3.0/docker-compose.yml new file mode 100644 index 00000000..dd03bd36 --- /dev/null +++ b/appstore/dpanel/1.3.0/docker-compose.yml @@ -0,0 +1,35 @@ +networks: + 1panel-network: + external: true +services: + dpanel: + container_name: dpanel + env_file: + - ./envs/global.env + - .env + environment: + - APP_NAME=${CONTAINER_NAME} + image: dpanel/dpanel:1.3.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_ADMIN}:8080 + - ${PANEL_APP_PORT_HTTP}:80 + - ${PANEL_APP_PORT_HTTPS}:443 + restart: always + volumes: + - ${DPANEL_ROOT_PATH}/data:/dpanel + - ${DPANEL_ROOT_PATH}/compose:/dpanel/compose + - /var/run/docker.sock:/var/run/docker.sock + dpanel-plugin-explorer: + command: + - sh + - -c + - tail -f /dev/null + container_name: dpanel-plugin-explorer + image: alpine:latest + pid: host + privileged: true + restart: unless-stopped diff --git a/appstore/dpanel/1.3.0/envs/default.env b/appstore/dpanel/1.3.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/dpanel/1.3.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/dpanel/1.3.0/envs/global.env b/appstore/dpanel/1.3.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/dpanel/1.3.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/dpanel/1.3.0/scripts/init.sh b/appstore/dpanel/1.3.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/dpanel/1.3.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/dpanel/1.3.0/scripts/uninstall.sh b/appstore/dpanel/1.3.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/dpanel/1.3.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/dpanel/1.3.0/scripts/upgrade.sh b/appstore/dpanel/1.3.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/dpanel/1.3.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/dpanel/README.md b/appstore/dpanel/README.md new file mode 100644 index 00000000..1901dd68 --- /dev/null +++ b/appstore/dpanel/README.md @@ -0,0 +1,31 @@ +# DPanel + +Docker可视化管理面板 + +![Dockge](https://file.lifebus.top/imgs/dpanel_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Docker 可视化面板系统,提供完善的 docker 管理功能。 + +## 安装说明 + +
+
+ ⚠️ +
+ 警告
+ 该应用申请使用 `特权模式`, 将允许应用在容器内部执行特权操作,如挂载宿主机目录、访问宿主机设备等。 +
+
+
+ +> 默认用户名:`admin` +> +> 默认密码:`admin` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/dpanel/data.yml b/appstore/dpanel/data.yml new file mode 100644 index 00000000..cd2dcd3c --- /dev/null +++ b/appstore/dpanel/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: dpanel + name: DPanel + tags: + - WebSite + - Tool + - Local + shortDescZh: Docker可视化管理面板 + shortDescEn: Docker visual management panel + type: website + crossVersionUpdate: true + limit: 0 + website: https://dpanel.cc/ + github: https://github.com/donknap/dpanel/ + document: https://dpanel.cc/ diff --git a/appstore/dpanel/logo.png b/appstore/dpanel/logo.png new file mode 100644 index 00000000..ac30ad10 Binary files /dev/null and b/appstore/dpanel/logo.png differ diff --git a/appstore/dujiaoka/2.0.9/.env b/appstore/dujiaoka/2.0.9/.env new file mode 100644 index 00000000..e3922188 --- /dev/null +++ b/appstore/dujiaoka/2.0.9/.env @@ -0,0 +1,30 @@ +# 数据持久化路径 [必填] +DUJIAOKA_ROOT_PATH=/home/dujiaoka + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# API 端口 [必填] +PANEL_APP_PORT_API=9000 + +# 网站名称 [必填] +APP_NAME=独角数卡 + +# 应用密钥 [必填] +APP_KEY=base64:sKDhhXG+bHhlnH8hAVX2MbETkYABNhWNXALo0FU8WH0= + +# 网站域名 [必填] +APP_URL=http://127.0.0.1:8080 + +# 后台路径 [必填] +ADMIN_ROUTE_PREFIX=/admin + +# 异步消息队列模式 [必填] +QUEUE_CONNECTION=redis + +# 缓存驱动 [必填] +CACHE_DRIVER=redis + +# 启用后台 HTTPS [必填] +ADMIN_HTTPS=false + diff --git a/appstore/dujiaoka/2.0.9/data.yml b/appstore/dujiaoka/2.0.9/data.yml new file mode 100644 index 00000000..7e2f2915 --- /dev/null +++ b/appstore/dujiaoka/2.0.9/data.yml @@ -0,0 +1,89 @@ +additionalProperties: + formFields: + - default: "/home/dujiaoka" + edit: true + envKey: DUJIAOKA_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 9000 + edit: true + envKey: PANEL_APP_PORT_API + labelZh: API 端口 + labelEn: API port + required: true + rule: paramPort + type: number + - default: "独角数卡" + edit: true + envKey: APP_NAME + labelZh: 网站名称 + labelEn: Website name + required: true + type: text + - default: "base64:sKDhhXG+bHhlnH8hAVX2MbETkYABNhWNXALo0FU8WH0=" + edit: true + envKey: APP_KEY + labelZh: 应用密钥 + labelEn: Application key + required: true + type: text + - default: "http://127.0.0.1:8080" + edit: true + envKey: APP_URL + labelZh: 网站域名 + labelEn: Website domain + required: true + type: text + - default: "/admin" + edit: true + envKey: ADMIN_ROUTE_PREFIX + labelZh: 后台路径 + labelEn: Admin path + required: true + type: text + - default: "redis" + edit: true + envKey: QUEUE_CONNECTION + labelZh: 异步消息队列模式 + labelEn: Asynchronous message queue mode + required: true + type: select + values: + - label: 异步模式 (Redis) + value: "redis" + - label: 同步模式 + value: "sync" + - default: "redis" + edit: true + envKey: CACHE_DRIVER + labelZh: 缓存驱动 + labelEn: Cache driver + required: true + type: select + values: + - label: Redis 缓存 + value: "redis" + - label: 文件缓存 + value: "file" + - default: "false" + edit: true + envKey: ADMIN_HTTPS + labelZh: 启用后台 HTTPS + labelEn: Enable admin HTTPS + required: true + type: select + values: + - label: 启用 + value: "true" + - label: 禁用 + value: "false" diff --git a/appstore/dujiaoka/2.0.9/docker-compose.yml b/appstore/dujiaoka/2.0.9/docker-compose.yml new file mode 100644 index 00000000..a42b6fe1 --- /dev/null +++ b/appstore/dujiaoka/2.0.9/docker-compose.yml @@ -0,0 +1,31 @@ +networks: + 1panel-network: + external: true +services: + dujiaoka: + container_name: dujiaoka + env_file: + - ./envs/global.env + - .env + environment: + - WEB_DOCUMENT_ROOT=/app/public + - DUJIAO_ADMIN_LANGUAGE=zh_CN + - BROADCAST_DRIVER=log + - SESSION_DRIVER=file + - SESSION_LIFETIME=120 + - LOG_CHANNEL=stack + - APP_DEBUG=false + - APP_ENV=local + - DB_CONNECTION=mysql + image: qyg2297248353/dujiaoka:v2.0.9 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + - ${PANEL_APP_PORT_API}:9000 + restart: always + tty: true + volumes: + - ${DUJIAOKA_ROOT_PATH}/app:/app diff --git a/appstore/dujiaoka/2.0.9/envs/default.env b/appstore/dujiaoka/2.0.9/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/dujiaoka/2.0.9/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/dujiaoka/2.0.9/envs/global.env b/appstore/dujiaoka/2.0.9/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/dujiaoka/2.0.9/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/dujiaoka/2.0.9/scripts/init.sh b/appstore/dujiaoka/2.0.9/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/dujiaoka/2.0.9/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/dujiaoka/2.0.9/scripts/uninstall.sh b/appstore/dujiaoka/2.0.9/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/dujiaoka/2.0.9/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/dujiaoka/2.0.9/scripts/upgrade.sh b/appstore/dujiaoka/2.0.9/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/dujiaoka/2.0.9/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/dujiaoka/README.md b/appstore/dujiaoka/README.md new file mode 100644 index 00000000..9538c9fd --- /dev/null +++ b/appstore/dujiaoka/README.md @@ -0,0 +1,48 @@ +# 独角数卡 + +🦄独角数卡(自动售货系统)-开源站长自动化售货解决方案、高效、稳定、快速!🚀🚀🎉🎉 + +![异次元店铺系统](https://file.lifebus.top/imgs/dujiaoka_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 接口集成 + ++ 支付宝当面付 ++ 支付宝PC支付 ++ 支付宝手机支付 ++ payjs微信扫码. ++ Paysapi(支付宝/微信). ++ 码支付(QQ/支付宝/微信) ++ 微信企业扫码支付 ++ Paypal支付(默认美元) ++ V免签支付 ++ 全网易支付支持(通用彩虹版) ++ stripe + +## 环境说明 + ++ MySQL 5.7+ ++ Redis 支持(可选) + +## 安装说明 + +> 后台默认路径 `/admin` +> +> 默认管理员账号 admin +> +> 默认管理员密码 admin + +### `应用密钥` 配置 + +该密钥由固定头部`base64:`加上`32位字符串的Base64编码`组成,例如:`base64:xxxxx`。 + +使用 `openssl` 生成密钥: + +```bash +openssl rand -base64 32 +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/dujiaoka/data.yml b/appstore/dujiaoka/data.yml new file mode 100644 index 00000000..2af5fb68 --- /dev/null +++ b/appstore/dujiaoka/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: dujiaoka + name: 独角数卡 + tags: + - WebSite + - Tool + - Local + shortDescZh: 独角数卡(自动售货系统)-开源站长自动化售货解决方案、高效、稳定、快速 + shortDescEn: Dujiaoka (Automatic Vending System) - Open source webmaster automatic vending solution, efficient, stable, fast + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/assimon/dujiaoka/ + github: https://github.com/assimon/dujiaoka/ + document: https://github.com/assimon/dujiaoka/ diff --git a/appstore/dujiaoka/logo.png b/appstore/dujiaoka/logo.png new file mode 100644 index 00000000..15ef52ae Binary files /dev/null and b/appstore/dujiaoka/logo.png differ diff --git a/appstore/elastic-elasticsearch/8.16.1/.env b/appstore/elastic-elasticsearch/8.16.1/.env new file mode 100644 index 00000000..f7e98d7e --- /dev/null +++ b/appstore/elastic-elasticsearch/8.16.1/.env @@ -0,0 +1,24 @@ +# 数据持久化路径 [必填] +ELASTICSEARCH_ROOT_PATH=/home/elasticsearch + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTPS=9200 + +# 集群端口 [必填] +PANEL_APP_PORT_CLUSTER=9300 + +# Elasticsearch 密码 (elastic) [必填] +ELASTIC_PASSWORD= + +# Kibana 密码 (kibana_system) +KIBANA_PASSWORD= + +# 集群名称 [必填] +ES_SETTING_CLUSTER_NAME=elasticsearch + +# 节点名称 [必填] +ES_SETTING_NODE_NAME=es-node + +# Java 启动参数 (可选) +ES_JAVA_OPTS=-Xms1g -Xmx1g + diff --git a/appstore/elastic-elasticsearch/8.16.1/data.yml b/appstore/elastic-elasticsearch/8.16.1/data.yml new file mode 100644 index 00000000..b627b241 --- /dev/null +++ b/appstore/elastic-elasticsearch/8.16.1/data.yml @@ -0,0 +1,60 @@ +additionalProperties: + formFields: + - default: "/home/elasticsearch" + edit: true + envKey: ELASTICSEARCH_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 9200 + edit: true + envKey: PANEL_APP_PORT_HTTPS + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 9300 + edit: true + envKey: PANEL_APP_PORT_CLUSTER + labelZh: 集群端口 + labelEn: Cluster port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: ELASTIC_PASSWORD + labelZh: Elasticsearch 密码 (elastic) + labelEn: Elasticsearch password (elastic) + required: true + type: password + - default: "" + edit: true + envKey: KIBANA_PASSWORD + labelZh: Kibana 密码 (kibana_system) + labelEn: Kibana password (kibana_system) + required: false + type: password + - default: "elasticsearch" + edit: true + envKey: ES_SETTING_CLUSTER_NAME + labelZh: 集群名称 + labelEn: Cluster name + required: true + type: text + - default: "es-node" + edit: true + envKey: ES_SETTING_NODE_NAME + labelZh: 节点名称 + labelEn: Node name + required: true + type: text + - default: "-Xms1g -Xmx1g" + edit: true + envKey: ES_JAVA_OPTS + labelZh: Java 启动参数 (可选) + labelEn: Java startup parameters (optional) + required: false + type: text diff --git a/appstore/elastic-elasticsearch/8.16.1/docker-compose.yml b/appstore/elastic-elasticsearch/8.16.1/docker-compose.yml new file mode 100644 index 00000000..5c4b46be --- /dev/null +++ b/appstore/elastic-elasticsearch/8.16.1/docker-compose.yml @@ -0,0 +1,34 @@ +networks: + 1panel-network: + external: true +services: + elasticsearch: + container_name: elastic-elasticsearch + env_file: + - ./envs/global.env + - .env + environment: + - LICENSE=basic + - ES_SETTING_BOOTSTRAP_MEMORY__LOCK=true + - ES_SETTING_PATH_REPO=/usr/share/elasticsearch/backup + image: elasticsearch:8.16.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTPS}:9200 + - ${PANEL_APP_PORT_CLUSTER}:9300 + restart: always + tty: true + ulimits: + memlock: + hard: -1 + soft: -1 + nofile: + hard: 65536 + soft: 65536 + volumes: + - ${ELASTICSEARCH_ROOT_PATH}/data:/usr/share/elasticsearch/data + - ${ELASTICSEARCH_ROOT_PATH}/backup:/usr/share/elasticsearch/backup + - ${ELASTICSEARCH_ROOT_PATH}/plugins:/usr/share/elasticsearch/plugins diff --git a/appstore/elastic-elasticsearch/8.16.1/envs/default.env b/appstore/elastic-elasticsearch/8.16.1/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/elastic-elasticsearch/8.16.1/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/elastic-elasticsearch/8.16.1/envs/global.env b/appstore/elastic-elasticsearch/8.16.1/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/elastic-elasticsearch/8.16.1/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/elastic-elasticsearch/8.16.1/scripts/init.sh b/appstore/elastic-elasticsearch/8.16.1/scripts/init.sh new file mode 100644 index 00000000..33a7b7f4 --- /dev/null +++ b/appstore/elastic-elasticsearch/8.16.1/scripts/init.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + mkdir -p $ELASTICSEARCH_ROOT_PATH + mkdir -p "$ELASTICSEARCH_ROOT_PATH/data" + mkdir -p "$ELASTICSEARCH_ROOT_PATH/backup" + mkdir -p "$ELASTICSEARCH_ROOT_PATH/plugins" + + chown -R 1000:1000 $ELASTICSEARCH_ROOT_PATH + + echo "Check Finish." +else + echo "Error: .env file not found." +fi diff --git a/appstore/elastic-elasticsearch/8.16.1/scripts/uninstall.sh b/appstore/elastic-elasticsearch/8.16.1/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/elastic-elasticsearch/8.16.1/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/elastic-elasticsearch/8.16.1/scripts/upgrade.sh b/appstore/elastic-elasticsearch/8.16.1/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/elastic-elasticsearch/8.16.1/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/elastic-elasticsearch/README.md b/appstore/elastic-elasticsearch/README.md new file mode 100644 index 00000000..9fdbd936 --- /dev/null +++ b/appstore/elastic-elasticsearch/README.md @@ -0,0 +1,105 @@ +# Elasticsearch + +搜索并分析您的数据 + + + +Elasticsearch 是 Elastic Stack 核心的分布式搜索和分析引擎。 Logstash 和 Beats 有助于收集、聚合和丰富您的数据并将其存储在 +Elasticsearch 中。 +Kibana 使您能够以交互方式探索、可视化和分享对数据的见解,并管理和监控堆栈。 Elasticsearch 是索引、搜索和分析魔法发生的地方。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 安装说明 + +当前应用为主节点,仅首次部署有效。集群节点请使用 `Elasticsearch 节点` 应用。 + +### 宿主机配置 + ++ `vm.max_map_count` 配置 + +Elasticsearch 需要设置 `vm.max_map_count` 为至少 `262144`。可以通过以下命令设置: + +```sh +grep vm.max_map_count /etc/sysctl.conf + +# 如果输出为空,表示没有设置,需要手动添加 +vm.max_map_count=262144 +``` + +添加配置 + +```sh +# 临时生效 +sysctl -w vm.max_map_count=262144 + +# 永久生效 +echo "vm.max_map_count=262144" >>/etc/sysctl.conf +sysctl -p +``` + +### 集群主节点安装 + +> `集群名称` 配置 + +用于标识集群的名称。默认为 `elasticsearch-cluster`。 + +> `节点名称` 配置 + +用于标识节点的名称。默认为 `elasticsearch-node`。 + +> `Elasticsearch 密码 (elastic)` 配置 + +内置用户 `elastic` 的密码。默认情况下,密码是随机生成的。 + +> `Kibana 密码 (kibana_system)` 配置 + +内置用户 `kibana_system` 的密码。默认情况下,密码是随机生成的。 + +用于保护内置用户 `kibana_system` 的密码。默认情况下,密码是随机生成的。 + +> `Java 启动参数 (可选)` 配置 + +Java 启动参数。默认为空。 + +推荐参数:`-Xms1g -Xmx1g` + +小内存推荐参数:`-Xms512m -Xmx512m` + +## 快捷操作 + +> 重置密码 + +```sh +/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic +``` + +> 创建 `节点` 注册令牌 + +注册令牌的有效期为30分钟。 + +```sh +/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node +``` + +> 创建 `kibana` 注册令牌 + +注册令牌的有效期为30分钟。 + +```sh +/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana +``` + +> 导出证书 + +<容器名称> 为容器名称或容器 ID,可以通过 `docker ps` 命令查看。 + +导出 `http_ca.crt` 证书到当前目录 + +```sh +docker cp <容器名称>:/usr/share/elasticsearch/config/certs/http_ca.crt . +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/elastic-elasticsearch/data.yml b/appstore/elastic-elasticsearch/data.yml new file mode 100644 index 00000000..755ea581 --- /dev/null +++ b/appstore/elastic-elasticsearch/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: elastic-elasticsearch + name: Elasticsearch + tags: + - Database + - Middleware + - Local + shortDescZh: 分布式、RESTful 风格的搜索和数据分析引擎 + shortDescEn: Distributed, RESTful-style search and data analysis engine + type: runtime + crossVersionUpdate: true + limit: 0 + website: https://www.elastic.co/ + github: https://github.com/elastic/elasticsearch/ + document: https://www.elastic.co/docs/ diff --git a/appstore/elastic-elasticsearch/logo.png b/appstore/elastic-elasticsearch/logo.png new file mode 100644 index 00000000..06b4a258 Binary files /dev/null and b/appstore/elastic-elasticsearch/logo.png differ diff --git a/appstore/elastic-kibana/8.16.1/.env b/appstore/elastic-kibana/8.16.1/.env new file mode 100644 index 00000000..7436b5df --- /dev/null +++ b/appstore/elastic-kibana/8.16.1/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +KIBANA_ROOT_PATH=/home/kibana + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5601 + +# Elasticsearch 地址 [必填] +elasticsearch_hosts=https://127.0.0.1:9200 + diff --git a/appstore/elastic-kibana/8.16.1/data.yml b/appstore/elastic-kibana/8.16.1/data.yml new file mode 100644 index 00000000..4a6a5dd1 --- /dev/null +++ b/appstore/elastic-kibana/8.16.1/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: "/home/kibana" + edit: true + envKey: KIBANA_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 5601 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "https://127.0.0.1:9200" + edit: true + envKey: elasticsearch_hosts + labelZh: Elasticsearch 地址 + labelEn: Elasticsearch address + required: true + type: text diff --git a/appstore/elastic-kibana/8.16.1/docker-compose.yml b/appstore/elastic-kibana/8.16.1/docker-compose.yml new file mode 100644 index 00000000..33d33d8b --- /dev/null +++ b/appstore/elastic-kibana/8.16.1/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + kibana: + container_name: elastic-kibana + env_file: + - ./envs/global.env + - .env + environment: + - SERVER_NAME="kibana" + - SERVER_HOST="0.0.0.0" + - SERVER_PORT=5601 + - I18N_LOCALE="zh-CN" + - SERVER_SHUTDOWNTIMEOUT="5s" + - MONITORING_UI_CONTAINER_ELASTICSEARCH_ENABLED=true + image: kibana:8.16.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5601 + restart: always + volumes: + - ${KIBANA_ROOT_PATH}/data:/usr/share/kibana/data diff --git a/appstore/elastic-kibana/8.16.1/envs/default.env b/appstore/elastic-kibana/8.16.1/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/elastic-kibana/8.16.1/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/elastic-kibana/8.16.1/envs/global.env b/appstore/elastic-kibana/8.16.1/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/elastic-kibana/8.16.1/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/elastic-kibana/8.16.1/scripts/init.sh b/appstore/elastic-kibana/8.16.1/scripts/init.sh new file mode 100644 index 00000000..f68fbe6d --- /dev/null +++ b/appstore/elastic-kibana/8.16.1/scripts/init.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + mkdir -p $KIBANA_ROOT_PATH + mkdir -p "$KIBANA_ROOT_PATH/data" + + chown -R 1000:1000 $KIBANA_ROOT_PATH + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/elastic-kibana/8.16.1/scripts/uninstall.sh b/appstore/elastic-kibana/8.16.1/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/elastic-kibana/8.16.1/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/elastic-kibana/8.16.1/scripts/upgrade.sh b/appstore/elastic-kibana/8.16.1/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/elastic-kibana/8.16.1/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/elastic-kibana/README.md b/appstore/elastic-kibana/README.md new file mode 100644 index 00000000..b54d239e --- /dev/null +++ b/appstore/elastic-kibana/README.md @@ -0,0 +1,58 @@ +# Kibana + +Kibana 是一个用户界面,可让您可视化 Elasticsearch 数据并导航 Elastic Stack。通过本教程了解可视化数据的基础知识。 + +![Kibana](https://file.lifebus.top/imgs/kibana_cover.png) + +Kibana 适合管理员、分析师和业务用户。作为管理员,您的角色是管理 Elastic Stack,从创建部署到将 Elasticsearch 数据导入 +Kibana,然后管理数据。 +作为分析师,您希望发现数据中的见解、在仪表板上可视化您的数据并分享您的发现。作为业务用户,您希望查看现有仪表板并深入了解详细信息。 + +Kibana 适用于所有类型的数据。您的数据可以是结构化或非结构化文本、数字数据、时间序列数据、地理空间数据、日志、指标、安全事件等。无论您的数据是什么,Kibana +都可以帮助您发现模式和关系并可视化结果。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 搜索、观察和保护您的数据 + +从发现文档到分析日志再到查找安全漏洞,Kibana 是您访问这些功能及其他功能的门户。 + ++ 分析您的数据 + +搜索隐藏的见解,可视化您在图表、仪表、地图、图形等中发现的内容,并将它们组合在仪表板中。 + ++ 管理、监控和保护 Elastic Stack + +管理您的数据、监控 Elastic Stack 集群的运行状况并控制哪些用户可以访问哪些功能。 + +## 安装说明 + +> 首次安装 日志中获得初始化界面的地址,访问该地址进行初始化配置。 +> +> http://127.0.0.1:5601/?code=xxxxxx + +### 注册令牌 + +可通过以下方式获取注册令牌: + +在 `ElasticSearch` 容器中执行以下命令: + +```sh +cd /usr/share/elasticsearch/bin +./elasticsearch-create-enrollment-token -s kibana + +# 或 +/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana +``` + +### 登录账户 + +> 默认账户: `elastic` +> +> 密码: 自行查看 ElasticSearch 参数配置 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/elastic-kibana/data.yml b/appstore/elastic-kibana/data.yml new file mode 100644 index 00000000..f523cbf6 --- /dev/null +++ b/appstore/elastic-kibana/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: elastic-kibana + name: Kibana + tags: + - WebSite + - Middleware + - Tool + - Local + shortDescZh: 基于浏览器的 Elasticsearch 分析和搜索仪表盘 + shortDescEn: Browser-based Elasticsearch analytics and search dashboard + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.elastic.co/ + github: https://github.com/elastic/kibana/ + document: https://www.elastic.co/docs/ diff --git a/appstore/elastic-kibana/logo.png b/appstore/elastic-kibana/logo.png new file mode 100644 index 00000000..116cb930 Binary files /dev/null and b/appstore/elastic-kibana/logo.png differ diff --git a/appstore/element-web/1.11.86/.env b/appstore/element-web/1.11.86/.env new file mode 100644 index 00000000..beaf15dd --- /dev/null +++ b/appstore/element-web/1.11.86/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +ELEMENT_WEB_ROOT_PATH=/home/element-web + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 服务域名 +SYNAPSE_SERVER_NAME=riot.example.com + diff --git a/appstore/element-web/1.11.86/conf/config.sample.json b/appstore/element-web/1.11.86/conf/config.sample.json new file mode 100644 index 00000000..af170bfe --- /dev/null +++ b/appstore/element-web/1.11.86/conf/config.sample.json @@ -0,0 +1,53 @@ +{ + "default_server_config": { + "m.homeserver": { + "base_url": "https://matrix-client.matrix.org", + "server_name": "matrix.org" + }, + "m.identity_server": { + "base_url": "https://vector.im" + } + }, + "disable_custom_urls": false, + "disable_guests": false, + "disable_login_language_selector": false, + "disable_3pid_login": false, + "force_verification": false, + "brand": "Element", + "integrations_ui_url": "https://scalar.vector.im/", + "integrations_rest_url": "https://scalar.vector.im/api", + "integrations_widgets_urls": [ + "https://scalar.vector.im/_matrix/integrations/v1", + "https://scalar.vector.im/api", + "https://scalar-staging.vector.im/_matrix/integrations/v1", + "https://scalar-staging.vector.im/api", + "https://scalar-staging.riot.im/scalar/api" + ], + "default_widget_container_height": 280, + "default_country_code": "GB", + "show_labs_settings": false, + "features": {}, + "default_federate": true, + "default_theme": "light", + "room_directory": { + "servers": [ + "matrix.org" + ] + }, + "enable_presence_by_hs_url": { + "https://matrix.org": false, + "https://matrix-client.matrix.org": false + }, + "setting_defaults": { + "breadcrumbs": true + }, + "jitsi": { + "preferred_domain": "meet.element.io" + }, + "element_call": { + "url": "https://call.element.io", + "participant_limit": 8, + "brand": "Element Call" + }, + "map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx" +} diff --git a/appstore/element-web/1.11.86/data.yml b/appstore/element-web/1.11.86/data.yml new file mode 100644 index 00000000..3c027bb1 --- /dev/null +++ b/appstore/element-web/1.11.86/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: "/home/element-web" + edit: true + envKey: ELEMENT_WEB_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "riot.example.com" + edit: true + envKey: SYNAPSE_SERVER_NAME + labelZh: 服务域名 + labelEn: Domain Name + required: false + type: text diff --git a/appstore/element-web/1.11.86/docker-compose.yml b/appstore/element-web/1.11.86/docker-compose.yml new file mode 100644 index 00000000..875f9035 --- /dev/null +++ b/appstore/element-web/1.11.86/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + element-web: + container_name: element-web + env_file: + - ./envs/global.env + - .env + image: vectorim/element-web:v1.11.86 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${ELEMENT_WEB_ROOT_PATH}/config/config.json:/app/config.json diff --git a/appstore/element-web/1.11.86/envs/default.env b/appstore/element-web/1.11.86/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/element-web/1.11.86/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/element-web/1.11.86/envs/global.env b/appstore/element-web/1.11.86/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/element-web/1.11.86/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/element-web/1.11.86/scripts/init.sh b/appstore/element-web/1.11.86/scripts/init.sh new file mode 100644 index 00000000..65e20abf --- /dev/null +++ b/appstore/element-web/1.11.86/scripts/init.sh @@ -0,0 +1,29 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + # setup-2 copy config file + mkdir -p "$ELEMENT_WEB_ROOT_PATH" + mkdir -p "$ELEMENT_WEB_ROOT_PATH/config" + cp ./conf/config.sample.json "$ELEMENT_WEB_ROOT_PATH/config/config.json" + + if [ -n "$SYNAPSE_SERVER_NAME" ]; then + cp ./conf/config.sample.json "$ELEMENT_WEB_ROOT_PATH/config/config.$SYNAPSE_SERVER_NAME.json" + fi + + # setup-3 set permission + chmod -R 777 "$ELEMENT_WEB_ROOT_PATH" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/element-web/1.11.86/scripts/uninstall.sh b/appstore/element-web/1.11.86/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/element-web/1.11.86/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/element-web/1.11.86/scripts/upgrade.sh b/appstore/element-web/1.11.86/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/element-web/1.11.86/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/element-web/README.md b/appstore/element-web/README.md new file mode 100644 index 00000000..909ac7b5 --- /dev/null +++ b/appstore/element-web/README.md @@ -0,0 +1,38 @@ +# Element Web + +一个用于Web的光泽Matrix协作客户端 + +![Element Web](https://file.lifebus.top/imgs/element_web_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Element (formerly known as Vector and Riot) 是一个基于 Matrix JS SDK 构建的 Matrix 网络客户端。 + +## 反向代理 + +> Nginx +> +> 在无特殊需求的情况下,您需要添加如下参数 + +- `X-Frame-Options: SAMEORIGIN` 标头,用于防止 Element Web 被嵌入框架,以保护免受点击劫持攻击。 +- `Content-Security-Policy` 标头,添加 `frame-ancestors 'self'` 指令,作为 X-Frame-Options + 的现代替代方案(建议同时包含两者,因为并非所有浏览器都支持该指令。 +- `X-Content-Type-Options: nosniff` 标头,用于禁用 MIME 类型嗅探。 +- `X-XSS-Protection: 1; mode=block;` 标头,为旧版浏览器提供基础的 XSS 保护。 + +```nginx +add_header X-Frame-Options SAMEORIGIN; +add_header X-Content-Type-Options nosniff; +add_header X-XSS-Protection "1; mode=block"; +add_header Content-Security-Policy "frame-ancestors 'self'"; +``` + +### 移动客户端 + +[![Download on the App Store](http://www.tananaev.com/badges/app-store.svg)](https://apps.apple.com/us/app/element-messenger/id1083446067) [![Get it on Google Play](http://www.tananaev.com/badges/google-play.svg)](https://play.google.com/store/apps/details?id=im.vector.app) [![Get it on F-Droid](http://www.tananaev.com/badges/f-droid.svg)](https://f-droid.org/packages/im.vector.app/) + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/element-web/data.yml b/appstore/element-web/data.yml new file mode 100644 index 00000000..25220fc3 --- /dev/null +++ b/appstore/element-web/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: element-web + name: Element Web + tags: + - WebSite + - Local + shortDescZh: 一个用于Web的光泽Matrix协作客户端 + shortDescEn: A glossy Matrix collaboration client for the web. + type: website + crossVersionUpdate: true + limit: 0 + website: https://element.io/ + github: https://github.com/element-hq/element-web/ + document: https://element.io/user-guide/ diff --git a/appstore/element-web/logo.png b/appstore/element-web/logo.png new file mode 100644 index 00000000..8a92cb42 Binary files /dev/null and b/appstore/element-web/logo.png differ diff --git a/appstore/emby-amilys/4.8.9.0/.env b/appstore/emby-amilys/4.8.9.0/.env new file mode 100644 index 00000000..10993071 --- /dev/null +++ b/appstore/emby-amilys/4.8.9.0/.env @@ -0,0 +1,21 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# 网页端口 HTTP [必填] +PANEL_APP_PORT_HTTP=8096 + +# 数据持久化路径 [必填] +EMBY_ROOT_PATH=/home/emby + +# HTTP(s) 网络代理 +HTTP_SSL_PROXY= + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/emby-amilys/4.8.9.0/data.yml b/appstore/emby-amilys/4.8.9.0/data.yml new file mode 100644 index 00000000..43318632 --- /dev/null +++ b/appstore/emby-amilys/4.8.9.0/data.yml @@ -0,0 +1,61 @@ +additionalProperties: + formFields: + - default: "host" + edit: true + envKey: NETWORK_MODE + labelEn: Drive path + labelZh: 网络模式 + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: 8096 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: WebUI Port + labelZh: 网页端口 HTTP + required: true + rule: paramPort + type: number + - default: "/home/emby" + edit: true + envKey: EMBY_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: true + envKey: HTTP_SSL_PROXY + labelZh: HTTP(s) 网络代理 + labelEn: HTTP(s) Proxy + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/emby-amilys/4.8.9.0/docker-compose.yml b/appstore/emby-amilys/4.8.9.0/docker-compose.yml new file mode 100644 index 00000000..9b50ecab --- /dev/null +++ b/appstore/emby-amilys/4.8.9.0/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true +services: + emby: + container_name: emby-amilys + devices: + - /dev/dri:/dev/dri + environment: + - UID=0 + - GID=0 + - GIDLIST=0 + - HTTP_PROXY=${HTTP_PROXY:-} + - HTTPS_PROXY=${HTTP_PROXY:-} + - NO_PROXY=localhost,127.0.0.1,::1 + image: amilys/embyserver:4.8.9.0 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8096 + restart: always + volumes: + - /etc/timezone:/etc/timezone + - /etc/localtime:/etc/localtime + - ${EMBY_ROOT_PATH}/config:/config + - ${EMBY_ROOT_PATH}/mnt:/mnt + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/emby-amilys/4.8.9.0/envs/default.env b/appstore/emby-amilys/4.8.9.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/emby-amilys/4.8.9.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/emby-amilys/4.8.9.0/envs/global.env b/appstore/emby-amilys/4.8.9.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/emby-amilys/4.8.9.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/emby-amilys/4.8.9.0/scripts/init.sh b/appstore/emby-amilys/4.8.9.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/emby-amilys/4.8.9.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/emby-amilys/4.8.9.0/scripts/uninstall.sh b/appstore/emby-amilys/4.8.9.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/emby-amilys/4.8.9.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/emby-amilys/4.8.9.0/scripts/upgrade.sh b/appstore/emby-amilys/4.8.9.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/emby-amilys/4.8.9.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/emby-amilys/README.md b/appstore/emby-amilys/README.md new file mode 100644 index 00000000..0544496d --- /dev/null +++ b/appstore/emby-amilys/README.md @@ -0,0 +1,81 @@ +# Emby + +Emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备。 + +![Emby](https://file.lifebus.top/imgs/emby_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Emby(原名Media Browser)是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备。 + +Emby服务器端支持Microsoft Windows、Linux、MacOS、FreeBSD,客户端支持HTML5网页,Android和IOS等移动操作系统,Roku、Amazon Fire +TV、Chromecast和Apple TV等流媒体设备,LG智能电视和三星智能电视等智能电视,以及PlayStation3、PlayStation4、Xbox 360和Xbox +One等游戏机。 + +Emby原本是大部分源代码是开源的,带有部分闭源工具,但是自从3.5.3版本开始变为闭源软件,Jellyfin为Emby开源分支基础上发展来的。 + +## 安装说明 + +### 开启 `投屏服务(DLNA)` 与 `网络唤醒服务(WOL)` 功能 + +开启后,可以在局域网内的设备上投屏观看视频。 需要选择主机网络(host)模式。 + +### 硬件驱动挂载 + +默认仅挂载: `/dev/dri`,如果您的设备不存在硬件驱动,请使用删除完整 `devices` 配置。 + +可以通过 `ls /dev/` 查看存在的设备驱动。 + +```yml +devices: + - /dev/dri:/dev/dri + # - /dev/nvidia0:/dev/nvidia0 + # - /dev/nvidiactl:/dev/nvidiactl + # - /dev/nvidia-modeset:/dev/nvidia-modeset + # - /dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl + # - /dev/nvidia-uvm:/dev/nvidia-uvm + # - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools + # - /dev/video11:/dev/video11 +``` + +如果您的设备存在其他硬件驱动,可以选择挂载。删除 `# ` 号即可。格式为:`宿主机路径:容器路径`。 + +格式请与 `- /dev/dri:/dev/dri` 保持一致。 + +## 特别版说明 + +### 插件支持 + +#### emby-erx Emby 增强/美化 插件 + +> 开启请在 `{持久化目录}/config/config/ext.sh` 添加媒体库ID + +![emby-erx 插件](https://file.lifebus.top/imgs/emby_erx_plugin.png) + +#### dd-danmaku Emby 弹幕库插件 + +> 开启请在 `{持久化目录}/config/config/ext.sh` 中设置 + +![dd-danmaku 插件](https://file.lifebus.top/imgs/emby_dd_danmaku_plugin.png) + +#### embyExternalUrl Emby 调用外部播放器 + +> 开启请在 `{持久化目录}/config/config/ext.sh` 中设置 + +![embyExternalUrl 插件](https://file.lifebus.top/imgs/emby_external_url_plugin.png) + +### 使用说明 + +#### 激活 Emby Premiere + +密钥:`疯狂星期四V我50` + +#### 电视直播 + +添加直播源后,再手动刷新一下指南数据 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/emby-amilys/data.yml b/appstore/emby-amilys/data.yml new file mode 100644 index 00000000..0d1b8a21 --- /dev/null +++ b/appstore/emby-amilys/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: emby-amilys + name: Emby Amilys版 + tags: + - Media + - Local + shortDescZh: 主从式架构的媒体服务器软件 + shortDescEn: A media server software with master-slave architecture + type: website + crossVersionUpdate: true + limit: 0 + website: https://hub.docker.com/r/lovechen/embyserver + github: https://hub.docker.com/r/lovechen/embyserver + document: https://hub.docker.com/r/lovechen/embyserver diff --git a/appstore/emby-amilys/logo.png b/appstore/emby-amilys/logo.png new file mode 100644 index 00000000..a9d49678 Binary files /dev/null and b/appstore/emby-amilys/logo.png differ diff --git a/appstore/emby-lovechen/4.8.0.21/.env b/appstore/emby-lovechen/4.8.0.21/.env new file mode 100644 index 00000000..10993071 --- /dev/null +++ b/appstore/emby-lovechen/4.8.0.21/.env @@ -0,0 +1,21 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# 网页端口 HTTP [必填] +PANEL_APP_PORT_HTTP=8096 + +# 数据持久化路径 [必填] +EMBY_ROOT_PATH=/home/emby + +# HTTP(s) 网络代理 +HTTP_SSL_PROXY= + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/emby-lovechen/4.8.0.21/data.yml b/appstore/emby-lovechen/4.8.0.21/data.yml new file mode 100644 index 00000000..43318632 --- /dev/null +++ b/appstore/emby-lovechen/4.8.0.21/data.yml @@ -0,0 +1,61 @@ +additionalProperties: + formFields: + - default: "host" + edit: true + envKey: NETWORK_MODE + labelEn: Drive path + labelZh: 网络模式 + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: 8096 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: WebUI Port + labelZh: 网页端口 HTTP + required: true + rule: paramPort + type: number + - default: "/home/emby" + edit: true + envKey: EMBY_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: true + envKey: HTTP_SSL_PROXY + labelZh: HTTP(s) 网络代理 + labelEn: HTTP(s) Proxy + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/emby-lovechen/4.8.0.21/docker-compose.yml b/appstore/emby-lovechen/4.8.0.21/docker-compose.yml new file mode 100644 index 00000000..ecadb711 --- /dev/null +++ b/appstore/emby-lovechen/4.8.0.21/docker-compose.yml @@ -0,0 +1,31 @@ +networks: + 1panel-network: + external: true +services: + emby: + container_name: emby-lovechen + devices: + - /dev/dri:/dev/dri + environment: + - UID=0 + - GID=0 + - GIDLIST=0 + - NVIDIA_VISIBLE_DEVICES=all + - HTTP_PROXY=${HTTP_PROXY:-} + - HTTPS_PROXY=${HTTP_PROXY:-} + - NO_PROXY=localhost,127.0.0.1,::1 + image: lovechen/embyserver:4.8.0.21 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8096 + restart: always + volumes: + - /etc/timezone:/etc/timezone + - /etc/localtime:/etc/localtime + - ${EMBY_ROOT_PATH}/config:/config + - ${EMBY_ROOT_PATH}/mnt:/mnt + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/emby-lovechen/4.8.0.21/envs/default.env b/appstore/emby-lovechen/4.8.0.21/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/emby-lovechen/4.8.0.21/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/emby-lovechen/4.8.0.21/envs/global.env b/appstore/emby-lovechen/4.8.0.21/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/emby-lovechen/4.8.0.21/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/emby-lovechen/4.8.0.21/scripts/init.sh b/appstore/emby-lovechen/4.8.0.21/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/emby-lovechen/4.8.0.21/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/emby-lovechen/4.8.0.21/scripts/uninstall.sh b/appstore/emby-lovechen/4.8.0.21/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/emby-lovechen/4.8.0.21/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/emby-lovechen/4.8.0.21/scripts/upgrade.sh b/appstore/emby-lovechen/4.8.0.21/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/emby-lovechen/4.8.0.21/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/emby-lovechen/README.md b/appstore/emby-lovechen/README.md new file mode 100644 index 00000000..36b51eef --- /dev/null +++ b/appstore/emby-lovechen/README.md @@ -0,0 +1,64 @@ +# Emby + +_Emby Media Server 特别版 | AMD64/ARM32/ARM64_ + +**愿你生而自由。** + +Emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备。 + +![Emby](https://file.lifebus.top/imgs/emby_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Emby(原名Media Browser)是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备。 + +Emby服务器端支持Microsoft Windows、Linux、MacOS、FreeBSD,客户端支持HTML5网页,Android和IOS等移动操作系统,Roku、Amazon Fire +TV、Chromecast和Apple TV等流媒体设备,LG智能电视和三星智能电视等智能电视,以及PlayStation3、PlayStation4、Xbox 360和Xbox +One等游戏机。 + +Emby原本是大部分源代码是开源的,带有部分闭源工具,但是自从3.5.3版本开始变为闭源软件,Jellyfin为Emby开源分支基础上发展来的。 + +## 安装说明 + +### 开启 `投屏服务(DLNA)` 与 `网络唤醒服务(WOL)` 功能 + +开启后,可以在局域网内的设备上投屏观看视频。 需要选择主机网络(host)模式。 + +### 硬件驱动挂载 + +默认仅挂载: `/dev/dri`,如果您的设备不存在硬件驱动,请使用删除完整 `devices` 配置。 + +可以通过 `ls /dev/` 查看存在的设备驱动。 + +```yml +devices: + - /dev/dri:/dev/dri + # - /dev/nvidia0:/dev/nvidia0 + # - /dev/nvidiactl:/dev/nvidiactl + # - /dev/nvidia-modeset:/dev/nvidia-modeset + # - /dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl + # - /dev/nvidia-uvm:/dev/nvidia-uvm + # - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools + # - /dev/video11:/dev/video11 +``` + +如果您的设备存在其他硬件驱动,可以选择挂载。删除 `# ` 号即可。格式为:`宿主机路径:容器路径`。 + +格式请与 `- /dev/dri:/dev/dri` 保持一致。 + +## 特别版说明 + +额外修改: + ++ 完全离线不需要服务器验证 ++ 搜索相关 ++ 支持单字搜索 ++ 支持模糊搜索 ++ 可直接搜索剧季标题 ++ 去除自动更新 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/emby-lovechen/data.yml b/appstore/emby-lovechen/data.yml new file mode 100644 index 00000000..e066aa37 --- /dev/null +++ b/appstore/emby-lovechen/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: emby-lovechen + name: Emby Lovechen版 + tags: + - Media + - Local + shortDescZh: 主从式架构的媒体服务器软件 + shortDescEn: A media server software with master-slave architecture + type: website + crossVersionUpdate: true + limit: 0 + website: https://hub.docker.com/r/lovechen/embyserver + github: https://hub.docker.com/r/lovechen/embyserver + document: https://hub.docker.com/r/lovechen/embyserver diff --git a/appstore/emby-lovechen/logo.png b/appstore/emby-lovechen/logo.png new file mode 100644 index 00000000..a9d49678 Binary files /dev/null and b/appstore/emby-lovechen/logo.png differ diff --git a/appstore/emby/4.8.10.0/.env b/appstore/emby/4.8.10.0/.env new file mode 100644 index 00000000..bb021f7f --- /dev/null +++ b/appstore/emby/4.8.10.0/.env @@ -0,0 +1,21 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# 网页端口 [必填] +PANEL_APP_PORT_HTTP=8096 + +# 数据持久化路径 [必填] +EMBY_ROOT_PATH=/home/emby + +# HTTP(s) 网络代理 +HTTP_SSL_PROXY= + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/emby/4.8.10.0/data.yml b/appstore/emby/4.8.10.0/data.yml new file mode 100644 index 00000000..29deb69b --- /dev/null +++ b/appstore/emby/4.8.10.0/data.yml @@ -0,0 +1,61 @@ +additionalProperties: + formFields: + - default: "host" + edit: true + envKey: NETWORK_MODE + labelZh: 网络模式 + labelEn: Drive path + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: 8096 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 网页端口 + labelEn: WebUI Port + required: true + rule: paramPort + type: number + - default: "/home/emby" + edit: true + envKey: EMBY_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: true + envKey: HTTP_SSL_PROXY + labelZh: HTTP(s) 网络代理 + labelEn: HTTP(s) Proxy + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/emby/4.8.10.0/docker-compose.yml b/appstore/emby/4.8.10.0/docker-compose.yml new file mode 100644 index 00000000..df0705ba --- /dev/null +++ b/appstore/emby/4.8.10.0/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true +services: + emby: + container_name: emby + devices: + - /dev/dri:/dev/dri + environment: + - UID=0 + - GID=0 + - GIDLIST=0 + - HTTP_PROXY=${HTTP_PROXY:-} + - HTTPS_PROXY=${HTTP_PROXY:-} + - NO_PROXY=localhost,127.0.0.1,::1 + image: emby/embyserver:4.8.10.0 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8096 + restart: always + volumes: + - /etc/timezone:/etc/timezone + - /etc/localtime:/etc/localtime + - ${EMBY_ROOT_PATH}/config:/config + - ${EMBY_ROOT_PATH}/mnt:/mnt + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/emby/4.8.10.0/envs/default.env b/appstore/emby/4.8.10.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/emby/4.8.10.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/emby/4.8.10.0/envs/global.env b/appstore/emby/4.8.10.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/emby/4.8.10.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/emby/4.8.10.0/scripts/init.sh b/appstore/emby/4.8.10.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/emby/4.8.10.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/emby/4.8.10.0/scripts/uninstall.sh b/appstore/emby/4.8.10.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/emby/4.8.10.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/emby/4.8.10.0/scripts/upgrade.sh b/appstore/emby/4.8.10.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/emby/4.8.10.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/emby/README.md b/appstore/emby/README.md new file mode 100644 index 00000000..ed727a72 --- /dev/null +++ b/appstore/emby/README.md @@ -0,0 +1,49 @@ +# Emby + +Emby是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备。 + +![Emby](https://file.lifebus.top/imgs/emby_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Emby(原名Media Browser)是一个主从式架构的媒体服务器软件,可以用来整理服务器上的视频和音频,并将音频和视频流式传输到客户端设备。 + +Emby服务器端支持Microsoft Windows、Linux、MacOS、FreeBSD,客户端支持HTML5网页,Android和IOS等移动操作系统,Roku、Amazon Fire +TV、Chromecast和Apple TV等流媒体设备,LG智能电视和三星智能电视等智能电视,以及PlayStation3、PlayStation4、Xbox 360和Xbox +One等游戏机。 + +Emby原本是大部分源代码是开源的,带有部分闭源工具,但是自从3.5.3版本开始变为闭源软件,Jellyfin为Emby开源分支基础上发展来的。 + +## 安装说明 + +### 开启 `投屏服务(DLNA)` 与 `网络唤醒服务(WOL)` 功能 + +开启后,可以在局域网内的设备上投屏观看视频。 需要选择主机网络(host)模式。 + +### 硬件驱动挂载 + +默认仅挂载: `/dev/dri`,如果您的设备不存在硬件驱动,请使用删除完整 `devices` 配置。 + +可以通过 `ls /dev/` 查看存在的设备驱动。 + +```yml +devices: + - /dev/dri:/dev/dri + # - /dev/nvidia0:/dev/nvidia0 + # - /dev/nvidiactl:/dev/nvidiactl + # - /dev/nvidia-modeset:/dev/nvidia-modeset + # - /dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl + # - /dev/nvidia-uvm:/dev/nvidia-uvm + # - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools + # - /dev/video11:/dev/video11 +``` + +如果您的设备存在其他硬件驱动,可以选择挂载。删除 `# ` 号即可。格式为:`宿主机路径:容器路径`。 + +格式请与 `- /dev/dri:/dev/dri` 保持一致。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/emby/data.yml b/appstore/emby/data.yml new file mode 100644 index 00000000..eb6d4128 --- /dev/null +++ b/appstore/emby/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: emby + name: Emby + tags: + - WebSite + - Media + - Local + shortDescZh: 主从式架构的媒体服务器软件 + shortDescEn: A media server software with master-slave architecture + type: website + crossVersionUpdate: true + limit: 0 + website: https://emby.media/ + github: https://github.com/MediaBrowser/Emby/ + document: https://emby.media/blog/ diff --git a/appstore/emby/logo.png b/appstore/emby/logo.png new file mode 100644 index 00000000..a9d49678 Binary files /dev/null and b/appstore/emby/logo.png differ diff --git a/appstore/ghost/5.101.4/.env b/appstore/ghost/5.101.4/.env new file mode 100644 index 00000000..8195cdb8 --- /dev/null +++ b/appstore/ghost/5.101.4/.env @@ -0,0 +1,48 @@ +# MySQL 服务 (前置检查) [必填] +PANEL_DB_TYPE=mysql + +# 数据持久化路径 [必填] +GHOST_ROOT_PATH=/home/ghost + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2368 + +# 域名 [必填] +url=http://127.0.0.1:2368 + +# 域名 (后台) [必填] +admin__url=http://127.0.0.1:2368 + +# 数据库 主机 [必填] +database__connection__host=127.0.0.1 + +# 数据库 端口 [必填] +database__connection__port=3306 + +# 数据库 用户名 [必填] +database__connection__user=ghost + +# 数据库 密码 [必填] +database__connection__password= + +# 数据库 名称 [必填] +database__connection__database=ghost + +# 邮件传输协议 [必填] +mail__transport=SMTP + +# 邮件服务器 [必填] +mail__options__host=smtp.qq.com + +# 邮件服务器 端口 [必填] +mail__options__port=465 + +# 邮件鉴权 用户名 [必填] +mail__options__auth__user= + +# 邮件鉴权 密码 [必填] +mail__options__auth__pass= + +# 邮件发送者 [必填] +mail__from= + diff --git a/appstore/ghost/5.101.4/data.yml b/appstore/ghost/5.101.4/data.yml new file mode 100644 index 00000000..507f9f63 --- /dev/null +++ b/appstore/ghost/5.101.4/data.yml @@ -0,0 +1,130 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: mysql + edit: true + envKey: PANEL_DB_TYPE + labelZh: MySQL 服务 (前置检查) + labelEn: Database Service (Pre-check) + required: true + type: apps + values: + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/ghost" + edit: true + envKey: GHOST_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 2368 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "http://127.0.0.1:2368" + edit: true + envKey: url + labelZh: 域名 + labelEn: Domain + required: true + rule: paramExtUrl + type: text + - default: "http://127.0.0.1:2368" + edit: true + envKey: admin__url + labelZh: 域名 (后台) + labelEn: Domain (Admin) + required: true + rule: paramExtUrl + type: text + - default: "127.0.0.1" + edit: true + envKey: database__connection__host + labelZh: 数据库 主机 + labelEn: Database Host + required: true + type: text + - default: 3306 + edit: true + envKey: database__connection__port + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "ghost" + edit: true + envKey: database__connection__user + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "" + edit: true + envKey: database__connection__password + labelZh: 数据库 密码 + labelEn: Database Password + required: true + type: password + - default: "ghost" + edit: true + envKey: database__connection__database + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text + - default: "SMTP" + edit: true + envKey: mail__transport + labelZh: 邮件传输协议 + labelEn: Mail Transport Protocol + required: true + type: text + - default: "smtp.qq.com" + edit: true + envKey: mail__options__host + labelZh: 邮件服务器 + labelEn: Mail Server + required: true + type: text + - default: 465 + edit: true + envKey: mail__options__port + labelZh: 邮件服务器 端口 + labelEn: Mail Server Port + required: true + type: number + - default: "" + edit: true + envKey: mail__options__auth__user + labelZh: 邮件鉴权 用户名 + labelEn: Mail Username + required: true + type: text + - default: "" + edit: true + envKey: mail__options__auth__pass + labelZh: 邮件鉴权 密码 + labelEn: Mail Password + required: true + type: password + - default: "" + edit: true + envKey: mail__from + labelZh: 邮件发送者 + labelEn: Mail Sender + required: true + type: text diff --git a/appstore/ghost/5.101.4/docker-compose.yml b/appstore/ghost/5.101.4/docker-compose.yml new file mode 100644 index 00000000..7e4eb00f --- /dev/null +++ b/appstore/ghost/5.101.4/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + ghost: + container_name: ghost + env_file: + - ./envs/global.env + - .env + environment: + - NODE_ENV=production + - server__host=0.0.0.0 + - server__port=2368 + - database__client=mysql + - mail__options__service=Email + - mail__options__secure=true + image: ghost:5.101.4 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2368 + restart: always + volumes: + - ${GHOST_ROOT_PATH}/data:/var/lib/ghost/content diff --git a/appstore/ghost/5.101.4/envs/default.env b/appstore/ghost/5.101.4/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/ghost/5.101.4/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/ghost/5.101.4/envs/global.env b/appstore/ghost/5.101.4/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/ghost/5.101.4/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/ghost/5.101.4/scripts/init.sh b/appstore/ghost/5.101.4/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/ghost/5.101.4/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/ghost/5.101.4/scripts/uninstall.sh b/appstore/ghost/5.101.4/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/ghost/5.101.4/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/ghost/5.101.4/scripts/upgrade.sh b/appstore/ghost/5.101.4/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/ghost/5.101.4/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/ghost/README.md b/appstore/ghost/README.md new file mode 100644 index 00000000..5c736e3d --- /dev/null +++ b/appstore/ghost/README.md @@ -0,0 +1,139 @@ +# Gost + +用于现代出版、会员制、订阅和通讯的独立技术 + +![Gost](https://file.lifebus.top/imgs/gost_cover.png) + +Ghost 是一个基于现代 Node.js 技术堆栈构建的开源专业发布平台,专为需要强大功能、灵活性和性能的团队而设计。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 独立结构 + +Ghost 的结构是一个非营利组织,以确保它永远不会合法地被出售,并且将始终保持独立,根据用户的需求构建产品,而不是寻求💰回报的投资者的突发奇想。 + ++ 可持续发展的业务 + +虽然我们发布的软件是免费的,但我们还为其销售高级托管托管,这为非营利组织提供了可持续的商业模式,并使其能够 100% 自筹资金。 + ++ 分布式团队 + +拥有可持续的业务使我们能够聘请开源贡献者全职从事 Ghost 工作,而且我们完全远程完成这项工作。 Ghost 核心团队完全分布在他们选择的任何地方。 + ++ 默认透明 + +我们透明地分享我们的收入并公开我们的代码,以便任何人都可以验证我们所做的事情以及我们如何做。没有斗篷或匕首。 + ++ 无条件开源 + +我们所有的项目都是在宽松的开源MIT 许可证下发布的,因此即使公司失败,我们的代码仍然可以被世界上任何人不受限制地使用和继承。 + +🚀 内置会员资格和订阅 + +Ghost 不仅可以为匿名访问者创建内容,还可以让您将受众转变为企业,并为会员注册和付费订阅商务提供原生支持。它是唯一一个默认内置会员资格并深度集成的平台。 + +🚀 开发者友好的API + +Ghost 的核心是一个自消耗的 RESTful JSON API,具有解耦的管理客户端和前端。我们提供了很多工具来让网站尽快运行,但最终它只是 +JSON ™️,所以如果您想完全无头使用 Ghost 并编写自己的前端或后端……您可以! + +🚀 丰富编辑器 + +Ghost 拥有每个作家都想要的丰富编辑器,但在幕后它提供的功能远远超出您的预期。 +所有内容都以基于 JSON 的标准化文档存储格式(称为 Lexical)存储,其中包括对称为 Cards 的可扩展富媒体对象的支持。 + +简单来说,您可以将其视为在 Medium 编辑器中集成 Slack,存储合理且可通过 API 完全访问。 + +🚀 自定义网站结构 + +Ghost 中的路由完全可以根据您的需要进行配置。开箱即用的 Ghost 附带了标准的反向时间顺序帖子源,带有干净的永久链接和基本页面,但这很容易更改。 + +无论您需要一个带有/en/和/de/基本 URL 的完整多语言站点,还是想要为/europe/uk/london/等分层数据构建特定的目录结构 — Ghost +的路由层可以任意数量进行操作实现您的用例的方法。 + +🚀 角色和权限 + +从一开始就使用内置的合理用户角色和权限来设置您的站点。 + ++ 贡献者:可以登录并撰写帖子,但不能发布。 ++ 作者:可以创建和发布新的帖子和标签。 ++ 编辑:可以邀请、管理和编辑作者和贡献者。 ++ 管理员:拥有编辑所有数据和设置的完全权限。 ++ 所有者:无法删除的管理员+有权访问账单详细信息。 + +🚀 自定义主题 + +Ghost 附带了一个简单的 Handlebars.js +前端主题层,该层使用起来非常简单,而且功能强大得令人惊讶。许多人坚持使用默认主题(现场演示/源代码),它提供了干净的杂志设计 - +但这可以修改或完全替换。 + +🚀 应用程序和集成 + +因为 Ghost 是完全开源的,构建为 JSON API,具有 Webhooks,并且让您可以完全控制前端:它本质上与所有东西集成。有些事情比其他事情更容易,但几乎任何事情都可以通过一点努力来实现。 +或者是一个比 1803 年更近的比喻。 + +🚀 搜索引擎优化 + +Ghost 配备了世界一流的 SEO 以及确保您的内容快速一致地显示在搜索索引中所需的一切。 + ++ 无需插件 + +Ghost 将所有基本技术 SEO 优化直接内置于核心中,无需依赖第三方插件。得益于 Node.js,它还具有远远优越的速度和页面加载性能。 + ++ 自动谷歌 XML 站点地图 + +Ghost 将自动生成并链接到完整的 Google 站点地图,包括您网站上的每个页面,以确保搜索引擎能够为每个 URL 建立索引。 + ++ 自动结构化数据+JSON-LD + +Ghost 生成有关页面的基于JSON-LD 的结构化元数据,这样您就不必依赖标记中混乱的微格式来提供语义上下文。即使您更改主题或前端,您的 +SEO 仍然完好无损。 +Ghost 还为 Facebook OpenGraph 和 Twitter Card 添加了自动代码。 + ++ 规范标签 + +Ghost 会自动为每个帖子和页面生成正确的rel="canonical"标签,以便搜索引擎始终优先考虑一个真正的链接。 + +## 安装说明 + +> 后台管理地址:`http://127.0.0.1:2368/ghost` +> +> 首次进入后台管理,会提示创建管理员账号,然后登录即可。 + +## 使用说明 + +### 语言设置 + +没有更好的解决办法,即使设置 `zh` 也不会生效。 + +### 邮件配置 + +Ghost 默认使用 Mailgun 作为邮件服务,但是由于其已经移除 `免费套餐`, 我们将配置 `smtp` 作为邮件服务商。 + +如果存在发信失败,请查看日志,可能是邮件服务商的问题。 + +如果发信人与配置不一致,识别到 `域名` 作为发信人,即使配置了发信人, 也会被忽略。 + +可以通过 `设置` >> `门户设置` >> `账户设置` 修改 `Support email address` 为配置的发信人。 + +## 反向代理 + +> Nginx + +```nginx +location / { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $http_host; + proxy_pass http://127.0.0.1:2368; +} + +client_max_body_size 50m; +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/ghost/data.yml b/appstore/ghost/data.yml new file mode 100644 index 00000000..0b91d3ad --- /dev/null +++ b/appstore/ghost/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: ghost + name: Ghost + tags: + - WebSite + - Local + shortDescZh: 用于现代出版、会员制、订阅和通讯的人博客系统 + shortDescEn: Human blogging systems for modern publishing, memberships, subscriptions and newsletters + type: website + crossVersionUpdate: true + limit: 0 + website: https://ghost.org/ + github: https://github.com/TryGhost/Ghost/ + document: https://ghost.org/docs/ diff --git a/appstore/ghost/logo.png b/appstore/ghost/logo.png new file mode 100644 index 00000000..efe7f224 Binary files /dev/null and b/appstore/ghost/logo.png differ diff --git a/appstore/gitea-runner/0.2.11/.env b/appstore/gitea-runner/0.2.11/.env new file mode 100644 index 00000000..e435b785 --- /dev/null +++ b/appstore/gitea-runner/0.2.11/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +GITEA_RUNNER_ROOT_PATH=/home/gitea + +# Gitea 实例 URL [必填] +GITEA_INSTANCE_URL= + +# 注册令牌 [必填] +GITEA_RUNNER_REGISTRATION_TOKEN= + +# Runner 名称 [必填] +GITEA_RUNNER_NAME= + +# Runner 标签 [必填] +GITEA_RUNNER_LABELS= + diff --git a/appstore/gitea-runner/0.2.11/data.yml b/appstore/gitea-runner/0.2.11/data.yml new file mode 100644 index 00000000..5beea648 --- /dev/null +++ b/appstore/gitea-runner/0.2.11/data.yml @@ -0,0 +1,37 @@ +additionalProperties: + formFields: + - default: "/home/gitea" + edit: true + envKey: GITEA_RUNNER_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: true + envKey: GITEA_INSTANCE_URL + labelZh: Gitea 实例 URL + labelEn: Gitea instance URL + required: true + type: text + - default: "" + edit: true + envKey: GITEA_RUNNER_REGISTRATION_TOKEN + labelZh: 注册令牌 + labelEn: Registration token + required: true + type: text + - default: "" + edit: true + envKey: GITEA_RUNNER_NAME + labelZh: Runner 名称 + labelEn: Runner name + required: true + type: text + - default: "" + edit: true + envKey: GITEA_RUNNER_LABELS + labelZh: Runner 标签 + labelEn: Runner labels + required: true + type: text diff --git a/appstore/gitea-runner/0.2.11/docker-compose.yml b/appstore/gitea-runner/0.2.11/docker-compose.yml new file mode 100644 index 00000000..cc71e196 --- /dev/null +++ b/appstore/gitea-runner/0.2.11/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + 1panel-network: + external: true +services: + gitea: + container_name: gitea-runner + env_file: + - ./envs/global.env + - .env + image: gitea/act_runner:0.2.11 + labels: + createdBy: Apps + networks: + - 1panel-network + privileged: true + restart: always + volumes: + - ${GITEA_RUNNER_ROOT_PATH}/data:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + - /var/run/docker.sock:/var/run/docker.sock diff --git a/appstore/gitea-runner/0.2.11/envs/default.env b/appstore/gitea-runner/0.2.11/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/gitea-runner/0.2.11/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/gitea-runner/0.2.11/envs/global.env b/appstore/gitea-runner/0.2.11/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/gitea-runner/0.2.11/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/gitea-runner/0.2.11/scripts/init.sh b/appstore/gitea-runner/0.2.11/scripts/init.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/gitea-runner/0.2.11/scripts/init.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/gitea-runner/0.2.11/scripts/uninstall.sh b/appstore/gitea-runner/0.2.11/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/gitea-runner/0.2.11/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/gitea-runner/0.2.11/scripts/upgrade.sh b/appstore/gitea-runner/0.2.11/scripts/upgrade.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/gitea-runner/0.2.11/scripts/upgrade.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/gitea-runner/README.md b/appstore/gitea-runner/README.md new file mode 100644 index 00000000..2895fc68 --- /dev/null +++ b/appstore/gitea-runner/README.md @@ -0,0 +1,87 @@ +# Gitea + +Gitea 是一个轻量级的 DevOps 平台软件。 + +![Gitea](https://file.lifebus.top/imgs/gitea_cover_show.png) + +Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 +Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。 Gitea 最初是从 Gogs +分支而来,几乎所有代码都已更改。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 安装说明 + +
+
+ ⚠️ +
+ 警告
+ 该应用申请使用 `特权模式`, 将允许应用在容器内部执行特权操作,如挂载宿主机目录、访问宿主机设备等。 +
+
+
+ +这是Gitea Actions的Runner,用于在Gitea Actions中执行任务。 + +## 特性 + ++ 代码托管 + +Gitea⽀持创建和管理仓库、浏览提交历史和代码⽂件、审查和合并代码提交、管理协作者、管理分⽀等。它还⽀持许多常见的Git特性,⽐如标签、Cherry-pick、hook、集成协作⼯具等。 + ++ 轻量级和快速 + +Gitea 的设计目标之一就是轻量级和快速响应。它不像一些大型的代码托管平台那样臃肿,因此在性能方面表现出色,适用于资源有限的服务器环境。由于其轻量级设计,Gitea +在资源消耗方面相对较低,可以在资源有限的环境下运行良好。 + ++ 易于部署和维护 + +轻松地部署在各种服务器上,不需要复杂的配置和依赖。这使得个人开发者或小团队可以方便地设置和管理自己的 Git 服务。 + ++ 安全性 + +Gitea 注重安全性,提供了用户权限管理、访问控制列表等功能,可以确保代码和数据的安全性。 + ++ 代码评审 + +代码评审同时支持 Pull Request workflow 和 AGit workflow。评审⼈可以在线浏览代码,并提交评审意见或问题。 提交者可以接收到评审意见,并在线回 +复或修改代码。代码评审可以帮助用户和企业提⾼代码质量。 + ++ CI/CD + +Gitea Actions⽀持 CI/CD 功能,该功能兼容 GitHub Actions,⽤⼾可以采用熟悉的YAML格式编写workflows,也可以重⽤⼤量的已有的 Actions +插件。Actions 插件支持从任意的 Git 网站中下载。 + +项目管理:Gitea 通过看板和⼯单来跟踪⼀个项⽬的需求,功能和bug。⼯单⽀持分支,标签、⾥程碑、 指派、时间跟踪、到期时间、依赖关系等功能。 + ++ 制品库 + +Gitea支持超过 20 种不同种类的公有或私有软件包管理,包括:Cargo, Chef, Composer, Conan, Conda, Container, Helm, Maven, npm, +NuGet, Pub, PyPI, RubyGems, Vagrant等 + ++ 开源社区支持 + +Gitea 是一个基于 MIT 许可证的开源项目,Gitea 拥有一个活跃的开源社区,能够持续地进行开发和改进,同时也积极接受社区贡献,保持了平台的更新和创新。 + ++ 多语言支持 + +Gitea 提供多种语言界面,适应全球范围内的用户,促进了国际化和本地化。 + +## 反向代理 + +> Nginx + +```nginx +location / { + proxy_pass http://localhost:3000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; +} +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/gitea-runner/data.yml b/appstore/gitea-runner/data.yml new file mode 100644 index 00000000..520f8807 --- /dev/null +++ b/appstore/gitea-runner/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: gitea-runner + name: Gitea Runner + tags: + - WebSite + - DevOps + - Storage + - Local + shortDescZh: 新一代的代码托管平台 + shortDescEn: The next generation of code hosting platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://gitea.io/ + github: https://github.com/go-gitea/gitea/ + document: https://docs.gitea.io/ diff --git a/appstore/gitea-runner/logo.png b/appstore/gitea-runner/logo.png new file mode 100644 index 00000000..82732ec6 Binary files /dev/null and b/appstore/gitea-runner/logo.png differ diff --git a/appstore/gitea/1.22.4/.env b/appstore/gitea/1.22.4/.env new file mode 100644 index 00000000..6d36d0ee --- /dev/null +++ b/appstore/gitea/1.22.4/.env @@ -0,0 +1,90 @@ +# 数据库 服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化路径 [必填] +GITEA_ROOT_PATH=/home/gitea + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# SSH 端口 [必填] +PANEL_APP_PORT_SSH=22 + +# 数据库 类型 [必填] +DB_TYPE=postgresql + +# 数据库 主机地址 +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 +DB_PORT=5432 + +# 数据库 用户名 +DB_USER=gitea + +# 数据库 密码 +DB_PASSWD= + +# 数据库 名称 +DB_NAME=gitea + +# 应用名称 [必填] +APP_NAME=Gitea + +# HTTP 克隆域名 [必填] +DOMAIN=localhost + +# SSH 克隆域名 [必填] +SSH_DOMAIN=localhost + +# SSH 克隆显示端口 [必填] +SSH_PORT=22 + +# 公共 URL (覆盖级) +ROOT_URL= + +# 启用 Git LFS 支持 [必填] +LFS_START_SERVER=false + +# 禁用注册 [必填] +DISABLE_REGISTRATION=false + +# 强制登录 [必填] +REQUIRE_SIGNIN_VIEW=false + +# 禁止访问安装页面 [必填] +INSTALL_LOCK=false + +# 全局加密密钥 +SECRET_KEY= + +# 启用代理 (全局 + Webhook) [必填] +PROXY_ENABLED=false + +# 代理服务器地址 (全局 + Webhook) +PROXY_URL= + +# 代理网址 (全局 + Webhook) +PROXY_HOSTS=** + +# 启用邮件服务 [必填] +MAILER_ENABLED=false + +# 邮件服务器地址 +MAILER_SMTP_ADDR= + +# 邮件服务器端口 +MAILER_SMTP_PORT=465 + +# 邮件服务用户名 +MAILER_USER= + +# 邮件服务密码 +MAILER_PASSWD= + +# 邮件服务发件人 +MAILER_FROM= + +# 邮件服务主题前缀 +MAILER_SUBJECT_PREFIX=[Gitea] + diff --git a/appstore/gitea/1.22.4/config/app.example.ini b/appstore/gitea/1.22.4/config/app.example.ini new file mode 100644 index 00000000..c29d2e5b --- /dev/null +++ b/appstore/gitea/1.22.4/config/app.example.ini @@ -0,0 +1,2706 @@ +; This file lists the default values used by Gitea +;; Copy required sections to your own app.ini (default is custom/conf/app.ini) +;; and modify as needed. +;; Do not copy the whole file as-is, as it contains some invalid sections for illustrative purposes. +;; If you don't know what a setting is you should not set it. +;; +;; see https://docs.gitea.com/administration/config-cheat-sheet for additional documentation. + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Default Configuration (non-`app.ini` configuration) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; These values are environment-dependent but form the basis of a lot of values. They will be +;; reported as part of the default configuration when running `gitea help` or on start-up. The order they are emitted there is slightly different but we will list them here in the order they are set-up. +;; +;; - _`AppPath`_: This is the absolute path of the running gitea binary. +;; - _`AppWorkPath`_: This refers to "working path" of the `gitea` binary. It is determined by using the first set thing in the following hierarchy: +;; - The "WORK_PATH" option in "app.ini" file +;; - The `--work-path` flag passed to the binary +;; - The environment variable `$GITEA_WORK_DIR` +;; - A built-in value set at build time (see building from source) +;; - Otherwise it defaults to the directory of the _`AppPath`_ +;; - If any of the above are relative paths then they are made absolute against the directory of the _`AppPath`_ +;; - _`CustomPath`_: This is the base directory for custom templates and other options. It is determined by using the first set thing in the following hierarchy: +;; - The `--custom-path` flag passed to the binary +;; - The environment variable `$GITEA_CUSTOM` +;; - A built-in value set at build time (see building from source) +;; - Otherwise it defaults to _`AppWorkPath`_`/custom` +;; - If any of the above are relative paths then they are made absolute against the directory of the _`AppWorkPath`_ +;; - _`CustomConf`_: This is the path to the `app.ini` file. +;; - The `--config` flag passed to the binary +;; - A built-in value set at build time (see building from source) +;; - Otherwise it defaults to _`CustomPath`_`/conf/app.ini` +;; - If any of the above are relative paths then they are made absolute against the directory of the _`CustomPath`_ +;; +;; In addition there is _`StaticRootPath`_ which can be set as a built-in at build time, but will otherwise default to _`AppWorkPath`_ + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; General Settings +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; App name that shows in every page title +APP_NAME = ; Gitea: Git with a cup of tea +;; +;; RUN_USER will automatically detect the current user - but you can set it here change it if you run locally +RUN_USER = ; git +;; +;; Application run mode, affects performance and debugging: "dev" or "prod", default is "prod" +;; Mode "dev" makes Gitea easier to develop and debug, values other than "dev" are treated as "prod" which is for production use. +;RUN_MODE = prod +;; +;; The working directory, see the comment of AppWorkPath above +;WORK_PATH = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[server] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; The protocol the server listens on. One of 'http', 'https', 'http+unix', 'fcgi' or 'fcgi+unix'. Defaults to 'http' +;; Note: Value must be lowercase. +;PROTOCOL = http +;; +;; Expect PROXY protocol headers on connections +;USE_PROXY_PROTOCOL = false +;; +;; Use PROXY protocol in TLS Bridging mode +;PROXY_PROTOCOL_TLS_BRIDGING = false +;; +; Timeout to wait for PROXY protocol header (set to 0 to have no timeout) +;PROXY_PROTOCOL_HEADER_TIMEOUT=5s +;; +; Accept PROXY protocol headers with UNKNOWN type +;PROXY_PROTOCOL_ACCEPT_UNKNOWN=false +;; +;; Set the domain for the server +;DOMAIN = localhost +;; +;; Overwrite the automatically generated public URL. Necessary for proxies and docker. +;ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/ +;; +;; For development purpose only. It makes Gitea handle sub-path ("/sub-path/owner/repo/...") directly when debugging without a reverse proxy. +;; DO NOT USE IT IN PRODUCTION!!! +;USE_SUB_URL_PATH = false +;; +;; when STATIC_URL_PREFIX is empty it will follow ROOT_URL +;STATIC_URL_PREFIX = +;; +;; The address to listen on. Either a IPv4/IPv6 address or the path to a unix socket. +;; If PROTOCOL is set to `http+unix` or `fcgi+unix`, this should be the name of the Unix socket file to use. +;; Relative paths will be made absolute against the _`AppWorkPath`_. +;HTTP_ADDR = 0.0.0.0 +;; +;; The port to listen on. Leave empty when using a unix socket. +;HTTP_PORT = 3000 +;; +;; If REDIRECT_OTHER_PORT is true, and PROTOCOL is set to https an http server +;; will be started on PORT_TO_REDIRECT and it will redirect plain, non-secure http requests to the main +;; ROOT_URL. Defaults are false for REDIRECT_OTHER_PORT and 80 for +;; PORT_TO_REDIRECT. +;REDIRECT_OTHER_PORT = false +;PORT_TO_REDIRECT = 80 +;; +;; expect PROXY protocol header on connections to https redirector. +;REDIRECTOR_USE_PROXY_PROTOCOL = %(USE_PROXY_PROTOCOL)s +;; Minimum and maximum supported TLS versions +;SSL_MIN_VERSION=TLSv1.2 +;SSL_MAX_VERSION= +;; +;; SSL Curve Preferences +;SSL_CURVE_PREFERENCES=X25519,P256 +;; +;; SSL Cipher Suites +;SSL_CIPHER_SUITES=; Will default to "ecdhe_ecdsa_with_aes_256_gcm_sha384,ecdhe_rsa_with_aes_256_gcm_sha384,ecdhe_ecdsa_with_aes_128_gcm_sha256,ecdhe_rsa_with_aes_128_gcm_sha256,ecdhe_ecdsa_with_chacha20_poly1305,ecdhe_rsa_with_chacha20_poly1305" if aes is supported by hardware, otherwise chacha will be first. +;; +;; Timeout for any write to the connection. (Set to -1 to disable all timeouts.) +;PER_WRITE_TIMEOUT = 30s +;; +;; Timeout per Kb written to connections. +;PER_WRITE_PER_KB_TIMEOUT = 30s +;; +;; Permission for unix socket +;UNIX_SOCKET_PERMISSION = 666 +;; +;; Local (DMZ) URL for Gitea workers (such as SSH update) accessing web service. In +;; most cases you do not need to change the default value. Alter it only if +;; your SSH server node is not the same as HTTP node. For different protocol, the default +;; values are different. If `PROTOCOL` is `http+unix`, the default value is `http://unix/`. +;; If `PROTOCOL` is `fcgi` or `fcgi+unix`, the default value is `%(PROTOCOL)s://%(HTTP_ADDR)s:%(HTTP_PORT)s/`. +;; If listen on `0.0.0.0`, the default value is `%(PROTOCOL)s://localhost:%(HTTP_PORT)s/`, Otherwise the default +;; value is `%(PROTOCOL)s://%(HTTP_ADDR)s:%(HTTP_PORT)s/`. +;LOCAL_ROOT_URL = %(PROTOCOL)s://%(HTTP_ADDR)s:%(HTTP_PORT)s/ +;; +;; When making local connections pass the PROXY protocol header. +;LOCAL_USE_PROXY_PROTOCOL = %(USE_PROXY_PROTOCOL)s +;; +;; Disable SSH feature when not available +;DISABLE_SSH = false +;; +;; Whether to use the builtin SSH server or not. +;START_SSH_SERVER = false +;; +;; Expect PROXY protocol header on connections to the built-in SSH server +;SSH_SERVER_USE_PROXY_PROTOCOL = false +;; +;; Username to use for the builtin SSH server. If blank, then it is the value of RUN_USER. +;BUILTIN_SSH_SERVER_USER = %(RUN_USER)s +;; +;; Domain name to be exposed in clone URL +;SSH_DOMAIN = %(DOMAIN)s +;; +;; SSH username displayed in clone URLs. +;SSH_USER = %(BUILTIN_SSH_SERVER_USER)s +;; +;; The network interface the builtin SSH server should listen on +;SSH_LISTEN_HOST = +;; +;; Port number to be exposed in clone URL +;SSH_PORT = 22 +;; +;; The port number the builtin SSH server should listen on +;SSH_LISTEN_PORT = %(SSH_PORT)s +;; +;; Root path of SSH directory, default is '~/.ssh', but you have to use '/home/git/.ssh'. +;SSH_ROOT_PATH = +;; +;; Gitea will create a authorized_keys file by default when it is not using the internal ssh server +;; If you intend to use the AuthorizedKeysCommand functionality then you should turn this off. +;SSH_CREATE_AUTHORIZED_KEYS_FILE = true +;; +;; Gitea will create a authorized_principals file by default when it is not using the internal ssh server +;; If you intend to use the AuthorizedPrincipalsCommand functionality then you should turn this off. +;SSH_CREATE_AUTHORIZED_PRINCIPALS_FILE = true +;; +;; For the built-in SSH server, choose the ciphers to support for SSH connections, +;; for system SSH this setting has no effect +;SSH_SERVER_CIPHERS = chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com +;; +;; For the built-in SSH server, choose the key exchange algorithms to support for SSH connections, +;; for system SSH this setting has no effect +;SSH_SERVER_KEY_EXCHANGES = curve25519-sha256, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1 +;; +;; For the built-in SSH server, choose the MACs to support for SSH connections, +;; for system SSH this setting has no effect +;SSH_SERVER_MACS = hmac-sha2-256-etm@openssh.com, hmac-sha2-256, hmac-sha1 +;; +;; For the built-in SSH server, choose the keypair to offer as the host key +;; The private key should be at SSH_SERVER_HOST_KEY and the public SSH_SERVER_HOST_KEY.pub +;; relative paths are made absolute relative to the %(APP_DATA_PATH)s +;SSH_SERVER_HOST_KEYS=ssh/gitea.rsa, ssh/gogs.rsa +;; +;; Directory to create temporary files in when testing public keys using ssh-keygen, +;; default is the system temporary directory. +;SSH_KEY_TEST_PATH = +;; +;; Use `ssh-keygen` to parse public SSH keys. The value is passed to the shell. By default, Gitea does the parsing itself. +;SSH_KEYGEN_PATH = +;; +;; Enable SSH Authorized Key Backup when rewriting all keys, default is false +;SSH_AUTHORIZED_KEYS_BACKUP = false +;; +;; Determines which principals to allow +;; - empty: if SSH_TRUSTED_USER_CA_KEYS is empty this will default to off, otherwise will default to email, username. +;; - off: Do not allow authorized principals +;; - email: the principal must match the user's email +;; - username: the principal must match the user's username +;; - anything: there will be no checking on the content of the principal +;SSH_AUTHORIZED_PRINCIPALS_ALLOW = email, username +;; +;; Enable SSH Authorized Principals Backup when rewriting all keys, default is true +;SSH_AUTHORIZED_PRINCIPALS_BACKUP = true +;; +;; Specifies the public keys of certificate authorities that are trusted to sign user certificates for authentication. +;; Multiple keys should be comma separated. +;; E.g."ssh- ". or "ssh- , ssh- ". +;; For more information see "TrustedUserCAKeys" in the sshd config manpages. +;SSH_TRUSTED_USER_CA_KEYS = +;; Absolute path of the `TrustedUserCaKeys` file gitea will manage. +;; Default this `RUN_USER`/.ssh/gitea-trusted-user-ca-keys.pem +;; If you're running your own ssh server and you want to use the gitea managed file you'll also need to modify your +;; sshd_config to point to this file. The official docker image will automatically work without further configuration. +;SSH_TRUSTED_USER_CA_KEYS_FILENAME = +;; +;; Enable exposure of SSH clone URL to anonymous visitors, default is false +;SSH_EXPOSE_ANONYMOUS = false +;; +;; Timeout for any write to ssh connections. (Set to -1 to disable all timeouts.) +;; Will default to the PER_WRITE_TIMEOUT. +;SSH_PER_WRITE_TIMEOUT = 30s +;; +;; Timeout per Kb written to ssh connections. +;; Will default to the PER_WRITE_PER_KB_TIMEOUT. +;SSH_PER_WRITE_PER_KB_TIMEOUT = 30s +;; +;; Indicate whether to check minimum key size with corresponding type +;MINIMUM_KEY_SIZE_CHECK = false +;; +;; Disable CDN even in "prod" mode +;OFFLINE_MODE = true +;; +;; TLS Settings: Either ACME or manual +;; (Other common TLS configuration are found before) +;ENABLE_ACME = false +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; ACME automatic TLS settings +;; +;; ACME directory URL (e.g. LetsEncrypt's staging/testing URL: https://acme-staging-v02.api.letsencrypt.org/directory) +;; Leave empty to default to LetsEncrypt's (production) URL +;ACME_URL = +;; +;; Explicitly accept the ACME's TOS. The specific TOS cannot be retrieved at the moment. +;ACME_ACCEPTTOS = false +;; +;; If the ACME CA is not in your system's CA trust chain, it can be manually added here +;ACME_CA_ROOT = +;; +;; Email used for the ACME registration service +;; Can be left blank to initialize at first run and use the cached value +;ACME_EMAIL = +;; +;; ACME live directory (not to be confused with ACME directory URL: ACME_URL) +;; (Refer to caddy's ACME manager https://github.com/caddyserver/certmagic) +;ACME_DIRECTORY = https +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Manual TLS settings: (Only applicable if ENABLE_ACME=false) +;; +;; Generate steps: +;; $ ./gitea cert -ca=true -duration=8760h0m0s -host=myhost.example.com +;; +;; Or from a .pfx file exported from the Windows certificate store (do +;; not forget to export the private key): +;; $ openssl pkcs12 -in cert.pfx -out cert.pem -nokeys +;; $ openssl pkcs12 -in cert.pfx -out key.pem -nocerts -nodes +;; Paths are relative to CUSTOM_PATH +;CERT_FILE = https/cert.pem +;KEY_FILE = https/key.pem +;; +;; Root directory containing templates and static files. +;; default is the path where Gitea is executed +;STATIC_ROOT_PATH = ; Will default to the built-in value _`StaticRootPath`_ +;; +;; Default path for App data +;APP_DATA_PATH = data ; relative paths will be made absolute with _`AppWorkPath`_ +;; +;; Enable gzip compression for runtime-generated content, static resources excluded +;ENABLE_GZIP = false +;; +;; Application profiling (memory and cpu) +;; For "web" command it listens on localhost:6060 +;; For "serve" command it dumps to disk at PPROF_DATA_PATH as (cpuprofile|memprofile)__ +;ENABLE_PPROF = false +;; +;; PPROF_DATA_PATH, use an absolute path when you start gitea as service +;PPROF_DATA_PATH = data/tmp/pprof ; Path is relative to _`AppWorkPath`_ +;; +;; Landing page, can be "home", "explore", "organizations", "login", or any URL such as "/org/repo" or even "https://anotherwebsite.com" +;; The "login" choice is not a security measure but just a UI flow change, use REQUIRE_SIGNIN_VIEW to force users to log in. +;LANDING_PAGE = home +;; +;; Enables git-lfs support. true or false, default is false. +;LFS_START_SERVER = false +;; +;; +;; LFS authentication secret, change this yourself +;LFS_JWT_SECRET = +;; +;; Alternative location to specify LFS authentication secret. You cannot specify both this and LFS_JWT_SECRET, and must pick one +;LFS_JWT_SECRET_URI = file:/etc/gitea/lfs_jwt_secret +;; +;; LFS authentication validity period (in time.Duration), pushes taking longer than this may fail. +;LFS_HTTP_AUTH_EXPIRY = 24h +;; +;; Maximum allowed LFS file size in bytes (Set to 0 for no limit). +;LFS_MAX_FILE_SIZE = 0 +;; +;; Maximum number of locks returned per page +;LFS_LOCKS_PAGING_NUM = 50 +;; +;; Allow graceful restarts using SIGHUP to fork +;ALLOW_GRACEFUL_RESTARTS = true +;; +;; After a restart the parent will finish ongoing requests before +;; shutting down. Force shutdown if this process takes longer than this delay. +;; set to a negative value to disable +;GRACEFUL_HAMMER_TIME = 60s +;; +;; Allows the setting of a startup timeout and waithint for Windows as SVC service +;; 0 disables this. +;STARTUP_TIMEOUT = 0 +;; +;; Static resources, includes resources on custom/, public/ and all uploaded avatars web browser cache time. Note that this cache is disabled when RUN_MODE is "dev". Default is 6h +;STATIC_CACHE_TIME = 6h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[database] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Database to use. Either "mysql", "postgres", "mssql" or "sqlite3". +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; MySQL Configuration +;; +DB_TYPE = mysql +HOST = 127.0.0.1:3306 ; can use socket e.g. /var/run/mysqld/mysqld.sock +NAME = gitea +USER = root +;PASSWD = ;Use PASSWD = `your password` for quoting if you use special characters in the password. +;SSL_MODE = false ; either "false" (default), "true", or "skip-verify" +;CHARSET_COLLATION = ; Empty as default, Gitea will try to find a case-sensitive collation. Don't change it unless you clearly know what you need. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Postgres Configuration +;; +;DB_TYPE = postgres +;HOST = 127.0.0.1:5432 ; can use socket e.g. /var/run/postgresql/ +;NAME = gitea +;USER = root +;PASSWD = +;SCHEMA = +;SSL_MODE=disable ;either "disable" (default), "require", or "verify-full" +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; SQLite Configuration +;; +;DB_TYPE = sqlite3 +;PATH= ; defaults to data/gitea.db +;SQLITE_TIMEOUT = ; Query timeout defaults to: 500 +;SQLITE_JOURNAL_MODE = ; defaults to sqlite database default (often DELETE), can be used to enable WAL mode. https://www.sqlite.org/pragma.html#pragma_journal_mode +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; MSSQL Configuration +;; +;DB_TYPE = mssql +;HOST = 172.17.0.2:1433 +;NAME = gitea +;USER = SA +;PASSWD = MwantsaSecurePassword1 +;CHARSET_COLLATION = ; Empty as default, Gitea will try to find a case-sensitive collation. Don't change it unless you clearly know what you need. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Other settings +;; +;; For iterate buffer, default is 50 +;ITERATE_BUFFER_SIZE = 50 +;; +;; Show the database generated SQL +;LOG_SQL = false +;; +;; Maximum number of DB Connect retries +;DB_RETRIES = 10 +;; +;; Backoff time per DB retry (time.Duration) +;DB_RETRY_BACKOFF = 3s +;; +;; Max idle database connections on connection pool, default is 2 +;MAX_IDLE_CONNS = 2 +;; +;; Database connection max life time, default is 0 or 3s mysql (See #6804 & #7071 for reasoning) +;CONN_MAX_LIFETIME = 3s +;; +;; Database maximum number of open connections, default is 0 meaning no maximum +;MAX_OPEN_CONNS = 0 +;; +;; Whether execute database models migrations automatically +;AUTO_MIGRATION = true +;; +;; Threshold value (in seconds) beyond which query execution time is logged as a warning in the xorm logger +;; +;SLOW_QUERY_THRESHOLD = 5s + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[security] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Whether the installer is disabled (set to true to disable the installer) +INSTALL_LOCK = false +;; +;; Global secret key that will be used +;; This key is VERY IMPORTANT. If you lose it, the data encrypted by it (like 2FA secret) can't be decrypted anymore. +SECRET_KEY = +;; +;; Alternative location to specify secret key, instead of this file; you cannot specify both this and SECRET_KEY, and must pick one +;; This key is VERY IMPORTANT. If you lose it, the data encrypted by it (like 2FA secret) can't be decrypted anymore. +;SECRET_KEY_URI = file:/etc/gitea/secret_key +;; +;; Secret used to validate communication within Gitea binary. +INTERNAL_TOKEN = +;; +;; Alternative location to specify internal token, instead of this file; you cannot specify both this and INTERNAL_TOKEN, and must pick one +;INTERNAL_TOKEN_URI = file:/etc/gitea/internal_token +;; +;; How long to remember that a user is logged in before requiring relogin (in days) +;LOGIN_REMEMBER_DAYS = 31 +;; +;; Name of the cookie used to store the current username. +;COOKIE_USERNAME = gitea_awesome +;; +;; Name of cookie used to store authentication information. +;COOKIE_REMEMBER_NAME = gitea_incredible +;; +;; Reverse proxy authentication header name of user name, email, and full name +;REVERSE_PROXY_AUTHENTICATION_USER = X-WEBAUTH-USER +;REVERSE_PROXY_AUTHENTICATION_EMAIL = X-WEBAUTH-EMAIL +;REVERSE_PROXY_AUTHENTICATION_FULL_NAME = X-WEBAUTH-FULLNAME +;; +;; Interpret X-Forwarded-For header or the X-Real-IP header and set this as the remote IP for the request +;REVERSE_PROXY_LIMIT = 1 +;; +;; List of IP addresses and networks separated by comma of trusted proxy servers. Use `*` to trust all. +;REVERSE_PROXY_TRUSTED_PROXIES = 127.0.0.0/8,::1/128 +;; +;; The minimum password length for new Users +;MIN_PASSWORD_LENGTH = 8 +;; +;; Set to true to allow users to import local server paths +;IMPORT_LOCAL_PATHS = false +;; +;; Set to false to allow users with git hook privileges to create custom git hooks. +;; Custom git hooks can be used to perform arbitrary code execution on the host operating system. +;; This enables the users to access and modify this config file and the Gitea database and interrupt the Gitea service. +;; By modifying the Gitea database, users can gain Gitea administrator privileges. +;; It also enables them to access other resources available to the user on the operating system that is running the Gitea instance and perform arbitrary actions in the name of the Gitea OS user. +;; WARNING: This maybe harmful to you website or your operating system. +;; WARNING: Setting this to true does not change existing hooks in git repos; adjust it before if necessary. +;DISABLE_GIT_HOOKS = true +;; +;; Set to true to disable webhooks feature. +;DISABLE_WEBHOOKS = false +;; +;; Set to false to allow pushes to gitea repositories despite having an incomplete environment - NOT RECOMMENDED +;ONLY_ALLOW_PUSH_IF_GITEA_ENVIRONMENT_SET = true +;; +;;Comma separated list of character classes required to pass minimum complexity. +;;If left empty or no valid values are specified, the default is off (no checking) +;;Classes include "lower,upper,digit,spec" +;PASSWORD_COMPLEXITY = off +;; +;; Password Hash algorithm, either "argon2", "pbkdf2", "scrypt" or "bcrypt" +;PASSWORD_HASH_ALGO = pbkdf2 +;; +;; Set false to allow JavaScript to read CSRF cookie +;CSRF_COOKIE_HTTP_ONLY = true +;; +;; Validate against https://haveibeenpwned.com/Passwords to see if a password has been exposed +;PASSWORD_CHECK_PWN = false +;; +;; Cache successful token hashes. API tokens are stored in the DB as pbkdf2 hashes however, this means that there is a potentially significant hashing load when there are multiple API operations. +;; This cache will store the successfully hashed tokens in a LRU cache as a balance between performance and security. +;SUCCESSFUL_TOKENS_CACHE_SIZE = 20 +;; +;; Reject API tokens sent in URL query string (Accept Header-based API tokens only). This avoids security vulnerabilities +;; stemming from cached/logged plain-text API tokens. +;; In future releases, this will become the default behavior +;DISABLE_QUERY_AUTH_TOKEN = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[camo] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; At the moment we only support images +;; +;; if the camo is enabled +;ENABLED = false +;; url to a camo image proxy, it **is required** if camo is enabled. +;SERVER_URL = +;; HMAC to encode urls with, it **is required** if camo is enabled. +;HMAC_KEY = +;; Set to true to use camo for https too lese only non https urls are proxyed +;ALLWAYS = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[oauth2] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Enables OAuth2 provider +ENABLED = true +;; +;; Algorithm used to sign OAuth2 tokens. Valid values: HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, EdDSA +;JWT_SIGNING_ALGORITHM = RS256 +;; +;; Private key file path used to sign OAuth2 tokens. The path is relative to APP_DATA_PATH. +;; This setting is only needed if JWT_SIGNING_ALGORITHM is set to RS256, RS384, RS512, ES256, ES384 or ES512. +;; The file must contain a RSA or ECDSA private key in the PKCS8 format. If no key exists a 4096 bit key will be created for you. +;JWT_SIGNING_PRIVATE_KEY_FILE = jwt/private.pem +;; +;; OAuth2 authentication secret for access and refresh tokens, change this yourself to a unique string. CLI generate option is helpful in this case. https://docs.gitea.io/en-us/command-line/#generate +;; This setting is only needed if JWT_SIGNING_ALGORITHM is set to HS256, HS384 or HS512. +;JWT_SECRET = +;; +;; Alternative location to specify OAuth2 authentication secret. You cannot specify both this and JWT_SECRET, and must pick one +;JWT_SECRET_URI = file:/etc/gitea/oauth2_jwt_secret +;; +;; Lifetime of an OAuth2 access token in seconds +;ACCESS_TOKEN_EXPIRATION_TIME = 3600 +;; +;; Lifetime of an OAuth2 refresh token in hours +;REFRESH_TOKEN_EXPIRATION_TIME = 730 +;; +;; Check if refresh token got already used +;INVALIDATE_REFRESH_TOKENS = false +;; +;; Maximum length of oauth2 token/cookie stored on server +;MAX_TOKEN_LENGTH = 32767 +;; +;; Pre-register OAuth2 applications for some universally useful services +;; * https://github.com/hickford/git-credential-oauth +;; * https://github.com/git-ecosystem/git-credential-manager +;; * https://gitea.com/gitea/tea +;DEFAULT_APPLICATIONS = git-credential-oauth, git-credential-manager, tea + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[log] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Root path for the log files - defaults to %(GITEA_WORK_DIR)/log +;ROOT_PATH = +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Main Logger +;; +;; Either "console", "file" or "conn", default is "console" +;; Use comma to separate multiple modes, e.g. "console, file" +MODE = console +;; +;; Either "Trace", "Debug", "Info", "Warn", "Error" or "None", default is "Info" +LEVEL = Info +;; +;; Print Stacktrace with logs (rarely helpful, do not set) Either "Trace", "Debug", "Info", "Warn", "Error", default is "None" +;STACKTRACE_LEVEL = None +;; +;; Buffer length of the channel, keep it as it is if you don't know what it is. +;BUFFER_LEN = 10000 +;; +;; Sub logger modes, a single comma means use default MODE above, empty means disable it +;logger.access.MODE= +;logger.router.MODE=, +;logger.xorm.MODE=, +;; +;; Collect SSH logs (Creates log from ssh git request) +;; +;ENABLE_SSH_LOG = false +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Access Logger (Creates log in NCSA common log format) +;; +;; Print request id which parsed from request headers in access log, when access log is enabled. +;; * E.g: +;; * In request Header: X-Request-ID: test-id-123 +;; * Configuration in app.ini: REQUEST_ID_HEADERS = X-Request-ID +;; * Print in log: 127.0.0.1:58384 - - [14/Feb/2023:16:33:51 +0800] "test-id-123" +;; +;; If you configure more than one in the .ini file, it will match in the order of configuration, +;; and the first match will be finally printed in the log. +;; * E.g: +;; * In request Header: X-Trace-ID: trace-id-1q2w3e4r +;; * Configuration in app.ini: REQUEST_ID_HEADERS = X-Request-ID, X-Trace-ID, X-Req-ID +;; * Print in log: 127.0.0.1:58384 - - [14/Feb/2023:16:33:51 +0800] "trace-id-1q2w3e4r" +;; +;REQUEST_ID_HEADERS = +;; +;; Sets the template used to create the access log. +;ACCESS_LOG_TEMPLATE = {{.Ctx.RemoteHost}} - {{.Identity}} {{.Start.Format "[02/Jan/2006:15:04:05 -0700]" }} "{{.Ctx.Req.Method}} {{.Ctx.Req.URL.RequestURI}} {{.Ctx.Req.Proto}}" {{.ResponseWriter.Status}} {{.ResponseWriter.Size}} "{{.Ctx.Req.Referer}}" "{{.Ctx.Req.UserAgent}}" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Log modes (aka log writers) +;; +;[log.%(WriterMode)] +;MODE=console/file/conn/... +;LEVEL= +;FLAGS = stdflags +;EXPRESSION = +;PREFIX = +;COLORIZE = false +;; +;[log.console] +;STDERR = false +;; +;[log.file] +;; Set the file_name for the logger. If this is a relative path this will be relative to ROOT_PATH +;FILE_NAME = +;; This enables automated log rotate(switch of following options), default is true +;LOG_ROTATE = true +;; Max size shift of a single file, default is 28 means 1 << 28, 256MB +;MAX_SIZE_SHIFT = 28 +;; Segment log daily, default is true +;DAILY_ROTATE = true +;; delete the log file after n days, default is 7 +;MAX_DAYS = 7 +;; compress logs with gzip +;COMPRESS = true +;; compression level see godoc for compress/gzip +;COMPRESSION_LEVEL = -1 +;; +;[log.conn] +;; Reconnect host for every single message, default is false +;RECONNECT_ON_MSG = false +;; Try to reconnect when connection is lost, default is false +;RECONNECT = false +;; Either "tcp", "unix" or "udp", default is "tcp" +;PROTOCOL = tcp +;; Host address +;ADDR = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[git] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; The path of git executable. If empty, Gitea searches through the PATH environment. +;PATH = +;; +;; The HOME directory for Git +;HOME_PATH = %(APP_DATA_PATH)s/home +;; +;; Disables highlight of added and removed changes +;DISABLE_DIFF_HIGHLIGHT = false +;; +;; Max number of lines allowed in a single file in diff view +;MAX_GIT_DIFF_LINES = 1000 +;; +;; Max number of allowed characters in a line in diff view +;MAX_GIT_DIFF_LINE_CHARACTERS = 5000 +;; +;; Max number of files shown in diff view +;MAX_GIT_DIFF_FILES = 100 +;; +;; Set the default commits range size +;COMMITS_RANGE_SIZE = 50 +;; +;; Set the default branches range size +;BRANCHES_RANGE_SIZE = 20 +;; +;; Arguments for command 'git gc', e.g. "--aggressive --auto" +;; see more on http://git-scm.com/docs/git-gc/ +;GC_ARGS = +;; +;; If use git wire protocol version 2 when git version >= 2.18, default is true, set to false when you always want git wire protocol version 1 +;; To enable this for Git over SSH when using a OpenSSH server, add `AcceptEnv GIT_PROTOCOL` to your sshd_config file. +;ENABLE_AUTO_GIT_WIRE_PROTOCOL = true +;; +;; Respond to pushes to a non-default branch with a URL for creating a Pull Request (if the repository has them enabled) +;PULL_REQUEST_PUSH_MESSAGE = true +;; +;; (Go-Git only) Don't cache objects greater than this in memory. (Set to 0 to disable.) +;LARGE_OBJECT_THRESHOLD = 1048576 +;; Set to true to forcibly set core.protectNTFS=false +;DISABLE_CORE_PROTECT_NTFS=false +;; Disable the usage of using partial clones for git. +;DISABLE_PARTIAL_CLONE = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Git Operation timeout in seconds +;[git.timeout] +;DEFAULT = 360 +;MIGRATE = 600 +;MIRROR = 300 +;CLONE = 300 +;PULL = 300 +;GC = 60 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Git config options +;; This section only does "set" config, a removed config key from this section won't be removed from git config automatically. The format is `some.configKey = value`. +;[git.config] +;diff.algorithm = histogram +;core.logAllRefUpdates = true +;gc.reflogExpire = 90 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[service] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Time limit to confirm account/email registration +;ACTIVE_CODE_LIVE_MINUTES = 180 +;; +;; Time limit to perform the reset of a forgotten password +;RESET_PASSWD_CODE_LIVE_MINUTES = 180 +;; +;; Whether a new user needs to confirm their email when registering. +;REGISTER_EMAIL_CONFIRM = false +;; +;; Whether a new user needs to be confirmed manually after registration. (Requires `REGISTER_EMAIL_CONFIRM` to be disabled.) +;REGISTER_MANUAL_CONFIRM = false +;; +;; List of domain names that are allowed to be used to register on a Gitea instance, wildcard is supported +;; eg: gitea.io,example.com,*.mydomain.com +;EMAIL_DOMAIN_ALLOWLIST = +;; +;; Comma-separated list of domain names that are not allowed to be used to register on a Gitea instance, wildcard is supported +;EMAIL_DOMAIN_BLOCKLIST = +;; +;; Disallow registration, only allow admins to create accounts. +;DISABLE_REGISTRATION = false +;; +;; Allow registration only using gitea itself, it works only when DISABLE_REGISTRATION is false +;ALLOW_ONLY_INTERNAL_REGISTRATION = false +;; +;; Allow registration only using third-party services, it works only when DISABLE_REGISTRATION is false +;ALLOW_ONLY_EXTERNAL_REGISTRATION = false +;; +;; User must sign in to view anything. +;REQUIRE_SIGNIN_VIEW = false +;; +;; Mail notification +;ENABLE_NOTIFY_MAIL = false +;; +;; This setting enables gitea to be signed in with HTTP BASIC Authentication using the user's password +;; If you set this to false you will not be able to access the tokens endpoints on the API with your password +;; Please note that setting this to false will not disable OAuth Basic or Basic authentication using a token +;ENABLE_BASIC_AUTHENTICATION = true +;; +;; More detail: https://github.com/gogits/gogs/issues/165 +;ENABLE_REVERSE_PROXY_AUTHENTICATION = false +; Enable this to allow reverse proxy authentication for API requests, the reverse proxy is responsible for ensuring that no CSRF is possible. +;ENABLE_REVERSE_PROXY_AUTHENTICATION_API = false +;ENABLE_REVERSE_PROXY_AUTO_REGISTRATION = false +;ENABLE_REVERSE_PROXY_EMAIL = false +;ENABLE_REVERSE_PROXY_FULL_NAME = false +;; +;; Enable captcha validation for registration +;ENABLE_CAPTCHA = false +;; +;; Enable this to require captcha validation for login +;REQUIRE_CAPTCHA_FOR_LOGIN = false +;; +;; Type of captcha you want to use. Options: image, recaptcha, hcaptcha, mcaptcha, cfturnstile. +;CAPTCHA_TYPE = image +;; +;; Change this to use recaptcha.net or other recaptcha service +;RECAPTCHA_URL = https://www.google.com/recaptcha/ +;; Enable recaptcha to use Google's recaptcha service +;; Go to https://www.google.com/recaptcha/admin to sign up for a key +;RECAPTCHA_SECRET = +;RECAPTCHA_SITEKEY = +;; +;; For hCaptcha, create an account at https://accounts.hcaptcha.com/login to get your keys +;HCAPTCHA_SECRET = +;HCAPTCHA_SITEKEY = +;; +;; Change this to use demo.mcaptcha.org or your self-hosted mcaptcha.org instance. +;MCAPTCHA_URL = https://demo.mcaptcha.org +;; +;; Go to your configured mCaptcha instance and register a sitekey +;; and use your account's secret. +;MCAPTCHA_SECRET = +;MCAPTCHA_SITEKEY = +;; +;; Go to https://dash.cloudflare.com/?to=/:account/turnstile to sign up for a key +;CF_TURNSTILE_SITEKEY = +;CF_TURNSTILE_SECRET = +;; +;; Default value for KeepEmailPrivate +;; Each new user will get the value of this setting copied into their profile +;DEFAULT_KEEP_EMAIL_PRIVATE = false +;; +;; Default value for AllowCreateOrganization +;; Every new user will have rights set to create organizations depending on this setting +;DEFAULT_ALLOW_CREATE_ORGANIZATION = true +;; Default value for IsRestricted +;; Every new user will have restricted permissions depending on this setting +;DEFAULT_USER_IS_RESTRICTED = false +;; +;; Either "public", "limited" or "private", default is "public" +;; Limited is for users visible only to signed users +;; Private is for users visible only to members of their organizations +;; Public is for users visible for everyone +;DEFAULT_USER_VISIBILITY = public +;; +;; Set which visibility modes a user can have +;ALLOWED_USER_VISIBILITY_MODES = public,limited,private +;; +;; Either "public", "limited" or "private", default is "public" +;; Limited is for organizations visible only to signed users +;; Private is for organizations visible only to members of the organization +;; Public is for organizations visible to everyone +;DEFAULT_ORG_VISIBILITY = public +;; +;; Default value for DefaultOrgMemberVisible +;; True will make the membership of the users visible when added to the organisation +;DEFAULT_ORG_MEMBER_VISIBLE = false +;; +;; Default value for EnableDependencies +;; Repositories will use dependencies by default depending on this setting +;DEFAULT_ENABLE_DEPENDENCIES = true +;; +;; Dependencies can be added from any repository where the user is granted access or only from the current repository depending on this setting. +;ALLOW_CROSS_REPOSITORY_DEPENDENCIES = true +;; +;; Default map service. No external API support has been included. A service has to allow +;; searching using URL parameters, the location will be appended to the URL as escaped query parameter. +;; Disabled by default, some example values are: +;; - OpenStreetMap: https://www.openstreetmap.org/search?query= +;; - Google Maps: https://www.google.com/maps/place/ +;; - MapQuest: https://www.mapquest.com/search/ +;; - Bing Maps: https://www.bing.com/maps?where1= +; USER_LOCATION_MAP_URL = +;; +;; Enable heatmap on users profiles. +;ENABLE_USER_HEATMAP = true +;; +;; Enable Timetracking +;ENABLE_TIMETRACKING = true +;; +;; Default value for EnableTimetracking +;; Repositories will use timetracking by default depending on this setting +;DEFAULT_ENABLE_TIMETRACKING = true +;; +;; Default value for AllowOnlyContributorsToTrackTime +;; Only users with write permissions can track time if this is true +;DEFAULT_ALLOW_ONLY_CONTRIBUTORS_TO_TRACK_TIME = true +;; +;; Value for the domain part of the user's email address in the git log if user +;; has set KeepEmailPrivate to true. The user's email will be replaced with a +;; concatenation of the user name in lower case, "@" and NO_REPLY_ADDRESS. Default +;; value is "noreply." + DOMAIN, where DOMAIN resolves to the value from server.DOMAIN +;; Note: do not use the notation below +;NO_REPLY_ADDRESS = ; noreply. +;; +;; Show Registration button +;SHOW_REGISTRATION_BUTTON = true +;; +;; Show milestones dashboard page - a view of all the user's milestones +;SHOW_MILESTONES_DASHBOARD_PAGE = true +;; +;; Default value for AutoWatchNewRepos +;; When adding a repo to a team or creating a new repo all team members will watch the +;; repo automatically if enabled +;AUTO_WATCH_NEW_REPOS = true +;; +;; Default value for AutoWatchOnChanges +;; Make the user watch a repository When they commit for the first time +;AUTO_WATCH_ON_CHANGES = false +;; +;; Minimum amount of time a user must exist before comments are kept when the user is deleted. +;USER_DELETE_WITH_COMMENTS_MAX_TIME = 0 +;; Valid site url schemes for user profiles +;VALID_SITE_URL_SCHEMES=http,https + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Other Settings +;; +;; Uncomment the [section.header] if you wish to +;; set the below settings. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Root path for storing all repository data. By default, it is set to %(APP_DATA_PATH)s/gitea-repositories. +;; A relative path is interpreted as _`AppWorkPath`_/%(ROOT)s +;ROOT = +;; +;; The script type this server supports. Usually this is `bash`, but some users report that only `sh` is available. +;SCRIPT_TYPE = bash +;; +;; DETECTED_CHARSETS_ORDER tie-break order for detected charsets. +;; If the charsets have equal confidence, tie-breaking will be done by order in this list +;; with charsets earlier in the list chosen in preference to those later. +;; Adding "defaults" will place the unused charsets at that position. +;DETECTED_CHARSETS_ORDER = UTF-8, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE, ISO-8859, windows-1252, ISO-8859, windows-1250, ISO-8859, ISO-8859, ISO-8859, windows-1253, ISO-8859, windows-1255, ISO-8859, windows-1251, windows-1256, KOI8-R, ISO-8859, windows-1254, Shift_JIS, GB18030, EUC-JP, EUC-KR, Big5, ISO-2022, ISO-2022, ISO-2022, IBM424_rtl, IBM424_ltr, IBM420_rtl, IBM420_ltr +;; +;; Default ANSI charset to override non-UTF-8 charsets to +;ANSI_CHARSET = +;; +;; Force every new repository to be private +;FORCE_PRIVATE = false +;; +;; Default privacy setting when creating a new repository, allowed values: last, private, public. Default is last which means the last setting used. +;DEFAULT_PRIVATE = last +;; +;; Default private when using push-to-create +;DEFAULT_PUSH_CREATE_PRIVATE = true +;; +;; Global limit of repositories per user, applied at creation time. -1 means no limit +;MAX_CREATION_LIMIT = -1 +;; +;; Preferred Licenses to place at the top of the List +;; The name here must match the filename in options/license or custom/options/license +;PREFERRED_LICENSES = Apache License 2.0,MIT License +;; +;; Disable the ability to interact with repositories using the HTTP protocol +;DISABLE_HTTP_GIT = false +;; +;; Value for Access-Control-Allow-Origin header, default is not to present +;; WARNING: This may be harmful to your website if you do not give it a right value. +;ACCESS_CONTROL_ALLOW_ORIGIN = +;; +;; Force ssh:// clone url instead of scp-style uri when default SSH port is used +;USE_COMPAT_SSH_URI = false +;; +;; Value for the "go get" request returns the repository url as https or ssh, default is https +;GO_GET_CLONE_URL_PROTOCOL = https +;; +;; Close issues as long as a commit on any branch marks it as fixed +;DEFAULT_CLOSE_ISSUES_VIA_COMMITS_IN_ANY_BRANCH = false +;; +;; Allow users to push local repositories to Gitea and have them automatically created for a user or an org +;ENABLE_PUSH_CREATE_USER = false +;ENABLE_PUSH_CREATE_ORG = false +;; +;; Comma separated list of globally disabled repo units. Allowed values: repo.issues, repo.ext_issues, repo.pulls, repo.wiki, repo.ext_wiki, repo.projects, repo.packages, repo.actions. +;DISABLED_REPO_UNITS = +;; +;; Comma separated list of default new repo units. Allowed values: repo.code, repo.releases, repo.issues, repo.pulls, repo.wiki, repo.projects, repo.packages, repo.actions. +;; Note: Code and Releases can currently not be deactivated. If you specify default repo units you should still list them for future compatibility. +;; External wiki and issue tracker can't be enabled by default as it requires additional settings. +;; Disabled repo units will not be added to new repositories regardless if it is in the default list. +;DEFAULT_REPO_UNITS = repo.code,repo.releases,repo.issues,repo.pulls,repo.wiki,repo.projects,repo.packages,repo.actions +;; +;; Comma separated list of default forked repo units. +;; The set of allowed values and rules are the same as DEFAULT_REPO_UNITS. +;DEFAULT_FORK_REPO_UNITS = repo.code,repo.pulls +;; +;; Prefix archive files by placing them in a directory named after the repository +;PREFIX_ARCHIVE_FILES = true +;; +;; Disable migrating feature. +;DISABLE_MIGRATIONS = false +;; +;; Disable stars feature. +;DISABLE_STARS = false +;; +;; The default branch name of new repositories +;DEFAULT_BRANCH = main +;; +;; Allow adoption of unadopted repositories +;ALLOW_ADOPTION_OF_UNADOPTED_REPOSITORIES = false +;; +;; Allow deletion of unadopted repositories +;ALLOW_DELETION_OF_UNADOPTED_REPOSITORIES = false + +;; Don't allow download source archive files from UI +;DISABLE_DOWNLOAD_SOURCE_ARCHIVES = false + +;; Allow fork repositories without maximum number limit +;ALLOW_FORK_WITHOUT_MAXIMUM_LIMIT = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.editor] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; List of file extensions for which lines should be wrapped in the Monaco editor +;; Separate extensions with a comma. To line wrap files without an extension, just put a comma +;LINE_WRAP_EXTENSIONS = .txt,.md,.markdown,.mdown,.mkd,.livemd, + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.local] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Path for local repository copy. Defaults to `tmp/local-repo` (content gets deleted on gitea restart) +;LOCAL_COPY_PATH = tmp/local-repo + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.upload] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Whether repository file uploads are enabled. Defaults to `true` +;ENABLED = true +;; +;; Path for uploads. Defaults to `data/tmp/uploads` (content gets deleted on gitea restart) +;TEMP_PATH = data/tmp/uploads +;; +;; Comma-separated list of allowed file extensions (`.zip`), mime types (`text/plain`) or wildcard type (`image/*`, `audio/*`, `video/*`). Empty value or `*/*` allows all types. +;ALLOWED_TYPES = +;; +;; Max size of each file in megabytes. Defaults to 50MB +;FILE_MAX_SIZE = 50 +;; +;; Max number of files per upload. Defaults to 5 +;MAX_FILES = 5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.pull-request] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; List of prefixes used in Pull Request title to mark them as Work In Progress (matched in a case-insensitive manner) +;WORK_IN_PROGRESS_PREFIXES = WIP:,[WIP] +;; +;; List of keywords used in Pull Request comments to automatically close a related issue +;CLOSE_KEYWORDS = close,closes,closed,fix,fixes,fixed,resolve,resolves,resolved +;; +;; List of keywords used in Pull Request comments to automatically reopen a related issue +;REOPEN_KEYWORDS = reopen,reopens,reopened +;; +;; Set default merge style for repository creating, valid options: merge, rebase, rebase-merge, squash, fast-forward-only +;DEFAULT_MERGE_STYLE = merge +;; +;; In the default merge message for squash commits include at most this many commits +;DEFAULT_MERGE_MESSAGE_COMMITS_LIMIT = 50 +;; +;; In the default merge message for squash commits limit the size of the commit messages to this +;DEFAULT_MERGE_MESSAGE_SIZE = 5120 +;; +;; In the default merge message for squash commits walk all commits to include all authors in the Co-authored-by otherwise just use those in the limited list +;DEFAULT_MERGE_MESSAGE_ALL_AUTHORS = false +;; +;; In default merge messages limit the number of approvers listed as Reviewed-by: to this many +;DEFAULT_MERGE_MESSAGE_MAX_APPROVERS = 10 +;; +;; In default merge messages only include approvers who are official +;DEFAULT_MERGE_MESSAGE_OFFICIAL_APPROVERS_ONLY = true +;; +;; Add co-authored-by and co-committed-by trailers if committer does not match author +;ADD_CO_COMMITTER_TRAILERS = true +;; +;; In addition to testing patches using the three-way merge method, re-test conflicting patches with git apply +;TEST_CONFLICTING_PATCHES_WITH_GIT_APPLY = false +;; +;; Retarget child pull requests to the parent pull request branch target on merge of parent pull request. It only works on merged PRs where the head and base branch target the same repo. +;RETARGET_CHILDREN_ON_MERGE = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.issue] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; List of reasons why a Pull Request or Issue can be locked +;LOCK_REASONS = Too heated,Off-topic,Resolved,Spam +;; Maximum number of pinned Issues per repo +;; Set to 0 to disable pinning Issues +;MAX_PINNED = 3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.release] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Comma-separated list of allowed file extensions (`.zip`), mime types (`text/plain`) or wildcard type (`image/*`, `audio/*`, `video/*`). Empty value or `*/*` allows all types. +;ALLOWED_TYPES = +;DEFAULT_PAGING_NUM = 10 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.signing] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; GPG key to use to sign commits, Defaults to the default - that is the value of git config --get user.signingkey +;; run in the context of the RUN_USER +;; Switch to none to stop signing completely +;SIGNING_KEY = default +;; +;; If a SIGNING_KEY ID is provided and is not set to default, use the provided Name and Email address as the signer. +;; These should match a publicized name and email address for the key. (When SIGNING_KEY is default these are set to +;; the results of git config --get user.name and git config --get user.email respectively and can only be overridden +;; by setting the SIGNING_KEY ID to the correct ID.) +;SIGNING_NAME = +;SIGNING_EMAIL = +;; +;; Sets the default trust model for repositories. Options are: collaborator, committer, collaboratorcommitter +;DEFAULT_TRUST_MODEL = collaborator +;; +;; Determines when gitea should sign the initial commit when creating a repository +;; Either: +;; - never +;; - pubkey: only sign if the user has a pubkey +;; - twofa: only sign if the user has logged in with twofa +;; - always +;; options other than none and always can be combined as comma separated list +;INITIAL_COMMIT = always +;; +;; Determines when to sign for CRUD actions +;; - as above +;; - parentsigned: requires that the parent commit is signed. +;CRUD_ACTIONS = pubkey, twofa, parentsigned +;; Determines when to sign Wiki commits +;; - as above +;WIKI = never +;; +;; Determines when to sign on merges +;; - basesigned: require that the parent of commit on the base repo is signed. +;; - commitssigned: require that all the commits in the head branch are signed. +;; - approved: only sign when merging an approved pr to a protected branch +;MERGES = pubkey, twofa, basesigned, commitssigned + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.mimetype_mapping] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Custom MIME type mapping for downloadable files +;.apk=application/vnd.android.package-archive + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[project] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Default templates for project boards +;PROJECT_BOARD_BASIC_KANBAN_TYPE = To Do, In Progress, Done +;PROJECT_BOARD_BUG_TRIAGE_TYPE = Needs Triage, High Priority, Low Priority, Closed + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cors] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; More information about CORS can be found here: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#The_HTTP_response_headers +;; enable cors headers (disabled by default) +;ENABLED = false +;; +;; list of requesting origins that are allowed, eg: "https://*.example.com" +;ALLOW_DOMAIN = * +;; +;; list of methods allowed to request +;METHODS = GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS +;; +;; max time to cache response +;MAX_AGE = 10m +;; +;; allow request with credentials +;ALLOW_CREDENTIALS = false +;; +;; headers to permit +;HEADERS = Content-Type,User-Agent +;; +;; set X-FRAME-OPTIONS header +;X_FRAME_OPTIONS = SAMEORIGIN + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Number of repositories that are displayed on one explore page +;EXPLORE_PAGING_NUM = 20 +;; +;; Number of issues that are displayed on one page +;ISSUE_PAGING_NUM = 20 +;; +;; Number of maximum commits displayed in one activity feed +;FEED_MAX_COMMIT_NUM = 5 +;; +;; Number of items that are displayed in home feed +;FEED_PAGING_NUM = 20 +;; +;; Number of items that are displayed in a single subsitemap +;SITEMAP_PAGING_NUM = 20 +;; +;; Number of maximum commits displayed in commit graph. +;GRAPH_MAX_COMMIT_NUM = 100 +;; +;; Number of line of codes shown for a code comment +;CODE_COMMENT_LINES = 4 +;; +;; Max size of files to be displayed (default is 8MiB) +;MAX_DISPLAY_FILE_SIZE = 8388608 +;; +;; Detect ambiguous unicode characters in file contents and show warnings on the UI +;AMBIGUOUS_UNICODE_DETECTION = true +;; +;; Whether the email of the user should be shown in the Explore Users page +;SHOW_USER_EMAIL = true +;; +;; Set the default theme for the Gitea install +;DEFAULT_THEME = gitea-auto +;; +;; All available themes. Allow users select personalized themes regardless of the value of `DEFAULT_THEME`. +;; Leave it empty to allow users to select any theme from "{CustomPath}/public/assets/css/theme-*.css" +;THEMES = +;; +;; All available reactions users can choose on issues/prs and comments. +;; Values can be emoji alias (:smile:) or a unicode emoji. +;; For custom reactions, add a tightly cropped square image to public/assets/img/emoji/reaction_name.png +;REACTIONS = +1, -1, laugh, hooray, confused, heart, rocket, eyes +;; +;; Change the number of users that are displayed in reactions tooltip (triggered by mouse hover). +;REACTION_MAX_USER_NUM = 10 +;; +;; Additional Emojis not defined in the utf8 standard +;; By default we support gitea (:gitea:), to add more copy them to public/assets/img/emoji/emoji_name.png and add it to this config. +;; Dont mistake it for Reactions. +;CUSTOM_EMOJIS = gitea, codeberg, gitlab, git, github, gogs +;; +;; Whether the full name of the users should be shown where possible. If the full name isn't set, the username will be used. +;DEFAULT_SHOW_FULL_NAME = false +;; +;; Whether to search within description at repository search on explore page. +;SEARCH_REPO_DESCRIPTION = true +;; +;; Whether to only show relevant repos on the explore page when no keyword is specified and default sorting is used. +;; A repo is considered irrelevant if it's a fork or if it has no metadata (no description, no icon, no topic). +;ONLY_SHOW_RELEVANT_REPOS = false +;; +;; Change the sort type of the explore pages. +;; Default is "recentupdate", but you also have "alphabetically", "reverselastlogin", "newest", "oldest". +;EXPLORE_PAGING_DEFAULT_SORT = recentupdate +;; +;; The tense all timestamps should be rendered in. Possible values are `absolute` time (i.e. 1970-01-01, 11:59) and `mixed`. +;; `mixed` means most timestamps are rendered in relative time (i.e. 2 days ago). +;PREFERRED_TIMESTAMP_TENSE = mixed + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.admin] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Number of users that are displayed on one page +;USER_PAGING_NUM = 50 +;; +;; Number of repos that are displayed on one page +;REPO_PAGING_NUM = 50 +;; +;; Number of notices that are displayed on one page +;NOTICE_PAGING_NUM = 25 +;; +;; Number of organizations that are displayed on one page +;ORG_PAGING_NUM = 50 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.user] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Number of repos that are displayed on one page +;REPO_PAGING_NUM = 15 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.meta] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;AUTHOR = Gitea - Git with a cup of tea +;DESCRIPTION = Gitea (Git with a cup of tea) is a painless self-hosted Git service written in Go +;KEYWORDS = go,git,self-hosted,gitea + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.notification] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Control how often the notification endpoint is polled to update the notification +;; The timeout will increase to MAX_TIMEOUT in TIMEOUT_STEPs if the notification count is unchanged +;; Set MIN_TIMEOUT to -1 to turn off +;MIN_TIMEOUT = 10s +;MAX_TIMEOUT = 60s +;TIMEOUT_STEP = 10s +;; +;; This setting determines how often the db is queried to get the latest notification counts. +;; If the browser client supports EventSource and SharedWorker, a SharedWorker will be used in preference to polling notification. Set to -1 to disable the EventSource +;EVENT_SOURCE_UPDATE_TIME = 10s + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.svg] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Whether to render SVG files as images. If SVG rendering is disabled, SVG files are displayed as text and cannot be embedded in markdown files as images. +;ENABLE_RENDER = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.csv] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Maximum allowed file size in bytes to render CSV files as table. (Set to 0 for no limit). +;MAX_FILE_SIZE = 524288 +;; +;; Maximum allowed rows to render CSV files. (Set to 0 for no limit) +;MAX_ROWS = 2500 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[markdown] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Render soft line breaks as hard line breaks, which means a single newline character between +;; paragraphs will cause a line break and adding trailing whitespace to paragraphs is not +;; necessary to force a line break. +;; Render soft line breaks as hard line breaks for comments +;ENABLE_HARD_LINE_BREAK_IN_COMMENTS = true +;; +;; Render soft line breaks as hard line breaks for markdown documents +;ENABLE_HARD_LINE_BREAK_IN_DOCUMENTS = false +;; +;; Comma separated list of custom URL-Schemes that are allowed as links when rendering Markdown +;; for example git,magnet,ftp (more at https://en.wikipedia.org/wiki/List_of_URI_schemes) +;; URLs starting with http and https are always displayed, whatever is put in this entry. +;; If this entry is empty, all URL schemes are allowed. +;CUSTOM_URL_SCHEMES = +;; +;; List of file extensions that should be rendered/edited as Markdown +;; Separate the extensions with a comma. To render files without any extension as markdown, just put a comma +;FILE_EXTENSIONS = .md,.markdown,.mdown,.mkd,.livemd +;; +;; Enables math inline and block detection +;ENABLE_MATH = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ssh.minimum_key_sizes] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Define allowed algorithms and their minimum key length (use -1 to disable a type) +;ED25519 = 256 +;ECDSA = 256 +;RSA = 3071 ; we allow 3071 here because an otherwise valid 3072 bit RSA key can be reported as having 3071 bit length +;DSA = -1 ; set to 1024 to switch on + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[indexer] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Issue Indexer settings +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Issue indexer type, currently support: bleve, db, elasticsearch or meilisearch default is bleve +;ISSUE_INDEXER_TYPE = bleve +;; +;; Issue indexer storage path, available when ISSUE_INDEXER_TYPE is bleve +;ISSUE_INDEXER_PATH = indexers/issues.bleve ; Relative paths will be made absolute against _`AppWorkPath`_. +;; +;; Issue indexer connection string, available when ISSUE_INDEXER_TYPE is elasticsearch (e.g. http://elastic:password@localhost:9200) or meilisearch (e.g. http://:apikey@localhost:7700) +;ISSUE_INDEXER_CONN_STR = +;; +;; Issue indexer name, available when ISSUE_INDEXER_TYPE is elasticsearch or meilisearch. +;ISSUE_INDEXER_NAME = gitea_issues +;; +;; Timeout the indexer if it takes longer than this to start. +;; Set to -1 to disable timeout. +;STARTUP_TIMEOUT = 30s +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Repository Indexer settings +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; repo indexer by default disabled, since it uses a lot of disk space +;REPO_INDEXER_ENABLED = false +;; +;; repo indexer units, the items to index, could be `sources`, `forks`, `mirrors`, `templates` or any combination of them separated by a comma. +;; If empty then it defaults to `sources` only, as if you'd like to disable fully please see REPO_INDEXER_ENABLED. +;REPO_INDEXER_REPO_TYPES = sources,forks,mirrors,templates +;; +;; Code search engine type, could be `bleve` or `elasticsearch`. +;REPO_INDEXER_TYPE = bleve +;; +;; Index file used for code search. available when `REPO_INDEXER_TYPE` is bleve +;REPO_INDEXER_PATH = indexers/repos.bleve +;; +;; Code indexer connection string, available when `REPO_INDEXER_TYPE` is elasticsearch. i.e. http://elastic:changeme@localhost:9200 +;REPO_INDEXER_CONN_STR = +;; +;; Code indexer name, available when `REPO_INDEXER_TYPE` is elasticsearch +;REPO_INDEXER_NAME = gitea_codes +;; +;; A comma separated list of glob patterns (see https://github.com/gobwas/glob) to include +;; in the index; default is empty +;REPO_INDEXER_INCLUDE = +;; +;; A comma separated list of glob patterns to exclude from the index; ; default is empty +;REPO_INDEXER_EXCLUDE = +;; +;MAX_FILE_SIZE = 1048576 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[queue] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Specific queues can be individually configured with [queue.name]. [queue] provides defaults +;; ([queue.issue_indexer] is special due to the old configuration described above) +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; General queue queue type, currently support: persistable-channel, channel, level, redis, dummy +;; default to persistable-channel +;TYPE = persistable-channel +;; +;; data-dir for storing persistable queues and level queues, individual queues will default to `queues/common` meaning the queue is shared. +;DATADIR = queues/ ; Relative paths will be made absolute against `%(APP_DATA_PATH)s`. +;; +;; Default queue length before a channel queue will block +;LENGTH = 100000 +;; +;; Batch size to send for batched queues +;BATCH_LENGTH = 20 +;; +;; Connection string for redis queues this will store the redis (or Redis cluster) connection string. +;; When `TYPE` is `persistable-channel`, this provides a directory for the underlying leveldb +;; or additional options of the form `leveldb://path/to/db?option=value&....`, and will override `DATADIR`. +;CONN_STR = "redis://127.0.0.1:6379/0" +;; +;; Provides the suffix of the default redis/disk queue name - specific queues can be overridden within in their [queue.name] sections. +;QUEUE_NAME = "_queue" +;; +;; Provides the suffix of the default redis/disk unique queue set name - specific queues can be overridden within in their [queue.name] sections. +;SET_NAME = "_unique" +;; +;; Maximum number of worker go-routines for the queue. Default value is "CpuNum/2" clipped to between 1 and 10. +;MAX_WORKERS = ; (dynamic) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[admin] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Disallow regular (non-admin) users from creating organizations. +;DISABLE_REGULAR_ORG_CREATION = false +;; +;; Default configuration for email notifications for users (user configurable). Options: enabled, onmention, disabled +;DEFAULT_EMAIL_NOTIFICATIONS = enabled +;; Disabled features for users could be "deletion", "manage_ssh_keys", "manage_gpg_keys", "manage_mfa", "manage_credentials" more features can be disabled in future +;; - deletion: a user cannot delete their own account +;; - manage_ssh_keys: a user cannot configure ssh keys +;; - manage_gpg_keys: a user cannot configure gpg keys +;; - manage_mfa: a user cannot configure mfa devices +;; - manage_credentials: a user cannot configure emails, passwords, or openid +;USER_DISABLED_FEATURES = +;; Comma separated list of disabled features ONLY if the user has an external login type (eg. LDAP, Oauth, etc.), could be "deletion", "manage_ssh_keys", "manage_gpg_keys", "manage_mfa", "manage_credentials". This setting is independent from `USER_DISABLED_FEATURES` and supplements its behavior. +;; - deletion: a user cannot delete their own account +;; - manage_ssh_keys: a user cannot configure ssh keys +;; - manage_gpg_keys: a user cannot configure gpg keys +;; - manage_mfa: a user cannot configure mfa devices +;; - manage_credentials: a user cannot configure emails, passwords, or openid +;;EXTERNAL_USER_DISABLE_FEATURES = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[openid] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; OpenID is an open, standard and decentralized authentication protocol. +;; Your identity is the address of a webpage you provide, which describes +;; how to prove you are in control of that page. +;; +;; For more info: https://en.wikipedia.org/wiki/OpenID +;; +;; Current implementation supports OpenID-2.0 +;; +;; Tested to work providers at the time of writing: +;; - Any GNUSocial node (your.hostname.tld/username) +;; - Any SimpleID provider (http://simpleid.koinic.net) +;; - http://openid.org.cn/ +;; - openid.stackexchange.com +;; - login.launchpad.net +;; - .livejournal.com +;; +;; Whether to allow signin in via OpenID +;ENABLE_OPENID_SIGNIN = true +;; +;; Whether to allow registering via OpenID +;; Do not include to rely on rhw DISABLE_REGISTRATION setting +;;ENABLE_OPENID_SIGNUP = true +;; +;; Allowed URI patterns (POSIX regexp). +;; Space separated. +;; Only these would be allowed if non-blank. +;; Example value: trusted.domain.org trusted.domain.net +;WHITELISTED_URIS = +;; +;; Forbidden URI patterns (POSIX regexp). +;; Space separated. +;; Only used if WHITELISTED_URIS is blank. +;; Example value: loadaverage.org/badguy stackexchange.com/.*spammer +;BLACKLISTED_URIS = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[oauth2_client] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Whether a new auto registered oauth2 user needs to confirm their email. +;; Do not include to use the REGISTER_EMAIL_CONFIRM setting from the `[service]` section. +;REGISTER_EMAIL_CONFIRM = +;; +;; Scopes for the openid connect oauth2 provider (separated by space, the openid scope is implicitly added). +;; Typical values are profile and email. +;; For more information about the possible values see https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims +;OPENID_CONNECT_SCOPES = +;; +;; Automatically create user accounts for new oauth2 users. +;ENABLE_AUTO_REGISTRATION = false +;; +;; The source of the username for new oauth2 accounts: +;; userid = use the userid / sub attribute +;; nickname = use the nickname attribute +;; preferred_username = use the preferred_username attribute +;; email = use the username part of the email attribute +;; Note: `nickname`, `preferred_username` and `email` options will normalize input strings using the following criteria: +;; - diacritics are removed +;; - the characters in the set ['´`] are removed +;; - the characters in the set [\s~+] are replaced with "-" +;USERNAME = nickname +;; +;; Update avatar if available from oauth2 provider. +;; Update will be performed on each login. +;UPDATE_AVATAR = false +;; +;; How to handle if an account / email already exists: +;; disabled = show an error +;; login = show an account linking login +;; auto = link directly with the account +;ACCOUNT_LINKING = login + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[webhook] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Hook task queue length, increase if webhook shooting starts hanging +;QUEUE_LENGTH = 1000 +;; +;; Deliver timeout in seconds +;DELIVER_TIMEOUT = 5 +;; +;; Webhook can only call allowed hosts for security reasons. Comma separated list, eg: external, 192.168.1.0/24, *.mydomain.com +;; Built-in: loopback (for localhost), private (for LAN/intranet), external (for public hosts on internet), * (for all hosts) +;; CIDR list: 1.2.3.0/8, 2001:db8::/32 +;; Wildcard hosts: *.mydomain.com, 192.168.100.* +;; Since 1.15.7. Default to * for 1.15.x, external for 1.16 and later +;ALLOWED_HOST_LIST = external +;; +;; Allow insecure certification +;SKIP_TLS_VERIFY = false +;; +;; Number of history information in each page +;PAGING_NUM = 10 +;; +;; Proxy server URL, support http://, https//, socks://, blank will follow environment http_proxy/https_proxy +;PROXY_URL = +;; +;; Comma separated list of host names requiring proxy. Glob patterns (*) are accepted; use ** to match all hosts. +;PROXY_HOSTS = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[mailer] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; NOTICE: this section is for Gitea 1.18 and later. If you are using Gitea 1.17 or older, +;; please refer to +;; https://github.com/go-gitea/gitea/blob/release/v1.17/custom/conf/app.example.ini +;; https://github.com/go-gitea/gitea/blob/release/v1.17/docs/content/doc/advanced/config-cheat-sheet.en-us.md +;; +;ENABLED = false +;; +;; Buffer length of channel, keep it as it is if you don't know what it is. +;SEND_BUFFER_LEN = 100 +;; +;; Prefix displayed before subject in mail +;SUBJECT_PREFIX = +;; +;; Mail server protocol. One of "smtp", "smtps", "smtp+starttls", "smtp+unix", "sendmail", "dummy". +;; - sendmail: use the operating system's `sendmail` command instead of SMTP. This is common on Linux systems. +;; - dummy: send email messages to the log as a testing phase. +;; If your provider does not explicitly say which protocol it uses but does provide a port, +;; you can set SMTP_PORT instead and this will be inferred. +;; (Before 1.18, see the notice, this was controlled via MAILER_TYPE and IS_TLS_ENABLED.) +;PROTOCOL = +;; +;; Mail server address, e.g. smtp.gmail.com. +;; For smtp+unix, this should be a path to a unix socket instead. +;; (Before 1.18, see the notice, this was combined with SMTP_PORT as HOST.) +;SMTP_ADDR = +;; +;; Mail server port. Common ports are: +;; 25: insecure SMTP +;; 465: SMTP Secure +;; 587: StartTLS +;; If no protocol is specified, it will be inferred by this setting. +;; (Before 1.18, this was combined with SMTP_ADDR as HOST.) +;SMTP_PORT = +;; +;; Enable HELO operation. Defaults to true. +;ENABLE_HELO = true +;; +;; Custom hostname for HELO operation. +;; If no value is provided, one is retrieved from system. +;HELO_HOSTNAME = +;; +;; If set to `true`, completely ignores server certificate validation errors. +;; This option is unsafe. Consider adding the certificate to the system trust store instead. +;FORCE_TRUST_SERVER_CERT = false +;; +;; Use client certificate in connection. +;USE_CLIENT_CERT = false +;CLIENT_CERT_FILE = custom/mailer/cert.pem +;CLIENT_KEY_FILE = custom/mailer/key.pem +;; +;; Mail from address, RFC 5322. This can be just an email address, or the `"Name" ` format +;FROM = +;; +;; Sometimes it is helpful to use a different address on the envelope. Set this to use ENVELOPE_FROM as the from on the envelope. Set to `<>` to send an empty address. +;ENVELOPE_FROM = +;; +;; If gitea sends mails on behave of users, it will just use the name also displayed in the WebUI. If you want e.g. `Mister X (by CodeIt) `, +;; set it to `{{ .DisplayName }} (by {{ .AppName }})`. Available Variables: `.DisplayName`, `.AppName` and `.Domain`. +;FROM_DISPLAY_NAME_FORMAT = {{ .DisplayName }} +;; +;; Mailer user name and password, if required by provider. +;USER = +;; +;; Use PASSWD = `your password` for quoting if you use special characters in the password. +;PASSWD = +;; +;; Send mails only in plain text, without HTML alternative +;SEND_AS_PLAIN_TEXT = false +;; +;; Specify an alternative sendmail binary +;SENDMAIL_PATH = sendmail +;; +;; Specify any extra sendmail arguments +;; WARNING: if your sendmail program interprets options you should set this to "--" or terminate these args with "--" +;SENDMAIL_ARGS = +;; +;; Timeout for Sendmail +;SENDMAIL_TIMEOUT = 5m +;; +;; convert \r\n to \n for Sendmail +;SENDMAIL_CONVERT_CRLF = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[mailer.override_header] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; This is empty by default, use it only if you know what you need it for. +;Reply-To = test@example.com, test2@example.com +;Content-Type = text/html; charset=utf-8 +;In-Reply-To = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[email.incoming] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Enable handling of incoming emails. +;ENABLED = false +;; +;; The email address including the %{token} placeholder that will be replaced per user/action. +;; Example: incoming+%{token}@example.com +;; The placeholder must appear in the user part of the address (before the @). +;REPLY_TO_ADDRESS = +;; +;; IMAP server host +;HOST = +;; +;; IMAP server port +;PORT = +;; +;; Username of the receiving account +;USERNAME = +;; +;; Password of the receiving account +;PASSWORD = +;; +;; Whether the IMAP server uses TLS. +;USE_TLS = false +;; +;; If set to true, completely ignores server certificate validation errors. This option is unsafe. +;SKIP_TLS_VERIFY = true +;; +;; The mailbox name where incoming mail will end up. +;MAILBOX = INBOX +;; +;; Whether handled messages should be deleted from the mailbox. +;DELETE_HANDLED_MESSAGE = true +;; +;; Maximum size of a message to handle. Bigger messages are ignored. Set to 0 to allow every size. +;MAXIMUM_MESSAGE_SIZE = 10485760 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cache] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Either "memory", "redis", "memcache", or "twoqueue". default is "memory" +;ADAPTER = memory +;; +;; For "memory" only, GC interval in seconds, default is 60 +;INTERVAL = 60 +;; +;; For "redis" and "memcache", connection host address +;; redis: `redis://127.0.0.1:6379/0?pool_size=100&idle_timeout=180s` (or `redis+cluster://127.0.0.1:6379/0?pool_size=100&idle_timeout=180s` for a Redis cluster) +;; memcache: `127.0.0.1:11211` +;; twoqueue: `{"size":50000,"recent_ratio":0.25,"ghost_ratio":0.5}` or `50000` +;HOST = +;; +;; Time to keep items in cache if not used, default is 16 hours. +;; Setting it to -1 disables caching +;ITEM_TTL = 16h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Last commit cache +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cache.last_commit] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Time to keep items in cache if not used, default is 8760 hours. +;; Setting it to -1 disables caching +;ITEM_TTL = 8760h +;; +;; Only enable the cache when repository's commits count great than +;COMMITS_COUNT = 1000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[session] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Either "memory", "file", "redis", "db", "mysql", "couchbase", "memcache" or "postgres" +;; Default is "memory". "db" will reuse the configuration in [database] +;PROVIDER = memory +;; +;; Provider config options +;; memory: doesn't have any config yet +;; file: session file path, e.g. `data/sessions` +;; redis: `redis://127.0.0.1:6379/0?pool_size=100&idle_timeout=180s` (or `redis+cluster://127.0.0.1:6379/0?pool_size=100&idle_timeout=180s` for a Redis cluster) +;; mysql: go-sql-driver/mysql dsn config string, e.g. `root:password@/session_table` +;PROVIDER_CONFIG = data/sessions ; Relative paths will be made absolute against _`AppWorkPath`_. +;; +;; Session cookie name +;COOKIE_NAME = i_like_gitea +;; +;; If you use session in https only: true or false. If not set, it defaults to `true` if the ROOT_URL is an HTTPS URL. +;COOKIE_SECURE = +;; +;; Session GC time interval in seconds, default is 86400 (1 day) +;GC_INTERVAL_TIME = 86400 +;; +;; Session life time in seconds, default is 86400 (1 day) +;SESSION_LIFE_TIME = 86400 +;; +;; SameSite settings. Either "none", "lax", or "strict" +;SAME_SITE=lax + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[picture] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;AVATAR_UPLOAD_PATH = data/avatars +;REPOSITORY_AVATAR_UPLOAD_PATH = data/repo-avatars +;; +;; How Gitea deals with missing repository avatars +;; none = no avatar will be displayed; random = random avatar will be displayed; image = default image will be used +;REPOSITORY_AVATAR_FALLBACK = none +;REPOSITORY_AVATAR_FALLBACK_IMAGE = /img/repo_default.png +;; +;; Max Width and Height of uploaded avatars. +;; This is to limit the amount of RAM used when resizing the image. +;AVATAR_MAX_WIDTH = 4096 +;AVATAR_MAX_HEIGHT = 4096 +;; +;; The multiplication factor for rendered avatar images. +;; Larger values result in finer rendering on HiDPI devices. +;AVATAR_RENDERED_SIZE_FACTOR = 2 +;; +;; Maximum allowed file size for uploaded avatars. +;; This is to limit the amount of RAM used when resizing the image. +;AVATAR_MAX_FILE_SIZE = 1048576 +;; +;; If the uploaded file is not larger than this byte size, the image will be used as is, without resizing/converting. +;AVATAR_MAX_ORIGIN_SIZE = 262144 +;; +;; Chinese users can choose "duoshuo" +;; or a custom avatar source, like: http://cn.gravatar.com/avatar/ +;GRAVATAR_SOURCE = gravatar +;; +;; This value will always be true in offline mode. +;DISABLE_GRAVATAR = false +;; +;; Federated avatar lookup uses DNS to discover avatar associated +;; with emails, see https://www.libravatar.org +;; This value will always be false in offline mode or when Gravatar is disabled. +;ENABLE_FEDERATED_AVATAR = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[attachment] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Whether issue and pull request attachments are enabled. Defaults to `true` +;ENABLED = true +;; +;; Comma-separated list of allowed file extensions (`.zip`), mime types (`text/plain`) or wildcard type (`image/*`, `audio/*`, `video/*`). Empty value or `*/*` allows all types. +;ALLOWED_TYPES = .csv,.docx,.fodg,.fodp,.fods,.fodt,.gif,.gz,.jpeg,.jpg,.log,.md,.mov,.mp4,.odf,.odg,.odp,.ods,.odt,.patch,.pdf,.png,.pptx,.svg,.tgz,.txt,.webm,.xls,.xlsx,.zip +;; +;; Max size of each file. Defaults to 2048MB +;MAX_SIZE = 2048 +;; +;; Max number of files per upload. Defaults to 5 +;MAX_FILES = 5 +;; +;; Storage type for attachments, `local` for local disk or `minio` for s3 compatible +;; object storage service, default is `local`. +;STORAGE_TYPE = local +;; +;; Allows the storage driver to redirect to authenticated URLs to serve files directly +;; Currently, only `minio` and `azureblob` is supported. +;SERVE_DIRECT = false +;; +;; Path for attachments. Defaults to `attachments`. Only available when STORAGE_TYPE is `local` +;; Relative paths will be resolved to `${AppDataPath}/${attachment.PATH}` +;PATH = attachments +;; +;; Minio endpoint to connect only available when STORAGE_TYPE is `minio` +;MINIO_ENDPOINT = localhost:9000 +;; +;; Minio accessKeyID to connect only available when STORAGE_TYPE is `minio`. +;; If not provided and STORAGE_TYPE is `minio`, will search for credentials in known +;; environment variables (MINIO_ACCESS_KEY_ID, AWS_ACCESS_KEY_ID), credentials files +;; (~/.mc/config.json, ~/.aws/credentials), and EC2 instance metadata. +;MINIO_ACCESS_KEY_ID = +;; +;; Minio secretAccessKey to connect only available when STORAGE_TYPE is `minio` +;MINIO_SECRET_ACCESS_KEY = +;; +;; Minio bucket to store the attachments only available when STORAGE_TYPE is `minio` +;MINIO_BUCKET = gitea +;; +;; Minio location to create bucket only available when STORAGE_TYPE is `minio` +;MINIO_LOCATION = us-east-1 +;; +;; Minio base path on the bucket only available when STORAGE_TYPE is `minio` +;MINIO_BASE_PATH = attachments/ +;; +;; Minio enabled ssl only available when STORAGE_TYPE is `minio` +;MINIO_USE_SSL = false +;; +;; Minio skip SSL verification available when STORAGE_TYPE is `minio` +;MINIO_INSECURE_SKIP_VERIFY = false +;; +;; Minio checksum algorithm: default (for MinIO or AWS S3) or md5 (for Cloudflare or Backblaze) +;MINIO_CHECKSUM_ALGORITHM = default +;; +;; Minio bucket lookup method defaults to auto mode; set it to `dns` for virtual host style or `path` for path style, only available when STORAGE_TYPE is `minio` +;MINIO_BUCKET_LOOKUP_TYPE = auto +;; Azure Blob endpoint to connect only available when STORAGE_TYPE is `azureblob`, +;; e.g. https://accountname.blob.core.windows.net or http://127.0.0.1:10000/devstoreaccount1 +;AZURE_BLOB_ENDPOINT = +;; +;; Azure Blob account name to connect only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_ACCOUNT_NAME = +;; +;; Azure Blob account key to connect only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_ACCOUNT_KEY = +;; +;; Azure Blob container to store the attachments only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_CONTAINER = gitea +;; +;; override the azure blob base path if storage type is azureblob +;AZURE_BLOB_BASE_PATH = attachments/ + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[time] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Location the UI time display i.e. Asia/Shanghai +;; Empty means server's location setting +;DEFAULT_UI_LOCATION = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Common settings +;; +;; Setting this to true will enable all cron tasks periodically with default settings. +;ENABLED = false +;; Setting this to true will run all enabled cron tasks when Gitea starts. +;RUN_AT_START = false +;; +;; Note: ``SCHEDULE`` accept formats +;; - Full crontab specs, e.g. "* * * * * ?" +;; - Descriptors, e.g. "@midnight", "@every 1h30m" +;; See more: https://pkg.go.dev/github.com/gogs/cron@v0.0.0-20171120032916-9f6c956d3e14 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Basic cron tasks - enabled by default +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Clean up old repository archives +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.archive_cleanup] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Whether to enable the job +;ENABLED = true +;; Whether to always run at least once at start up time (if ENABLED) +;RUN_AT_START = true +;; Whether to emit notice on successful execution too +;NOTICE_ON_SUCCESS = false +;; Time interval for job to run +;SCHEDULE = @midnight +;; Archives created more than OLDER_THAN ago are subject to deletion +;OLDER_THAN = 24h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Update mirrors +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.update_mirrors] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;SCHEDULE = @every 10m +;; Enable running Update mirrors task periodically. +;ENABLED = true +;; Run Update mirrors task when Gitea starts. +;RUN_AT_START = false +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;; Limit the number of mirrors added to the queue to this number +;; (negative values mean no limit, 0 will result in no result in no mirrors being queued effectively disabling pull mirror updating.) +;PULL_LIMIT=50 +;; Limit the number of mirrors added to the queue to this number +;; (negative values mean no limit, 0 will result in no mirrors being queued effectively disabling push mirror updating) +;PUSH_LIMIT=50 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Repository health check +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.repo_health_check] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;SCHEDULE = @midnight +;; Enable running Repository health check task periodically. +;ENABLED = true +;; Run Repository health check task when Gitea starts. +;RUN_AT_START = false +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;TIMEOUT = 60s +;; Arguments for command 'git fsck', e.g. "--unreachable --tags" +;; see more on http://git-scm.com/docs/git-fsck +;ARGS = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check repository statistics +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.check_repo_stats] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Enable running check repository statistics task periodically. +;ENABLED = true +;; Run check repository statistics task when Gitea starts. +;RUN_AT_START = true +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @midnight + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.update_migration_poster_id] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Update migrated repositories' issues and comments' posterid, it will always attempt synchronization when the instance starts. +;ENABLED = true +;; Update migrated repositories' issues and comments' posterid when starting server (default true) +;RUN_AT_START = true +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;; Interval as a duration between each synchronization. (default every 24h) +;SCHEDULE = @midnight + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Synchronize external user data (only LDAP user synchronization is supported) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.sync_external_users] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = true +;; Synchronize external user data when starting server (default false) +;RUN_AT_START = false +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;; Interval as a duration between each synchronization (default every 24h) +;SCHEDULE = @midnight +;; Create new users, update existing user data and disable users that are not in external source anymore (default) +;; or only create new users if UPDATE_EXISTING is set to false +;UPDATE_EXISTING = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Cleanup expired actions assets +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.cleanup_actions] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = true +;RUN_AT_START = true +;SCHEDULE = @midnight + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Clean-up deleted branches +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.deleted_branches_cleanup] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = true +;; Clean-up deleted branches when starting server (default true) +;RUN_AT_START = true +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;; Interval as a duration between each synchronization (default every 24h) +;SCHEDULE = @midnight +;; deleted branches than OLDER_THAN ago are subject to deletion +;OLDER_THAN = 24h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Cleanup hook_task table +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.cleanup_hook_task_table] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Whether to enable the job +;ENABLED = true +;; Whether to always run at start up time (if ENABLED) +;RUN_AT_START = false +;; Time interval for job to run +;SCHEDULE = @midnight +;; OlderThan or PerWebhook. How the records are removed, either by age (i.e. how long ago hook_task record was delivered) or by the number to keep per webhook (i.e. keep most recent x deliveries per webhook). +;CLEANUP_TYPE = OlderThan +;; If CLEANUP_TYPE is set to OlderThan, then any delivered hook_task records older than this expression will be deleted. +;OLDER_THAN = 168h +;; If CLEANUP_TYPE is set to PerWebhook, this is number of hook_task records to keep for a webhook (i.e. keep the most recent x deliveries). +;NUMBER_TO_KEEP = 10 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Cleanup expired packages +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.cleanup_packages] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Whether to enable the job +;ENABLED = true +;; Whether to always run at least once at start up time (if ENABLED) +;RUN_AT_START = true +;; Whether to emit notice on successful execution too +;NOTICE_ON_SUCCESS = false +;; Time interval for job to run +;SCHEDULE = @midnight +;; Unreferenced blobs created more than OLDER_THAN ago are subject to deletion +;OLDER_THAN = 24h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Extended cron task - not enabled by default +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete all unactivated accounts +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_inactive_accounts] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @annually +;OLDER_THAN = 168h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete all repository archives +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_repo_archives] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @annually; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Garbage collect all repositories +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.git_gc_repos] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h +;TIMEOUT = 60s +;; Arguments for command 'git gc' +;; The default value is same with [git] -> GC_ARGS +;ARGS = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Update the '.ssh/authorized_keys' file with Gitea SSH keys +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.resync_all_sshkeys] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Resynchronize pre-receive, update and post-receive hooks of all repositories. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.resync_all_hooks] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Reinitialize all missing Git repositories for which records exist +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.reinit_missing_repos] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete all repositories missing their Git files +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_missing_repos] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete generated repository avatars +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_generated_repository_avatars] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete all old actions from database +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_old_actions] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 168h +;OLDER_THAN = 8760h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check for new Gitea versions +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.update_checker] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = true +;RUN_AT_START = false +;ENABLE_SUCCESS_NOTICE = false +;SCHEDULE = @every 168h +;HTTP_ENDPOINT = https://dl.gitea.com/gitea/version.json + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete all old system notices from database +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_old_system_notices] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NO_SUCCESS_NOTICE = false +;SCHEDULE = @every 168h +;OLDER_THAN = 8760h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Garbage collect LFS pointers in repositories +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.gc_lfs] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;; Garbage collect LFS pointers in repositories (default false) +;RUN_AT_START = false +;; Interval as a duration between each gc run (default every 24h) +;SCHEDULE = @every 24h +;; Only attempt to garbage collect LFSMetaObjects older than this (default 7 days) +;OLDER_THAN = 168h +;; Only attempt to garbage collect LFSMetaObjects that have not been attempted to be garbage collected for this long (default 3 days) +;LAST_UPDATED_MORE_THAN_AGO = 72h +; Minimum number of stale LFSMetaObjects to check per repo. Set to `0` to always check all. +;NUMBER_TO_CHECK_PER_REPO = 100 +;Check at least this proportion of LFSMetaObjects per repo. (This may cause all stale LFSMetaObjects to be checked.) +;PROPORTION_TO_CHECK_PER_REPO = 0.6 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[mirror] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Enables the mirror functionality. Set to **false** to disable all mirrors. Pre-existing mirrors remain valid but won't be updated; may be converted to regular repo. +;ENABLED = true +;; Disable the creation of **new** pull mirrors. Pre-existing mirrors remain valid. Will be ignored if `mirror.ENABLED` is `false`. +;DISABLE_NEW_PULL = false +;; Disable the creation of **new** push mirrors. Pre-existing mirrors remain valid. Will be ignored if `mirror.ENABLED` is `false`. +;DISABLE_NEW_PUSH = false +;; Default interval as a duration between each check +;DEFAULT_INTERVAL = 8h +;; Min interval as a duration must be > 1m +;MIN_INTERVAL = 10m + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[api] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Enables the API documentation endpoints (/api/swagger, /api/v1/swagger, …). True or false. +;ENABLE_SWAGGER = true +;; Max number of items in a page +;MAX_RESPONSE_ITEMS = 50 +;; Default paging number of api +;DEFAULT_PAGING_NUM = 30 +;; Default and maximum number of items per page for git trees api +;DEFAULT_GIT_TREES_PER_PAGE = 1000 +;; Default max size of a blob returned by the blobs API (default is 10MiB) +;DEFAULT_MAX_BLOB_SIZE = 10485760 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[i18n] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; The first locale will be used as the default if user browser's language doesn't match any locale in the list. +;LANGS = en-US,zh-CN,zh-HK,zh-TW,de-DE,fr-FR,nl-NL,lv-LV,ru-RU,uk-UA,ja-JP,es-ES,pt-BR,pt-PT,pl-PL,bg-BG,it-IT,fi-FI,tr-TR,cs-CZ,sv-SE,ko-KR,el-GR,fa-IR,hu-HU,id-ID,ml-IN +;NAMES = English,简体中文,繁體中文(香港),繁體中文(台灣),Deutsch,Français,Nederlands,Latviešu,Русский,Українська,日本語,Español,Português do Brasil,Português de Portugal,Polski,Български,Italiano,Suomi,Türkçe,Čeština,Српски,Svenska,한국어,Ελληνικά,فارسی,Magyar nyelv,Bahasa Indonesia,മലയാളം + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[highlight.mapping] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Extension mapping to highlight class +;; e.g. .toml=ini + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[other] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Show version information about Gitea and Go in the footer +;SHOW_FOOTER_VERSION = true +;; Show template execution time in the footer +;SHOW_FOOTER_TEMPLATE_LOAD_TIME = true +;; Show the "powered by" text in the footer +;SHOW_FOOTER_POWERED_BY = true +;; Generate sitemap. Defaults to `true`. +;ENABLE_SITEMAP = true +;; Enable/Disable RSS/Atom feed +;ENABLE_FEED = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[markup] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Set the maximum number of characters in a mermaid source. (Set to -1 to disable limits) +;MERMAID_MAX_SOURCE_CHARACTERS = 5000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[markup.sanitizer.1] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; The following keys can appear once to define a sanitation policy rule. +;; This section can appear multiple times by adding a unique alphanumeric suffix to define multiple rules. +;; e.g., [markup.sanitizer.1] -> [markup.sanitizer.2] -> [markup.sanitizer.TeX] +;ELEMENT = span +;ALLOW_ATTR = class +;REGEXP = ^(info|warning|error)$ +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Other markup formats e.g. asciidoc +;; +;; uncomment and enable the below section. +;; (You can add other markup formats by copying the section and adjusting +;; the section name suffix "asciidoc" to something else.) +;[markup.asciidoc] +;ENABLED = false +;; List of file extensions that should be rendered by an external command +;FILE_EXTENSIONS = .adoc,.asciidoc +;; External command to render all matching extensions +;RENDER_COMMAND = "asciidoc --out-file=- -" +;; Don't pass the file on STDIN, pass the filename as argument instead. +;IS_INPUT_FILE = false +;; How the content will be rendered. +;; * sanitized: Sanitize the content and render it inside current page, default to only allow a few HTML tags and attributes. Customized sanitizer rules can be defined in [markup.sanitizer.*] . +;; * no-sanitizer: Disable the sanitizer and render the content inside current page. It's **insecure** and may lead to XSS attack if the content contains malicious code. +;; * iframe: Render the content in a separate standalone page and embed it into current page by iframe. The iframe is in sandbox mode with same-origin disabled, and the JS code are safely isolated from parent page. +;RENDER_CONTENT_MODE=sanitized + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[metrics] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Enables metrics endpoint. True or false; default is false. +;ENABLED = false +;; If you want to add authorization, specify a token here +;TOKEN = +;; Enable issue by label metrics; default is false +;ENABLED_ISSUE_BY_LABEL = false +;; Enable issue by repository metrics; default is false +;ENABLED_ISSUE_BY_REPOSITORY = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[migrations] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Max attempts per http/https request on migrations. +;MAX_ATTEMPTS = 3 +;; +;; Backoff time per http/https request retry (seconds) +;RETRY_BACKOFF = 3 +;; +;; Allowed domains for migrating, default is blank. Blank means everything will be allowed. +;; Multiple domains could be separated by commas. +;; Wildcard is supported: "github.com, *.github.com" +;ALLOWED_DOMAINS = +;; +;; Blocklist for migrating, default is blank. Multiple domains could be separated by commas. +;; When ALLOWED_DOMAINS is not blank, this option has a higher priority to deny domains. +;; Wildcard is supported. +;BLOCKED_DOMAINS = +;; +;; Allow private addresses defined by RFC 1918, RFC 1122, RFC 4632 and RFC 4291 (false by default) +;; If a domain is allowed by ALLOWED_DOMAINS, this option will be ignored. +;ALLOW_LOCALNETWORKS = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[federation] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Enable/Disable federation capabilities +;ENABLED = false +;; +;; Enable/Disable user statistics for nodeinfo if federation is enabled +;SHARE_USER_STATISTICS = true +;; +;; Maximum federation request and response size (MB) +;MAX_SIZE = 4 +;; +;; WARNING: Changing the settings below can break federation. +;; +;; HTTP signature algorithms +;ALGORITHMS = rsa-sha256, rsa-sha512, ed25519 +;; +;; HTTP signature digest algorithm +;DIGEST_ALGORITHM = SHA-256 +;; +;; GET headers for federation requests +;GET_HEADERS = (request-target), Date +;; +;; POST headers for federation requests +;POST_HEADERS = (request-target), Date, Digest + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[packages] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Enable/Disable package registry capabilities +;ENABLED = true +;; +;STORAGE_TYPE = local +;; override the minio base path if storage type is minio +;MINIO_BASE_PATH = packages/ +;; override the azure blob base path if storage type is azureblob +;AZURE_BLOB_BASE_PATH = packages/ +;; Allows the storage driver to redirect to authenticated URLs to serve files directly +;; Currently, only `minio` and `azureblob` is supported. +;SERVE_DIRECT = false +;; +;; Path for chunked uploads. Defaults to APP_DATA_PATH + `tmp/package-upload` +;CHUNKED_UPLOAD_PATH = tmp/package-upload +;; +;; Maximum count of package versions a single owner can have (`-1` means no limits) +;LIMIT_TOTAL_OWNER_COUNT = -1 +;; Maximum size of packages a single owner can use (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_TOTAL_OWNER_SIZE = -1 +;; Maximum size of an Alpine upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_ALPINE = -1 +;; Maximum size of a Cargo upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CARGO = -1 +;; Maximum size of a Chef upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CHEF = -1 +;; Maximum size of a Composer upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_COMPOSER = -1 +;; Maximum size of a Conan upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CONAN = -1 +;; Maximum size of a Conda upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CONDA = -1 +;; Maximum size of a Container upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CONTAINER = -1 +;; Maximum size of a CRAN upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CRAN = -1 +;; Maximum size of a Debian upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_DEBIAN = -1 +;; Maximum size of a Generic upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_GENERIC = -1 +;; Maximum size of a Go upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_GO = -1 +;; Maximum size of a Helm upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_HELM = -1 +;; Maximum size of a Maven upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_MAVEN = -1 +;; Maximum size of a npm upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_NPM = -1 +;; Maximum size of a NuGet upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_NUGET = -1 +;; Maximum size of a Pub upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_PUB = -1 +;; Maximum size of a PyPI upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_PYPI = -1 +;; Maximum size of a RPM upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_RPM = -1 +;; Maximum size of a RubyGems upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_RUBYGEMS = -1 +;; Maximum size of a Swift upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_SWIFT = -1 +;; Maximum size of a Vagrant upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_VAGRANT = -1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; default storage for attachments, lfs and avatars +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[storage] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; storage type +;STORAGE_TYPE = local + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; repo-archive storage will override storage +;; +;[repo-archive] +;STORAGE_TYPE = local +;; +;; Where your lfs files reside, default is data/lfs. +;PATH = data/repo-archive +;; +;; override the minio base path if storage type is minio +;MINIO_BASE_PATH = repo-archive/ +;; override the azure blob base path if storage type is azureblob +;AZURE_BLOB_BASE_PATH = repo-archive/ + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; settings for repository archives, will override storage setting +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[storage.repo-archive] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; storage type +;STORAGE_TYPE = local + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lfs storage will override storage +;; +;[lfs] +;STORAGE_TYPE = local +;; +;; Where your lfs files reside, default is data/lfs. +;PATH = data/lfs +;; +;; Allows the storage driver to redirect to authenticated URLs to serve files directly +;; Currently, only `minio` and `azureblob` is supported. +;SERVE_DIRECT = false +;; +;; override the minio base path if storage type is minio +;MINIO_BASE_PATH = lfs/ +;; +;; override the azure blob base path if storage type is azureblob +;AZURE_BLOB_BASE_PATH = lfs/ + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; settings for packages, will override storage setting +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[storage.packages] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; storage type +;STORAGE_TYPE = local + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; customize storage +;[storage.minio] +;STORAGE_TYPE = minio +;; +;; Minio endpoint to connect only available when STORAGE_TYPE is `minio` +;MINIO_ENDPOINT = localhost:9000 +;; +;; Minio accessKeyID to connect only available when STORAGE_TYPE is `minio`. +;; If not provided and STORAGE_TYPE is `minio`, will search for credentials in known +;; environment variables (MINIO_ACCESS_KEY_ID, AWS_ACCESS_KEY_ID), credentials files +;; (~/.mc/config.json, ~/.aws/credentials), and EC2 instance metadata. +;MINIO_ACCESS_KEY_ID = +;; +;; Minio secretAccessKey to connect only available when STORAGE_TYPE is `minio` +;MINIO_SECRET_ACCESS_KEY = +;; +;; Minio bucket to store the attachments only available when STORAGE_TYPE is `minio` +;MINIO_BUCKET = gitea +;; +;; Minio location to create bucket only available when STORAGE_TYPE is `minio` +;MINIO_LOCATION = us-east-1 +;; +;; Minio enabled ssl only available when STORAGE_TYPE is `minio` +;MINIO_USE_SSL = false +;; +;; Minio skip SSL verification available when STORAGE_TYPE is `minio` +;MINIO_INSECURE_SKIP_VERIFY = false +;; +;; Minio bucket lookup method defaults to auto mode; set it to `dns` for virtual host style or `path` for path style, only available when STORAGE_TYPE is `minio` +;MINIO_BUCKET_LOOKUP_TYPE = auto + +;[storage.azureblob] +;STORAGE_TYPE = azureblob +;; +;; Azure Blob endpoint to connect only available when STORAGE_TYPE is `azureblob`, +;; e.g. https://accountname.blob.core.windows.net or http://127.0.0.1:10000/devstoreaccount1 +;AZURE_BLOB_ENDPOINT = +;; +;; Azure Blob account name to connect only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_ACCOUNT_NAME = +;; +;; Azure Blob account key to connect only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_ACCOUNT_KEY = +;; +;; Azure Blob container to store the attachments only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_CONTAINER = gitea + +;[proxy] +;; Enable the proxy, all requests to external via HTTP will be affected +;PROXY_ENABLED = false +;; Proxy server URL, support http://, https//, socks://, blank will follow environment http_proxy/https_proxy/no_proxy +;PROXY_URL = +;; Comma separated list of host names requiring proxy. Glob patterns (*) are accepted; use ** to match all hosts. +;PROXY_HOSTS = + +; [actions] +;; Enable/Disable actions capabilities +;ENABLED = true +;; +;; Default platform to get action plugins, `github` for `https://github.com`, `self` for the current Gitea instance. +;DEFAULT_ACTIONS_URL = github +;; Default artifact retention time in days. Artifacts could have their own retention periods by setting the `retention-days` option in `actions/upload-artifact` step. +;ARTIFACT_RETENTION_DAYS = 90 +;; Timeout to stop the task which have running status, but haven't been updated for a long time +;ZOMBIE_TASK_TIMEOUT = 10m +;; Timeout to stop the tasks which have running status and continuous updates, but don't end for a long time +;ENDLESS_TASK_TIMEOUT = 3h +;; Timeout to cancel the jobs which have waiting status, but haven't been picked by a runner for a long time +;ABANDONED_JOB_TIMEOUT = 24h +;; Strings committers can place inside a commit message or PR title to skip executing the corresponding actions workflow +;SKIP_WORKFLOW_STRINGS = [skip ci],[ci skip],[no ci],[skip actions],[actions skip] + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; settings for action logs, will override storage setting +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[storage.actions_log] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; storage type +;STORAGE_TYPE = local diff --git a/appstore/gitea/1.22.4/data.yml b/appstore/gitea/1.22.4/data.yml new file mode 100644 index 00000000..447f89da --- /dev/null +++ b/appstore/gitea/1.22.4/data.yml @@ -0,0 +1,268 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: postgresql + edit: true + envKey: PANEL_DB_TYPE + labelZh: 数据库 服务 (前置检查) + labelEn: Database Service (Pre-check) + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/gitea" + edit: true + envKey: GITEA_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3000 + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 22 + envKey: PANEL_APP_PORT_SSH + labelZh: SSH 端口 + labelEn: SSH Port + required: true + rule: paramPort + type: number + - default: postgresql + edit: true + envKey: DB_TYPE + labelZh: 数据库 类型 + labelEn: Database Type + required: true + type: select + values: + - label: PostgreSQL + value: postgresql + - label: MySQL (MariaDB, Percona) + value: mysql + - label: SQLite3 (忽略数据库配置) + value: sqlite3 + - default: "127.0.0.1" + edit: true + envKey: DB_HOSTNAME + labelZh: 数据库 主机地址 + labelEn: Database Host + required: false + type: text + - default: 5432 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: false + rule: paramPort + type: number + - default: "gitea" + edit: true + envKey: DB_USER + labelZh: 数据库 用户名 + labelEn: Database User + required: false + type: text + - default: "" + edit: true + envKey: DB_PASSWD + labelEn: Database Password + labelZh: 数据库 密码 + random: true + required: false + rule: paramComplexity + type: password + - default: "gitea" + edit: true + envKey: DB_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: false + type: text + - default: "Gitea" + edit: true + envKey: APP_NAME + labelZh: 应用名称 + labelEn: Application Name + required: true + type: text + - default: "localhost" + edit: true + envKey: DOMAIN + labelZh: HTTP 克隆域名 + labelEn: HTTP Clone Domain + required: true + type: text + - default: "localhost" + edit: true + envKey: SSH_DOMAIN + labelZh: SSH 克隆域名 + labelEn: SSH Clone Domain + required: true + type: text + - default: 22 + edit: true + envKey: SSH_PORT + labelZh: SSH 克隆显示端口 + labelEn: SSH Clone Display Port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: ROOT_URL + labelZh: 公共 URL (覆盖级) + labelEn: Public URL (Override) + required: false + rule: paramExtUrl + type: text + - default: "false" + edit: true + envKey: LFS_START_SERVER + labelZh: 启用 Git LFS 支持 + labelEn: Enable Git LFS Support + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 关闭 + value: "false" + - default: "false" + edit: true + envKey: DISABLE_REGISTRATION + labelZh: 禁用注册 + labelEn: Disable Registration + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 关闭 + value: "false" + - default: "false" + edit: true + envKey: REQUIRE_SIGNIN_VIEW + labelZh: 强制登录 + labelEn: Require Signin + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 关闭 + value: "false" + - default: "false" + edit: true + envKey: INSTALL_LOCK + labelZh: 禁止访问安装页面 + labelEn: Disable Access to Install Page + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 关闭 + value: "false" + - default: "" + edit: true + envKey: SECRET_KEY + labelZh: 全局加密密钥 + labelEn: Global Secret Key + required: false + type: text + - default: "false" + edit: true + envKey: PROXY_ENABLED + labelZh: 启用代理 (全局 + Webhook) + labelEn: Enable Proxy (Global + Webhook) + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 关闭 + value: "false" + - default: "" + edit: true + envKey: PROXY_URL + labelZh: 代理服务器地址 (全局 + Webhook) + labelEn: Proxy Server URL (Global + Webhook) + required: false + type: text + - default: "**" + edit: true + envKey: PROXY_HOSTS + labelZh: 代理网址 (全局 + Webhook) + labelEn: Proxy Hosts (Global + Webhook) + required: false + type: text + - default: "false" + edit: true + envKey: MAILER_ENABLED + labelZh: 启用邮件服务 + labelEn: Enable Mailer Service + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 关闭 + value: "false" + - default: "" + edit: true + envKey: MAILER_SMTP_ADDR + labelZh: 邮件服务器地址 + labelEn: Mailer Server Address + required: false + type: text + - default: 465 + edit: true + envKey: MAILER_SMTP_PORT + labelZh: 邮件服务器端口 + labelEn: Mailer Server Port + required: false + type: number + - default: "" + edit: true + envKey: MAILER_USER + labelZh: 邮件服务用户名 + labelEn: Mailer Username + required: false + type: text + - default: "" + edit: true + envKey: MAILER_PASSWD + labelZh: 邮件服务密码 + labelEn: Mailer Password + required: false + type: text + - default: "" + edit: true + envKey: MAILER_FROM + labelZh: 邮件服务发件人 + labelEn: Mailer From + required: false + type: text + - default: "[Gitea]" + edit: true + envKey: MAILER_SUBJECT_PREFIX + labelZh: 邮件服务主题前缀 + labelEn: Mailer Subject Prefix + required: false + type: text diff --git a/appstore/gitea/1.22.4/docker-compose.yml b/appstore/gitea/1.22.4/docker-compose.yml new file mode 100644 index 00000000..c9a73951 --- /dev/null +++ b/appstore/gitea/1.22.4/docker-compose.yml @@ -0,0 +1,43 @@ +networks: + 1panel-network: + external: true +services: + gitea: + container_name: gitea + env_file: + - ./envs/global.env + - ./envs/gitea.env + - .env + environment: + - USER_UID=1000 + - USER_GID=1000 + - DISABLE_SSH=false + - GITEA__api__ENABLE_SWAGGER=false + - DB_HOST=${DB_HOSTNAME}:${DB_PORT} + - GITEA__mailer__ENABLED=${MAILER_ENABLED} + - GITEA__mailer__SMTP_ADDR=${MAILER_SMTP_ADDR} + - GITEA__mailer__SMTP_PORT=${MAILER_SMTP_PORT} + - GITEA__mailer__USER=${MAILER_USER} + - GITEA__mailer__PASSWD=${MAILER_PASSWD} + - GITEA__mailer__FROM=${MAILER_FROM} + - GITEA__mailer__SUBJECT_PREFIX=${MAILER_SUBJECT_PREFIX} + - GITEA__proxy__PROXY_ENABLED=${PROXY_ENABLED} + - GITEA__proxy__PROXY_URL=${PROXY_URL} + - GITEA__proxy__PROXY_HOSTS=${PROXY_HOSTS} + - GITEA__webhook__PROXY_URL=${PROXY_URL} + - GITEA__webhook__PROXY_HOSTS=${PROXY_HOSTS} + - GITEA__git.config__http.proxy=${PROXY_URL} + - GITEA__git.config__https.proxy=${PROXY_URL} + image: gitea/gitea:1.22.4 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + - ${PANEL_APP_PORT_SSH}:22 + restart: always + volumes: + - ${GITEA_ROOT_PATH}/data:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro diff --git a/appstore/gitea/1.22.4/envs/default.env b/appstore/gitea/1.22.4/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/gitea/1.22.4/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/gitea/1.22.4/envs/gitea.env b/appstore/gitea/1.22.4/envs/gitea.env new file mode 100644 index 00000000..1ead1944 --- /dev/null +++ b/appstore/gitea/1.22.4/envs/gitea.env @@ -0,0 +1,36 @@ +USER_UID=1000 +USER_GID=1000 +APP_NAME="Gitea" +RUN_MODE=prod +DOMAIN=localhost +SSH_DOMAIN=localhost +SSH_PORT=22 +SSH_LISTEN_PORT=22 +DISABLE_SSH=false +HTTP_PORT=3000 +ROOT_URL="" +LFS_START_SERVER=true +DB_TYPE=sqlite3 +DB_HOST="" +DB_NAME="" +DB_USER="" +DB_PASSWD="" +INSTALL_LOCK=false +SECRET_KEY="" +DISABLE_REGISTRATION=false +REQUIRE_SIGNIN_VIEW=false +GITEA__time__DEFAULT_UI_LOCATION=Asia/Shanghai +GITEA__migrations__ALLOW_LOCALNETWORKS=true +GITEA__api__ENABLE_SWAGGER=false +GITEA__ui.meta__AUTHOR=新疆萌森软件开发工作室 +GITEA__ui.meta__DESCRIPTION=轻量级代码托管解决方案,支持自建和托管服务。 +GITEA__ui.meta__KEYWORDS=git,gitea,github,gitlab,gitee,code +GITEA__security__LOGIN_REMEMBER_DAYS=3 +GITEA__server__LOCAL_ROOT_URL=http://localhost:3000/ +GITEA__webhook__ALLOWED_HOST_LIST=* +GITEA__picture__REPOSITORY_AVATAR_FALLBACK=random +GITEA__attachment__MAX_SIZE=1024 +GITEA__git__MAX_GIT_DIFF_LINES=10000 +GITEA__git.config__http.postBuffer=2147483648 +GITEA__git.config__core.compression=0 +GITEA__other__SHOW_FOOTER_POWERED_BY=false diff --git a/appstore/gitea/1.22.4/envs/global.env b/appstore/gitea/1.22.4/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/gitea/1.22.4/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/gitea/1.22.4/scripts/init.sh b/appstore/gitea/1.22.4/scripts/init.sh new file mode 100644 index 00000000..636a6213 --- /dev/null +++ b/appstore/gitea/1.22.4/scripts/init.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/gitea.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/gitea/1.22.4/scripts/uninstall.sh b/appstore/gitea/1.22.4/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/gitea/1.22.4/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/gitea/1.22.4/scripts/upgrade.sh b/appstore/gitea/1.22.4/scripts/upgrade.sh new file mode 100644 index 00000000..636a6213 --- /dev/null +++ b/appstore/gitea/1.22.4/scripts/upgrade.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/gitea.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/gitea/README.md b/appstore/gitea/README.md new file mode 100644 index 00000000..69e31438 --- /dev/null +++ b/appstore/gitea/README.md @@ -0,0 +1,152 @@ +# Gitea + +Gitea 是一个轻量级的 DevOps 平台软件。 + +![Gitea](https://file.lifebus.top/imgs/gitea_cover_show.png) + +Gitea 是一个轻量级的 DevOps 平台软件。从开发计划到产品成型的整个软件生命周期,他都能够高效而轻松的帮助团队和开发者。包括 +Git 托管、代码审查、团队协作、软件包注册和 CI/CD。它与 GitHub、Bitbucket 和 GitLab 等比较类似。 Gitea 最初是从 Gogs +分支而来,几乎所有代码都已更改。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 代码托管 + +Gitea⽀持创建和管理仓库、浏览提交历史和代码⽂件、审查和合并代码提交、管理协作者、管理分⽀等。它还⽀持许多常见的Git特性,⽐如标签、Cherry-pick、hook、集成协作⼯具等。 + ++ 轻量级和快速 + +Gitea 的设计目标之一就是轻量级和快速响应。它不像一些大型的代码托管平台那样臃肿,因此在性能方面表现出色,适用于资源有限的服务器环境。由于其轻量级设计,Gitea +在资源消耗方面相对较低,可以在资源有限的环境下运行良好。 + ++ 易于部署和维护 + +轻松地部署在各种服务器上,不需要复杂的配置和依赖。这使得个人开发者或小团队可以方便地设置和管理自己的 Git 服务。 + ++ 安全性 + +Gitea 注重安全性,提供了用户权限管理、访问控制列表等功能,可以确保代码和数据的安全性。 + ++ 代码评审 + +代码评审同时支持 Pull Request workflow 和 AGit workflow。评审⼈可以在线浏览代码,并提交评审意见或问题。 提交者可以接收到评审意见,并在线回 +复或修改代码。代码评审可以帮助用户和企业提⾼代码质量。 + ++ CI/CD + +Gitea Actions⽀持 CI/CD 功能,该功能兼容 GitHub Actions,⽤⼾可以采用熟悉的YAML格式编写workflows,也可以重⽤⼤量的已有的 Actions +插件。Actions 插件支持从任意的 Git 网站中下载。 + +项目管理:Gitea 通过看板和⼯单来跟踪⼀个项⽬的需求,功能和bug。⼯单⽀持分支,标签、⾥程碑、 指派、时间跟踪、到期时间、依赖关系等功能。 + ++ 制品库 + +Gitea支持超过 20 种不同种类的公有或私有软件包管理,包括:Cargo, Chef, Composer, Conan, Conda, Container, Helm, Maven, npm, +NuGet, Pub, PyPI, RubyGems, Vagrant等 + ++ 开源社区支持 + +Gitea 是一个基于 MIT 许可证的开源项目,Gitea 拥有一个活跃的开源社区,能够持续地进行开发和改进,同时也积极接受社区贡献,保持了平台的更新和创新。 + ++ 多语言支持 + +Gitea 提供多种语言界面,适应全球范围内的用户,促进了国际化和本地化。 + +## 安装说明 + +### 代理配置 + +开启 `启用代理` 配置后,同时生效与 `Gitea` 服务和 `Webhook` 服务和 `Git` 服务 + ++ `代理服务器地址` 填写代理服务器地址 + +代理服务器支持协议:`http://` `https://` `socks://` + ++ `代理网址` 代理匹配规则 + +支持使用 `*` 匹配符号 + +使用 `**` 代表所有网址 + +例如需要代理: `Github` `gitlab`, 此项配置不作用于 `Git` 服务 + +```text +github.com,*.github.com,*.gitlab.com +``` + +在 app.ini 配置文件中配置如下: + +```ini +[webhook] +PROXY_URL = http://{host}:{port} +PROXY_HOSTS = github.com,*.github.com,*.gitlab.com +[proxy] +PROXY_ENABLED = true +PROXY_URL = http://{host}:{port} +PROXY_HOSTS = github.com,*.github.com,*.gitlab.com +``` + +### 开启 API 文档 + +默认关闭 `Swagger` 文档,开启后可以查看 `API` 文档 + +首次安装前,编辑`docker-compose.yml`修改环境变量 `GITEA__api__ENABLE_SWAGGER=false` 为 `true` 即可开启文档服务。 + +已安装用户,修改配置文件 `data/gitea/conf/app.ini` 中 `API` 配置项 `ENABLE_SWAGGER` 为 `true` 即可开启文档服务。 + +```ini +[api] +ENABLE_SWAGGER = true +``` + +## 反向代理 + +> Nginx + +```nginx +location / { + proxy_pass http://localhost:3000; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; +} +``` + +## 常见问题 + +> 安装后,修改配置文件后,重启服务,但是配置文件没有生效? + +安装后如需修改配置,请修改 持久化目录 下的 `data/gitea/conf/app.ini` 文件,然后重启服务。 + +> 迁移 大仓库时,提示 `fatal: early EOF`? + +请修改 `data/gitea/home/.gitconfig` 文件,然后重启服务。 + +```gitconfig +[http] + version = HTTP/1.1 + lowSpeedLimit = 0 + lowSpeedTime = 999999 + postbuffer = 2147483648 +[core] + compression = 0 +``` + +配置说明: + ++ 使用 HTTP/1.1 协议 `http.version = HTTP/1.1` + ++ 限制速度 `http.lowSpeedLimit = 0` + ++ 限制时间 `http.lowSpeedTime = 999999` + ++ 提交缓冲区大小 `http.postbuffer = 2147483648` + ++ 关闭压缩 `core.compression = 0` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/gitea/data.yml b/appstore/gitea/data.yml new file mode 100644 index 00000000..d06c8011 --- /dev/null +++ b/appstore/gitea/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: gitea + name: Gitea + tags: + - WebSite + - DevOps + - Storage + - Local + shortDescZh: 新一代的代码托管平台 + shortDescEn: The next generation of code hosting platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://gitea.io/ + github: https://github.com/go-gitea/gitea/ + document: https://docs.gitea.io/ diff --git a/appstore/gitea/logo.png b/appstore/gitea/logo.png new file mode 100644 index 00000000..82732ec6 Binary files /dev/null and b/appstore/gitea/logo.png differ diff --git a/appstore/halo/2.20.10/.env b/appstore/halo/2.20.10/.env new file mode 100644 index 00000000..5efbf979 --- /dev/null +++ b/appstore/halo/2.20.10/.env @@ -0,0 +1,33 @@ +# 数据库服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化路径 [必填] +HALO_ROOT_PATH=/home/halo + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8090 + +# 公网访问地址 [必填] +HALO_EXTERNAL_URL=http://127.0.0.1:8090 + +# 保持登录时间 [必填] +HALO_REMEMBER_ME_TOKEN_VALIDITY=14d + +# 数据库 类型 [必填] +DB_TYPE=postgresql + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 名称 [必填] +DB_NAME=halo + +# 数据库 用户名 [必填] +DB_USER=halo + +# 数据库 密码 [必填] +DB_USER_PASSWORD= + diff --git a/appstore/halo/2.20.10/data.yml b/appstore/halo/2.20.10/data.yml new file mode 100644 index 00000000..48935be5 --- /dev/null +++ b/appstore/halo/2.20.10/data.yml @@ -0,0 +1,103 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: postgresql + envKey: PANEL_DB_TYPE + labelZh: 数据库服务 (前置检查) + labelEn: Database Service + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/halo" + edit: true + envKey: HALO_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8090 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number + - default: "http://127.0.0.1:8090" + edit: true + envKey: HALO_EXTERNAL_URL + labelZh: 公网访问地址 + labelEn: External URL + required: true + rule: paramExtUrl + type: text + - default: "14d" + edit: true + envKey: HALO_REMEMBER_ME_TOKEN_VALIDITY + labelZh: 保持登录时间 + labelEn: Remember me token validity + required: true + type: text + - default: "postgresql" + edit: true + envKey: DB_TYPE + labelZh: 数据库 类型 + labelEn: Database Type + required: true + type: select + values: + - label: PostgreSQL + value: postgresql + - label: MySQL (MariaDB, Percona) + value: mysql + - default: "127.0.0.1" + edit: true + envKey: DB_HOSTNAME + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "halo" + edit: true + envKey: DB_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + rule: paramCommon + type: text + - default: "halo" + edit: true + envKey: DB_USER + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "" + edit: true + envKey: DB_USER_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + random: true + required: true + rule: paramComplexity + type: password diff --git a/appstore/halo/2.20.10/docker-compose.yml b/appstore/halo/2.20.10/docker-compose.yml new file mode 100644 index 00000000..7cb29544 --- /dev/null +++ b/appstore/halo/2.20.10/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true +services: + halo: + command: + - --spring.r2dbc.url=r2dbc:pool:${DB_TYPE}://${DB_HOSTNAME}:${DB_PORT}/${DB_NAME} + - --spring.r2dbc.username=${DB_USER} + - --spring.r2dbc.password=${DB_USER_PASSWORD} + - --spring.sql.init.platform=${DB_TYPE} + - --halo.external-url=${HALO_EXTERNAL_URL} + - --halo.security.remember-me.token-validity=${HALO_REMEMBER_ME_TOKEN_VALIDITY} + container_name: halo + image: halohub/halo:2.20.10 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8090 + restart: always + volumes: + - ${HALO_ROOT_PATH}/data:/root/.halo2 diff --git a/appstore/halo/2.20.10/envs/default.env b/appstore/halo/2.20.10/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/halo/2.20.10/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/halo/2.20.10/envs/global.env b/appstore/halo/2.20.10/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/halo/2.20.10/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/halo/2.20.10/scripts/init.sh b/appstore/halo/2.20.10/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/halo/2.20.10/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/halo/2.20.10/scripts/uninstall.sh b/appstore/halo/2.20.10/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/halo/2.20.10/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/halo/2.20.10/scripts/upgrade.sh b/appstore/halo/2.20.10/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/halo/2.20.10/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/halo/README.md b/appstore/halo/README.md new file mode 100644 index 00000000..09815e95 --- /dev/null +++ b/appstore/halo/README.md @@ -0,0 +1,79 @@ +# Halo + +**强大易用的开源建站工具。** + +配合上丰富的模板与插件,帮助你构建你心中的理想站点。 + +![Halo](https://file.lifebus.top/imgs/halo_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +> ### 可插拔架构 + +Halo 采用可插拔架构,功能模块之间耦合度低、灵活性提高。支持用户按需安装、卸载插件,操作便捷。同时提供插件开发接口以确保较高扩展性和可维护性。 + +✅ 支持在运行时安装和卸载插件 + +✅ 更加方便地集成三方平台 + +✅ 统一的可配置设置表单 + +✅ 支持自定义模型,自动生成 RESTful API + + +> ### 功能丰富的主题机制 + +Halo 提供完整的主题模板机制,用于构建前台界面。这意味着用户可以根据自己的喜好选择不同类型的主题模板来定制化自己的站点外观。 + +✅ 动态切换主题模板 + +✅ 支持实时编辑和预览效果 + +✅ 多语言支持 + +✅ 与插件配合实现更多功能 + +> ### 编辑器 + +Halo 的富文本编辑器提供了方便丰富的功能,包括添加标题、段落、引用、列表、代码块等元素,并支持设置样式属性、上传图片、插入视频等功能。这些工具让你的文章创作更加便捷和生动。 + +✅ 完备的富文本格式支持 + +✅ 支持拖拽和粘贴图片上传 + +✅ 支持通过插件扩展编辑器 + +> 更多特性 +> +> 我们将不断探索和追求更好的使用体验,持续迭代出更加优秀的 Halo + ++ 代码开源 + +Halo 的项目代码开源在 GitHub 上且处于积极维护状态,截止目前已经发布了 109 个版本。你也可以在上面提交你的问题或者参与代码贡献。 + ++ 易于部署 + +推荐使用 Docker 的方式部署 Halo,便于升级,同时避免了各种环境依赖的问题。统一管理在工作目录中的应用数据也能方便地进行备份和迁移。 + ++ 插件机制 + +支持在插件运行时为系统添加新功能,同时保持 Halo 自身的简洁轻量。这种灵活的插件机制让用户根据自身需求自由扩展 Halo +的功能,帮助用户实现富有想象力的站点。 + ++ 模板机制 + +支持自定义配置、主题预览、多语言等功能。这种灵活的模板系统让用户可以针对自己的需求进行自定义配置,为网站带来更加个性化的外观和交互体验。 + ++ 附件管理 + +支持多种存储策略,并支持通过插件扩展外部存储位置,可以让用户更加灵活地地上传、查看和管理附件。 + ++ 搜索引擎 + +内置全文搜索引擎,支持关键字搜索文章和页面内容。同时支持通过插件扩展外部搜索引擎,做到让用户按需选择、自由扩展。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/halo/data.yml b/appstore/halo/data.yml new file mode 100644 index 00000000..723e1426 --- /dev/null +++ b/appstore/halo/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: halo + name: Halo + tags: + - WebSite + - Local + shortDescZh: 强大易用的开源建站工具 + shortDescEn: Powerful and easy-to-use open source website builder + type: website + crossVersionUpdate: true + limit: 0 + website: https://halo.run/ + github: https://github.com/halo-dev/halo/ + document: https://docs.halo.run/ diff --git a/appstore/halo/logo.png b/appstore/halo/logo.png new file mode 100644 index 00000000..044ab596 Binary files /dev/null and b/appstore/halo/logo.png differ diff --git a/appstore/iframely/2.4.3/.env b/appstore/iframely/2.4.3/.env new file mode 100644 index 00000000..7ca4173f --- /dev/null +++ b/appstore/iframely/2.4.3/.env @@ -0,0 +1,9 @@ +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8061 + +# HTTP 代理 +HTTP_PROXY= + +# 最大重定向次数 +MAX_REDIRECTS=4 + diff --git a/appstore/iframely/2.4.3/config/config.local.js b/appstore/iframely/2.4.3/config/config.local.js new file mode 100644 index 00000000..cc3ff0c0 --- /dev/null +++ b/appstore/iframely/2.4.3/config/config.local.js @@ -0,0 +1,231 @@ +import {fileURLToPath} from 'url'; +import {dirname} from 'path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +export default { + DEBUG: false, + RICH_LOG_ENABLED: false, + baseAppUrl: process.env.BASE_APP_URL || "http://localhost:8061", + relativeStaticUrl: "/r", + SKIP_IFRAMELY_RENDERS: true, + GROUP_LINKS: true, + MAX_REDIRECTS: parseInt(process.env.MAX_REDIRECTS, 10) || 4, + SKIP_OEMBED_RE_LIST: [ + // /^https?:\/\/yourdomain\.com\//, + ], + + /* + GENERATE_LINK_PARAMS: { + disableSizeWrapper: true + }, + */ + + port: 8061, + host: '0.0.0.0', + + /* + ssl: { + key: ssl_key, + cert: ssl_cert, + port: 443 + }, + */ + + CACHE_ENGINE: 'node-cache', + CACHE_TTL: 0, + + /* + allowedOrigins: [ + "*", + "http://another_domain.com" + ], + */ + + RESPONSE_TIMEOUT: 5 * 1000, + + ADD_OEMBED_PARAMS: [{ + re: [ + /^https:\/\/graph\.facebook\.com\/v[0-9\.]+\/instagram_oembed/i + ], + params: { + // TODO: get your access Insagtam token as described + // use `{app-id}|{app secret}` as access token + // on https://developers.facebook.com/docs/instagram/oembed/ + access_token: '', + hidecaption: true + } + }, { + re: [/^https:\/\/graph\.facebook\.com\/v[0-9\.]+\/oembed_page/i], + params: { + // TODO: get your access token as described + // use `{app-id}|{app secret}` as access token + // on https://developers.facebook.com/docs/plugins/oembed + access_token: '', + show_posts: 0, + show_facepile: 0, + maxwidth: 600 + } + }, { + // match i=user or i=moment or i=timeline to configure these types invidually + // see params spec at https://dev.twitter.com/web/embedded-timelines/oembed + re: [/^https?:\/\/publish\.twitter\.com\/oembed\?i=user/i], + params: { + limit: 1, + maxwidth: 600 + } + }, { + // Facebook https://developers.facebook.com/docs/plugins/oembed/ + re: [/^https:\/\/graph\.facebook\.com\/v[0-9\.]+\/oembed_/i], + params: { + // TODO: get your access token as described + // use `{app-id}|{app secret}` as access token + // on https://developers.facebook.com/docs/plugins/oembed + access_token: '', + // Add any other optional params, like skip script tag and fb-root div + // omitscript: true + } + }], + + /* + PROXY: [{ + re: [/^https?:\/\/www\.domain\.com/], + + // Either `proxy`, or `proxy_url`, or none. + proxy: true, // Will fetch URL via echo service configured as PROXY_URL. See below. + // proxy_url: 'http://1.2.3.4:8080?url={url}', // Will fetch URL via this exact echo service, see below. + + user_agent: 'CHANGE YOUR AGENT', + headers: { + // HTTP headers + // Overrides previous params if overlapped. + }, + cache_ttl: 3600 // in seconds, cache response for 1 hour. + }], + + // Proxy now requires an echo service endpoint. + // See #354 and example code at + // https://gist.github.com/nleush/7916ee89f7b8d6f0cd478d7335702139 + PROXY_URL: 'http://1.2.3.4:8080?url={url}', // Iframely will add `?url=...` to this endpoint + */ + + providerOptions: { + locale: "en_US", + "twitter": { + "max-width": 550, + "min-width": 250, + hide_media: false, + hide_thread: false, + omit_script: false, + center: false, + // dnt: true, + cache_ttl: 100 * 365 * 24 * 3600 + }, + readability: { + enabled: false + // to enable description fallback to first paragraph + // allowPTagDescription: true + }, + images: { + loadSize: false, + checkFavicon: false + }, + tumblr: { + consumer_key: "INSERT YOUR VALUE" + // disables status embeds for images and videos - will return plain media + // media_only: true + }, + google: { + // https://developers.google.com/maps/documentation/embed/guide#api_key + maps_key: "INSERT YOUR VALUE" + }, + + /* + // Optional Camo Proxy to wrap all images: https://github.com/atmos/camo + camoProxy: { + camo_proxy_key: "INSERT YOUR VALUE", + camo_proxy_host: "INSERT YOUR VALUE" + // ssl_only: true // will only proxy non-ssl images + }, + */ + + youtube: { + // api_key: "INSERT YOUR VALUE", + // parts: [ "snippet", "player" ], + get_params: "?rel=0&showinfo=1", + fix_shorts_in_eu: true + }, + vimeo: { + get_params: "?byline=0&badge=0" + }, + soundcloud: { + old_player: true + }, + giphy: { + media_only: true + }, + bandcamp: { + get_params: '/size=large/bgcol=333333/linkcol=ffffff/artwork=small/transparent=true/', + media: { + album: { + height: 472, + 'max-width': 700 + }, + track: { + height: 120, + 'max-width': 700 + } + } + }, + // Docs: https://dev.twitch.tv/docs/embed/video-and-clips + /* + twitch: { + parent: 'jsbin.com, null.jsbin.com, localhost' + }, + */ + }, + + + /* + WHITELIST_WILDCARD: { + "twitter": { + "player": "allow", + "photo": "deny" + }, + "oembed": { + "video": "allow", + "photo": "allow", + "rich": "deny", + "link": "deny" + }, + "og": { + "video": ["allow", "ssl", "responsive"] + }, + "iframely": { + "survey": "allow", + "reader": "allow", + "player": "allow", + "image": "allow" + }, + "html-meta": { + "video": ["allow", "responsive"], + "promo": "allow" + } + } + */ + + IGNORE_DOMAINS_RE: [ + /^https?:\/\/127\.0\.0\.1/i, + /^https?:\/\/localhost/i, + /^https?:\/\/[^\/]+:\d+\/?/, + + // And this is AWS metadata service + // https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html + /^https?:\/\/169\.254\.169\.254/ + ], + + // Endpoint for prerender service, if you need it. Used to parse React apps. Very slow. + // Tested with https://github.com/prerender/prerender + // PRERENDER_URL: "https://domain/render?url=" +}; diff --git a/appstore/iframely/2.4.3/data.yml b/appstore/iframely/2.4.3/data.yml new file mode 100644 index 00000000..0e70fadc --- /dev/null +++ b/appstore/iframely/2.4.3/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: 8061 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: HTTP_PROXY + labelZh: HTTP 代理 + labelEn: HTTP Proxy + required: false + type: text + - default: 4 + edit: true + envKey: MAX_REDIRECTS + labelZh: 最大重定向次数 + labelEn: Max Redirects + required: false + type: number diff --git a/appstore/iframely/2.4.3/docker-compose.yml b/appstore/iframely/2.4.3/docker-compose.yml new file mode 100644 index 00000000..fab14675 --- /dev/null +++ b/appstore/iframely/2.4.3/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + iframely: + container_name: iframely + env_file: + - ./envs/global.env + - .env + environment: + - NODE_ENV=production + - PORT=8061 + - HOST=0.0.0.0 + - HTTPS_PROXY=${HTTP_PROXY} + image: qyg2297248353/iframely:v2.4.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8061 + restart: always + volumes: + - ./config/config.local.js:/iframely/config.local.js diff --git a/appstore/iframely/2.4.3/envs/default.env b/appstore/iframely/2.4.3/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/iframely/2.4.3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/iframely/2.4.3/envs/global.env b/appstore/iframely/2.4.3/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/iframely/2.4.3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/iframely/2.4.3/scripts/init.sh b/appstore/iframely/2.4.3/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/iframely/2.4.3/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/iframely/2.4.3/scripts/uninstall.sh b/appstore/iframely/2.4.3/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/iframely/2.4.3/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/iframely/2.4.3/scripts/upgrade.sh b/appstore/iframely/2.4.3/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/iframely/2.4.3/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/iframely/README.md b/appstore/iframely/README.md new file mode 100644 index 00000000..5c1c5a7f --- /dev/null +++ b/appstore/iframely/README.md @@ -0,0 +1,80 @@ +# Iframely + +当今互联网的富媒体平台 + + + +iframely 是针对所有各种富媒体嵌入和 URL 数据的统一交付服务。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特点 + +🚀 最佳富媒体 + +iframely 了解来自 1900 多家出版商的富媒体,并且还在不断增加。视频、音频、应用程序、照片和图像、幻灯片、播放列表、播客、地图、3D、表格、文档、谜题、测验、图表和信息图表。您会自动获得所有新的发布商。 + +## 安装说明 + +由于 `api_key` 属于 Iframely云托管服务,使用自托管服务,将无法配置 `api_key`,保障接口的安全性。 + +> API 端点: '/oembed' and '/iframely' +> +> Debugger UI: '/debug' + +### 其他配置 + +自行修改 `config/config.local.js` 配置文件,重启生效 + +## API 说明 + +### 请求示例 + +端点:`/oembed` + +```http request +${domain}/oembed?url={URL} +``` + +端点:`/iframely` + +```http request +${domain}/iframely?url={URL} +``` + +### 响应示例 + +> 官方 + +```json +{ + "url": "https://vimeo.com/141567420", + "type": "video", + "version": "1.0", + "title": "Input/Output", + "description": "A new short from Terri Timely and Park Pictures", + "author": "Terri Timely", + "author_url": "https://vimeo.com/user1946955", + "provider_name": "Vimeo", + "thumbnail_url": "https://i.vimeocdn.com/…5aebf015a6472-d_295x166", + "thumbnail_width": 295, + "thumbnail_height": 166, + "html": "
" +} +``` + +> 百度一下 + +```json +{ + "type": "link", + "version": "1.0", + "title": "百度一下,你就知道", + "url": "http://www.baidu.com/", + "description": "全球领先的中文搜索引擎、致力于让网民更便捷地获取信息,找到所求。百度超过千亿的中文网页数据库,可以瞬间找到相关的搜索结果。" +} +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/iframely/data.yml b/appstore/iframely/data.yml new file mode 100644 index 00000000..16ed55ed --- /dev/null +++ b/appstore/iframely/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: iframely + name: Iframely + tags: + - Tool + - Middleware + - Local + shortDescZh: 响应式 Web 嵌入和 URL 元的 Iframely API + shortDescEn: Responsive Web Embeds and URL Meta with Iframely API + type: tool + crossVersionUpdate: true + limit: 0 + website: https://iframely.com/ + github: https://github.com/itteco/iframely/ + document: https://iframely.com/docs/ diff --git a/appstore/iframely/logo.png b/appstore/iframely/logo.png new file mode 100644 index 00000000..b392f442 Binary files /dev/null and b/appstore/iframely/logo.png differ diff --git a/appstore/immich-machine-learning/1.121.0/.env b/appstore/immich-machine-learning/1.121.0/.env new file mode 100644 index 00000000..91116ad6 --- /dev/null +++ b/appstore/immich-machine-learning/1.121.0/.env @@ -0,0 +1,21 @@ +# 数据持久化路径 [必填] +IMMICH_ROOT_PATH=/home/immich-machine-learning + +# API 端口 [必填] +PANEL_APP_PORT_HTTP=2283 + +# 硬件驱动路径 [必填] +IMMICH_DRIVE_PATH=/dev/dri + +# 时区 [必填] +TZ=Asia/Shanghai + +# 机器学习 预加载模型 +MACHINE_LEARNING_PRELOAD__CLIP=XLM-Roberta-Large-Vit-B-16Plus + +# 人脸识别 预加载模型 +MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION=buffalo_l + +# Hugging Face 服务地址 +HF_ENDPOINT=https://hf-mirror.com + diff --git a/appstore/immich-machine-learning/1.121.0/data.yml b/appstore/immich-machine-learning/1.121.0/data.yml new file mode 100644 index 00000000..7321cde6 --- /dev/null +++ b/appstore/immich-machine-learning/1.121.0/data.yml @@ -0,0 +1,61 @@ +additionalProperties: + formFields: + - default: "/home/immich-machine-learning" + edit: true + envKey: IMMICH_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 2283 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: API 端口 + labelEn: API port + required: true + rule: paramPort + type: number + - default: "/dev/dri" + edit: true + envKey: IMMICH_DRIVE_PATH + labelZh: 硬件驱动路径 + labelEn: Drive path + required: true + type: text + - default: "Asia/Shanghai" + edit: true + envKey: TZ + labelZh: 时区 + labelEn: Timezone + required: true + type: text + - default: "XLM-Roberta-Large-Vit-B-16Plus" + edit: true + envKey: MACHINE_LEARNING_PRELOAD__CLIP + labelEn: Machine Learning Preload Model + labelZh: 机器学习 预加载模型 + required: false + type: text + - default: "buffalo_l" + edit: true + envKey: MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION + labelEn: Machine Learning Preload Model + labelZh: 人脸识别 预加载模型 + required: false + type: select + values: + - label: antelopev2 + value: "antelopev2" + - label: buffalo_l + value: "buffalo_l" + - label: buffalo_m + value: "buffalo_m" + - label: buffalo_s + value: "buffalo_s" + - default: "https://hf-mirror.com" + edit: true + envKey: HF_ENDPOINT + labelZh: Hugging Face 服务地址 + labelEn: Hugging Face Endpoint + required: false + type: text diff --git a/appstore/immich-machine-learning/1.121.0/docker-compose.yml b/appstore/immich-machine-learning/1.121.0/docker-compose.yml new file mode 100644 index 00000000..1753adb0 --- /dev/null +++ b/appstore/immich-machine-learning/1.121.0/docker-compose.yml @@ -0,0 +1,24 @@ +name: immich-machine-learning +networks: + 1panel-network: + external: true +services: + immich-machine-learning: + container_name: immich-machine-learning-immich-machine-learning + devices: + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + healthcheck: + disable: false + image: ghcr.io/immich-app/immich-machine-learning:v1.121.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3003 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/cache:/cache diff --git a/appstore/immich-machine-learning/1.121.0/envs/default.env b/appstore/immich-machine-learning/1.121.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/immich-machine-learning/1.121.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/immich-machine-learning/1.121.0/envs/global.env b/appstore/immich-machine-learning/1.121.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/immich-machine-learning/1.121.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/immich-machine-learning/1.121.0/scripts/init.sh b/appstore/immich-machine-learning/1.121.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/immich-machine-learning/1.121.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich-machine-learning/1.121.0/scripts/uninstall.sh b/appstore/immich-machine-learning/1.121.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/immich-machine-learning/1.121.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich-machine-learning/1.121.0/scripts/upgrade.sh b/appstore/immich-machine-learning/1.121.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/immich-machine-learning/1.121.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich-machine-learning/README.md b/appstore/immich-machine-learning/README.md new file mode 100644 index 00000000..1b825c13 --- /dev/null +++ b/appstore/immich-machine-learning/README.md @@ -0,0 +1,123 @@ +# Immich (机器学习模块) + +Immich - 高性能自托管照片和视频备份解决方案 + +![Immich](https://file.lifebus.top/imgs/immich_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +欢迎您 +您好,很高兴您能来到这里。 + +我叫亚历克斯。我在学校时是一名电气工程师,后来因为工作和对解决问题的纯粹热爱而成为了一名软件工程师。 + +我们和新生儿躺在床上,我妻子说:"我们开始积累大量宝宝的照片和视频,我不想再为 App-Which-Must-Not-Be-Name +付费了。你总是想为我建一些东西,为什么不为我建一个能做到这一点的应用程序呢? + +就这样,这个想法开始在我脑海中萌生。之后,我开始在自助托管领域寻找具有类似备份功能和 "非命名应用程序 " +性能水平的现有解决方案。我发现目前的解决方案主要集中在画廊类型的应用程序上。然而,我想要的是一个简单易用的备份工具,并带有一个能高效查看照片和视频的本地移动应用程序。于是,我作为一名如饥似渴的工程师踏上了寻找之旅。 + +另一个促使我执行 "不可名状的应用程序 "替代方案的动机是,我希望能为开源社区做出贡献,多年来我从这个社区中受益匪浅。 + +我很荣幸能与大家分享这一作品,它重视隐私、回忆,以及在易用、友好的界面中回顾这些时刻的喜悦。 + +如果您喜欢这款应用程序,或者它在某些方面对您有帮助,请考虑支持这个项目。这将有助于我继续开发和维护应用程序。 + +## 环境准备 + ++ `Redis` 服务 + +Immich 使用 Redis 作为缓存服务,所以需要安装 Redis 服务。 + +### 硬件驱动挂载 + +默认仅挂载: `/dev/dri`,如果您的设备不存在硬件驱动,请使用删除完整 `devices` 配置。 + +可以通过 `ls /dev/` 查看存在的设备驱动。 + +```yml +devices: + - /dev/dri:/dev/dri + # - /dev/nvidia0:/dev/nvidia0 + # - /dev/nvidiactl:/dev/nvidiactl + # - /dev/nvidia-modeset:/dev/nvidia-modeset + # - /dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl + # - /dev/nvidia-uvm:/dev/nvidia-uvm + # - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools + # - /dev/video11:/dev/video11 +``` + +如果您的设备存在其他硬件驱动,可以选择挂载。删除 `# ` 号即可。格式为:`宿主机路径:容器路径`。 + +格式请与 `- /dev/dri:/dev/dri` 保持一致。 + +## 升级说明 + ++ **大版本** `v1.106.2` + +`2024/06/12` 上线,升级需要注意: + +1. 移除 `immich-microservices` 服务 +2. 环境变量发生了合并 +3. 底层API发生了变化 + 4. 移动端需要同步更新 + +## 安装说明 + +### 机器学习 预加载模型(CLIP) + +可选模型列表,粘贴时输入 `immich-app/` 之后的内容即可。 + +[immich-app's Collections - CLIP](https://huggingface.co/collections/immich-app/clip-654eaefb077425890874cd07) + +[immich-app's Collections - Multilingual CLIP](https://huggingface.co/collections/immich-app/multilingual-clip-654eb08c2382f591eeb8c2a7) + +默认模型 + +中文支持较好的模型 `XLM-Roberta-Large-Vit-B-16Plus` + +### 人脸识别 预加载模型 + +`buffalo_l`, `buffalo_m`, `buffalo_s`, `antelopev2` + +## 常见问题 + ++ 安装失败 + + 网络问题,可以尝试使用代理 ++ 升级失败 + + 请查看升级说明 + + 请查看日志,查看具体错误信息 + + 记录安装参数,进行卸载重装 + + 升级1Panel后,提示容器找不到 + + 请删除容器,重新安装 + + 提示文件或目录不存在 + + 可手动创建不存在的文件和目录,然后重试 + + 创建的文件可为空文件 + + 每次都升级失败 + + 很抱歉,官方应用不支持编排式应用(一个应用包含多个容器)的安装与升级,您可以尝试手动卸载安装最新版 ++ 无法访问 + + 请检查是否安装了 `Redis` 服务 + + 请检查是否正确配置了 `Redis` 服务 + + 请检查是否正确配置了 `域名` 和 `SSL` + + 请检查是否正确配置了 `端口` + + 请检查是否正确配置了 `防火墙` 并开放了 `端口` + + 请检查是否正确配置了 `Nginx` 服务 + +## 移动端应用 + +
+
+ App Store + App Store +
+
+ Google Play + Google Play +
+
+ +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/immich-machine-learning/data.yml b/appstore/immich-machine-learning/data.yml new file mode 100644 index 00000000..0a798c8f --- /dev/null +++ b/appstore/immich-machine-learning/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: immich-machine-learning + name: Immich 机器学习模块 + tags: + - AI + - Local + shortDescZh: 高性能自托管照片和视频备份解决方案 + shortDescEn: High performance self-hosted photo and video backup solution + type: tool + crossVersionUpdate: true + limit: 0 + website: https://immich.app/ + github: https://github.com/immich-app/immich + document: https://immich.app/docs/overview/introduction diff --git a/appstore/immich-machine-learning/logo.png b/appstore/immich-machine-learning/logo.png new file mode 100644 index 00000000..081f92e4 Binary files /dev/null and b/appstore/immich-machine-learning/logo.png differ diff --git a/appstore/immich-server/1.121.0/.env b/appstore/immich-server/1.121.0/.env new file mode 100644 index 00000000..27aea550 --- /dev/null +++ b/appstore/immich-server/1.121.0/.env @@ -0,0 +1,48 @@ +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# 数据持久化路径 [必填] +IMMICH_ROOT_PATH=/home/immich-app + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2283 + +# 时区 [必填] +TZ=Asia/Shanghai + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 用户名 [必填] +DB_USERNAME=postgres + +# 数据库 密码 [必填] +DB_PASSWORD= + +# 数据库 名称 [必填] +DB_DATABASE_NAME=immich + +# Redis 主机 [必填] +REDIS_HOSTNAME=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 索引 [必填] +REDIS_DBINDEX=0 + +# Redis 用户名 +REDIS_USERNAME= + +# Redis 密码 +REDIS_PASSWORD= + +# 是否跳过目录检查 +IMMICH_IGNORE_MOUNT_CHECK_ERRORS=false + diff --git a/appstore/immich-server/1.121.0/data.yml b/appstore/immich-server/1.121.0/data.yml new file mode 100644 index 00000000..33b62351 --- /dev/null +++ b/appstore/immich-server/1.121.0/data.yml @@ -0,0 +1,138 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_REDIS_SERVICE + required: true + type: service + default: redis + envKey: PANEL_REDIS_TYPE + labelZh: Redis 服务 (前置检查) + labelEn: Redis Service (Pre-check) + required: true + type: apps + values: + - label: Redis + value: redis + - child: + default: "" + envKey: PANEL_POSTGRES_SERVICE + required: true + type: service + default: postgresql + envKey: PANEL_POSTGRES_TYPE + labelZh: Postgres 服务 (前置检查) + labelEn: Postgres Service (Pre-check) + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - default: "/home/immich-app" + edit: true + envKey: IMMICH_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 2283 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "Asia/Shanghai" + edit: true + envKey: TZ + labelZh: 时区 + labelEn: Timezone + required: true + type: text + - default: "127.0.0.1" + edit: true + envKey: DB_HOSTNAME + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "postgres" + edit: true + envKey: DB_USERNAME + labelZh: 数据库 用户名 + labelEn: Database User + required: true + type: text + - default: "" + edit: true + envKey: DB_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + random: true + required: true + rule: paramComplexity + type: password + - default: "immich" + edit: true + envKey: DB_DATABASE_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text + - default: "127.0.0.1" + edit: true + envKey: REDIS_HOSTNAME + labelZh: Redis 主机 + labelEn: Redis Host + required: true + type: text + - default: 6379 + edit: true + envKey: REDIS_PORT + labelZh: Redis 端口 + labelEn: Redis Port + required: true + rule: paramPort + type: number + - default: 0 + edit: true + envKey: REDIS_DBINDEX + labelZh: Redis 索引 + labelEn: Redis Index + required: true + type: number + - default: "" + edit: true + envKey: REDIS_USERNAME + labelZh: Redis 用户名 + labelEn: Redis Username + required: false + type: text + - default: "" + edit: true + envKey: REDIS_PASSWORD + labelZh: Redis 密码 + labelEn: Redis Password + required: false + type: password + - default: "false" + edit: true + envKey: IMMICH_IGNORE_MOUNT_CHECK_ERRORS + labelZh: 是否跳过目录检查 + labelEn: Skip Mount Check + required: false + type: select + values: + - label: 跳过检查 + value: "true" + - label: 不跳过检查 + value: "false" diff --git a/appstore/immich-server/1.121.0/docker-compose.yml b/appstore/immich-server/1.121.0/docker-compose.yml new file mode 100644 index 00000000..f13e5ac9 --- /dev/null +++ b/appstore/immich-server/1.121.0/docker-compose.yml @@ -0,0 +1,25 @@ +name: immich-server +networks: + 1panel-network: + external: true +services: + immich-server: + container_name: immich-server-immich-server + devices: + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + healthcheck: + disable: false + image: ghcr.io/immich-app/immich-server:v1.121.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2283 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/library:/usr/src/app/upload + - /etc/localtime:/etc/localtime diff --git a/appstore/immich-server/1.121.0/envs/default.env b/appstore/immich-server/1.121.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/immich-server/1.121.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/immich-server/1.121.0/envs/global.env b/appstore/immich-server/1.121.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/immich-server/1.121.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/immich-server/1.121.0/scripts/init.sh b/appstore/immich-server/1.121.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/immich-server/1.121.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich-server/1.121.0/scripts/uninstall.sh b/appstore/immich-server/1.121.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/immich-server/1.121.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich-server/1.121.0/scripts/upgrade.sh b/appstore/immich-server/1.121.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/immich-server/1.121.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich-server/README.md b/appstore/immich-server/README.md new file mode 100644 index 00000000..c909268e --- /dev/null +++ b/appstore/immich-server/README.md @@ -0,0 +1,123 @@ +# Immich + +Immich - 高性能自托管照片和视频备份解决方案 + +![Immich](https://file.lifebus.top/imgs/immich_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +欢迎您 +您好,很高兴您能来到这里。 + +我叫亚历克斯。我在学校时是一名电气工程师,后来因为工作和对解决问题的纯粹热爱而成为了一名软件工程师。 + +我们和新生儿躺在床上,我妻子说:"我们开始积累大量宝宝的照片和视频,我不想再为 App-Which-Must-Not-Be-Name +付费了。你总是想为我建一些东西,为什么不为我建一个能做到这一点的应用程序呢? + +就这样,这个想法开始在我脑海中萌生。之后,我开始在自助托管领域寻找具有类似备份功能和 "非命名应用程序 " +性能水平的现有解决方案。我发现目前的解决方案主要集中在画廊类型的应用程序上。然而,我想要的是一个简单易用的备份工具,并带有一个能高效查看照片和视频的本地移动应用程序。于是,我作为一名如饥似渴的工程师踏上了寻找之旅。 + +另一个促使我执行 "不可名状的应用程序 "替代方案的动机是,我希望能为开源社区做出贡献,多年来我从这个社区中受益匪浅。 + +我很荣幸能与大家分享这一作品,它重视隐私、回忆,以及在易用、友好的界面中回顾这些时刻的喜悦。 + +如果您喜欢这款应用程序,或者它在某些方面对您有帮助,请考虑支持这个项目。这将有助于我继续开发和维护应用程序。 + +## 环境准备 + ++ `Redis` 服务 + +Immich 使用 Redis 作为缓存服务,所以需要安装 Redis 服务。 + +### 硬件驱动挂载 + +默认仅挂载: `/dev/dri`,如果您的设备不存在硬件驱动,请使用删除完整 `devices` 配置。 + +可以通过 `ls /dev/` 查看存在的设备驱动。 + +```yml +devices: + - /dev/dri:/dev/dri + # - /dev/nvidia0:/dev/nvidia0 + # - /dev/nvidiactl:/dev/nvidiactl + # - /dev/nvidia-modeset:/dev/nvidia-modeset + # - /dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl + # - /dev/nvidia-uvm:/dev/nvidia-uvm + # - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools + # - /dev/video11:/dev/video11 +``` + +如果您的设备存在其他硬件驱动,可以选择挂载。删除 `# ` 号即可。格式为:`宿主机路径:容器路径`。 + +格式请与 `- /dev/dri:/dev/dri` 保持一致。 + +## 升级说明 + ++ **大版本** `v1.106.2` + +`2024/06/12` 上线,升级需要注意: + +1. 移除 `immich-microservices` 服务 +2. 环境变量发生了合并 +3. 底层API发生了变化 + 4. 移动端需要同步更新 + +## 安装说明 + +### 机器学习 预加载模型(CLIP) + +可选模型列表,粘贴时输入 `immich-app/` 之后的内容即可。 + +[immich-app's Collections - CLIP](https://huggingface.co/collections/immich-app/clip-654eaefb077425890874cd07) + +[immich-app's Collections - Multilingual CLIP](https://huggingface.co/collections/immich-app/multilingual-clip-654eb08c2382f591eeb8c2a7) + +默认模型 + +中文支持较好的模型 `XLM-Roberta-Large-Vit-B-16Plus` + +### 人脸识别 预加载模型 + +`buffalo_l`, `buffalo_m`, `buffalo_s`, `antelopev2` + +## 常见问题 + ++ 安装失败 + + 网络问题,可以尝试使用代理 ++ 升级失败 + + 请查看升级说明 + + 请查看日志,查看具体错误信息 + + 记录安装参数,进行卸载重装 + + 升级1Panel后,提示容器找不到 + + 请删除容器,重新安装 + + 提示文件或目录不存在 + + 可手动创建不存在的文件和目录,然后重试 + + 创建的文件可为空文件 + + 每次都升级失败 + + 很抱歉,官方应用不支持编排式应用(一个应用包含多个容器)的安装与升级,您可以尝试手动卸载安装最新版 ++ 无法访问 + + 请检查是否安装了 `Redis` 服务 + + 请检查是否正确配置了 `Redis` 服务 + + 请检查是否正确配置了 `域名` 和 `SSL` + + 请检查是否正确配置了 `端口` + + 请检查是否正确配置了 `防火墙` 并开放了 `端口` + + 请检查是否正确配置了 `Nginx` 服务 + +## 移动端应用 + +
+
+ App Store + App Store +
+
+ Google Play + Google Play +
+
+ +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/immich-server/data.yml b/appstore/immich-server/data.yml new file mode 100644 index 00000000..bb94dd1c --- /dev/null +++ b/appstore/immich-server/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: immich-server + name: Immich 服务端 + tags: + - Media + - Storage + - Local + shortDescZh: 高性能自托管照片和视频备份解决方案 + shortDescEn: High performance self-hosted photo and video backup solution + type: website + crossVersionUpdate: true + limit: 0 + website: https://immich.app/ + github: https://github.com/immich-app/immich + document: https://immich.app/docs/overview/introduction diff --git a/appstore/immich-server/logo.png b/appstore/immich-server/logo.png new file mode 100644 index 00000000..081f92e4 Binary files /dev/null and b/appstore/immich-server/logo.png differ diff --git a/appstore/immich/1.121.0/.env b/appstore/immich/1.121.0/.env new file mode 100644 index 00000000..a4e4ae28 --- /dev/null +++ b/appstore/immich/1.121.0/.env @@ -0,0 +1,54 @@ +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# 数据持久化路径 [必填] +IMMICH_ROOT_PATH=/home/immich-app + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2283 + +# 机器学习端口 [必填] +PANEL_APP_PORT_MACHINE_LEARNING=3003 + +# 数据库连接密码 [必填] +DB_PASSWORD= + +# 数据库 端口 [必填] +PANEL_APP_PORT_DB=5432 + +# 数据库 主机地址 [必填] +DB_HOSTNAME=immich-pg14-vectors + +# 数据库 用户名 [必填] +DB_USERNAME=postgres + +# 数据库 名称 [必填] +DB_DATABASE_NAME=immich + +# Redis 主机 [必填] +REDIS_HOSTNAME=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 索引 [必填] +REDIS_DBINDEX=0 + +# Redis 用户名 +REDIS_USERNAME= + +# Redis 密码 +REDIS_PASSWORD= + +# 机器学习 预加载模型 +MACHINE_LEARNING_PRELOAD__CLIP=XLM-Roberta-Large-Vit-B-16Plus + +# 人脸识别 预加载模型 +MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION=buffalo_l + +# Hugging Face 服务地址 +HF_ENDPOINT=https://hf-mirror.com + +# 是否跳过目录检查 +IMMICH_IGNORE_MOUNT_CHECK_ERRORS=false + diff --git a/appstore/immich/1.121.0/data.yml b/appstore/immich/1.121.0/data.yml new file mode 100644 index 00000000..5dafe321 --- /dev/null +++ b/appstore/immich/1.121.0/data.yml @@ -0,0 +1,156 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_REDIS_SERVICE + required: true + type: service + default: redis + envKey: PANEL_REDIS_TYPE + labelZh: Redis 服务 (前置检查) + labelEn: Redis Service (Pre-check) + required: true + type: apps + values: + - label: Redis + value: redis + - default: "/home/immich-app" + edit: true + envKey: IMMICH_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 2283 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 3003 + edit: true + envKey: PANEL_APP_PORT_MACHINE_LEARNING + labelZh: 机器学习端口 + labelEn: Machine Learning port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: DB_PASSWORD + labelEn: Database Password + labelZh: 数据库连接密码 + random: true + required: true + rule: paramComplexity + type: password + - default: 5432 + edit: true + envKey: PANEL_APP_PORT_DB + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "immich-pg14-vectors" + disabled: true + envKey: DB_HOSTNAME + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: "postgres" + disabled: true + envKey: DB_USERNAME + labelZh: 数据库 用户名 + labelEn: Database User + required: true + type: text + - default: "immich" + disabled: true + envKey: DB_DATABASE_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text + - default: "127.0.0.1" + edit: true + envKey: REDIS_HOSTNAME + labelZh: Redis 主机 + labelEn: Redis Host + required: true + type: text + - default: 6379 + edit: true + envKey: REDIS_PORT + labelZh: Redis 端口 + labelEn: Redis Port + required: true + rule: paramPort + type: number + - default: 0 + edit: true + envKey: REDIS_DBINDEX + labelZh: Redis 索引 + labelEn: Redis Index + required: true + type: number + - default: "" + edit: true + envKey: REDIS_USERNAME + labelZh: Redis 用户名 + labelEn: Redis Username + required: false + type: text + - default: "" + edit: true + envKey: REDIS_PASSWORD + labelZh: Redis 密码 + labelEn: Redis Password + required: false + type: password + - default: "XLM-Roberta-Large-Vit-B-16Plus" + edit: true + envKey: MACHINE_LEARNING_PRELOAD__CLIP + labelEn: Machine Learning Preload Model + labelZh: 机器学习 预加载模型 + required: false + type: text + - default: "buffalo_l" + edit: true + envKey: MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION + labelEn: Machine Learning Preload Model + labelZh: 人脸识别 预加载模型 + required: false + type: select + values: + - label: antelopev2 + value: "antelopev2" + - label: buffalo_l + value: "buffalo_l" + - label: buffalo_m + value: "buffalo_m" + - label: buffalo_s + value: "buffalo_s" + - default: "https://hf-mirror.com" + edit: true + envKey: HF_ENDPOINT + labelZh: Hugging Face 服务地址 + labelEn: Hugging Face Endpoint + rule: paramExtUrl + required: false + type: text + - default: "false" + edit: true + envKey: IMMICH_IGNORE_MOUNT_CHECK_ERRORS + labelZh: 是否跳过目录检查 + labelEn: Skip Mount Check + required: false + type: select + values: + - label: 跳过检查 + value: "true" + - label: 不跳过检查 + value: "false" diff --git a/appstore/immich/1.121.0/docker-compose.yml b/appstore/immich/1.121.0/docker-compose.yml new file mode 100644 index 00000000..d6eb39a3 --- /dev/null +++ b/appstore/immich/1.121.0/docker-compose.yml @@ -0,0 +1,85 @@ +name: immich +networks: + 1panel-network: + external: true +services: + immich-machine-learning: + container_name: immich-machine-learning-immich + devices: &id001 + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + healthcheck: + disable: false + image: ghcr.io/immich-app/immich-machine-learning:v1.121.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_MACHINE_LEARNING}:3003 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/cache:/cache + immich-pg14-vectors: + command: + - postgres + - -c + - shared_preload_libraries=vectors.so + - -c + - search_path="$$user", public, vectors + - -c + - logging_collector=on + - -c + - max_wal_size=2GB + - -c + - shared_buffers=512MB + - -c + - wal_compression=on + container_name: pg14-vectors-immich + environment: + POSTGRES_DB: ${DB_DATABASE_NAME:-immich} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_USER: ${DB_USERNAME:-postgres} + healthcheck: + interval: 5m + start_interval: 30s + start_period: 5m + test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' + || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' + --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), + 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ + "$$Chksum" = '0' ] || exit 1 + image: tensorchord/pgvecto-rs:pg14-v0.2.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_DB:-5432}:5432 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/pg14/data:/var/lib/postgresql/data + immich-server: + container_name: immich-server-immich + depends_on: + - immich-pg14-vectors + devices: *id001 + env_file: + - ./envs/global.env + - .env + healthcheck: + disable: false + image: ghcr.io/immich-app/immich-server:v1.121.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2283 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/library:/usr/src/app/upload + - /etc/localtime:/etc/localtime diff --git a/appstore/immich/1.121.0/envs/default.env b/appstore/immich/1.121.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/immich/1.121.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/immich/1.121.0/envs/global.env b/appstore/immich/1.121.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/immich/1.121.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/immich/1.121.0/scripts/init.sh b/appstore/immich/1.121.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/immich/1.121.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich/1.121.0/scripts/uninstall.sh b/appstore/immich/1.121.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/immich/1.121.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich/1.121.0/scripts/upgrade.sh b/appstore/immich/1.121.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/immich/1.121.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/immich/README.md b/appstore/immich/README.md new file mode 100644 index 00000000..c909268e --- /dev/null +++ b/appstore/immich/README.md @@ -0,0 +1,123 @@ +# Immich + +Immich - 高性能自托管照片和视频备份解决方案 + +![Immich](https://file.lifebus.top/imgs/immich_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +欢迎您 +您好,很高兴您能来到这里。 + +我叫亚历克斯。我在学校时是一名电气工程师,后来因为工作和对解决问题的纯粹热爱而成为了一名软件工程师。 + +我们和新生儿躺在床上,我妻子说:"我们开始积累大量宝宝的照片和视频,我不想再为 App-Which-Must-Not-Be-Name +付费了。你总是想为我建一些东西,为什么不为我建一个能做到这一点的应用程序呢? + +就这样,这个想法开始在我脑海中萌生。之后,我开始在自助托管领域寻找具有类似备份功能和 "非命名应用程序 " +性能水平的现有解决方案。我发现目前的解决方案主要集中在画廊类型的应用程序上。然而,我想要的是一个简单易用的备份工具,并带有一个能高效查看照片和视频的本地移动应用程序。于是,我作为一名如饥似渴的工程师踏上了寻找之旅。 + +另一个促使我执行 "不可名状的应用程序 "替代方案的动机是,我希望能为开源社区做出贡献,多年来我从这个社区中受益匪浅。 + +我很荣幸能与大家分享这一作品,它重视隐私、回忆,以及在易用、友好的界面中回顾这些时刻的喜悦。 + +如果您喜欢这款应用程序,或者它在某些方面对您有帮助,请考虑支持这个项目。这将有助于我继续开发和维护应用程序。 + +## 环境准备 + ++ `Redis` 服务 + +Immich 使用 Redis 作为缓存服务,所以需要安装 Redis 服务。 + +### 硬件驱动挂载 + +默认仅挂载: `/dev/dri`,如果您的设备不存在硬件驱动,请使用删除完整 `devices` 配置。 + +可以通过 `ls /dev/` 查看存在的设备驱动。 + +```yml +devices: + - /dev/dri:/dev/dri + # - /dev/nvidia0:/dev/nvidia0 + # - /dev/nvidiactl:/dev/nvidiactl + # - /dev/nvidia-modeset:/dev/nvidia-modeset + # - /dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl + # - /dev/nvidia-uvm:/dev/nvidia-uvm + # - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools + # - /dev/video11:/dev/video11 +``` + +如果您的设备存在其他硬件驱动,可以选择挂载。删除 `# ` 号即可。格式为:`宿主机路径:容器路径`。 + +格式请与 `- /dev/dri:/dev/dri` 保持一致。 + +## 升级说明 + ++ **大版本** `v1.106.2` + +`2024/06/12` 上线,升级需要注意: + +1. 移除 `immich-microservices` 服务 +2. 环境变量发生了合并 +3. 底层API发生了变化 + 4. 移动端需要同步更新 + +## 安装说明 + +### 机器学习 预加载模型(CLIP) + +可选模型列表,粘贴时输入 `immich-app/` 之后的内容即可。 + +[immich-app's Collections - CLIP](https://huggingface.co/collections/immich-app/clip-654eaefb077425890874cd07) + +[immich-app's Collections - Multilingual CLIP](https://huggingface.co/collections/immich-app/multilingual-clip-654eb08c2382f591eeb8c2a7) + +默认模型 + +中文支持较好的模型 `XLM-Roberta-Large-Vit-B-16Plus` + +### 人脸识别 预加载模型 + +`buffalo_l`, `buffalo_m`, `buffalo_s`, `antelopev2` + +## 常见问题 + ++ 安装失败 + + 网络问题,可以尝试使用代理 ++ 升级失败 + + 请查看升级说明 + + 请查看日志,查看具体错误信息 + + 记录安装参数,进行卸载重装 + + 升级1Panel后,提示容器找不到 + + 请删除容器,重新安装 + + 提示文件或目录不存在 + + 可手动创建不存在的文件和目录,然后重试 + + 创建的文件可为空文件 + + 每次都升级失败 + + 很抱歉,官方应用不支持编排式应用(一个应用包含多个容器)的安装与升级,您可以尝试手动卸载安装最新版 ++ 无法访问 + + 请检查是否安装了 `Redis` 服务 + + 请检查是否正确配置了 `Redis` 服务 + + 请检查是否正确配置了 `域名` 和 `SSL` + + 请检查是否正确配置了 `端口` + + 请检查是否正确配置了 `防火墙` 并开放了 `端口` + + 请检查是否正确配置了 `Nginx` 服务 + +## 移动端应用 + +
+
+ App Store + App Store +
+
+ Google Play + Google Play +
+
+ +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/immich/data.yml b/appstore/immich/data.yml new file mode 100644 index 00000000..7b79f7e6 --- /dev/null +++ b/appstore/immich/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: immich + name: Immich + tags: + - WebSite + - Media + - Storage + - Local + shortDescZh: 高性能自托管照片和视频备份解决方案 + shortDescEn: High performance self-hosted photo and video backup solution + type: website + crossVersionUpdate: true + limit: 0 + website: https://immich.app/ + github: https://github.com/immich-app/immich/ + document: https://immich.app/docs/overview/introduction/ diff --git a/appstore/immich/logo.png b/appstore/immich/logo.png new file mode 100644 index 00000000..081f92e4 Binary files /dev/null and b/appstore/immich/logo.png differ diff --git a/appstore/iycms/3.3.44/.env b/appstore/iycms/3.3.44/.env new file mode 100644 index 00000000..e2d8dfce --- /dev/null +++ b/appstore/iycms/3.3.44/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +IYCMS_ROOT_PATH=/home/iycms + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=80 + +# 管理端口 [必填] +PANEL_APP_PORT_ADMIN=21007 + diff --git a/appstore/iycms/3.3.44/data.yml b/appstore/iycms/3.3.44/data.yml new file mode 100644 index 00000000..245e890e --- /dev/null +++ b/appstore/iycms/3.3.44/data.yml @@ -0,0 +1,25 @@ +additionalProperties: + formFields: + - default: "/home/iycms" + edit: true + envKey: IYCMS_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 80 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 21007 + edit: true + envKey: PANEL_APP_PORT_ADMIN + labelZh: 管理端口 + labelEn: Admin port + required: true + rule: paramPort + type: number diff --git a/appstore/iycms/3.3.44/docker-compose.yml b/appstore/iycms/3.3.44/docker-compose.yml new file mode 100644 index 00000000..dd27dc32 --- /dev/null +++ b/appstore/iycms/3.3.44/docker-compose.yml @@ -0,0 +1,20 @@ +networks: + 1panel-network: + external: true +services: + iycms: + container_name: iycms + env_file: + - ./envs/global.env + - .env + image: qyg2297248353/iycms:v3.3.44 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + - ${PANEL_APP_PORT_ADMIN}:21007 + restart: always + volumes: + - ${IYCMS_ROOT_PATH}/iycms:/app/iycms diff --git a/appstore/iycms/3.3.44/envs/default.env b/appstore/iycms/3.3.44/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/iycms/3.3.44/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/iycms/3.3.44/envs/global.env b/appstore/iycms/3.3.44/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/iycms/3.3.44/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/iycms/3.3.44/scripts/init.sh b/appstore/iycms/3.3.44/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/iycms/3.3.44/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/iycms/3.3.44/scripts/uninstall.sh b/appstore/iycms/3.3.44/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/iycms/3.3.44/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/iycms/3.3.44/scripts/upgrade.sh b/appstore/iycms/3.3.44/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/iycms/3.3.44/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/iycms/README.md b/appstore/iycms/README.md new file mode 100644 index 00000000..f37573da --- /dev/null +++ b/appstore/iycms/README.md @@ -0,0 +1,63 @@ +# 爱影CMS + +高性能高并发永久免费影视CMS + +![爱影CMS](https://file.lifebus.top/imgs/iycms_cover.png) + +高并发,高性能,高稳定性,部署简单,超强负载,功能齐全,接口齐全 + +支持多站点,支持VUE模板,支持HTML模板 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +![Static Badge](https://img.shields.io/badge/%E8%AD%A6%E5%91%8A-%E9%97%AD%E6%BA%90-red) + +## 特性 + +### 免费建站,网站三合一 + ++ 简单几步,网站轻松搭建,免费使用,体验各种不同风格模板 ++ SEO配置,分享配置,试看配置等,快捷高效管理内部数据 ++ PC,H5,移动端三合一 + +### 一键完成上万条数据采集 + ++ 从外部导入资源库地址,自定义采集类型 ++ 自定义采集,采集配置,定时任务等,提高系统可用性 ++ 一键操作,快稳准 + +### 多类型插件,满足您所需 + ++ 拓展能力高,灵活自定义,系统连接强 ++ 会员系统,分销系统,客服系统,统计系统等,满足您站点的各种需求 ++ 让您的站点功能齐全,极具个性 + +### 数智化赋能对智能运营平台 + ++ 打通Web,APP,广告等渠道数据,强力沉淀企业核心数据资产 ++ 智能交叉洞察数据多维BI报表可视化数据,反哺营销即时决策 ++ 助力您实现新客引入,老客沉淀 + +## 环境要求 + +> 数据库 + ++ `PostgreSQL` 11+ ++ `MySQL` + +## 安装说明 + +> 首次安装请先安装环境,然后再安装爱影CMS +> +> 必须初始化完成后,才能使用爱影CMS +> +> 后台管理:默认账户 +> +> 用户名: `admin` +> 密码: `123456` + +初始化后,请先创建站点,否则前端页面无法正常显示,返回 `500` 错误 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/iycms/data.yml b/appstore/iycms/data.yml new file mode 100644 index 00000000..9e1b1ee8 --- /dev/null +++ b/appstore/iycms/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: iycms + name: 爱影CMS + tags: + - WebSite + - Local + shortDescZh: 高性能高并发永久免费影视CMS + shortDescEn: High-performance high-concurrency permanent free video CMS + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.iycms.com/ + github: https://www.iycms.com/ + document: https://www.iycms.com/ diff --git a/appstore/iycms/logo.png b/appstore/iycms/logo.png new file mode 100644 index 00000000..e60bc064 Binary files /dev/null and b/appstore/iycms/logo.png differ diff --git a/appstore/iyuu-plus/README.md b/appstore/iyuu-plus/README.md new file mode 100644 index 00000000..2d19767a --- /dev/null +++ b/appstore/iyuu-plus/README.md @@ -0,0 +1,91 @@ +# IYUU Plus + +IYUU 是一个基于种子特征码的交叉索引工具 + +![IYUU Plus](https://file.lifebus.top/imgs/iyuuplus_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +使用php语言编写并使用php-cli常驻内存运行,通过计划任务,按用户设定的频率调用transmission、qBittorrent下载软件的API接口,提取正在做种的info_hash提交到IYUU辅种服务器的API接口https: +//api.iyuu.cn(辅种过程和PT站点没有交互,查询辅种压力由IYUU服务器承担),根据IYUU服务器的API接口https: +//api.iyuu.cn返回的数据拼接种子连接,提交给下载器,由下载器主动去站点下载种子、校验、做种,自动辅种各个站点。 + +集成webui界面、辅种、转移、下载、定时访问URL、动态域名ddns等常用功能,提供完善的插件机制。 + +支持下载器集群,支持多盘位,支持多下载目录,支持连接远程下载器等。 + +### 技术栈 + +| 组件 | 版本 | 官网 | +|:------------|:-------|:--------------------------------------------| +| Workerman | 4.1.15 | https://www.workerman.net/doc/workerman/ | +| Webman | 1.5.16 | https://www.workerman.net/doc/webman/ | +| WebmanAdmin | 0.6.24 | https://www.workerman.net/doc/webman-admin/ | +| PHP | 8.3.7 | https://www.php.net/ | +| MYSQL | 5.7.26 | https://www.mysql.com/ | +| Layui | 2.8.12 | https://layui.dev/ | +| Vue | 3.4.21 | https://vuejs.org/ | + +## 安装说明 + +> 爱语飞飞Token: 前往 [爱语飞飞-官网](https://iyuu.cn/) 获取授权Token +> +> 密码:首次登录填写为登录密码 +> +> 站点认证:请提前准备相应站点 + +## 支持的下载器 + ++ [transmission](https://transmissionbt.com/) + +Transmission 是一个种子客户端,可以让您在互联置上下载和共享文件。该应用程序适用于多种操作系统,包括 Ubuntu、Fedora、Arch +Linux、Debian Raspberry Pi 等。您可以使用 terminal 中的 apt 或 yum 命令来安装它。使用 +Transmission,您可以实时监测下载和上传情况,并显示连接一致性图表 + ++ [qBittorrent](https://www.qbittorrent.org/) + +qBittorrent是一款免费的开源种子下载工具,作为µTorrent的替代品。它在所有平台上都提供相同的功能,包括Windows、Linux和macOS。该应用程序还配备了一个可扩展的搜索引擎以及Web +UI遠端,以最大化你的torrent体验。使用qBittorrent,你可以在多个平台上轻松下载你喜爱的内容。 + +## 反向代理 + +> Nginx 配置 + +```nginx + location ^~ / { + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_http_version 1.1; + proxy_set_header Connection ""; + if (!-f $request_filename){ + proxy_pass http://127.0.0.1:8787; + } + } +``` + +## 绑定合作站点 + +只有绑定了合作站点的才可以完整的使用IYUUPlus + +认证其一即可,绑定爱语飞飞Token并认证, 后续无需重复认证,未认证无法进行辅种 + +| 认证站点 | 别名 | 官网 | +|-----------|--------|----| +| pthome | 铂金家 | 自查 | +| hdhome | 家园 | 自查 | +| ourbits | 我堡 | 自查 | +| chdbits | 新岛/金钱岛 | 自查 | +| hdfans | 红豆饭 | 自查 | +| audiences | 观众/奥迪 | 自查 | +| piggo | 猪猪网 | 自查 | +| zhuque | 朱雀 | 自查 | +| zmpt | 织梦 | 自查 | +| agsvpt | 末日种子库 | 自查 | +| 其他站点 | 未知 | 未知 | + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/iyuu-plus/data.yml b/appstore/iyuu-plus/data.yml new file mode 100644 index 00000000..32d27f2f --- /dev/null +++ b/appstore/iyuu-plus/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: iyuu-plus + name: IYUU-Plus + tags: + - WebSite + - Tool + - Runtime + - Local + shortDescZh: 自动辅种工具 + shortDescEn: Auto Reseed Tool + type: website + crossVersionUpdate: true + limit: 0 + website: https://iyuu.cn/ + github: https://github.com/ledccn/iyuuplus-dev + document: https://doc.iyuu.cn/ diff --git a/appstore/iyuu-plus/latest/.env b/appstore/iyuu-plus/latest/.env new file mode 100644 index 00000000..219d88a8 --- /dev/null +++ b/appstore/iyuu-plus/latest/.env @@ -0,0 +1,21 @@ +# 数据持久化路径 [必填] +IYUUCN_ROOT_PATH=/home/iyuuplus + +# WebUI 端口 (Nginx) [必填] +PANEL_APP_PORT_HTTP=8780 + +# WebUI 端口 (IYUU) +PANEL_APP_PORT_IYUU=8787 + +# WebUI 端口 (WS) +PANEL_APP_PORT_WS=3131 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/iyuu-plus/latest/data.yml b/appstore/iyuu-plus/latest/data.yml new file mode 100644 index 00000000..923f53b8 --- /dev/null +++ b/appstore/iyuu-plus/latest/data.yml @@ -0,0 +1,54 @@ +additionalProperties: + formFields: + - default: "/home/iyuuplus" + edit: true + envKey: IYUUCN_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8780 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 (Nginx) + labelEn: WebUI port (Nginx) + required: true + rule: paramPort + type: number + - default: 8787 + edit: true + envKey: PANEL_APP_PORT_IYUU + labelZh: WebUI 端口 (IYUU) + labelEn: WebUI port (IYUU) + required: false + rule: paramPort + type: number + - default: 3131 + edit: true + envKey: PANEL_APP_PORT_WS + labelZh: WebUI 端口 (WS) + labelEn: WebUI port (WS) + required: false + rule: paramPort + type: number + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/iyuu-plus/latest/docker-compose.yml b/appstore/iyuu-plus/latest/docker-compose.yml new file mode 100644 index 00000000..d119f8f7 --- /dev/null +++ b/appstore/iyuu-plus/latest/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + iyuuplus: + container_name: iyuu-plus + image: iyuucn/iyuuplus-dev:latest + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8780 + - ${PANEL_APP_PORT_IYUU:-}:8787 + - ${PANEL_APP_PORT_WS:-}:3131 + restart: always + volumes: + - ${IYUUCN_ROOT_PATH}/iyuu:/iyuu + - ${IYUUCN_ROOT_PATH}/data:/data + - ${IYUUCN_ROOT_PATH}/qBittorrent:/qBittorrent + - ${IYUUCN_ROOT_PATH}/transmission:/transmission + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/iyuu-plus/latest/envs/default.env b/appstore/iyuu-plus/latest/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/iyuu-plus/latest/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/iyuu-plus/latest/envs/global.env b/appstore/iyuu-plus/latest/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/iyuu-plus/latest/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/iyuu-plus/latest/scripts/init.sh b/appstore/iyuu-plus/latest/scripts/init.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/iyuu-plus/latest/scripts/init.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/iyuu-plus/latest/scripts/uninstall.sh b/appstore/iyuu-plus/latest/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/iyuu-plus/latest/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/iyuu-plus/latest/scripts/upgrade.sh b/appstore/iyuu-plus/latest/scripts/upgrade.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/iyuu-plus/latest/scripts/upgrade.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/iyuu-plus/logo.png b/appstore/iyuu-plus/logo.png new file mode 100644 index 00000000..1af46e75 Binary files /dev/null and b/appstore/iyuu-plus/logo.png differ diff --git a/appstore/jellyfin/10.10.3/.env b/appstore/jellyfin/10.10.3/.env new file mode 100644 index 00000000..d0720fd6 --- /dev/null +++ b/appstore/jellyfin/10.10.3/.env @@ -0,0 +1,21 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# 数据持久化路径 [必填] +JELLYFIN_ROOT_PATH=/home/jellyfin + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8096 + +# HTTP(s) 网络代理 +HTTP_SSL_PROXY= + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/jellyfin/10.10.3/data.yml b/appstore/jellyfin/10.10.3/data.yml new file mode 100644 index 00000000..d709d3fd --- /dev/null +++ b/appstore/jellyfin/10.10.3/data.yml @@ -0,0 +1,61 @@ +additionalProperties: + formFields: + - default: "host" + edit: true + envKey: NETWORK_MODE + labelZh: 网络模式 + labelEn: Network mode + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: "/home/jellyfin" + edit: true + envKey: JELLYFIN_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8096 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI Port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: HTTP_SSL_PROXY + labelZh: HTTP(s) 网络代理 + labelEn: HTTP(s) Proxy + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/jellyfin/10.10.3/docker-compose.yml b/appstore/jellyfin/10.10.3/docker-compose.yml new file mode 100644 index 00000000..3ccccc0f --- /dev/null +++ b/appstore/jellyfin/10.10.3/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true +services: + jellyfin: + container_name: jellyfin + devices: + - /dev/dri:/dev/dri + environment: + - ROC_ENABLE_PRE_VEGA=1 + - HTTP_PROXY=${HTTP_PROXY:-} + - HTTPS_PROXY=${HTTP_PROXY:-} + - NO_PROXY=localhost,127.0.0.1,::1 + image: jellyfin/jellyfin:10.10.3 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8096 + restart: always + user: 0:0 + volumes: + - ${JELLYFIN_ROOT_PATH}/config:/config + - ${JELLYFIN_ROOT_PATH}/cache:/cache + - ${JELLYFIN_ROOT_PATH}/media:/media + - ${JELLYFIN_ROOT_PATH}/config/font:/config/font + - ${JELLYFIN_ROOT_PATH}/config/dejavu:/usr/share/fonts/truetype/dejavu + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/jellyfin/10.10.3/envs/default.env b/appstore/jellyfin/10.10.3/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/jellyfin/10.10.3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/jellyfin/10.10.3/envs/global.env b/appstore/jellyfin/10.10.3/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/jellyfin/10.10.3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/jellyfin/10.10.3/scripts/init.sh b/appstore/jellyfin/10.10.3/scripts/init.sh new file mode 100644 index 00000000..c066befc --- /dev/null +++ b/appstore/jellyfin/10.10.3/scripts/init.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +if [[ -f .env ]]; then + source .env + + BASE_URL="https://f.lifebus.top/public/1panel/appstore/jellyfin/" + + DEJAVU_FILES=( + "DejaVuSans.ttf" + "DejaVuSans-Bold.ttf" + "DejaVuSansMono.ttf" + "DejaVuSansMono-Bold.ttf" + "DejaVuSerif.ttf" + "DejaVuSerif-Bold.ttf" + ) + + FONT_FILES=( + "NotoSansMonoCJKsc-Bold.woff2" + "NotoSansMonoCJKsc-Regular.otf" + "NotoSansCJKsc-Regular.woff" + "NotoSansMonoCJKsc-Regular.woff" + "NotoSansMonoCJKsc-Regular.woff2" + "NotoSansMonoCJKsc-Bold.otf" + "NotoSansMonoCJKsc-Bold.woff" + "NotoSansCJKsc-Medium.otf" + "NotoSansCJKsc-Regular.otf" + "NotoSansCJKsc-Thin.woff2" + "NotoSansCJKsc-Thin.woff" + "NotoSansCJKsc-Regular.woff2" + "NotoSansCJKsc-Thin.otf" + "NotoSansCJKsc-Medium.woff" + "NotoSansCJKsc-Medium.woff2" + "NotoSansCJKsc-Light.woff" + "NotoSansCJKsc-Light.woff2" + "NotoSansCJKsc-Bold.otf" + "NotoSansCJKsc-Black.otf" + "NotoSansCJKsc-Light.otf" + "NotoSansCJKsc-Bold.woff" + "NotoSansCJKsc-DemiLight.otf" + "NotoSansCJKsc-Black.woff" + "NotoSansCJKsc-DemiLight.woff" + "NotoSansCJKsc-Black.woff2" + "NotoSansCJKsc-DemiLight.woff2" + "NotoSansCJKsc-Bold.woff2" + "font.css" + ) + + if [ ! -d "$JELLYFIN_ROOT_PATH/config/font" ]; then + mkdir -p "$JELLYFIN_ROOT_PATH/config/font" + for FILE in "${FONT_FILES[@]}"; do + wget -q "${BASE_URL}font/${FILE}" -P "$JELLYFIN_ROOT_PATH/config/font/" || echo "Failed to download $FILE, continuing..." + done + fi + + if [ ! -d "$JELLYFIN_ROOT_PATH/config/dejavu" ]; then + mkdir -p "$JELLYFIN_ROOT_PATH/config/dejavu" + for FILE in "${DEJAVU_FILES[@]}"; do + wget -q "${BASE_URL}dejavu/${FILE}" -P "$JELLYFIN_ROOT_PATH/config/dejavu/" || echo "Failed to download $FILE, continuing..." + done + fi + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/jellyfin/10.10.3/scripts/uninstall.sh b/appstore/jellyfin/10.10.3/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/jellyfin/10.10.3/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/jellyfin/10.10.3/scripts/upgrade.sh b/appstore/jellyfin/10.10.3/scripts/upgrade.sh new file mode 100644 index 00000000..c066befc --- /dev/null +++ b/appstore/jellyfin/10.10.3/scripts/upgrade.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +if [[ -f .env ]]; then + source .env + + BASE_URL="https://f.lifebus.top/public/1panel/appstore/jellyfin/" + + DEJAVU_FILES=( + "DejaVuSans.ttf" + "DejaVuSans-Bold.ttf" + "DejaVuSansMono.ttf" + "DejaVuSansMono-Bold.ttf" + "DejaVuSerif.ttf" + "DejaVuSerif-Bold.ttf" + ) + + FONT_FILES=( + "NotoSansMonoCJKsc-Bold.woff2" + "NotoSansMonoCJKsc-Regular.otf" + "NotoSansCJKsc-Regular.woff" + "NotoSansMonoCJKsc-Regular.woff" + "NotoSansMonoCJKsc-Regular.woff2" + "NotoSansMonoCJKsc-Bold.otf" + "NotoSansMonoCJKsc-Bold.woff" + "NotoSansCJKsc-Medium.otf" + "NotoSansCJKsc-Regular.otf" + "NotoSansCJKsc-Thin.woff2" + "NotoSansCJKsc-Thin.woff" + "NotoSansCJKsc-Regular.woff2" + "NotoSansCJKsc-Thin.otf" + "NotoSansCJKsc-Medium.woff" + "NotoSansCJKsc-Medium.woff2" + "NotoSansCJKsc-Light.woff" + "NotoSansCJKsc-Light.woff2" + "NotoSansCJKsc-Bold.otf" + "NotoSansCJKsc-Black.otf" + "NotoSansCJKsc-Light.otf" + "NotoSansCJKsc-Bold.woff" + "NotoSansCJKsc-DemiLight.otf" + "NotoSansCJKsc-Black.woff" + "NotoSansCJKsc-DemiLight.woff" + "NotoSansCJKsc-Black.woff2" + "NotoSansCJKsc-DemiLight.woff2" + "NotoSansCJKsc-Bold.woff2" + "font.css" + ) + + if [ ! -d "$JELLYFIN_ROOT_PATH/config/font" ]; then + mkdir -p "$JELLYFIN_ROOT_PATH/config/font" + for FILE in "${FONT_FILES[@]}"; do + wget -q "${BASE_URL}font/${FILE}" -P "$JELLYFIN_ROOT_PATH/config/font/" || echo "Failed to download $FILE, continuing..." + done + fi + + if [ ! -d "$JELLYFIN_ROOT_PATH/config/dejavu" ]; then + mkdir -p "$JELLYFIN_ROOT_PATH/config/dejavu" + for FILE in "${DEJAVU_FILES[@]}"; do + wget -q "${BASE_URL}dejavu/${FILE}" -P "$JELLYFIN_ROOT_PATH/config/dejavu/" || echo "Failed to download $FILE, continuing..." + done + fi + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/jellyfin/10.9.11/.env b/appstore/jellyfin/10.9.11/.env new file mode 100644 index 00000000..d0720fd6 --- /dev/null +++ b/appstore/jellyfin/10.9.11/.env @@ -0,0 +1,21 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# 数据持久化路径 [必填] +JELLYFIN_ROOT_PATH=/home/jellyfin + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8096 + +# HTTP(s) 网络代理 +HTTP_SSL_PROXY= + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/jellyfin/10.9.11/data.yml b/appstore/jellyfin/10.9.11/data.yml new file mode 100644 index 00000000..d709d3fd --- /dev/null +++ b/appstore/jellyfin/10.9.11/data.yml @@ -0,0 +1,61 @@ +additionalProperties: + formFields: + - default: "host" + edit: true + envKey: NETWORK_MODE + labelZh: 网络模式 + labelEn: Network mode + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: "/home/jellyfin" + edit: true + envKey: JELLYFIN_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8096 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI Port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: HTTP_SSL_PROXY + labelZh: HTTP(s) 网络代理 + labelEn: HTTP(s) Proxy + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/jellyfin/10.9.11/docker-compose.yml b/appstore/jellyfin/10.9.11/docker-compose.yml new file mode 100644 index 00000000..f64614c1 --- /dev/null +++ b/appstore/jellyfin/10.9.11/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true +services: + jellyfin: + container_name: jellyfin + devices: + - /dev/dri:/dev/dri + environment: + - ROC_ENABLE_PRE_VEGA=1 + - HTTP_PROXY=${HTTP_PROXY:-} + - HTTPS_PROXY=${HTTP_PROXY:-} + - NO_PROXY=localhost,127.0.0.1,::1 + image: jellyfin/jellyfin:10.9.11 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8096 + restart: always + user: 0:0 + volumes: + - ${JELLYFIN_ROOT_PATH}/config:/config + - ${JELLYFIN_ROOT_PATH}/cache:/cache + - ${JELLYFIN_ROOT_PATH}/media:/media + - ${JELLYFIN_ROOT_PATH}/config/font:/config/font + - ${JELLYFIN_ROOT_PATH}/config/dejavu:/usr/share/fonts/truetype/dejavu + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/jellyfin/10.9.11/envs/default.env b/appstore/jellyfin/10.9.11/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/jellyfin/10.9.11/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/jellyfin/10.9.11/envs/global.env b/appstore/jellyfin/10.9.11/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/jellyfin/10.9.11/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/jellyfin/10.9.11/scripts/init.sh b/appstore/jellyfin/10.9.11/scripts/init.sh new file mode 100644 index 00000000..c066befc --- /dev/null +++ b/appstore/jellyfin/10.9.11/scripts/init.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +if [[ -f .env ]]; then + source .env + + BASE_URL="https://f.lifebus.top/public/1panel/appstore/jellyfin/" + + DEJAVU_FILES=( + "DejaVuSans.ttf" + "DejaVuSans-Bold.ttf" + "DejaVuSansMono.ttf" + "DejaVuSansMono-Bold.ttf" + "DejaVuSerif.ttf" + "DejaVuSerif-Bold.ttf" + ) + + FONT_FILES=( + "NotoSansMonoCJKsc-Bold.woff2" + "NotoSansMonoCJKsc-Regular.otf" + "NotoSansCJKsc-Regular.woff" + "NotoSansMonoCJKsc-Regular.woff" + "NotoSansMonoCJKsc-Regular.woff2" + "NotoSansMonoCJKsc-Bold.otf" + "NotoSansMonoCJKsc-Bold.woff" + "NotoSansCJKsc-Medium.otf" + "NotoSansCJKsc-Regular.otf" + "NotoSansCJKsc-Thin.woff2" + "NotoSansCJKsc-Thin.woff" + "NotoSansCJKsc-Regular.woff2" + "NotoSansCJKsc-Thin.otf" + "NotoSansCJKsc-Medium.woff" + "NotoSansCJKsc-Medium.woff2" + "NotoSansCJKsc-Light.woff" + "NotoSansCJKsc-Light.woff2" + "NotoSansCJKsc-Bold.otf" + "NotoSansCJKsc-Black.otf" + "NotoSansCJKsc-Light.otf" + "NotoSansCJKsc-Bold.woff" + "NotoSansCJKsc-DemiLight.otf" + "NotoSansCJKsc-Black.woff" + "NotoSansCJKsc-DemiLight.woff" + "NotoSansCJKsc-Black.woff2" + "NotoSansCJKsc-DemiLight.woff2" + "NotoSansCJKsc-Bold.woff2" + "font.css" + ) + + if [ ! -d "$JELLYFIN_ROOT_PATH/config/font" ]; then + mkdir -p "$JELLYFIN_ROOT_PATH/config/font" + for FILE in "${FONT_FILES[@]}"; do + wget -q "${BASE_URL}font/${FILE}" -P "$JELLYFIN_ROOT_PATH/config/font/" || echo "Failed to download $FILE, continuing..." + done + fi + + if [ ! -d "$JELLYFIN_ROOT_PATH/config/dejavu" ]; then + mkdir -p "$JELLYFIN_ROOT_PATH/config/dejavu" + for FILE in "${DEJAVU_FILES[@]}"; do + wget -q "${BASE_URL}dejavu/${FILE}" -P "$JELLYFIN_ROOT_PATH/config/dejavu/" || echo "Failed to download $FILE, continuing..." + done + fi + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/jellyfin/10.9.11/scripts/uninstall.sh b/appstore/jellyfin/10.9.11/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/jellyfin/10.9.11/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/jellyfin/10.9.11/scripts/upgrade.sh b/appstore/jellyfin/10.9.11/scripts/upgrade.sh new file mode 100644 index 00000000..c066befc --- /dev/null +++ b/appstore/jellyfin/10.9.11/scripts/upgrade.sh @@ -0,0 +1,66 @@ +#!/bin/bash + +if [[ -f .env ]]; then + source .env + + BASE_URL="https://f.lifebus.top/public/1panel/appstore/jellyfin/" + + DEJAVU_FILES=( + "DejaVuSans.ttf" + "DejaVuSans-Bold.ttf" + "DejaVuSansMono.ttf" + "DejaVuSansMono-Bold.ttf" + "DejaVuSerif.ttf" + "DejaVuSerif-Bold.ttf" + ) + + FONT_FILES=( + "NotoSansMonoCJKsc-Bold.woff2" + "NotoSansMonoCJKsc-Regular.otf" + "NotoSansCJKsc-Regular.woff" + "NotoSansMonoCJKsc-Regular.woff" + "NotoSansMonoCJKsc-Regular.woff2" + "NotoSansMonoCJKsc-Bold.otf" + "NotoSansMonoCJKsc-Bold.woff" + "NotoSansCJKsc-Medium.otf" + "NotoSansCJKsc-Regular.otf" + "NotoSansCJKsc-Thin.woff2" + "NotoSansCJKsc-Thin.woff" + "NotoSansCJKsc-Regular.woff2" + "NotoSansCJKsc-Thin.otf" + "NotoSansCJKsc-Medium.woff" + "NotoSansCJKsc-Medium.woff2" + "NotoSansCJKsc-Light.woff" + "NotoSansCJKsc-Light.woff2" + "NotoSansCJKsc-Bold.otf" + "NotoSansCJKsc-Black.otf" + "NotoSansCJKsc-Light.otf" + "NotoSansCJKsc-Bold.woff" + "NotoSansCJKsc-DemiLight.otf" + "NotoSansCJKsc-Black.woff" + "NotoSansCJKsc-DemiLight.woff" + "NotoSansCJKsc-Black.woff2" + "NotoSansCJKsc-DemiLight.woff2" + "NotoSansCJKsc-Bold.woff2" + "font.css" + ) + + if [ ! -d "$JELLYFIN_ROOT_PATH/config/font" ]; then + mkdir -p "$JELLYFIN_ROOT_PATH/config/font" + for FILE in "${FONT_FILES[@]}"; do + wget -q "${BASE_URL}font/${FILE}" -P "$JELLYFIN_ROOT_PATH/config/font/" || echo "Failed to download $FILE, continuing..." + done + fi + + if [ ! -d "$JELLYFIN_ROOT_PATH/config/dejavu" ]; then + mkdir -p "$JELLYFIN_ROOT_PATH/config/dejavu" + for FILE in "${DEJAVU_FILES[@]}"; do + wget -q "${BASE_URL}dejavu/${FILE}" -P "$JELLYFIN_ROOT_PATH/config/dejavu/" || echo "Failed to download $FILE, continuing..." + done + fi + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/jellyfin/README.md b/appstore/jellyfin/README.md new file mode 100644 index 00000000..369633a4 --- /dev/null +++ b/appstore/jellyfin/README.md @@ -0,0 +1,46 @@ +# JellyFin + +**Jellyfin** 是一个免费开源的媒体服务器软件,用于组织、管理和流媒体共享您的音频、视频和图片等媒体内容。 + +![JellyFin](https://file.lifebus.top/imgs/jellyfin_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 安装说明 + +### 开启 `投屏服务(DLNA)` 与 `网络唤醒服务(WOL)` 功能 + +开启后,可以在局域网内的设备上投屏观看视频。 需要选择主机网络(host)模式。 + +### 硬件驱动挂载 + +默认仅挂载: `/dev/dri`,如果您的设备不存在硬件驱动,请使用删除完整 `devices` 配置。 + +可以通过 `ls /dev/` 查看存在的设备驱动。 + +```yml +devices: + - /dev/dri:/dev/dri + # - /dev/nvidia0:/dev/nvidia0 + # - /dev/nvidiactl:/dev/nvidiactl + # - /dev/nvidia-modeset:/dev/nvidia-modeset + # - /dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl + # - /dev/nvidia-uvm:/dev/nvidia-uvm + # - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools + # - /dev/video11:/dev/video11 +``` + +如果您的设备存在其他硬件驱动,可以选择挂载。删除 `# ` 号即可。格式为:`宿主机路径:容器路径`。 + +格式请与 `- /dev/dri:/dev/dri` 保持一致。 + +## 中文字幕支持 (启用备用字体) + +请在设置中添加备用字体路径 +默认路径:`/home/jellyfin/config/font` + +`/home/jellyfin` 为安装根路径,请在应用参数中查询具体参数 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/jellyfin/data.yml b/appstore/jellyfin/data.yml new file mode 100644 index 00000000..1edaa305 --- /dev/null +++ b/appstore/jellyfin/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: jellyfin + name: JellyFin + tags: + - WebSite + - Media + - Local + shortDescZh: 多媒体应用程序软件套装 + shortDescEn: A multimedia application software suite + type: website + crossVersionUpdate: true + limit: 0 + website: https://jellyfin.org/ + github: https://github.com/jellyfin/jellyfin + document: https://jellyfin.org/docs/ diff --git a/appstore/jellyfin/logo.png b/appstore/jellyfin/logo.png new file mode 100644 index 00000000..617e9f18 Binary files /dev/null and b/appstore/jellyfin/logo.png differ diff --git a/appstore/jellyseerr/2.1.0/.env b/appstore/jellyseerr/2.1.0/.env new file mode 100644 index 00000000..93ccebe2 --- /dev/null +++ b/appstore/jellyseerr/2.1.0/.env @@ -0,0 +1,12 @@ +# 数据持久化路径 [必填] +JELLYSEERR_ROOT_PATH=/home/jellyseerr + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5055 + +# 播放媒体服务器类型 [必填] +JELLYFIN_TYPE=jellyfin + +# HTTP(s) 网络代理 +http_proxy= + diff --git a/appstore/jellyseerr/2.1.0/data.yml b/appstore/jellyseerr/2.1.0/data.yml new file mode 100644 index 00000000..16978967 --- /dev/null +++ b/appstore/jellyseerr/2.1.0/data.yml @@ -0,0 +1,36 @@ +additionalProperties: + formFields: + - default: "/home/jellyseerr" + edit: true + envKey: JELLYSEERR_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 5055 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI Port + required: true + rule: paramPort + type: number + - default: "jellyfin" + edit: true + envKey: JELLYFIN_TYPE + labelZh: 播放媒体服务器类型 + labelEn: Play media server type + required: true + type: select + values: + - label: JellyFin + value: "jellyfin" + - label: Emby + value: "emby" + - default: "" + edit: true + envKey: http_proxy + labelZh: HTTP(s) 网络代理 + labelEn: HTTP(s) Proxy + required: false + type: text diff --git a/appstore/jellyseerr/2.1.0/docker-compose.yml b/appstore/jellyseerr/2.1.0/docker-compose.yml new file mode 100644 index 00000000..797dcc66 --- /dev/null +++ b/appstore/jellyseerr/2.1.0/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + jellyseerr: + container_name: jellyseerr + env_file: + - ./envs/global.env + - .env + environment: + - PORT=5055 + - LOG_LEVEL=debug + - TZ=Asia/Shanghai + - https_proxy=${http_proxy:-} + image: fallenbagel/jellyseerr:2.1.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5055 + restart: always + volumes: + - ${JELLYSEERR_ROOT_PATH}/config:/app/config diff --git a/appstore/jellyseerr/2.1.0/envs/default.env b/appstore/jellyseerr/2.1.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/jellyseerr/2.1.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/jellyseerr/2.1.0/envs/global.env b/appstore/jellyseerr/2.1.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/jellyseerr/2.1.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/jellyseerr/2.1.0/scripts/init.sh b/appstore/jellyseerr/2.1.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/jellyseerr/2.1.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/jellyseerr/2.1.0/scripts/uninstall.sh b/appstore/jellyseerr/2.1.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/jellyseerr/2.1.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/jellyseerr/2.1.0/scripts/upgrade.sh b/appstore/jellyseerr/2.1.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/jellyseerr/2.1.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/jellyseerr/README.md b/appstore/jellyseerr/README.md new file mode 100644 index 00000000..20ea8ae6 --- /dev/null +++ b/appstore/jellyseerr/README.md @@ -0,0 +1,51 @@ +# Jellyseerr + +满足您所有媒体需求的一站式平台 + +![Jellyseerr](https://file.lifebus.top/imgs/jellyseerr_cover.jpg) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +启动此项目的首要动力是为 Overseerr 增加对 Jellyfin 和 Emby 的支持。因为 Overseerr 是一个性能卓越且易于使用的应用程序,我们希望为 +Jellyfin 和 Emby 用户带来同样的体验。因此,Jellyseerr 应运而生。 + +此应用旨在成为满足您所有媒体需求的一站式平台。它被设计为一个简单、易用的应用程序,允许用户请求将媒体添加到您的 +Jellyfin/Emby/Plex 服务器。 + +## 特性 + ++ 完整的Jellyfin/Emby/Plex集成。使用Jellyfin/Emby/Plex登录和管理用户访问。 ++ 同步到您的Jellyfin/Emby/Plex库以显示您已经拥有的标题。 ++ 与Sonarr和Radarr集成。未来将提供更多服务。 ++ 易于使用的请求系统允许用户在友好、干净的UI中请求各个季节或电影。 ++ 简单的需求管理界面。不要通过应用程序来批准最近的请求。 ++ 适合移动设备的设计,适用于您需要在旅途中批准请求时。 ++ 粒度权限系统。 ++ 本地化为其他语言。 + +## 反向代理 + +> Nginx + +```nginx + proxy_set_header Referer $http_referer; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Real-Port $remote_port; + proxy_set_header X-Forwarded-Host $host:$remote_port; + proxy_set_header X-Forwarded-Server $host; + proxy_set_header X-Forwarded-Port $remote_port; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header X-Forwarded-Ssl on; + + location / { + proxy_pass http://127.0.0.1:5055; + } +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/jellyseerr/data.yml b/appstore/jellyseerr/data.yml new file mode 100644 index 00000000..c9126830 --- /dev/null +++ b/appstore/jellyseerr/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: jellyseerr + name: Jellyseerr + tags: + - WebSite + - Media + - Middleware + - Local + shortDescZh: 满足您所有媒体需求的一站式平台 + shortDescEn: A one-stop platform to meet all your media needs + type: website + crossVersionUpdate: true + limit: 0 + website: https://docs.jellyseerr.dev/ + github: https://github.com/Fallenbagel/jellyseerr/ + document: https://docs.jellyseerr.dev/ diff --git a/appstore/jellyseerr/logo.png b/appstore/jellyseerr/logo.png new file mode 100644 index 00000000..fbee9d4c Binary files /dev/null and b/appstore/jellyseerr/logo.png differ diff --git a/appstore/jproxy/3.4.4/.env b/appstore/jproxy/3.4.4/.env new file mode 100644 index 00000000..7128605a --- /dev/null +++ b/appstore/jproxy/3.4.4/.env @@ -0,0 +1,27 @@ +# 数据持久化路径 [必填] +JPROXY_ROOT_PATH=/home/jproxy + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8117 + +# 运行参数 [必填] +JAVA_OPTS=-Xms512m -Xmx512m + +# 缓存过期时间 (分钟) [必填] +CACHE_EXPIRES=4320 + +# 登录过期时间 (分钟) [必填] +TOKEN_EXPIRES=10080 + +# 同步间隔 (分钟) [必填] +SYNC_INTERVAL=3 + +# 允许文件重命名 [必填] +RENAME_FILE=true + +# 追加语言标题 (结果小于设定值) [必填] +MIN_COUNT=6 + +# 索引器结果缓存过期时间 (分钟) [必填] +INDEXER_RESULT_CACHE_EXPIRES=15 + diff --git a/appstore/jproxy/3.4.4/data.yml b/appstore/jproxy/3.4.4/data.yml new file mode 100644 index 00000000..47cc1520 --- /dev/null +++ b/appstore/jproxy/3.4.4/data.yml @@ -0,0 +1,70 @@ +additionalProperties: + formFields: + - default: "/home/jproxy" + edit: true + envKey: JPROXY_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8117 + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "-Xms512m -Xmx512m" + edit: true + envKey: JAVA_OPTS + labelZh: 运行参数 + labelEn: Run parameters + required: true + type: text + - default: 4320 + edit: true + envKey: CACHE_EXPIRES + labelZh: 缓存过期时间 (分钟) + labelEn: Cache expiration time (minutes) + required: true + type: number + - default: 10080 + edit: true + envKey: TOKEN_EXPIRES + labelZh: 登录过期时间 (分钟) + labelEn: Login expiration time (minutes) + required: true + type: number + - default: 3 + edit: true + envKey: SYNC_INTERVAL + labelZh: 同步间隔 (分钟) + labelEn: Synchronization interval (minutes) + required: true + type: number + - default: "true" + edit: true + envKey: RENAME_FILE + labelZh: 允许文件重命名 + labelEn: Allow file renaming + required: true + type: select + values: + - label: 允许 + value: "true" + - label: 禁止 + value: "false" + - default: 6 + edit: true + envKey: MIN_COUNT + labelZh: 追加语言标题 (结果小于设定值) + labelEn: Append language title (result is less than the set value) + required: true + type: number + - default: 15 + edit: true + envKey: INDEXER_RESULT_CACHE_EXPIRES + labelZh: 索引器结果缓存过期时间 (分钟) + labelEn: Indexer result cache expiration time (minutes) + required: true + type: number diff --git a/appstore/jproxy/3.4.4/docker-compose.yml b/appstore/jproxy/3.4.4/docker-compose.yml new file mode 100644 index 00000000..e258a4d2 --- /dev/null +++ b/appstore/jproxy/3.4.4/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true +services: + jproxy: + container_name: jproxy + env_file: + - ./envs/global.env + - .env + environment: + - PUID=0 + - PGID=0 + - TZ=Asia/Shanghai + image: luckypuppy514/jproxy:v3.4.4 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8117 + restart: always + volumes: + - ${JPROXY_ROOT_PATH}/data:/app/database diff --git a/appstore/jproxy/3.4.4/envs/default.env b/appstore/jproxy/3.4.4/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/jproxy/3.4.4/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/jproxy/3.4.4/envs/global.env b/appstore/jproxy/3.4.4/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/jproxy/3.4.4/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/jproxy/3.4.4/scripts/init.sh b/appstore/jproxy/3.4.4/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/jproxy/3.4.4/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/jproxy/3.4.4/scripts/uninstall.sh b/appstore/jproxy/3.4.4/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/jproxy/3.4.4/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/jproxy/3.4.4/scripts/upgrade.sh b/appstore/jproxy/3.4.4/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/jproxy/3.4.4/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/jproxy/README.md b/appstore/jproxy/README.md new file mode 100644 index 00000000..171344b7 --- /dev/null +++ b/appstore/jproxy/README.md @@ -0,0 +1,45 @@ +# JProxy + +介于 Sonarr / Radarr 和 Jackett / Prowlarr 之间的代理,主要用于优化查询和提升识别率 + +![Sonarr](https://file.lifebus.top/imgs/jproxy_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 使用说明 + +> 默认用户名: jproxy +> +> 默认密码: jproxy@2023 + +## 安装说明 + +### 开启代理服务 + +在运行参数添加以下配置: + +> HTTP 代理 + ++ `-Dhttp.proxyHost` 代理服务器地址 ++ `-Dhttp.proxyPort` 代理服务器端口 + +示例: + +```shell +-Xms512m -Xmx512m -Dhttp.proxyHost=192.168.1.1 -Dhttp.proxyPort=7890 +``` + +> SOCKS 代理 + ++ `-DsocksProxyHost` 代理服务器地址 ++ `-DsocksProxyPort` 代理服务器端口 + +示例: + +```shell +-Xms512m -Xmx512m -DsocksProxyHost=192.168.1.1 -DsocksProxyPort=7890 +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/jproxy/data.yml b/appstore/jproxy/data.yml new file mode 100644 index 00000000..f1544cd2 --- /dev/null +++ b/appstore/jproxy/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: jproxy + name: JProxy + tags: + - WebSite + - Local + shortDescZh: 介于 Sonarr / Radarr 和 Jackett / Prowlarr 之间的代理,主要用于优化查询和提升识别率 + shortDescEn: A proxy between Sonarr/Radarr and Jackett/Prowlarr, mainly used to optimize queries and improve recognition rate + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/LuckyPuppy514/jproxy/ + github: https://github.com/LuckyPuppy514/jproxy/ + document: https://github.com/LuckyPuppy514/jproxy/ diff --git a/appstore/jproxy/logo.png b/appstore/jproxy/logo.png new file mode 100644 index 00000000..7cb8af5b Binary files /dev/null and b/appstore/jproxy/logo.png differ diff --git a/appstore/kimai/2.23.0/.env b/appstore/kimai/2.23.0/.env new file mode 100644 index 00000000..66959813 --- /dev/null +++ b/appstore/kimai/2.23.0/.env @@ -0,0 +1,30 @@ +# MySQL 服务 (前置检查) [必填] +PANEL_DB_TYPE=mysql + +# 数据持久化路径 [必填] +KIMAI2_ROOT_PATH=/home/kimai2 + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8001 + +# 管理员邮箱 [必填] +ADMINMAIL= + +# 管理员密码 [必填] +ADMINPASS= + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 名称 [必填] +DB_NAME=kimai2 + +# 数据库 用户名 [必填] +DB_USER=kimai2 + +# 数据库 密码 [必填] +DB_USER_PASSWORD= + diff --git a/appstore/kimai/2.23.0/data.yml b/appstore/kimai/2.23.0/data.yml new file mode 100644 index 00000000..1f6b1ab4 --- /dev/null +++ b/appstore/kimai/2.23.0/data.yml @@ -0,0 +1,89 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: mysql + edit: true + envKey: PANEL_DB_TYPE + labelZh: MySQL 服务 (前置检查) + labelEn: Database Service (Pre-check) + required: true + type: apps + values: + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/kimai2" + edit: true + envKey: KIMAI2_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8001 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: ADMINMAIL + labelZh: 管理员邮箱 + labelEn: Admin Email + required: true + type: text + - default: "" + edit: true + envKey: ADMINPASS + labelZh: 管理员密码 + labelEn: Admin Password + required: true + type: password + - default: "127.0.0.1" + edit: true + envKey: DB_HOSTNAME + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "kimai2" + edit: true + envKey: DB_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + rule: paramCommon + type: text + - default: "kimai2" + edit: true + envKey: DB_USER + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "" + edit: true + envKey: DB_USER_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + random: true + required: true + rule: paramComplexity + type: password diff --git a/appstore/kimai/2.23.0/docker-compose.yml b/appstore/kimai/2.23.0/docker-compose.yml new file mode 100644 index 00000000..4b70aee5 --- /dev/null +++ b/appstore/kimai/2.23.0/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + kimai2: + container_name: kimai + env_file: + - ./envs/global.env + - .env + environment: + - DATABASE_URL=mysql://${DB_USER}:${DB_USER_PASSWORD}@${DB_HOSTNAME}:${DB_PORT}/${DB_NAME}?charset=utf8mb4 + image: kimai/kimai2:apache-2.23.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8001 + restart: always + volumes: + - ${KIMAI2_ROOT_PATH}/data:/opt/kimai/var/data + - ${KIMAI2_ROOT_PATH}/plugins:/opt/kimai/var/plugins diff --git a/appstore/kimai/2.23.0/envs/default.env b/appstore/kimai/2.23.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/kimai/2.23.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/kimai/2.23.0/envs/global.env b/appstore/kimai/2.23.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/kimai/2.23.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/kimai/2.23.0/scripts/init.sh b/appstore/kimai/2.23.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/kimai/2.23.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/kimai/2.23.0/scripts/uninstall.sh b/appstore/kimai/2.23.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/kimai/2.23.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/kimai/2.23.0/scripts/upgrade.sh b/appstore/kimai/2.23.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/kimai/2.23.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/kimai/README.md b/appstore/kimai/README.md new file mode 100644 index 00000000..5fd71f04 --- /dev/null +++ b/appstore/kimai/README.md @@ -0,0 +1,22 @@ +# Kimai + +Kimai 是一款专业级别的时间跟踪应用,免费且开源 + +![Kimai](https://file.lifebus.top/imgs/kimai_cover.png) + +Kimai 是一个基于网络的多用户时间追踪应用。对每个人都很棒:自由职业者、公司、组织 - 每个人都可以追踪时间、生成报告、创建发票并做更多事情。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Kimai 是一款专业级别的时间跟踪应用,免费且开源。它适用于自由职业者以及拥有数十名或数百名用户的公司。 + +Kimai 被设计用于跟踪项目时间,并配备了众多高级功能,包括但不限于: + +JSON API,开票,数据导出,多定时器和打卡模式,标签,多用户 - 多时区 - 多语言(已有超过 30 种翻译!),通过 SAML/LDAP/数据库进行身份验证,使用 +TOTP 的双因素认证(2FA),可定制的角色和团队权限,响应式设计,用户/客户/项目特定的费率,高级搜索与筛选,金钱和时间预算,高级报告,支持插件等等。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/kimai/data.yml b/appstore/kimai/data.yml new file mode 100644 index 00000000..7155a6ba --- /dev/null +++ b/appstore/kimai/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: kimai + name: Kimai + tags: + - WebSite + - Middleware + - Local + shortDescZh: 基于网络的多用户时间追踪应用 + shortDescEn: Web-based multi-user time tracking application + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.kimai.org/ + github: https://github.com/kimai/kimai/ + document: https://www.kimai.org/documentation/ diff --git a/appstore/kimai/logo.png b/appstore/kimai/logo.png new file mode 100644 index 00000000..1602be03 Binary files /dev/null and b/appstore/kimai/logo.png differ diff --git a/appstore/limesurvey/6.6.5/.env b/appstore/limesurvey/6.6.5/.env new file mode 100644 index 00000000..bac62016 --- /dev/null +++ b/appstore/limesurvey/6.6.5/.env @@ -0,0 +1,42 @@ +# 数据库服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化路径 [必填] +LIMESURVEY_ROOT_PATH=/home/limesurvey + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 管理员 昵称 [必填] +ADMIN_NAME=Admin + +# 管理员 邮箱 [必填] +ADMIN_EMAIL= + +# 管理员 用户名 [必填] +ADMIN_USER=admin + +# 管理员 密码 [必填] +ADMIN_PASSWORD= + +# 数据库 类型 [必填] +DB_TYPE=pgsql + +# 数据库 主机地址 [必填] +DB_HOST=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 名称 [必填] +DB_NAME=limesurvey + +# 数据库 用户名 [必填] +DB_USERNAME=limesurvey + +# 数据库 密码 [必填] +DB_PASSWORD= + +# 公网域名 [必填] +PUBLIC_URL=127.0.0.1:8080 + diff --git a/appstore/limesurvey/6.6.5/data.yml b/appstore/limesurvey/6.6.5/data.yml new file mode 100644 index 00000000..60d34d12 --- /dev/null +++ b/appstore/limesurvey/6.6.5/data.yml @@ -0,0 +1,123 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: postgresql + envKey: PANEL_DB_TYPE + labelZh: 数据库服务 (前置检查) + labelEn: Database Service + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/limesurvey" + edit: true + envKey: LIMESURVEY_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number + - default: "Admin" + edit: true + envKey: ADMIN_NAME + labelZh: 管理员 昵称 + labelEn: Admin Name + required: true + type: text + - default: "" + edit: true + envKey: ADMIN_EMAIL + labelZh: 管理员 邮箱 + labelEn: Admin Email + required: true + type: text + - default: "admin" + edit: true + envKey: ADMIN_USER + labelZh: 管理员 用户名 + labelEn: Admin Username + required: true + type: text + - default: "" + edit: true + envKey: ADMIN_PASSWORD + labelZh: 管理员 密码 + labelEn: Admin Password + required: true + type: password + - default: "pgsql" + edit: true + envKey: DB_TYPE + labelZh: 数据库 类型 + labelEn: Database Type + required: true + type: select + values: + - label: PostgreSQL + value: "pgsql" + - label: MySQL (MariaDB, Percona) + value: "mysql" + - default: "127.0.0.1" + edit: true + envKey: DB_HOST + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "limesurvey" + edit: true + envKey: DB_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + rule: paramCommon + type: text + - default: "limesurvey" + edit: true + envKey: DB_USERNAME + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "" + edit: true + envKey: DB_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + random: true + required: true + rule: paramComplexity + type: password + - default: "127.0.0.1:8080" + edit: true + envKey: PUBLIC_URL + labelZh: 公网域名 + labelEn: Public URL + required: true + type: text diff --git a/appstore/limesurvey/6.6.5/docker-compose.yml b/appstore/limesurvey/6.6.5/docker-compose.yml new file mode 100644 index 00000000..2da3f28d --- /dev/null +++ b/appstore/limesurvey/6.6.5/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + limesurvey: + container_name: limesurvey + env_file: + - ./envs/global.env + - .env + environment: + - LISTEN_PORT=8080 + - PUBLIC_URL=foobar.com + image: martialblog/limesurvey:6.6.5-240924-apache + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${LIMESURVEY_ROOT_PATH}/surveys:/var/www/html/upload/surveys diff --git a/appstore/limesurvey/6.6.5/envs/default.env b/appstore/limesurvey/6.6.5/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/limesurvey/6.6.5/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/limesurvey/6.6.5/envs/global.env b/appstore/limesurvey/6.6.5/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/limesurvey/6.6.5/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/limesurvey/6.6.5/scripts/init.sh b/appstore/limesurvey/6.6.5/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/limesurvey/6.6.5/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/limesurvey/6.6.5/scripts/uninstall.sh b/appstore/limesurvey/6.6.5/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/limesurvey/6.6.5/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/limesurvey/6.6.5/scripts/upgrade.sh b/appstore/limesurvey/6.6.5/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/limesurvey/6.6.5/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/limesurvey/README.md b/appstore/limesurvey/README.md new file mode 100644 index 00000000..780af3c6 --- /dev/null +++ b/appstore/limesurvey/README.md @@ -0,0 +1,17 @@ +# 问卷星 + +网络上最受欢迎的开源在线调查工具 + +![问卷星](https://file.lifebus.top/imgs/limesurvey_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Limesurvey 是排名第一的开源调查软件。 + +高级功能如分支和多种问题类型使其成为问卷创建的宝贵合作伙伴。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/limesurvey/data.yml b/appstore/limesurvey/data.yml new file mode 100644 index 00000000..55660a0b --- /dev/null +++ b/appstore/limesurvey/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: limesurvey + name: 问卷星 + tags: + - WebSite + - Middleware + - Local + shortDescZh: 在线问卷调查程序 + shortDescEn: Online survey software + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.limesurvey.org/ + github: https://github.com/LimeSurvey/LimeSurvey/ + document: https://www.limesurvey.org/manual/LimeSurvey_Manual/ diff --git a/appstore/limesurvey/logo.png b/appstore/limesurvey/logo.png new file mode 100644 index 00000000..00501270 Binary files /dev/null and b/appstore/limesurvey/logo.png differ diff --git a/appstore/linkding/1.36.0/.env b/appstore/linkding/1.36.0/.env new file mode 100644 index 00000000..92fe6bb5 --- /dev/null +++ b/appstore/linkding/1.36.0/.env @@ -0,0 +1,60 @@ +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# 数据持久化路径 [必填] +LINKDING_ROOT_PATH=/home/linkding + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=9090 + +# 管理员 用户名 [必填] +LD_SUPERUSER_NAME= + +# 管理员 密码 [必填] +LD_SUPERUSER_PASSWORD= + +# 禁用后台任务 [必填] +LD_DISABLE_BACKGROUND_TASKS=False + +# 禁用 URL 验证 [必填] +LD_DISABLE_URL_VALIDATION=False + +# 请求超时时间 (秒) [必填] +LD_REQUEST_TIMEOUT=60 + +# 网站路径 +LD_CONTEXT_PATH= + +# 记录真实 IP [必填] +LD_LOG_X_FORWARDED_FOR=false + +# 网站图标提供商 [必填] +LD_FAVICON_PROVIDER=https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url={url}&size=32 + +# 数据库 主机 [必填] +LD_DB_HOST=localhost + +# 数据库 端口 [必填] +LD_DB_PORT=5432 + +# 数据库 用户名 [必填] +LD_DB_USER=linkding + +# 数据库 密码 [必填] +LD_DB_PASSWORD= + +# 数据库名称 [必填] +LD_DB_DATABASE=linkding + +# 数据库选项 (JSON) [必填] +LD_DB_OPTIONS={} + +# CSRF 可信来源 +LD_CSRF_TRUSTED_ORIGINS= + +# 代理地址 +ALL_PROXY= + +# 代理白名单 +NO_PROXY=localhost,127.0.0.1,::1 + diff --git a/appstore/linkding/1.36.0/data.yml b/appstore/linkding/1.36.0/data.yml new file mode 100644 index 00000000..a00513c9 --- /dev/null +++ b/appstore/linkding/1.36.0/data.yml @@ -0,0 +1,168 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_POSTGRES_SERVICE + required: true + type: service + default: postgresql + envKey: PANEL_POSTGRES_TYPE + labelZh: Postgres 服务 (前置检查) + labelEn: Postgres Service (Pre-check) + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - default: "/home/linkding" + edit: true + envKey: LINKDING_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 9090 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: LD_SUPERUSER_NAME + labelZh: 管理员 用户名 + labelEn: Superuser name + required: true + type: text + - default: "" + edit: true + envKey: LD_SUPERUSER_PASSWORD + labelZh: 管理员 密码 + labelEn: Superuser password + required: true + rule: paramComplexity + type: password + - default: "False" + edit: true + envKey: LD_DISABLE_BACKGROUND_TASKS + labelZh: 禁用后台任务 + labelEn: Disable background tasks + required: true + type: select + values: + - label: 禁用 + value: "False" + - label: 启用 + value: "True" + - default: "False" + edit: true + envKey: LD_DISABLE_URL_VALIDATION + labelZh: 禁用 URL 验证 + labelEn: Disable URL validation + required: true + type: select + values: + - label: 禁用 + value: "False" + - label: 启用 + value: "True" + - default: 60 + edit: true + envKey: LD_REQUEST_TIMEOUT + labelZh: 请求超时时间 (秒) + labelEn: Request timeout (seconds) + required: true + type: number + - default: "" + edit: true + envKey: LD_CONTEXT_PATH + labelZh: 网站路径 + labelEn: Context path + required: false + type: text + - default: "false" + edit: true + envKey: LD_LOG_X_FORWARDED_FOR + labelZh: 记录真实 IP + labelEn: Log real IP + required: true + type: select + values: + - label: 禁用 + value: "false" + - label: 启用 + value: "true" + - default: "https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url={url}&size=32" + edit: true + envKey: LD_FAVICON_PROVIDER + labelZh: 网站图标提供商 + labelEn: Favicon provider + required: true + type: text + - default: "localhost" + edit: true + envKey: LD_DB_HOST + labelZh: 数据库 主机 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: LD_DB_PORT + labelEn: Database Port + labelZh: 数据库 端口 + required: true + rule: paramPort + type: number + - default: "linkding" + edit: true + envKey: LD_DB_USER + labelZh: 数据库 用户名 + labelEn: Database User + required: true + type: text + - default: "" + edit: true + envKey: LD_DB_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + required: true + type: password + - default: "linkding" + edit: true + envKey: LD_DB_DATABASE + labelZh: 数据库名称 + labelEn: Database Name + required: true + type: text + - default: "{}" + edit: true + envKey: LD_DB_OPTIONS + labelZh: 数据库选项 (JSON) + labelEn: Database Options (JSON) + required: true + type: text + - default: "" + edit: true + envKey: LD_CSRF_TRUSTED_ORIGINS + labelZh: CSRF 可信来源 + labelEn: CSRF trusted origins + required: false + type: text + - default: "" + edit: true + envKey: ALL_PROXY + labelZh: 代理地址 + labelEn: Proxy address + required: false + rule: paramExtUrl + type: text + - default: "localhost,127.0.0.1,::1" + edit: true + envKey: NO_PROXY + labelZh: 代理白名单 + labelEn: Proxy whitelist + required: false + type: text diff --git a/appstore/linkding/1.36.0/docker-compose.yml b/appstore/linkding/1.36.0/docker-compose.yml new file mode 100644 index 00000000..d0db7cf1 --- /dev/null +++ b/appstore/linkding/1.36.0/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + linkding: + container_name: linkding + env_file: + - ./envs/global.env + - .env + environment: + - LD_SERVER_PORT=9090 + - LD_DB_ENGINE=postgres + - HTTP_PROXY=${ALL_PROXY} + - HTTPS_PROXY=${ALL_PROXY} + image: sissbruecker/linkding:1.36.0-plus + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:9090 + restart: always + ulimits: + nofile: + hard: 40000 + soft: 20000 + nproc: 65535 + volumes: + - ${LINKDING_ROOT_PATH}/data:/etc/linkding/data diff --git a/appstore/linkding/1.36.0/envs/default.env b/appstore/linkding/1.36.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/linkding/1.36.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/linkding/1.36.0/envs/global.env b/appstore/linkding/1.36.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/linkding/1.36.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/linkding/1.36.0/scripts/init.sh b/appstore/linkding/1.36.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/linkding/1.36.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/linkding/1.36.0/scripts/uninstall.sh b/appstore/linkding/1.36.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/linkding/1.36.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/linkding/1.36.0/scripts/upgrade.sh b/appstore/linkding/1.36.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/linkding/1.36.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/linkding/README.md b/appstore/linkding/README.md new file mode 100644 index 00000000..2735196d --- /dev/null +++ b/appstore/linkding/README.md @@ -0,0 +1,50 @@ +# linkding + +链接是一个简单的书签服务,您可以自己托管。 + +![linkding](https://file.lifebus.top/imgs/linkding_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 用于组织书签的标签 ++ 按文本或标签搜索 ++ 批量编辑 ++ 书签存档 ++ 深色模式 ++ 在 Internet Archive Wayback Machine 上自动创建已添加书签的网站的快照 ++ 自动提供已添加书签的网站的标题和描述 ++ 以 Netscape HTML 格式导入和导出书签 ++ Firefox 和 Chrome 的扩展程序,以及应该在大多数浏览器中工作的书签 ++ 用于开发第三方应用程序的 REST API ++ 用于用户自助服务和原始数据访问的管理面板 ++ 使用Docker易于设置,使用SQLite作为数据库 + +## 安装说明 + +### 网站图标提供商 + ++ 默认供应商 Google + `https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url={url}&size=32` ++ 可选供应商 DuckDuckGo + `https://icons.duckduckgo.com/ip3/{domain}.ico` + +> 自定义供应商规则 + ++ 参数 `{url}` + +包括网站的方案和主机名,例如 https://example.com + ++ 参数 `{domain}` + +仅包含网站的主机名,例如 example.com + +## 插件应用 + ++ [Firefox 书签同步](https://addons.mozilla.org/de/firefox/addon/linkding-extension/) ++ [Chrome 书签同步](https://chrome.google.com/webstore/detail/linkding-extension/beakmhbijpdhipnjhnclmhgjlddhidpe) + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/linkding/data.yml b/appstore/linkding/data.yml new file mode 100644 index 00000000..941f0fb9 --- /dev/null +++ b/appstore/linkding/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: linkding + name: Linkding + tags: + - WebSite + - Storage + - Local + shortDescZh: 自己托管的书签管理器 + shortDescEn: Self-hosted bookmark manager + type: website + crossVersionUpdate: true + limit: 0 + website: https://demo.linkding.link/ + github: https://github.com/sissbruecker/linkding/ + document: https://github.com/sissbruecker/linkding/ diff --git a/appstore/linkding/logo.png b/appstore/linkding/logo.png new file mode 100644 index 00000000..fe99a6cd Binary files /dev/null and b/appstore/linkding/logo.png differ diff --git a/appstore/maccms10/24.11.19/.env b/appstore/maccms10/24.11.19/.env new file mode 100644 index 00000000..1460923c --- /dev/null +++ b/appstore/maccms10/24.11.19/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +MACCMS10_ROOT_PATH=/home/maccms10 + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=80 + diff --git a/appstore/maccms10/24.11.19/data.yml b/appstore/maccms10/24.11.19/data.yml new file mode 100644 index 00000000..6001fed5 --- /dev/null +++ b/appstore/maccms10/24.11.19/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: "/home/maccms10" + edit: true + envKey: MACCMS10_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 80 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number diff --git a/appstore/maccms10/24.11.19/docker-compose.yml b/appstore/maccms10/24.11.19/docker-compose.yml new file mode 100644 index 00000000..2b6be879 --- /dev/null +++ b/appstore/maccms10/24.11.19/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + maccms10: + container_name: maccms10 + env_file: + - ./envs/global.env + - .env + image: qyg2297248353/maccms10:v24.11.19 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${MACCMS10_ROOT_PATH}/iycms:/app/iycms diff --git a/appstore/maccms10/24.11.19/envs/default.env b/appstore/maccms10/24.11.19/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/maccms10/24.11.19/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/maccms10/24.11.19/envs/global.env b/appstore/maccms10/24.11.19/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/maccms10/24.11.19/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/maccms10/24.11.19/scripts/init.sh b/appstore/maccms10/24.11.19/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/maccms10/24.11.19/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/maccms10/24.11.19/scripts/uninstall.sh b/appstore/maccms10/24.11.19/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/maccms10/24.11.19/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/maccms10/24.11.19/scripts/upgrade.sh b/appstore/maccms10/24.11.19/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/maccms10/24.11.19/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/maccms10/README.md b/appstore/maccms10/README.md new file mode 100644 index 00000000..5ff01530 --- /dev/null +++ b/appstore/maccms10/README.md @@ -0,0 +1,55 @@ +# 苹果CMS V10 + +基于ThinkPHP和Layui的多功能开源免费内容管理系统 + +![苹果CMS V10](https://file.lifebus.top/imgs/maccms10_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 简单易用 + +大幅度降低站长上手门槛,让每一个无需会编程技术的新手都能快速上手。这将会是你建站学习的最佳cms。 + ++ 模板标签 + +系统内置了丰富的cms标签并支持thinkphp框架标签完美融合,可以调取系统内所有的数据,只要你懂一些前端知识就可以快速的开发自己的模板功能。 + ++ 后台管理 + +管理后台界面大方、操作简单、功能齐全、模块众多、双端管理,只要你会电脑或手机就会使用。 + ++ 丰富模块 + +支持视频模块、文章模块、专题模块、网址导航模块、明星模块、剧情模块、角色模块、会员模块。 + ++ 文档丰富 + +苹果cmsV10提供更全面、更详细、更专业的开源cms技术文档,从而更快速地解决疑难问题 + ++ 插件扩展 + +灵活强大应用插件系统为你解决二次开发所面临的升级问题,享受扩展php功能同时还支持cms官方升级。 + +## 环境要求 + +> 数据库 + ++ `MySQL` 5.7+ + +## 安装说明 + +> 该应用不携带模板,需要自行下载模板 +> +> 请将模板文件解压到持久化目录中的 `template` 文件夹下,然后在后台模板设置中选择对应的模板。 +> +> 首次安装,请将 持久化目录中的 `admin.php` 修改名称为 `{自定义}.php` 保护站点安全 +> +> 修改后,通过 http://ip:port/{自定义}.php 访问站点 +> +> {自定义} 相当于站点的后台入口保护路径,建议设置为复杂的字符串 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/maccms10/data.yml b/appstore/maccms10/data.yml new file mode 100644 index 00000000..16a964dd --- /dev/null +++ b/appstore/maccms10/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: maccms10 + name: 苹果CMS V10 + tags: + - WebSite + - Local + shortDescZh: 基于ThinkPHP和Layui的多功能开源免费内容管理系统 + shortDescEn: A multi-functional open source free content management system based on ThinkPHP and Layui + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.maccms.la/ + github: https://github.com/magicblack/maccms10/ + document: https://www.maccms.plus/ diff --git a/appstore/maccms10/logo.png b/appstore/maccms10/logo.png new file mode 100644 index 00000000..d476b9b5 Binary files /dev/null and b/appstore/maccms10/logo.png differ diff --git a/appstore/macos/1.16/.env b/appstore/macos/1.16/.env new file mode 100644 index 00000000..4f834d86 --- /dev/null +++ b/appstore/macos/1.16/.env @@ -0,0 +1,21 @@ +# MacOS 存储目录 [必填] +MACOS_STORAGE_ROOT_PATH=/home/macos + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8006 + +# Mac 远程桌面 端口 [必填] +PANEL_APP_PORT_REMOTE=5900 + +# MacOS 版本 [必填] +VERSION=15 + +# 内存大小 [必填] +RAM_SIZE=8G + +# 硬盘大小 [必填] +DISK_SIZE=64G + +# CPU 核心数 [必填] +CPU_CORES=4 + diff --git a/appstore/macos/1.16/data.yml b/appstore/macos/1.16/data.yml new file mode 100644 index 00000000..3ef308e4 --- /dev/null +++ b/appstore/macos/1.16/data.yml @@ -0,0 +1,64 @@ +additionalProperties: + formFields: + - default: "/home/macos" + edit: true + envKey: MACOS_STORAGE_ROOT_PATH + labelZh: MacOS 存储目录 + labelEn: MacOS Storage Path + required: true + type: text + - default: 8006 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 5900 + edit: true + envKey: PANEL_APP_PORT_REMOTE + labelZh: Mac 远程桌面 端口 + labelEn: Mac Remote Desktop Port + required: true + rule: paramPort + type: number + - default: "15" + edit: true + envKey: VERSION + labelZh: MacOS 版本 + labelEn: MacOS Version + required: true + type: select + values: + - label: macOS 15 (Sequoia) + value: "15" + - label: macOS 14 (Sonoma) + value: "14" + - label: macOS 13 (Ventura) + value: "13" + - label: macOS 12 (Monterey) + value: "12" + - label: macOS 11 (Big Sur) + value: "11" + - default: "8G" + edit: true + envKey: RAM_SIZE + labelZh: 内存大小 + labelEn: RAM Size + required: true + type: text + - default: "64G" + edit: true + envKey: DISK_SIZE + labelZh: 硬盘大小 + labelEn: Disk Size + required: true + type: text + - default: 4 + edit: true + envKey: CPU_CORES + labelZh: CPU 核心数 + labelEn: CPU Cores + required: true + type: number diff --git a/appstore/macos/1.16/docker-compose.yml b/appstore/macos/1.16/docker-compose.yml new file mode 100644 index 00000000..10252d13 --- /dev/null +++ b/appstore/macos/1.16/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + windows: + cap_add: + - NET_ADMIN + container_name: macos + devices: + - /dev/kvm:/dev/kvm + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + environment: + - VERSION=${VERSION} + image: dockurr/macos:1.16 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8006 + - ${PANEL_APP_PORT_REMOTE}:5900/tcp + - ${PANEL_APP_PORT_REMOTE}:5900/udp + restart: always + stop_grace_period: 2m + volumes: + - ${MACOS_STORAGE_ROOT_PATH}/storage:/storage diff --git a/appstore/macos/1.16/envs/default.env b/appstore/macos/1.16/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/macos/1.16/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/macos/1.16/envs/global.env b/appstore/macos/1.16/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/macos/1.16/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/macos/1.16/scripts/init.sh b/appstore/macos/1.16/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/macos/1.16/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/macos/1.16/scripts/uninstall.sh b/appstore/macos/1.16/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/macos/1.16/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/macos/1.16/scripts/upgrade.sh b/appstore/macos/1.16/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/macos/1.16/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/macos/README.md b/appstore/macos/README.md new file mode 100644 index 00000000..8d599f08 --- /dev/null +++ b/appstore/macos/README.md @@ -0,0 +1,66 @@ +# Mac OS + +Docker 容器内的 Mac OS + +![Mac OS](https://file.lifebus.top/imgs/macos_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +macOS是苹果公司推出的使用图形用户界面的操作系统,为麦金塔系列电脑的主操作系统。 + +## 特性 + ++ 国际标准下载器 ++ KVM 加速 ++ 网络浏览器 + +## 安装说明 + +
+
+ ⚠️ +
+ 警告
+ 该应用申请使用 `网络特权模式`, 将允许应用在容器内部执行网络管理相关特权操作。 +
+
+
+ +由于需要下载系统镜像,安装过程的快慢取决于您的网络,请耐心等待。 + +### 安装步骤 + +启动容器,并使用您的网页浏览器连接到端口 8006。 + +选择 Disk Utility ,然后选择最大的 Apple Inc. VirtIO Block Media 磁盘。 + +点击 Erase 按钮进行磁盘格式化,并给它起一个您喜欢的易于识别的名字。 + +关闭当前窗口,然后通过点击 Reinstall macOS 继续安装。 + +当系统提示您选择安装位置时,请选择您之前创建的磁盘。 + +所有文件复制完成后,请选择您的区域、语言和账户设置。 + +## 常见问题 + +### kvm 模块加载失败 + +请检查是否开启了虚拟化功能,或者在 BIOS 中开启虚拟化功能。 + +### 如何通过 USB 设备进行数据传输 + +请修改 docker-compose.yml 参数配置 + +```yml +environment: + ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234" +devices: + - /dev/bus/usb +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/macos/data.yml b/appstore/macos/data.yml new file mode 100644 index 00000000..058449a6 --- /dev/null +++ b/appstore/macos/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: macos + name: Mac OS + tags: + - WebSite + - Local + shortDescZh: Docker 容器内的 Mac OS + shortDescEn: Mac OS in Docker container + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.apple.com/ + github: https://github.com/dockur/macos/ + document: https://www.apple.com/ diff --git a/appstore/macos/logo.png b/appstore/macos/logo.png new file mode 100644 index 00000000..97c28583 Binary files /dev/null and b/appstore/macos/logo.png differ diff --git a/appstore/mailserver/14.0.0/.env b/appstore/mailserver/14.0.0/.env new file mode 100644 index 00000000..6e81ca5e --- /dev/null +++ b/appstore/mailserver/14.0.0/.env @@ -0,0 +1,75 @@ +# 数据持久化路径 [必填] +MAILSERVER_ROOT_PATH=/home/mailserver + +# SMTP 端口 (保持默认) [必填] +PANEL_APP_PORT_SMTP=25 + +# IMAP 端口 (保持默认) [必填] +PANEL_APP_PORT_IMAP=143 + +# SMTP SSL 端口 (保持默认) [必填] +PANEL_APP_PORT_SMTPS=465 + +# SMTP 提交端口 (保持默认) [必填] +PANEL_APP_PORT_ESMTP=587 + +# IMAP SSL 端口 (保持默认) [必填] +PANEL_APP_PORT_IPAPS=993 + +# ManageSieve 端口 (保持默认) [必填] +PANEL_APP_PORT_MANAGESIEVE=4190 + +# 启用 POP3 [必填] +ENABLE_POP3=0 + +# POP3 端口 (保持默认) +PANEL_APP_PORT_POP=110 + +# POP3 SSL 端口 (保持默认) +PANEL_APP_PORT_POPS=995 + +# 邮件服务器域名 [必填] +HOSTNAME_FQDN=domain.com + +# 管理员邮箱地址 [必填] +POSTMASTER_ADDRESS=postmaster@domain.com + +# 内容过滤器 (Amavis支持) [必填] +ENABLE_AMAVIS=0 + +# 邮件病毒扫描 (ClamAV支持) [必填] +ENABLE_CLAMAV=0 + +# SSL 证书类型 [必填] +SSL_TYPE=manual + +# SSL Public 证书文件名 +CERTS_PUBLIC_CRT=public.crt + +# SSL Private 证书文件名 +CERTS_PRIVATE_KEY=private.key + +# SMTP 中继主机 +RELAY_HOST= + +# SMTP 中继端口 +RELAY_PORT=587 + +# SMTP 中继用户名 +RELAY_USER= + +# SMTP 中继密码 +RELAY_PASSWORD= + +# 网络代理 +http_proxy= + +# 固定域名解析 [必填] +DOMAIN_HOSTS1=localhost:127.0.0.1 + +# 域名解析 (DNS) [必填] +DNS1=1.1.1.1 + +# 域名解析 (备用 DNS) [必填] +DNS2=114.114.114.114 + diff --git a/appstore/mailserver/14.0.0/data.yml b/appstore/mailserver/14.0.0/data.yml new file mode 100644 index 00000000..ea19fb9b --- /dev/null +++ b/appstore/mailserver/14.0.0/data.yml @@ -0,0 +1,205 @@ +additionalProperties: + formFields: + - default: "/home/mailserver" + edit: true + envKey: MAILSERVER_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 25 + edit: true + envKey: PANEL_APP_PORT_SMTP + labelZh: SMTP 端口 (保持默认) + labelEn: SMTP Port (keep default) + required: true + rule: paramPort + type: number + - default: 143 + edit: true + envKey: PANEL_APP_PORT_IMAP + labelZh: IMAP 端口 (保持默认) + labelEn: IMAP Port (keep default) + required: true + rule: paramPort + type: number + - default: 465 + edit: true + envKey: PANEL_APP_PORT_SMTPS + labelZh: SMTP SSL 端口 (保持默认) + labelEn: SMTP SSL Port (keep default) + required: true + rule: paramPort + type: number + - default: 587 + edit: true + envKey: PANEL_APP_PORT_ESMTP + labelZh: SMTP 提交端口 (保持默认) + labelEn: SMTP Submission Port (keep default) + required: true + rule: paramPort + type: number + - default: 993 + edit: true + envKey: PANEL_APP_PORT_IPAPS + labelZh: IMAP SSL 端口 (保持默认) + labelEn: IMAP SSL Port (keep default) + required: true + rule: paramPort + type: number + - default: 4190 + edit: true + envKey: PANEL_APP_PORT_MANAGESIEVE + labelZh: ManageSieve 端口 (保持默认) + labelEn: ManageSieve Port (keep default) + required: true + rule: paramPort + type: number + - default: "0" + edit: true + envKey: ENABLE_POP3 + labelZh: 启用 POP3 + labelEn: Enable POP3 + required: true + type: select + values: + - label: 启用 + value: "1" + - label: 禁用 + value: "0" + - default: 110 + edit: true + envKey: PANEL_APP_PORT_POP + labelZh: POP3 端口 (保持默认) + labelEn: POP3 Port (keep default) + required: false + rule: paramPort + type: number + - default: 995 + edit: true + envKey: PANEL_APP_PORT_POPS + labelZh: POP3 SSL 端口 (保持默认) + labelEn: POP3 SSL Port (keep default) + required: false + rule: paramPort + type: number + - default: "domain.com" + edit: true + envKey: HOSTNAME_FQDN + labelZh: 邮件服务器域名 + labelEn: Mail server domain name + required: true + type: text + - default: "postmaster@domain.com" + edit: true + envKey: POSTMASTER_ADDRESS + labelZh: 管理员邮箱地址 + labelEn: Postmaster email address + required: true + type: text + - default: "0" + edit: true + envKey: ENABLE_AMAVIS + labelZh: 内容过滤器 (Amavis支持) + labelEn: Content filter (Amavis support) + required: true + type: select + values: + - label: 启用 + value: "1" + - label: 禁用 + value: "0" + - default: "0" + edit: true + envKey: ENABLE_CLAMAV + labelZh: 邮件病毒扫描 (ClamAV支持) + labelEn: Mail virus scanning (ClamAV support) + required: true + type: select + values: + - label: 启用 + value: "1" + - label: 禁用 + value: "0" + - default: "manual" + edit: true + envKey: SSL_TYPE + labelZh: SSL 证书类型 + labelEn: SSL certificate type + required: true + type: select + values: + - label: Let's Encrypt + value: "letsencrypt" + - label: 本地证书 + value: "manual" + - default: "public.crt" + edit: true + envKey: CERTS_PUBLIC_CRT + labelZh: SSL Public 证书文件名 + labelEn: SSL Public certificate file name + required: false + type: text + - default: "private.key" + edit: true + envKey: CERTS_PRIVATE_KEY + labelZh: SSL Private 证书文件名 + labelEn: SSL Private certificate file name + required: false + type: text + - default: "" + edit: true + envKey: RELAY_HOST + labelZh: SMTP 中继主机 + labelEn: SMTP relay host + required: false + type: text + - default: 587 + edit: true + envKey: RELAY_PORT + labelZh: SMTP 中继端口 + labelEn: SMTP relay port + required: false + type: number + - default: "" + edit: true + envKey: RELAY_USER + labelZh: SMTP 中继用户名 + labelEn: SMTP relay username + required: false + type: text + - default: "" + edit: true + envKey: RELAY_PASSWORD + labelZh: SMTP 中继密码 + labelEn: SMTP relay password + required: false + type: text + - default: "" + edit: true + envKey: http_proxy + labelZh: 网络代理 + labelEn: Network proxy + required: false + type: text + - default: "localhost:127.0.0.1" + edit: true + envKey: DOMAIN_HOSTS1 + labelZh: 固定域名解析 + labelEn: Domain resolution + required: true + type: text + - default: "1.1.1.1" + edit: true + envKey: DNS1 + labelZh: 域名解析 (DNS) + labelEn: Domain resolution (DNS) + required: true + type: text + - default: "114.114.114.114" + edit: true + envKey: DNS2 + labelZh: 域名解析 (备用 DNS) + labelEn: Domain resolution (Backup DNS) + required: true + type: text diff --git a/appstore/mailserver/14.0.0/docker-compose.yml b/appstore/mailserver/14.0.0/docker-compose.yml new file mode 100644 index 00000000..7b14595a --- /dev/null +++ b/appstore/mailserver/14.0.0/docker-compose.yml @@ -0,0 +1,52 @@ +networks: + 1panel-network: + external: true +services: + mailserver: + container_name: mailserver + dns: + - ${DNS1} + - ${DNS2} + env_file: + - ./envs/global.env + - ./envs/mailserver.env + - .env + environment: + - LOG_LEVEL=info + - SUPERVISOR_LOGLEVEL=info + - ACCOUNT_PROVISIONER=FILE + - SSL_CERT_PATH=/tmp/dms/certs/${CERTS_PUBLIC_CRT:-public.crt} + - SSL_KEY_PATH=/tmp/dms/certs/${CERTS_PRIVATE_KEY:-private.key} + - SPOOF_PROTECTION=1 + - https_proxy=${http_proxy} + extra_hosts: + - ${DOMAIN_HOSTS1} + healthcheck: + retries: 0 + test: ss --listening --tcp | grep -P 'LISTEN.+:smtp' || exit 1 + timeout: 3s + hostname: ${HOSTNAME_FQDN} + image: mailserver/docker-mailserver:14.0.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_SMTP}:25 + - ${PANEL_APP_PORT_IMAP}:143 + - ${PANEL_APP_PORT_SMTPS}:465 + - ${PANEL_APP_PORT_ESMTP}:587 + - ${PANEL_APP_PORT_IPAPS}:993 + - ${PANEL_APP_PORT_POP}:110 + - ${PANEL_APP_PORT_POPS}:995 + - ${PANEL_APP_PORT_MANAGESIEVE}:4190 + restart: always + stop_grace_period: 1m + volumes: + - /etc/localtime:/etc/localtime:ro + - ${MAILSERVER_ROOT_PATH}/dms/mail-data/:/var/mail/ + - ${MAILSERVER_ROOT_PATH}/dms/mail-state/:/var/mail-state/ + - ${MAILSERVER_ROOT_PATH}/dms/mail-logs/:/var/log/mail/ + - ${MAILSERVER_ROOT_PATH}/dms/config/:/tmp/docker-mailserver/ + - ${MAILSERVER_ROOT_PATH}/certs/:/tmp/dms/certs/ + - ${MAILSERVER_ROOT_PATH}/dms-backups/:/backup/ diff --git a/appstore/mailserver/14.0.0/envs/default.env b/appstore/mailserver/14.0.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/mailserver/14.0.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/mailserver/14.0.0/envs/global.env b/appstore/mailserver/14.0.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/mailserver/14.0.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/mailserver/14.0.0/envs/mailserver.env b/appstore/mailserver/14.0.0/envs/mailserver.env new file mode 100644 index 00000000..3db58204 --- /dev/null +++ b/appstore/mailserver/14.0.0/envs/mailserver.env @@ -0,0 +1,661 @@ +# ----------------------------------------------- +# --- Mailserver Environment Variables ---------- +# ----------------------------------------------- + +# DOCUMENTATION FOR THESE VARIABLES IS FOUND UNDER +# https://docker-mailserver.github.io/docker-mailserver/latest/config/environment/ + +# ----------------------------------------------- +# --- General Section --------------------------- +# ----------------------------------------------- + +# empty => uses the `hostname` command to get the mail server's canonical hostname +# => Specify a fully-qualified domainname to serve mail for. This is used for many of the config features so if you can't set your hostname (e.g. you're in a container platform that doesn't let you) specify it in this environment variable. +OVERRIDE_HOSTNAME= + +# REMOVED in version v11.0.0! Use LOG_LEVEL instead. +DMS_DEBUG=0 + +# Set the log level for DMS. +# This is mostly relevant for container startup scripts and change detection event feedback. +# +# Valid values (in order of increasing verbosity) are: `error`, `warn`, `info`, `debug` and `trace`. +# The default log level is `info`. +LOG_LEVEL=info + +# critical => Only show critical messages +# error => Only show erroneous output +# **warn** => Show warnings +# info => Normal informational output +# debug => Also show debug messages +SUPERVISOR_LOGLEVEL= + +# Support for deployment where these defaults are not compatible (eg: some NAS appliances): +# /var/mail vmail User ID (default: 5000) +DMS_VMAIL_UID= +# /var/mail vmail Group ID (default: 5000) +DMS_VMAIL_GID= + +# **empty** => use FILE +# LDAP => use LDAP authentication +# OIDC => use OIDC authentication (not yet implemented) +# FILE => use local files (this is used as the default) +ACCOUNT_PROVISIONER= + +# empty => postmaster@domain.com +# => Specify the postmaster address +POSTMASTER_ADDRESS= + +# Check for updates on container start and then once a day +# If an update is available, a mail is sent to POSTMASTER_ADDRESS +# 0 => Update check disabled +# 1 => Update check enabled +ENABLE_UPDATE_CHECK=0 + +# Customize the update check interval. +# Number + Suffix. Suffix must be 's' for seconds, 'm' for minutes, 'h' for hours or 'd' for days. +UPDATE_CHECK_INTERVAL=1d + +# Set different options for mynetworks option (can be overwrite in postfix-main.cf) +# **WARNING**: Adding the docker network's gateway to the list of trusted hosts, e.g. using the `network` or +# `connected-networks` option, can create an open relay +# https://github.com/docker-mailserver/docker-mailserver/issues/1405#issuecomment-590106498 +# The same can happen for rootless podman. To prevent this, set the value to "none" or configure slirp4netns +# https://github.com/docker-mailserver/docker-mailserver/issues/2377 +# +# none => Explicitly force authentication +# container => Container IP address only +# host => Add docker container network (ipv4 only) +# network => Add all docker container networks (ipv4 only) +# connected-networks => Add all connected docker networks (ipv4 only) +PERMIT_DOCKER=none + +# Set the timezone. If this variable is unset, the container runtime will try to detect the time using +# `/etc/localtime`, which you can alternatively mount into the container. The value of this variable +# must follow the pattern `AREA/ZONE`, i.e. of you want to use Germany's time zone, use `Europe/Berlin`. +# You can lookup all available timezones here: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List +TZ=Asia/Shanghai + +# In case you network interface differs from 'eth0', e.g. when you are using HostNetworking in Kubernetes, +# you can set NETWORK_INTERFACE to whatever interface you want. This interface will then be used. +# - **empty** => eth0 +NETWORK_INTERFACE= + +# empty => modern +# modern => Enables TLSv1.2 and modern ciphers only. (default) +# intermediate => Enables TLSv1, TLSv1.1 and TLSv1.2 and broad compatibility ciphers. +TLS_LEVEL= + +# Configures the handling of creating mails with forged sender addresses. +# +# **0** => (not recommended) Mail address spoofing allowed. Any logged in user may create email messages with a forged sender address (see also https://en.wikipedia.org/wiki/Email_spoofing). +# 1 => Mail spoofing denied. Each user may only send with his own or his alias addresses. Addresses with extension delimiters(http://www.postfix.org/postconf.5.html#recipient_delimiter) are not able to send messages. +SPOOF_PROTECTION= + +# Enables the Sender Rewriting Scheme. SRS is needed if your mail server acts as forwarder. See [postsrsd](https://github.com/roehling/postsrsd/blob/master/README.md#sender-rewriting-scheme-crash-course) for further explanation. +# - **0** => Disabled +# - 1 => Enabled +ENABLE_SRS=0 + +# Enables the OpenDKIM service. +# **1** => Enabled +# 0 => Disabled +ENABLE_OPENDKIM=1 + +# Enables the OpenDMARC service. +# **1** => Enabled +# 0 => Disabled +ENABLE_OPENDMARC=1 + + +# Enabled `policyd-spf` in Postfix's configuration. You will likely want to set this +# to `0` in case you're using Rspamd (`ENABLE_RSPAMD=1`). +# +# - 0 => Disabled +# - **1** => Enabled +ENABLE_POLICYD_SPF=1 + +# Enables POP3 service +# - **0** => Disabled +# - 1 => Enabled +ENABLE_POP3= + +# Enables IMAP service +# - 0 => Disabled +# - **1** => Enabled +ENABLE_IMAP=1 + +# Enables ClamAV, and anti-virus scanner. +# 1 => Enabled +# **0** => Disabled +ENABLE_CLAMAV=0 + +# Add the value of this ENV as a prefix to the mail subject when spam is detected. +# NOTE: This subject prefix may be redundant (by default spam is delivered to a junk folder). +# It provides value when your junk mail is stored alongside legitimate mail instead of a separate location (like with `SPAMASSASSIN_SPAM_TO_INBOX=1` or `MOVE_SPAM_TO_JUNK=0` or a POP3 only setup, without IMAP). +# NOTE: When not using Docker Compose, other CRI may not support quote-wrapping the value here to preserve any trailing white-space. +SPAM_SUBJECT= + +# Enables Rspamd +# **0** => Disabled +# 1 => Enabled +ENABLE_RSPAMD=1 + +# When `ENABLE_RSPAMD=1`, an internal Redis instance is enabled implicitly. +# This setting provides an opt-out to allow using an external instance instead. +# 0 => Disabled +# 1 => Enabled +ENABLE_RSPAMD_REDIS= + +# When enabled, +# +# 1. the "[autolearning][rspamd-autolearn]" feature is turned on; +# 2. the Bayes classifier will be trained when moving mails from or to the Junk folder (with the help of Sieve scripts). +# +# **0** => disabled +# 1 => enabled +RSPAMD_LEARN=1 + +# This settings controls whether checks should be performed on emails coming +# from authenticated users (i.e. most likely outgoing emails). The default value +# is `0` in order to align better with SpamAssassin. We recommend reading +# through https://rspamd.com/doc/tutorials/scanning_outbound.html though to +# decide for yourself whether you need and want this feature. +# +# Note that DKIM signing of e-mails will still happen. +RSPAMD_CHECK_AUTHENTICATED=0 + +# Controls whether the Rspamd Greylisting module is enabled. +# This module can further assist in avoiding spam emails by greylisting +# e-mails with a certain spam score. +# +# **0** => disabled +# 1 => enabled +RSPAMD_GREYLISTING=1 + +# Can be used to enable or disable the Hfilter group module. +# +# - 0 => Disabled +# - **1** => Enabled +RSPAMD_HFILTER=1 + +# Can be used to control the score when the HFILTER_HOSTNAME_UNKNOWN symbol applies. A higher score is more punishing. Setting it to 15 is equivalent to rejecting the email when the check fails. +# +# Default: 6 +RSPAMD_HFILTER_HOSTNAME_UNKNOWN_SCORE=6 + +# Can be used to enable or disable the (still experimental) neural module. +# +# - **0** => Disabled +# - 1 => Enabled +RSPAMD_NEURAL=0 + +# Amavis content filter (used for ClamAV & SpamAssassin) +# 0 => Disabled +# 1 => Enabled +ENABLE_AMAVIS=0 + +# -1/-2/-3 => Only show errors +# **0** => Show warnings +# 1/2 => Show default informational output +# 3/4/5 => log debug information (very verbose) +AMAVIS_LOGLEVEL=0 + +# This enables DNS block lists in Postscreen. +# Note: Emails will be rejected, if they don't pass the block list checks! +# **0** => DNS block lists are disabled +# 1 => DNS block lists are enabled +ENABLE_DNSBL=0 + +# If you enable Fail2Ban, don't forget to add the following lines to your `compose.yaml`: +# cap_add: +# - NET_ADMIN +# Otherwise, `nftables` won't be able to ban IPs. +ENABLE_FAIL2BAN=0 + +# Fail2Ban blocktype +# drop => drop packet (send NO reply) +# reject => reject packet (send ICMP unreachable) +FAIL2BAN_BLOCKTYPE=drop + +# 1 => Enables Managesieve on port 4190 +# empty => disables Managesieve +ENABLE_MANAGESIEVE= + +# **enforce** => Allow other tests to complete. Reject attempts to deliver mail with a 550 SMTP reply, and log the helo/sender/recipient information. Repeat this test the next time the client connects. +# drop => Drop the connection immediately with a 521 SMTP reply. Repeat this test the next time the client connects. +# ignore => Ignore the failure of this test. Allow other tests to complete. Repeat this test the next time the client connects. This option is useful for testing and collecting statistics without blocking mail. +POSTSCREEN_ACTION=enforce + +# empty => all daemons start +# 1 => only launch postfix smtp +SMTP_ONLY= + +# Please read [the SSL page in the documentation](https://docker-mailserver.github.io/docker-mailserver/latest/config/security/ssl) for more information. +# +# empty => SSL disabled +# letsencrypt => Enables Let's Encrypt certificates +# custom => Enables custom certificates +# manual => Let's you manually specify locations of your SSL certificates for non-standard cases +# self-signed => Enables self-signed certificates +SSL_TYPE= + +# These are only supported with `SSL_TYPE=manual`. +# Provide the path to your cert and key files that you've mounted access to within the container. +SSL_CERT_PATH= +SSL_KEY_PATH= +# Optional: A 2nd certificate can be supported as fallback (dual cert support), eg ECDSA with an RSA fallback. +# Useful for additional compatibility with older MTA and MUA (eg pre-2015). +SSL_ALT_CERT_PATH= +SSL_ALT_KEY_PATH= + +# Set how many days a virusmail will stay on the server before being deleted +# empty => 7 days +VIRUSMAILS_DELETE_DELAY= + +# Configure Postfix `virtual_transport` to deliver mail to a different LMTP client (default is a dovecot socket). +# Provide any valid URI. Examples: +# +# empty => `lmtp:unix:/var/run/dovecot/lmtp` (default, configured in Postfix main.cf) +# `lmtp:unix:private/dovecot-lmtp` (use socket) +# `lmtps:inet::` (secure lmtp with starttls) +# `lmtp::2003` (use kopano as mailstore) +POSTFIX_DAGENT= + +# Set the mailbox size limit for all users. If set to zero, the size will be unlimited (default). Size is in bytes. +# +# empty => 0 +POSTFIX_MAILBOX_SIZE_LIMIT= + +# See https://docker-mailserver.github.io/docker-mailserver/latest/config/account-management/overview/#quotas +# 0 => Dovecot quota is disabled +# 1 => Dovecot quota is enabled +ENABLE_QUOTAS=1 + +# Set the message size limit for all users. If set to zero, the size will be unlimited (not recommended!). Size is in bytes. +# +# empty => 10240000 (~10 MB) +POSTFIX_MESSAGE_SIZE_LIMIT= + +# Mails larger than this limit won't be scanned. +# ClamAV must be enabled (ENABLE_CLAMAV=1) for this. +# +# empty => 25M (25 MB) +CLAMAV_MESSAGE_SIZE_LIMIT= + +# Enables regular pflogsumm mail reports. +# This is a new option. The old REPORT options are still supported for backwards compatibility. If this is not set and reports are enabled with the old options, logrotate will be used. +# +# not set => No report +# daily_cron => Daily report for the previous day +# logrotate => Full report based on the mail log when it is rotated +PFLOGSUMM_TRIGGER= + +# Recipient address for pflogsumm reports. +# +# not set => Use REPORT_RECIPIENT or POSTMASTER_ADDRESS +# => Specify the recipient address(es) +PFLOGSUMM_RECIPIENT= + +# Sender address (`FROM`) for pflogsumm reports if pflogsumm reports are enabled. +# +# not set => Use REPORT_SENDER +# => Specify the sender address +PFLOGSUMM_SENDER= + +# Interval for logwatch report. +# +# none => No report is generated +# daily => Send a daily report +# weekly => Send a report every week +LOGWATCH_INTERVAL= + +# Recipient address for logwatch reports if they are enabled. +# +# not set => Use REPORT_RECIPIENT or POSTMASTER_ADDRESS +# => Specify the recipient address(es) +LOGWATCH_RECIPIENT= + +# Sender address (`FROM`) for logwatch reports if logwatch reports are enabled. +# +# not set => Use REPORT_SENDER +# => Specify the sender address +LOGWATCH_SENDER= + +# Defines who receives reports if they are enabled. +# **empty** => ${POSTMASTER_ADDRESS} +# => Specify the recipient address +REPORT_RECIPIENT= + +# Defines who sends reports if they are enabled. +# **empty** => mailserver-report@${DOMAINNAME} +# => Specify the sender address +REPORT_SENDER= + +# Changes the interval in which log files are rotated +# **weekly** => Rotate log files weekly +# daily => Rotate log files daily +# monthly => Rotate log files monthly +# +# Note: This Variable actually controls logrotate inside the container +# and rotates the log files depending on this setting. The main log output is +# still available in its entirety via `docker logs mail` (Or your +# respective container name). If you want to control logrotation for +# the Docker-generated logfile see: +# https://docs.docker.com/config/containers/logging/configure/ +# +# Note: This variable can also determine the interval for Postfix's log summary reports, see [`PFLOGSUMM_TRIGGER`](#pflogsumm_trigger). +LOGROTATE_INTERVAL=weekly + +# Defines how many log files are kept by logrorate +LOGROTATE_COUNT=4 + + +# If enabled, employs `reject_unknown_client_hostname` to sender restrictions in Postfix's configuration. +# +# - **0** => Disabled +# - 1 => Enabled +POSTFIX_REJECT_UNKNOWN_CLIENT_HOSTNAME=0 + +# Choose TCP/IP protocols for postfix to use +# **all** => All possible protocols. +# ipv4 => Use only IPv4 traffic. Most likely you want this behind Docker. +# ipv6 => Use only IPv6 traffic. +# +# Note: More details at http://www.postfix.org/postconf.5.html#inet_protocols +POSTFIX_INET_PROTOCOLS=all + +# Enables MTA-STS support for outbound mail. +# More details: https://docker-mailserver.github.io/docker-mailserver/v13.3/config/best-practices/mta-sts/ +# - **0** ==> MTA-STS disabled +# - 1 => MTA-STS enabled +ENABLE_MTA_STS=0 + +# Choose TCP/IP protocols for dovecot to use +# **all** => Listen on all interfaces +# ipv4 => Listen only on IPv4 interfaces. Most likely you want this behind Docker. +# ipv6 => Listen only on IPv6 interfaces. +# +# Note: More information at https://dovecot.org/doc/dovecot-example.conf +DOVECOT_INET_PROTOCOLS=all + +# ----------------------------------------------- +# --- SpamAssassin Section ---------------------- +# ----------------------------------------------- + +ENABLE_SPAMASSASSIN=0 + +# KAM is a 3rd party SpamAssassin ruleset, provided by the McGrail Foundation. +# If SpamAssassin is enabled, KAM can be used in addition to the default ruleset. +# - **0** => KAM disabled +# - 1 => KAM enabled +# +# Note: only has an effect if `ENABLE_SPAMASSASSIN=1` +ENABLE_SPAMASSASSIN_KAM=1 + +# deliver spam messages to the inbox (tagged using SPAM_SUBJECT) +SPAMASSASSIN_SPAM_TO_INBOX=1 + +# spam messages will be moved in the Junk folder (SPAMASSASSIN_SPAM_TO_INBOX=1 required) +MOVE_SPAM_TO_JUNK=1 + +# spam messages will be marked as read +MARK_SPAM_AS_READ=1 + +# add 'spam info' headers at, or above this level +SA_TAG=2.0 + +# add 'spam detected' headers at, or above this level +SA_TAG2=6.31 + +# triggers spam evasive actions +SA_KILL=10.0 + +# ----------------------------------------------- +# --- Fetchmail Section ------------------------- +# ----------------------------------------------- + +ENABLE_FETCHMAIL=0 + +# The interval to fetch mail in seconds +FETCHMAIL_POLL=300 +# Use multiple fetchmail instances (1 per poll entry in fetchmail.cf) +# Supports multiple IMAP IDLE connections when a server is used across multiple poll entries +# https://otremba.net/wiki/Fetchmail_(Debian)#Immediate_Download_via_IMAP_IDLE +FETCHMAIL_PARALLEL=0 + +# Enable or disable `getmail`. +# +# - **0** => Disabled +# - 1 => Enabled +ENABLE_GETMAIL=0 + +# The number of minutes for the interval. Min: 1; Max: 30. +GETMAIL_POLL=5 + +# ----------------------------------------------- +# --- OAUTH2 Section ---------------------------- +# ----------------------------------------------- + +# empty => OAUTH2 authentication is disabled +# 1 => OAUTH2 authentication is enabled +ENABLE_OAUTH2= + +# Specify the user info endpoint URL of the oauth2 provider +# Example: https://oauth2.example.com/userinfo/ +OAUTH2_INTROSPECTION_URL= + +# ----------------------------------------------- +# --- LDAP Section ------------------------------ +# ----------------------------------------------- + +# A second container for the ldap service is necessary (i.e. https://hub.docker.com/r/bitnami/openldap/) + +# empty => no +# yes => LDAP over TLS enabled for Postfix +LDAP_START_TLS= + +# empty => mail.example.com +# Specify the `` / `` where the LDAP server is reachable via a URI like: `ldaps://mail.example.com`. +# Note: You must include the desired URI scheme (`ldap://`, `ldaps://`, `ldapi://`). +LDAP_SERVER_HOST= + +# empty => ou=people,dc=domain,dc=com +# => e.g. LDAP_SEARCH_BASE=dc=mydomain,dc=local +LDAP_SEARCH_BASE= + +# empty => cn=admin,dc=domain,dc=com +# => take a look at examples of SASL_LDAP_BIND_DN +LDAP_BIND_DN= + +# empty** => admin +# => Specify the password to bind against ldap +LDAP_BIND_PW= + +# e.g. `"(&(mail=%s)(mailEnabled=TRUE))"` +# => Specify how ldap should be asked for users +LDAP_QUERY_FILTER_USER= + +# e.g. `"(&(mailGroupMember=%s)(mailEnabled=TRUE))"` +# => Specify how ldap should be asked for groups +LDAP_QUERY_FILTER_GROUP= + +# e.g. `"(&(mailAlias=%s)(mailEnabled=TRUE))"` +# => Specify how ldap should be asked for aliases +LDAP_QUERY_FILTER_ALIAS= + +# e.g. `"(&(|(mail=*@%s)(mailalias=*@%s)(mailGroupMember=*@%s))(mailEnabled=TRUE))"` +# => Specify how ldap should be asked for domains +LDAP_QUERY_FILTER_DOMAIN= + +# ----------------------------------------------- +# --- Dovecot Section --------------------------- +# ----------------------------------------------- + +# empty => no +# yes => LDAP over TLS enabled for Dovecot +DOVECOT_TLS= + +# e.g. `"(&(objectClass=PostfixBookMailAccount)(uniqueIdentifier=%n))"` +DOVECOT_USER_FILTER= + +# e.g. `"(&(objectClass=PostfixBookMailAccount)(uniqueIdentifier=%n))"` +DOVECOT_PASS_FILTER= + +# Define the mailbox format to be used +# default is maildir, supported values are: sdbox, mdbox, maildir +DOVECOT_MAILBOX_FORMAT=maildir + +# empty => no +# yes => Allow bind authentication for LDAP +# https://wiki.dovecot.org/AuthDatabase/LDAP/AuthBinds +DOVECOT_AUTH_BIND= + +# ----------------------------------------------- +# --- Postgrey Section -------------------------- +# ----------------------------------------------- + +ENABLE_POSTGREY=0 +# greylist for N seconds +POSTGREY_DELAY=300 +# delete entries older than N days since the last time that they have been seen +POSTGREY_MAX_AGE=35 +# response when a mail is greylisted +POSTGREY_TEXT="Delayed by Postgrey" +# whitelist host after N successful deliveries (N=0 to disable whitelisting) +POSTGREY_AUTO_WHITELIST_CLIENTS=5 + +# ----------------------------------------------- +# --- SASL Section ------------------------------ +# ----------------------------------------------- + +ENABLE_SASLAUTHD=0 + +# empty => pam +# `ldap` => authenticate against ldap server +# `shadow` => authenticate against local user db +# `mysql` => authenticate against mysql db +# `rimap` => authenticate against imap server +# Note: can be a list of mechanisms like pam ldap shadow +SASLAUTHD_MECHANISMS= + +# empty => None +# e.g. with SASLAUTHD_MECHANISMS rimap you need to specify the ip-address/servername of the imap server ==> xxx.xxx.xxx.xxx +SASLAUTHD_MECH_OPTIONS= + +# empty => Use value of LDAP_SERVER_HOST +# Note: You must include the desired URI scheme (`ldap://`, `ldaps://`, `ldapi://`). +SASLAUTHD_LDAP_SERVER= + +# empty => Use value of LDAP_BIND_DN +# specify an object with privileges to search the directory tree +# e.g. active directory: SASLAUTHD_LDAP_BIND_DN=cn=Administrator,cn=Users,dc=mydomain,dc=net +# e.g. openldap: SASLAUTHD_LDAP_BIND_DN=cn=admin,dc=mydomain,dc=net +SASLAUTHD_LDAP_BIND_DN= + +# empty => Use value of LDAP_BIND_PW +SASLAUTHD_LDAP_PASSWORD= + +# empty => Use value of LDAP_SEARCH_BASE +# specify the search base +SASLAUTHD_LDAP_SEARCH_BASE= + +# empty => default filter `(&(uniqueIdentifier=%u)(mailEnabled=TRUE))` +# e.g. for active directory: `(&(sAMAccountName=%U)(objectClass=person))` +# e.g. for openldap: `(&(uid=%U)(objectClass=person))` +SASLAUTHD_LDAP_FILTER= + +# empty => no +# yes => LDAP over TLS enabled for SASL +# If set to yes, the protocol in SASLAUTHD_LDAP_SERVER must be ldap:// or missing. +SASLAUTHD_LDAP_START_TLS= + +# empty => no +# yes => Require and verify server certificate +# If yes you must/could specify SASLAUTHD_LDAP_TLS_CACERT_FILE or SASLAUTHD_LDAP_TLS_CACERT_DIR. +SASLAUTHD_LDAP_TLS_CHECK_PEER= + +# File containing CA (Certificate Authority) certificate(s). +# empty => Nothing is added to the configuration +# Any value => Fills the `ldap_tls_cacert_file` option +SASLAUTHD_LDAP_TLS_CACERT_FILE= + +# Path to directory with CA (Certificate Authority) certificates. +# empty => Nothing is added to the configuration +# Any value => Fills the `ldap_tls_cacert_dir` option +SASLAUTHD_LDAP_TLS_CACERT_DIR= + +# Specify what password attribute to use for password verification. +# empty => Nothing is added to the configuration but the documentation says it is `userPassword` by default. +# Any value => Fills the `ldap_password_attr` option +SASLAUTHD_LDAP_PASSWORD_ATTR= + +# empty => `bind` will be used as a default value +# `fastbind` => The fastbind method is used +# `custom` => The custom method uses userPassword attribute to verify the password +SASLAUTHD_LDAP_AUTH_METHOD= + +# Specify the authentication mechanism for SASL bind +# empty => Nothing is added to the configuration +# Any value => Fills the `ldap_mech` option +SASLAUTHD_LDAP_MECH= + +# ----------------------------------------------- +# --- SRS Section ------------------------------- +# ----------------------------------------------- + +# envelope_sender => Rewrite only envelope sender address (default) +# header_sender => Rewrite only header sender (not recommended) +# envelope_sender,header_sender => Rewrite both senders +# An email has an "envelope" sender (indicating the sending server) and a +# "header" sender (indicating who sent it). More strict SPF policies may require +# you to replace both instead of just the envelope sender. +SRS_SENDER_CLASSES=envelope_sender + +# empty => Envelope sender will be rewritten for all domains +# provide comma separated list of domains to exclude from rewriting +SRS_EXCLUDE_DOMAINS= + +# empty => generated when the image is built +# provide a secret to use in base64 +# you may specify multiple keys, comma separated. the first one is used for +# signing and the remaining will be used for verification. this is how you +# rotate and expire keys +SRS_SECRET= + +# ----------------------------------------------- +# --- Default Relay Host Section ---------------- +# ----------------------------------------------- + +# Setup relaying all mail through a default relay host +# +# Set a default host to relay all mail through (optionally include a port) +# Example: [mail.example.com]:587 +DEFAULT_RELAY_HOST= + +# ----------------------------------------------- +# --- Multi-Domain Relay Section ---------------- +# ----------------------------------------------- + +# Setup relaying for multiple domains based on the domain name of the sender +# optionally uses usernames and passwords in postfix-sasl-password.cf and relay host mappings in postfix-relaymap.cf +# +# Set a default host to relay mail through +# Example: mail.example.com +RELAY_HOST= + +# empty => 25 +# default port to relay mail +RELAY_PORT=25 + +# ----------------------------------------------- +# --- Relay Host Credentials Section ------------ +# ----------------------------------------------- + +# Configure a relay user and password to use with RELAY_HOST / DEFAULT_RELAY_HOST + +# empty => no default +RELAY_USER= + +# empty => no default +RELAY_PASSWORD= diff --git a/appstore/mailserver/14.0.0/scripts/init.sh b/appstore/mailserver/14.0.0/scripts/init.sh new file mode 100644 index 00000000..07da049e --- /dev/null +++ b/appstore/mailserver/14.0.0/scripts/init.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/mailserver.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mailserver/14.0.0/scripts/uninstall.sh b/appstore/mailserver/14.0.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/mailserver/14.0.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mailserver/14.0.0/scripts/upgrade.sh b/appstore/mailserver/14.0.0/scripts/upgrade.sh new file mode 100644 index 00000000..07da049e --- /dev/null +++ b/appstore/mailserver/14.0.0/scripts/upgrade.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/mailserver.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mailserver/README.md b/appstore/mailserver/README.md new file mode 100644 index 00000000..544eaf86 --- /dev/null +++ b/appstore/mailserver/README.md @@ -0,0 +1,138 @@ +# Docker Mailserver + +docker-mailserver,简称 DMS,是一个可用于生产的全栈但简单的邮件服务器(SMTP、IMAP、LDAP、反垃圾邮件、反病毒等)。它只使用配置文件,不使用 +SQL 数据库。其形象以 "保持简单和版本化 "为口号。 + + + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 前置准备 + +- `域名` +- `DNS 解析` +- `服务器` + - `Docker` 服务 + - `推荐配置`: 1核2G内存 容器已启用交换功能 + - `最小配置`: 1核512M内存 (禁用 ClamAV 服务) + +### DNS 配置 + +假设你的域名是 `example.com` + +邮件服务器的完全限定域名 (FQDN) 是 mail.example.com,你需要配置以下记录: + +- `A` 记录: `mail.example.com` 指向你的服务器 IP 地址 + - MX 记录告诉每个人哪个 (DNS) 名称负责您域中的电子邮件。 +- `MX` 记录: `example.com` 指向 `mail.example.com` + - A 记录告诉每个人 DNS 名称 +- `PTR` 记录(可选): 你的服务器 IP 地址指向 `mail.example.com` + - PTR 记录是 A 记录的对应记录 + +当然,您也可以完全在 example.com 上配置,您需要更改您的 MX 记录: + +- `MX` 记录: `example.com` 指向 `example.com` +- `A` 记录: `example.com` 指向您的服务器 IP 地址 + +什么是 PTR 记录?[请参阅](https://en.wikipedia.org/wiki/Reverse_DNS_lookup) + +此项服务在 DNS 解析商中可能存在收费,如您不想使用此项服务,可以不配置 PTR 记录。 + +### 证书准备 + +您需要一个有效的 SSL 证书,您可以使用 `Let's Encrypt` 或者其他证书颁发机构颁发的证书。 + +将证书文件放置在 持久化目录的 `certs` 目录下,文件名为 `public.crt` 和 `private.key`。 + +### 端口占用检查 + +- `25` SMTP 端口 + +```sh +netstat -tuln | grep 25 +``` + +停止Linux 邮件服务 `postfix` 服务, 释放 25 端口, 避免端口占用。 + +```sh +systemctl status postfix.service +systemctl stop postfix.service +systemctl disable postfix.service +``` + +## 安装完成 + +首次启动至少要添加一个账户,您有两分钟的时间来执行此操作。请在容器终端中运行以下命令。 + +如果您错过了这个时间,您可以通过删除容器并重新启动来重新启动此过程。 + +> 创建 用户 +> +> `setup email add ` + +```sh +setup email add user@example.com +``` + +> 设置别名 +> +> `setup alias add ` + +```sh +setup alias add postmaster@example.com user@example.com +``` + +> 更新证书 + +将证书文件放置在 持久化目录的 `certs` 目录下,文件名为 `public.crt` 和 `private.key`。 + +重启容器,即可更新证书。 + +## 通过 中继服务器 发送邮件 + +如果您的 ISP 阻止了 25 端口,您可以使用中继服务器发送邮件。 + +### `SMTP 中继主机` 配置 + +常见的 SMTP 服务器配置如下: + +- `Gmail`: `smtp.gmail.com` +- `QQ`: `smtp.qq.com` +- `163`: `smtp.163.com` +- `126`: `smtp.126.com` + +### `SMTP 中继端口` 配置 + +常见的 SMTP 服务器端口配置如下: + +- `Gmail`: `587` +- `QQ`: `465` +- `163`: `465` +- `126`: `465` +- `25` 通常也可以使用 + +### `SMTP 中继用户名` 配置 + +常见的 SMTP 服务器用户名配置如下: + +- `Gmail`: `邮箱地址` +- `QQ`: `qq账户` +- `163`: `邮箱地址` +- `126`: `邮箱地址` + +### `SMTP 中继密码` 配置 + +常见的 SMTP 服务器密码配置如下: + +> `授权码` 是指在邮箱设置中生成的授权码,不是邮箱密码。 +> +> `应用密码` 是指在邮箱设置中生成的应用密码,不是邮箱密码。 + +- `Gmail`: `应用密码` +- `QQ`: `授权码` +- `163`: `授权码` +- `126`: `授权码` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/mailserver/data.yml b/appstore/mailserver/data.yml new file mode 100644 index 00000000..bb605ea3 --- /dev/null +++ b/appstore/mailserver/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: mailserver + name: Mailserver + tags: + - Email + - Local + shortDescZh: 可用于生产的全栈但简单的邮件服务器 + shortDescEn: A fullstack but simple mail server (smtp, imap, antispam, antivirus, etc.) + type: runtime + crossVersionUpdate: true + limit: 0 + website: https://docker-mailserver.github.io/docker-mailserver/latest/ + github: https://github.com/docker-mailserver/docker-mailserver/ + document: https://docker-mailserver.github.io/docker-mailserver/latest/ diff --git a/appstore/mailserver/logo.png b/appstore/mailserver/logo.png new file mode 100644 index 00000000..f39b79a9 Binary files /dev/null and b/appstore/mailserver/logo.png differ diff --git a/appstore/mariadb/11.6.2/.env b/appstore/mariadb/11.6.2/.env new file mode 100644 index 00000000..441dbe74 --- /dev/null +++ b/appstore/mariadb/11.6.2/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +MARIADB_ROOT_PATH=/home/mariadb + +# 连接端口 [必填] +PANEL_APP_PORT_HTTP=3306 + +# 管理员密码 [必填] +MYSQL_ROOT_PASSWORD= + diff --git a/appstore/mariadb/11.6.2/config/my.cnf b/appstore/mariadb/11.6.2/config/my.cnf new file mode 100644 index 00000000..9d0d4c14 --- /dev/null +++ b/appstore/mariadb/11.6.2/config/my.cnf @@ -0,0 +1,30 @@ +# The MariaDB configuration file +# +# The MariaDB/MySQL tools read configuration files in the following order: +# 0. "/etc/mysql/my.cnf" symlinks to this file, reason why all the rest is read. +# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults, +# 2. "/etc/mysql/conf.d/*.cnf" to set global options. +# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options. +# 4. "~/.my.cnf" to set user-specific options. +# +# If the same option is defined multiple times, the last one will apply. +# +# One can use all long options that the program supports. +# Run program with --help to get a list of available options and with +# --print-defaults to see which it would actually understand and use. +# +# If you are new to MariaDB, check out https://mariadb.com/kb/en/basic-mariadb-articles/ + +# +# This group is read both by the client and the server +# use it for options that affect everything +# +[client-server] +# Port or socket location where to connect +# port = 3306 +socket = /run/mysqld/mysqld.sock + +# Import all .cnf files from configuration directory + +!includedir /etc/mysql/mariadb.conf.d/ +!includedir /etc/mysql/conf.d/ diff --git a/appstore/mariadb/11.6.2/data.yml b/appstore/mariadb/11.6.2/data.yml new file mode 100644 index 00000000..a5ca8abb --- /dev/null +++ b/appstore/mariadb/11.6.2/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: "/home/mariadb" + edit: true + envKey: MARIADB_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3306 + envKey: PANEL_APP_PORT_HTTP + labelZh: 连接端口 + labelEn: Connection Port + required: true + rule: paramPort + type: number + - default: "" + envKey: MYSQL_ROOT_PASSWORD + labelZh: 管理员密码 + labelEn: Admin Password + random: true + required: true + rule: paramComplexity + type: password diff --git a/appstore/mariadb/11.6.2/docker-compose.yml b/appstore/mariadb/11.6.2/docker-compose.yml new file mode 100644 index 00000000..4f5cb4c6 --- /dev/null +++ b/appstore/mariadb/11.6.2/docker-compose.yml @@ -0,0 +1,20 @@ +networks: + 1panel-network: + external: true +services: + mariadb: + container_name: mariadb + env_file: + - ./envs/global.env + - .env + image: mariadb:11.6.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3306 + restart: always + volumes: + - ${MARIADB_ROOT_PATH}/data:/var/lib/mysql + - ${MARIADB_ROOT_PATH}/config/my.cnf:/etc/mysql/my.cnf diff --git a/appstore/mariadb/11.6.2/envs/default.env b/appstore/mariadb/11.6.2/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/mariadb/11.6.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/mariadb/11.6.2/envs/global.env b/appstore/mariadb/11.6.2/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/mariadb/11.6.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/mariadb/11.6.2/scripts/init.sh b/appstore/mariadb/11.6.2/scripts/init.sh new file mode 100644 index 00000000..4d148914 --- /dev/null +++ b/appstore/mariadb/11.6.2/scripts/init.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + mkdir -p "$MARIADB_ROOT_PATH" + mkdir -p "$MARIADB_ROOT_PATH/config" + mkdir -p "$MARIADB_ROOT_PATH/data" + + cp ./config/my.cnf "$MARIADB_ROOT_PATH/config/my.cnf" + + chown -R 1000:1000 "$MYSQL_ROOT_PATH" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mariadb/11.6.2/scripts/uninstall.sh b/appstore/mariadb/11.6.2/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/mariadb/11.6.2/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mariadb/11.6.2/scripts/upgrade.sh b/appstore/mariadb/11.6.2/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/mariadb/11.6.2/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mariadb/README.md b/appstore/mariadb/README.md new file mode 100644 index 00000000..dbe5c769 --- /dev/null +++ b/appstore/mariadb/README.md @@ -0,0 +1,24 @@ +# MariaDB + +MariaDB 服务器是社区开发的 MySQL 服务器分支。 + +MariaDB 由原始 MySQL 团队的核心成员发起,积极与外部开发人员合作,提供业界功能最丰富、最稳定且许可合理的开放 SQL 服务器。 + +![MariaDB](https://file.lifebus.top/imgs/mariadb_logo.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +MariaDB是MySQL关系数据库管理系统的一个分叉,由社区开发,有商业支持,旨在继续保持在GNU GPL下开源。 +MariaDB的开发是由MySQL的一些原始开发者领导的,他们担心甲骨文公司收购MySQL后会有一些隐患。 + +MariaDB打算保持与MySQL的高度兼容性,与MySQL API和命令精确匹配。MariaDB自带了一个新的存储引擎Aria,它可以替代MyISAM,成为默认的事务和非事务引擎。 +它最初使用XtraDB作为默认存储引擎,并从10.2版本切换回InnoDB。 + +MariaDB的API和协议兼容MySQL,另外又添加了一些功能,以支持原生的非阻塞操作和进度报告。这意味着,所有使用MySQL的连接器、程序库和应用程序也将可以在MariaDB下工作。 +在此基础上,由于担心甲骨文MySQL的一个更加封闭的软件项目,Fedora等Linux发行版已经在最新版本中以MariaDB取代MySQL,维基媒体基金会的服务器同样也使用MariaDB取代了MySQL。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/mariadb/data.yml b/appstore/mariadb/data.yml new file mode 100644 index 00000000..f201aa4e --- /dev/null +++ b/appstore/mariadb/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: mariadb + name: MariaDB + tags: + - Database + - Local + shortDescZh: 开源关系数据库管理系统 + shortDescEn: Open source relational database management system + type: runtime + crossVersionUpdate: true + limit: 0 + website: https://mariadb.org/ + github: https://github.com/MariaDB/server + document: https://mariadb.org/documentation/ diff --git a/appstore/mariadb/logo.png b/appstore/mariadb/logo.png new file mode 100644 index 00000000..14054e3e Binary files /dev/null and b/appstore/mariadb/logo.png differ diff --git a/appstore/maxkb/1.7.2/.env b/appstore/maxkb/1.7.2/.env new file mode 100644 index 00000000..38d3a912 --- /dev/null +++ b/appstore/maxkb/1.7.2/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +MAXKB_ROOT_PATH=/home/maxkb + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + diff --git a/appstore/maxkb/1.7.2/data.yml b/appstore/maxkb/1.7.2/data.yml new file mode 100644 index 00000000..2c48000c --- /dev/null +++ b/appstore/maxkb/1.7.2/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: "/home/maxkb" + edit: true + envKey: MAXKB_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number diff --git a/appstore/maxkb/1.7.2/docker-compose.yml b/appstore/maxkb/1.7.2/docker-compose.yml new file mode 100644 index 00000000..b23fcf44 --- /dev/null +++ b/appstore/maxkb/1.7.2/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + 1panel-network: + external: true +services: + maxkb: + container_name: maxkb + env_file: + - ./envs/global.env + - .env + image: 1panel/maxkb:v1.7.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${MAXKB_ROOT_PATH}/data:/var/lib/postgresql/data + - ${MAXKB_ROOT_PATH}/python-packages:/opt/maxkb/app/sandbox/python-packages + - ${MAXKB_ROOT_PATH}/local_embedding:/opt/maxkb/model/local_embedding diff --git a/appstore/maxkb/1.7.2/envs/default.env b/appstore/maxkb/1.7.2/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/maxkb/1.7.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/maxkb/1.7.2/envs/global.env b/appstore/maxkb/1.7.2/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/maxkb/1.7.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/maxkb/1.7.2/scripts/init.sh b/appstore/maxkb/1.7.2/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/maxkb/1.7.2/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/maxkb/1.7.2/scripts/uninstall.sh b/appstore/maxkb/1.7.2/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/maxkb/1.7.2/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/maxkb/1.7.2/scripts/upgrade.sh b/appstore/maxkb/1.7.2/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/maxkb/1.7.2/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/maxkb/README.md b/appstore/maxkb/README.md new file mode 100644 index 00000000..9f607e95 --- /dev/null +++ b/appstore/maxkb/README.md @@ -0,0 +1,69 @@ +# MaxKB + +一款基于大语言模型和 RAG 的开源知识库问答系统 + +![MaxKBo](https://file.lifebus.top/imgs/maxkb_cover.jpg) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 应用简介 + +MaxKB = `Max Knowledge Base`,是一款基于大语言模型和 RAG +的开源知识库问答系统,广泛应用于企业内部知识库、客户服务、学术研究与教育等场景。作为一款专注于知识库问答场景的软件产品,MaxKB +能够为企业的智能化进程注入新的动力,助力企业实现“提质增效”的目标。在知识库管理方面,MaxKB +帮助企业实现知识采集、知识入库、知识库构建的全流程自动化;在场景化智能搜索方面,MaxKB 能够解析用户输入的问题并匹配检索知识库;在回复准确性方面,MaxKB +采用了成熟的 LLM + RAG 技术,能够最大限度地降低大模型幻觉对知识搜索准确性的干扰,提高企业对业务数据的分类与召回能力;安全性方面,MaxKB +支持本地部署和调用本地大模型,有效管控企业使用知识库时越级访问的风险,以及公有模型在数据传输方面可能存在的安全隐患。借助 +MaxKB,企业用户可以快速上线业务 AI 助手,将生成式 AI 能力应用于业务数据管理、内部资料查询、线上客户服务等领域,优化业务服务流程并切实提升用户体验。 + +### 整体架构 + +![MaxKBo](https://file.lifebus.top/imgs/maxkb_architecture.jpg) + +### 实现原理 + +![MaxKBo](https://file.lifebus.top/imgs/maxkb_principle.jpg) + +### 技术栈 + ++ 前端:Vue.js、logicflow ++ 后端:Python / Django ++ 架构:Langchain ++ 向量数据库:PostgreSQL / pgvector ++ 大模型:Ollama、Azure OpenAI、OpenAI、通义千问、Kimi、百度千帆、讯飞星火、Gemini、DeepSeek等。 + +--- + +## 安装说明 + +> 服务地址:http://127.0.0.1:8080。 +> +> 默认的登录信息: +> +> 用户名:`admin` +> +> 默认密码:`MaxKB@123..` + +### 安装环境 + ++ 操作系统:Ubuntu 22.04 / CentOS 7 64 位系统; ++ CPU/内存: 推荐 2C/4GB 以上; ++ 磁盘空间:100GB; ++ 浏览器要求:请使用 Chrome、FireFox、Safari、Edge等现代浏览器; ++ 可访问互联网。 + +### 社区版限制 + ++ 用户数量:2 个; ++ 知识库数量:50 个; ++ 应用数量:5 个; ++ 不支持 第三方应用(企业微信,钉钉,微信公众号) ++ 不支持自定义对话框的 AI 头像 ++ 不支持自定义对话框的浮窗入口图标 ++ 不支持对话框浮窗位置可拖拽 ++ 不支持显示历史对话记录设置 ++ 不支持自定义系统 Logo 和主题 ++ 不支持 LDAP、OIDC、CAS 等单点登录协议 ++ 不开放 API + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/maxkb/data.yml b/appstore/maxkb/data.yml new file mode 100644 index 00000000..dc110037 --- /dev/null +++ b/appstore/maxkb/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: maxkb + name: MaxKB + tags: + - WebSite + - AI + - Local + shortDescZh: 基于 LLM 大语言模型的知识库问答系统 + shortDescEn: A knowledge base question and answer system based on LLM large language model + type: website + crossVersionUpdate: true + limit: 0 + website: https://maxkb.cn/ + github: https://github.com/1Panel-dev/MaxKB/ + document: https://maxkb.cn/docs/ diff --git a/appstore/maxkb/logo.png b/appstore/maxkb/logo.png new file mode 100644 index 00000000..86929b34 Binary files /dev/null and b/appstore/maxkb/logo.png differ diff --git a/appstore/mcy-shop/5.0.17/.env b/appstore/mcy-shop/5.0.17/.env new file mode 100644 index 00000000..0c02bcbf --- /dev/null +++ b/appstore/mcy-shop/5.0.17/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +MCY_SHOP_ROOT_PATH=/home/mcy-shop + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + diff --git a/appstore/mcy-shop/5.0.17/data.yml b/appstore/mcy-shop/5.0.17/data.yml new file mode 100644 index 00000000..178e3d66 --- /dev/null +++ b/appstore/mcy-shop/5.0.17/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: "/home/mcy-shop" + edit: true + envKey: MCY_SHOP_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number diff --git a/appstore/mcy-shop/5.0.17/docker-compose.yml b/appstore/mcy-shop/5.0.17/docker-compose.yml new file mode 100644 index 00000000..160afdb5 --- /dev/null +++ b/appstore/mcy-shop/5.0.17/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + mcy-shop: + container_name: mcy-shop + env_file: + - ./envs/global.env + - .env + image: qyg2297248353/mcy-shop:v5.0.17 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${MCY_SHOP_ROOT_PATH}/data:/var/www/html diff --git a/appstore/mcy-shop/5.0.17/envs/default.env b/appstore/mcy-shop/5.0.17/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/mcy-shop/5.0.17/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/mcy-shop/5.0.17/envs/global.env b/appstore/mcy-shop/5.0.17/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/mcy-shop/5.0.17/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/mcy-shop/5.0.17/scripts/init.sh b/appstore/mcy-shop/5.0.17/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/mcy-shop/5.0.17/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mcy-shop/5.0.17/scripts/uninstall.sh b/appstore/mcy-shop/5.0.17/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/mcy-shop/5.0.17/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mcy-shop/5.0.17/scripts/upgrade.sh b/appstore/mcy-shop/5.0.17/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/mcy-shop/5.0.17/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mcy-shop/README.md b/appstore/mcy-shop/README.md new file mode 100644 index 00000000..24cf84be --- /dev/null +++ b/appstore/mcy-shop/README.md @@ -0,0 +1,77 @@ +# 异次元店铺系统V4 + +二次元发卡系统 + +![异次元店铺系统](https://file.lifebus.top/imgs/mcy_shop_cover.png) + +异次元店铺系统乃荔枝店铺系统3.0完全从0代码的重构版本,原生php开发,数据库底层使用Eloquent +ORM,模板渲染使用Smarty3.1以及PHP原生渲染,会话保持全程使用session。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 支付系统,拥有强悍的插件扩展能力,现目今已经支持全网任意平台,任意支付渠道。 ++ 云更新,如果系统升级新版本,你无需进行繁琐操作,只需要在你的店铺后台就可以无缝完成升级。 ++ 商品销售,支持商品配图、会员价、游客价、邮件通知、卡密预选(用户可以预选自己想购买的那个账号或者卡号)、API对接、强制登录购买、强悍的自定义控件功能、限时秒杀、批发优惠、优惠卷、等众多功能。 ++ 分站系统,前台用户可以开通分站,分站可以独立运行,也可以卖主站商品,有点类似商业店铺了。 ++ 会员系统,会员/商户融为一体,支持会员等级,以及商户等级完全自定义,以及商品可自定义会员等级对应价格。 ++ 推广/代理系统,拥有三级分销返佣功能,注册账号即实现自动发展下级。 ++ 共享店铺系统,可以在后台直接对接别人的店铺,通过扣除余额来进行无感知进货。 ++ 应用商店,拥有众多插件以及模板,让你的店铺变得格外强大。 ++ 界面美观,完美支持PC和手机,真正的内外二次元文化。 ++ 强悍的扩展能力,你可以通过本程序在几分钟之内快速的实现你任意想实现的在线购物功能,例子如下: + + 游戏方面,物品购买即时到玩家背包 + + 商业软件余额充值 + + 商业软件自动授权 + + 论坛/社区VIP自动开通 + + 只要你想得到,没有做不到。 + +## 环境说明 + ++ PHP 8.0+ (推荐使用PHP8.0) ++ MySQL 5.7+ (推荐使用MySQL8.0) + +请自行安装 MySQL 并创建数据库,配置用户名和密码。 + +## 安装说明 + +> 首次启动将会检查环境,如果环境不满足要求将会提示错误信息。 +> +> 第二步将会检查数据库连接,如果数据库连接失败将会提示错误信息。 +> +> 第三步将会进行程序安装。 + +### 数据库填写 + +数据库主机端口非 3306 时,请按照以下格式填写: +`127.0.0.1:3306` + +## 使用说明 + +> 管理员后台地址:`/admin.php` + +### 支付配置 + +进入`支付管理`,在`支付插件`中点击`获取更多插件`,搜索 `支付宝` 等关键词,进行安装,然后进入支付配置,填写支付宝的相关配置,保存即可。 + +进入`支付管理`,在`支付接口` 中点击`添加支付接口`,选择支付插件,填写相关配置,保存即可。默认安装会存在一些不可用支付接口配置,删除即可,不影响使用。 + +余额支付接口是系统默认的支付接口,不可删除,如果你的店铺需要余额支付,请确保余额支付接口是启用状态。 + +## 版本计划 + +| 版本 | 状态 | 积极支持截止时间 | 安全维护截止时间 | 发布或预计发布时间 | +|-----|------|------------|------------|------------| +| 4.0 | 公测中 | - | - | 2024-10-18 | +| 3.0 | 安全支持 | 2024-08-20 | 长期 | 2022-06-20 | +| 2.0 | 停止维护 | 2020-07-21 | 2020-12-31 | 2020-07-21 | +| 1.0 | 停止维护 | 2020-07-17 | 2020-12-31 | 2020-07-17 | + +- 积极支持将包含常规迭代周期的 BUG 修复、安全问题修复、功能迭代和功能新增; +- 安全维护仅包含安全问题的修复; +- 停止维护状态的版本将不会再进行任何的代码变更,请尽快根据升级指南升级到最新的版本以便得到更好的支持; + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/mcy-shop/data.yml b/appstore/mcy-shop/data.yml new file mode 100644 index 00000000..028037fe --- /dev/null +++ b/appstore/mcy-shop/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: mcy-shop + name: 异次元店铺系统V4 + tags: + - WebSite + - Tool + - Local + shortDescZh: 二次元发卡系统 + shortDescEn: Secondary Card Issuing System + type: website + crossVersionUpdate: true + limit: 0 + website: https://wiki.mcy.im/ + github: https://github.com/lizhipay/mcy-shop/ + document: https://wiki.mcy.im/ diff --git a/appstore/mcy-shop/logo.png b/appstore/mcy-shop/logo.png new file mode 100644 index 00000000..4885baf8 Binary files /dev/null and b/appstore/mcy-shop/logo.png differ diff --git a/appstore/mediacms/4.1.0/.env b/appstore/mediacms/4.1.0/.env new file mode 100644 index 00000000..cb8a090e --- /dev/null +++ b/appstore/mediacms/4.1.0/.env @@ -0,0 +1,45 @@ +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# 数据持久化路径 [必填] +MEDIACMS_ROOT_PATH=/home/mediacms + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 管理员 用户名 [必填] +ADMIN_USER= + +# 管理员邮箱 [必填] +ADMIN_EMAIL= + +# 管理员密码 [必填] +ADMIN_PASSWORD= + +# 公开地址 [必填] +FRONTEND_HOST=http://localhost + +# 站点名称 [必填] +PORTAL_NAME=MediaCMS + +# Redis 地址 [必填] +REDIS_LOCATION=redis://127.0.0.1:6379/1 + +# 数据库 主机地址 [必填] +POSTGRES_HOST=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 名称 [必填] +DB_NAME=mediacms + +# 数据库 用户名 [必填] +DB_USER=mediacms + +# 数据库 密码 [必填] +DB_PASSWORD= + diff --git a/appstore/mediacms/4.1.0/data.yml b/appstore/mediacms/4.1.0/data.yml new file mode 100644 index 00000000..339e3559 --- /dev/null +++ b/appstore/mediacms/4.1.0/data.yml @@ -0,0 +1,126 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_POSTGRES_SERVICE + required: true + type: service + default: postgresql + envKey: PANEL_POSTGRES_TYPE + labelZh: Postgres 服务 (前置检查) + labelEn: Postgres Service (Pre-check) + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - child: + default: "" + envKey: PANEL_REDIS_SERVICE + required: true + type: service + default: redis + envKey: PANEL_REDIS_TYPE + labelZh: Redis 服务 (前置检查) + labelEn: Redis Service (Pre-check) + required: true + type: apps + values: + - label: Redis + value: redis + - default: "/home/mediacms" + edit: true + envKey: MEDIACMS_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: ADMIN_USER + labelZh: 管理员 用户名 + labelEn: Admin Username + required: true + type: text + - default: "" + edit: true + envKey: ADMIN_EMAIL + labelZh: 管理员邮箱 + labelEn: Admin Email + required: true + type: text + - default: "" + edit: true + envKey: ADMIN_PASSWORD + labelZh: 管理员密码 + labelEn: Admin Password + required: true + type: password + - default: "http://localhost" + edit: true + envKey: FRONTEND_HOST + labelZh: 公开地址 + labelEn: Public address + required: true + type: text + - default: "MediaCMS" + edit: true + envKey: PORTAL_NAME + labelZh: 站点名称 + labelEn: Site Name + required: true + type: text + - default: "redis://127.0.0.1:6379/1" + edit: true + envKey: REDIS_LOCATION + labelZh: Redis 地址 + labelEn: Redis Location + required: true + type: text + - default: "127.0.0.1" + edit: true + envKey: POSTGRES_HOST + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "mediacms" + edit: true + envKey: DB_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + rule: paramCommon + type: text + - default: "mediacms" + edit: true + envKey: DB_USER + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "" + edit: true + envKey: DB_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + random: true + required: true + rule: paramComplexity + type: password diff --git a/appstore/mediacms/4.1.0/docker-compose.yml b/appstore/mediacms/4.1.0/docker-compose.yml new file mode 100644 index 00000000..250eae7f --- /dev/null +++ b/appstore/mediacms/4.1.0/docker-compose.yml @@ -0,0 +1,77 @@ +networks: + 1panel-network: + external: true +services: + mediacms: + container_name: mediacms + depends_on: + - mediacms-migrations + env_file: + - ./envs/global.env + - .env + environment: + - ENABLE_CELERY_BEAT=no + - ENABLE_CELERY_SHORT=no + - ENABLE_CELERY_LONG=no + - ENABLE_MIGRATIONS=no + image: qyg2297248353/mediacms:v4.1.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${MEDIACMS_ROOT_PATH}/media_files/hls:/home/mediacms.io/mediacms/media_files/hls + - ${MEDIACMS_ROOT_PATH}/media_files/original:/home/mediacms.io/mediacms/media_files/original + - ${MEDIACMS_ROOT_PATH}/media_files/uploads:/home/mediacms.io/mediacms/media_files/uploads + mediacms-celery-beat: + container_name: celery-beat-mediacms + environment: + - ENABLE_UWSGI=no + - ENABLE_NGINX=no + - ENABLE_CELERY_SHORT=no + - ENABLE_CELERY_LONG=no + - ENABLE_MIGRATIONS=no + image: qyg2297248353/mediacms:v4.1.0 + volumes: + - ${MEDIACMS_ROOT_PATH}/media_files/hls:/home/mediacms.io/mediacms/media_files/hls + - ${MEDIACMS_ROOT_PATH}/media_files/original:/home/mediacms.io/mediacms/media_files/original + - ${MEDIACMS_ROOT_PATH}/media_files/uploads:/home/mediacms.io/mediacms/media_files/uploads + mediacms-celery-worker: + container_name: celery-worker-mediacms + depends_on: + - mediacms-migrations + environment: + - ENABLE_UWSGI=no + - ENABLE_NGINX=no + - ENABLE_CELERY_BEAT=no + - ENABLE_MIGRATIONS=no + image: qyg2297248353/mediacms:v4.1.0 + volumes: + - ${MEDIACMS_ROOT_PATH}/media_files/hls:/home/mediacms.io/mediacms/media_files/hls + - ${MEDIACMS_ROOT_PATH}/media_files/original:/home/mediacms.io/mediacms/media_files/original + - ${MEDIACMS_ROOT_PATH}/media_files/uploads:/home/mediacms.io/mediacms/media_files/uploads + mediacms-migrations: + command: + - ./deploy/docker/prestart.sh + container_name: migrations-mediacms + env_file: + - ./envs/global.env + - .env + environment: + - ENABLE_UWSGI=no + - ENABLE_NGINX=no + - ENABLE_CELERY_SHORT=no + - ENABLE_CELERY_LONG=no + - ENABLE_CELERY_BEAT=no + - ADMIN_USER=${ADMIN_USER} + - ADMIN_EMAIL=${ADMIN_EMAIL} + - ADMIN_PASSWORD=${ADMIN_PASSWORD} + image: qyg2297248353/mediacms:v4.1.0 + restart: on-failure + volumes: + - ${MEDIACMS_ROOT_PATH}/media_files/hls:/home/mediacms.io/mediacms/media_files/hls + - ${MEDIACMS_ROOT_PATH}/media_files/original:/home/mediacms.io/mediacms/media_files/original + - ${MEDIACMS_ROOT_PATH}/media_files/uploads:/home/mediacms.io/mediacms/media_files/uploads diff --git a/appstore/mediacms/4.1.0/envs/default.env b/appstore/mediacms/4.1.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/mediacms/4.1.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/mediacms/4.1.0/envs/global.env b/appstore/mediacms/4.1.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/mediacms/4.1.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/mediacms/4.1.0/scripts/init.sh b/appstore/mediacms/4.1.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/mediacms/4.1.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mediacms/4.1.0/scripts/uninstall.sh b/appstore/mediacms/4.1.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/mediacms/4.1.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mediacms/4.1.0/scripts/upgrade.sh b/appstore/mediacms/4.1.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/mediacms/4.1.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mediacms/README.md b/appstore/mediacms/README.md new file mode 100644 index 00000000..3e0d7c20 --- /dev/null +++ b/appstore/mediacms/README.md @@ -0,0 +1,36 @@ +# Media CMS + +现代、功能齐全的开源视频和媒体内容管理系统 + +![Media CMS](https://file.lifebus.top/imgs/mediacms_cover.png) + +MediaCMS 是一个现代、功能齐全的开源视频和媒体内容管理系统。它旨在满足现代网络平台观看和分享媒体的需求。它可以用来在几分钟内构建一个从小型到中型视频和媒体门户。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 功能 + ++ 完全控制您的数据:自己托管! ++ 支持多种发布工作流程:公开、私有、未列出和自定义 ++ 现代技术:Django/Python/Celery,React。 ++ 多种媒体类型支持:视频、音频、图片、PDF ++ 多种媒体分类选项:类别、标签和自定义 ++ 多种媒体分享选项:社交媒体分享,视频嵌入代码生成 ++ 轻松媒体搜索:增强实时搜索功能 ++ 音频和视频内容播放列表:创建播放列表,添加和重新排序内容 ++ 响应式设计:包括浅色和深色主题 ++ 高级用户管理:允许自助注册,仅限邀请,封闭。 ++ 可配置操作:允许下载,添加评论,添加点赞,添加不喜欢,举报媒体 ++ 配置选项:更改标志、字体、样式,添加更多页面 ++ 增强视频播放器:具有多种分辨率和播放速度选项的自定义 video.js 播放器 ++ 多个转码配置文件:针对多个维度(240p、360p、480p、720p、1080p)和多个配置文件(h264、h265、vp9)的默认设置 ++ 自适应视频流:通过 HLS 协议实现 ++ 字幕/CC:支持多语言字幕文件 ++ 可扩展转码:通过优先级进行转码。对远程工作人员的实验性支持 ++ 分块文件上传:用于可暂停/可续传的内容上传 ++ REST API:通过 Swagger 进行文档化 ++ 大多数 CMS 已翻译成多种语言 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/mediacms/data.yml b/appstore/mediacms/data.yml new file mode 100644 index 00000000..0475a770 --- /dev/null +++ b/appstore/mediacms/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: mediacms + name: Media CMS + tags: + - WebSite + - Local + shortDescZh: 现代、功能齐全的开源视频和媒体内容管理系统 + shortDescEn: Modern, fully featured open source video and media CMS + type: website + crossVersionUpdate: true + limit: 0 + website: https://mediacms.io/ + github: https://github.com/mediacms-io/mediacms/ + document: https://github.com/mediacms-io/mediacms/ diff --git a/appstore/mediacms/logo.png b/appstore/mediacms/logo.png new file mode 100644 index 00000000..00a97ba3 Binary files /dev/null and b/appstore/mediacms/logo.png differ diff --git a/appstore/metatube-server/1.2.8/.env b/appstore/metatube-server/1.2.8/.env new file mode 100644 index 00000000..3b5aeb82 --- /dev/null +++ b/appstore/metatube-server/1.2.8/.env @@ -0,0 +1,33 @@ +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# 数据持久化路径 [必填] +METATUBE_ROOT_PATH=/home/metatube + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 访问令牌 [必填] +TOKEN= + +# 数据库 主机地址 [必填] +POSTGRES_HOST=127.0.0.1 + +# 数据库 端口 [必填] +POSTGRES_PORT=5432 + +# 数据库 名称 [必填] +POSTGRES_NAME=metatube + +# 数据库 用户名 [必填] +POSTGRES_USER=metatube + +# 数据库 密码 [必填] +POSTGRES_PASSWORD= + +# 请求超时时间 [必填] +REQUEST_TIMEOUT=1m + +# 网络代理 (HTTP/Socket5) +HTTP_PROXY= + diff --git a/appstore/metatube-server/1.2.8/data.yml b/appstore/metatube-server/1.2.8/data.yml new file mode 100644 index 00000000..ca4f5200 --- /dev/null +++ b/appstore/metatube-server/1.2.8/data.yml @@ -0,0 +1,91 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_POSTGRES_SERVICE + required: true + type: service + default: postgresql + envKey: PANEL_POSTGRES_TYPE + labelZh: Postgres 服务 (前置检查) + labelEn: Postgres Service (Pre-check) + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - default: "/home/metatube" + edit: true + envKey: METATUBE_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: TOKEN + labelZh: 访问令牌 + labelEn: Access Token + required: true + type: password + - default: "127.0.0.1" + edit: true + envKey: POSTGRES_HOST + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: POSTGRES_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "metatube" + edit: true + envKey: POSTGRES_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + rule: paramCommon + type: text + - default: "metatube" + edit: true + envKey: POSTGRES_USER + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "" + edit: true + envKey: POSTGRES_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + random: true + required: true + rule: paramComplexity + type: password + - default: "1m" + edit: true + envKey: REQUEST_TIMEOUT + labelZh: 请求超时时间 + labelEn: Request Timeout + required: true + type: text + - default: "" + edit: true + envKey: HTTP_PROXY + labelZh: 网络代理 (HTTP/Socket5) + labelEn: Network Proxy (HTTP/Socket5) + required: false + type: text diff --git a/appstore/metatube-server/1.2.8/docker-compose.yml b/appstore/metatube-server/1.2.8/docker-compose.yml new file mode 100644 index 00000000..382ae242 --- /dev/null +++ b/appstore/metatube-server/1.2.8/docker-compose.yml @@ -0,0 +1,27 @@ +networks: + 1panel-network: + external: true +services: + metatube-server: + command: -dsn "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_NAME}" + -port 8080 -db-auto-migrate -db-prepared-stmt + container_name: metatube-server + env_file: + - ./envs/global.env + - .env + environment: + - HTTPS_PROXY=${HTTP_PROXY} + - DB_MAX_IDLE_CONNS=0 + - DB_MAX_OPEN_CONNS=0 + - DB_PREPARED_STMT=false + - DB_AUTO_MIGRATE=true + image: metatube/metatube-server:1.2.8 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${METATUBE_ROOT_PATH}/data:/var/run diff --git a/appstore/metatube-server/1.2.8/envs/default.env b/appstore/metatube-server/1.2.8/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/metatube-server/1.2.8/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/metatube-server/1.2.8/envs/global.env b/appstore/metatube-server/1.2.8/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/metatube-server/1.2.8/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/metatube-server/1.2.8/scripts/init.sh b/appstore/metatube-server/1.2.8/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/metatube-server/1.2.8/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/metatube-server/1.2.8/scripts/uninstall.sh b/appstore/metatube-server/1.2.8/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/metatube-server/1.2.8/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/metatube-server/1.2.8/scripts/upgrade.sh b/appstore/metatube-server/1.2.8/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/metatube-server/1.2.8/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/metatube-server/README.md b/appstore/metatube-server/README.md new file mode 100644 index 00000000..cb5c78eb --- /dev/null +++ b/appstore/metatube-server/README.md @@ -0,0 +1,87 @@ +# MetaTube 服务端 + +为 Jellyfin/Emby/Plex 开发的超级好用的元数据插件 + +![MetaTube](https://file.lifebus.top/imgs/metatube.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 应用特性 + ++ 完整数据:包括标题、简介、演员、标签、评分等内容。 ++ 完整搜索:支持通过众多的刮削源搜索影片和演员信息。 ++ 预告功能:无需下载完整预告视频即可在线观看预告片。 ++ 计划任务:自动整理影片标签以及在后台自动更新插件。 ++ 人脸识别:内置的人脸识别以人脸为中心裁剪海报图像。 ++ 自动翻译:支持将特定的元数据内容翻译成需要的语言。 + +## 应用说明 + +该应用为 MetaTube 服务端,用于为 Jellyfin/Emby/Plex 提供元数据插件。 + +优先推荐部署在: 云服务器(美国/日本) + +如果您的网络环境不适合部署服务端,可以尝试配置网络代理。仅支持 HTTP 代理 / Socks5 代理。 + +## 插件安装 + +### Jellyfin + +1. 进入 Jellyfin 控制台 > 插件目录/存储库 > 设置,点击添加 +2. 输入存储库名称:MetaTube +3. 输入存储库 + +```url +# URL for GitHub +https://raw.githubusercontent.com/metatube-community/jellyfin-plugin-metatube/dist/manifest.json +``` + +4. 在插件目录下找到 MetaTube,点击安装 +5. 重启 Jellyfin + +> 适用于中国大陆的存储库 +> +> ```url +> # URL for jsDelivr +> https://cdn.jsdelivr.net/gh/metatube-community/jellyfin-plugin-metatube@dist/manifest.json +> ``` + +### Emby + +1. 从 Releases 下载 MetaTube 最新插件 +2. 解压出 MetaTube.dll 文件 +3. 将 dll 文件复制到 Emby 插件目录 +4. 重启 Emby 服务 + +> PS:Emby 后续插件更新由计划任务在后台自动完成。 + +### Plex + +1. 从 [GitHub](https://github.com/metatube-community/metatube-plex-plugins/archive/refs/heads/main.zip) + 或 [Releases](https://github.com/metatube-community/metatube-plex-plugins/releases) 下载最新的插件 + zip 文件 +2. 将解压后的 MetaTube.bundle 文件夹移入 Plex 插件目录的根目录 +3. 其中文件夹 MetaTubeHelper.bundle 为辅助插件,可选择性安装 +4. 重启 Plex 服务 + +### 常见 Emby 插件应用目录 + +#### 群晖 + +`/volume1/Emby/plugins` + +#### Windows + +`emby\programdata\plugins` + +#### Docker + +`<配置文件夹>/plugins` + +#### Linux(供参考) + +`/var/lib/emby-server/plugins/` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/metatube-server/data.yml b/appstore/metatube-server/data.yml new file mode 100644 index 00000000..b0d3691b --- /dev/null +++ b/appstore/metatube-server/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: metatube-server + name: MetaTube + tags: + - WebSite + - Tool + - Local + shortDescZh: 为 Jellyfin/Emby/Plex 开发的超级好用的成人元数据刮削插件 + shortDescEn: A super easy-to-use adult metadata scraping plugin developed for Jellyfin/Emby/Plex + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/metatube-community/ + github: https://github.com/metatube-community/ + document: https://metatube-community.github.io/ diff --git a/appstore/metatube-server/logo.png b/appstore/metatube-server/logo.png new file mode 100644 index 00000000..5671ce95 Binary files /dev/null and b/appstore/metatube-server/logo.png differ diff --git a/appstore/minio/2024-11-07/.env b/appstore/minio/2024-11-07/.env new file mode 100644 index 00000000..bca2652a --- /dev/null +++ b/appstore/minio/2024-11-07/.env @@ -0,0 +1,36 @@ +# 数据持久化路径 [必填] +MINIO_ROOT_PATH=/home/minio + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=9001 + +# API 端口 (映射内部端口) [必填] +PANEL_APP_PORT_API=9000 + +# API 内部端口 [必填] +MINIO_API_PORT=9000 + +# 管理员 用户名 [必填] +MINIO_ROOT_USER=minio + +# 管理员 密码 [必填] +MINIO_ROOT_PASSWORD= + +# 启用 WebUI [必填] +MINIO_BROWSER=on + +# WebUI 登录动画 [必填] +MINIO_BROWSER_LOGIN_ANIMATION=on + +# 会话持续时间 (s/秒 m/分钟 h/小时 d/天) [必填] +MINIO_BROWSER_SESSION_DURATION=12h + +# API 服务器 URL [必填] +MINIO_SERVER_URL=http://127.0.0.1:9000 + +# API 域名 [必填] +MINIO_SERVER_HOST=localhost + +# WebUI 重定向 URL [必填] +MINIO_BROWSER_REDIRECT_URL=http://127.0.0.1:9001 + diff --git a/appstore/minio/2024-11-07/data.yml b/appstore/minio/2024-11-07/data.yml new file mode 100644 index 00000000..5f4f7a5a --- /dev/null +++ b/appstore/minio/2024-11-07/data.yml @@ -0,0 +1,103 @@ +additionalProperties: + formFields: + - default: "/home/minio" + edit: true + envKey: MINIO_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 9001 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 9000 + edit: true + envKey: PANEL_APP_PORT_API + labelZh: API 端口 (映射内部端口) + labelEn: API Port (mapped internal port) + required: true + rule: paramPort + type: number + - default: 9000 + edit: true + envKey: MINIO_API_PORT + labelZh: API 内部端口 + labelEn: Internal API Port + required: true + rule: paramPort + type: number + - default: "minio" + edit: true + envKey: MINIO_ROOT_USER + labelZh: 管理员 用户名 + labelEn: Root User + required: true + type: text + - default: "" + edit: true + envKey: MINIO_ROOT_PASSWORD + labelZh: 管理员 密码 + labelEn: Root Password + random: true + required: true + rule: paramComplexity + type: password + - default: "on" + edit: true + envKey: MINIO_BROWSER + labelEn: Enable WebUI + labelZh: 启用 WebUI + required: true + type: select + values: + - label: 开启 + value: "on" + - label: 关闭 + value: "off" + - default: "on" + edit: true + envKey: MINIO_BROWSER_LOGIN_ANIMATION + labelEn: WebUI login animation + labelZh: WebUI 登录动画 + required: true + type: select + values: + - label: 开启 + value: "on" + - label: 关闭 + value: "off" + - default: "12h" + edit: true + envKey: MINIO_BROWSER_SESSION_DURATION + labelEn: Session duration + labelZh: 会话持续时间 (s/秒 m/分钟 h/小时 d/天) + required: true + type: text + - default: "http://127.0.0.1:9000" + edit: true + envKey: MINIO_SERVER_URL + labelZh: API 服务器 URL + labelEn: API Server URL + rule: paramExtUrl + required: true + type: text + - default: "localhost" + edit: true + envKey: MINIO_SERVER_HOST + labelZh: API 域名 + labelEn: API Hostname + required: true + type: text + - default: "http://127.0.0.1:9001" + edit: true + envKey: MINIO_BROWSER_REDIRECT_URL + labelZh: WebUI 重定向 URL + labelEn: WebUI Redirect URL + rule: paramExtUrl + required: true + type: text diff --git a/appstore/minio/2024-11-07/docker-compose.yml b/appstore/minio/2024-11-07/docker-compose.yml new file mode 100644 index 00000000..e4b90277 --- /dev/null +++ b/appstore/minio/2024-11-07/docker-compose.yml @@ -0,0 +1,34 @@ +networks: + 1panel-network: + external: true +services: + minio: + command: server --console-address :${PANEL_APP_PORT_HTTP} --address :${MINIO_API_PORT} + --json + container_name: minio + env_file: + - ./envs/global.env + - .env + environment: + - MINIO_VOLUMES=/data + - MINIO_API_ROOT_ACCESS=on + - MINIO_BROWSER_REDIRECT=true + extra_hosts: + - ${MINIO_SERVER_HOST:-localhost}:127.0.0.1 + image: minio/minio:RELEASE.2024-11-07T00-52-20Z.fips + labels: + createdBy: Apps + logging: + driver: json-file + options: + max-file: '10' + max-size: 5M + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + - ${PANEL_APP_PORT_API}:${MINIO_API_PORT} + restart: always + volumes: + - ${MINIO_ROOT_PATH}/certs:/root/.minio/certs + - ${MINIO_ROOT_PATH}/data:/data diff --git a/appstore/minio/2024-11-07/envs/default.env b/appstore/minio/2024-11-07/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/minio/2024-11-07/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/minio/2024-11-07/envs/global.env b/appstore/minio/2024-11-07/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/minio/2024-11-07/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/minio/2024-11-07/scripts/init.sh b/appstore/minio/2024-11-07/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/minio/2024-11-07/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/minio/2024-11-07/scripts/uninstall.sh b/appstore/minio/2024-11-07/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/minio/2024-11-07/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/minio/2024-11-07/scripts/upgrade.sh b/appstore/minio/2024-11-07/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/minio/2024-11-07/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/minio/README.md b/appstore/minio/README.md new file mode 100644 index 00000000..83901781 --- /dev/null +++ b/appstore/minio/README.md @@ -0,0 +1,72 @@ +# MinIO + +MinIO 是一种高性能、S3 兼容的对象存储。它是为大规模 AI/ML、数据湖和数据库工作负载。它是软件定义的并在任何云或本地基础设施上运行。 + +![MinIO](https://file.lifebus.top/imgs/minio_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 简单 + +简单性是百亿亿次数据基础设施的基础——无论是技术上还是操作上。没有其他对象存储可以让您在更短的时间内从下载到生产。 + ++ 高性能 + +MinIO 是世界上最快的对象存储,已发布的 GET/PUT 结果在 32 个 NVMe 驱动器节点和 100GbE 网络上超过 325 GiB/秒和 165 GiB/秒。 + ++ Kubernetes 原生 + +通过原生 Kubernetes 操作集成,MinIO 支持公共云、私有云和边缘云上的所有主要 Kubernetes 发行版。 + ++ 人工智能就绪 + +MinIO 专为 AI 打造,可与所有主要 AI/ML 技术一起开箱即用。从预测模型到 GenAI,MinIO 提供的性能和可扩展性为 AI 企业提供动力。 + +## 安装说明 + +### API 端口 + +MinIO API 端口默认是 9000。 + +| API 端口 (映射内部端口) | API 内部端口 | +|-----------------|----------| +| 9000 | 9000 | + ++ `API 内部端口` 是容器内部使用的端口,一般无需改动。 ++ `API 端口` 是容器外部实际访问的端口,可以根据自己的需要进行修改。 + +### 域名配置 + +假定 MinIO WebUI 服务的域名为 `web.minio.com` + +假定 MinIO API 服务的域名为 `f.minio.com` + +#### API 服务器 URL + +默认情况为:`http://localhost:9000` + +端口 `9000` 取决于 `API 内部端口` 的配置。 + +域名配置,可填写:`https://f.minio.com` + +协议 `https` 取决于是否启用了 SSL/TLS, 是否配置了域名证书。 + +#### API 域名 + +默认情况为:`localhost` + +域名配置,可填写:`f.minio.com` + +#### WebUI 重定向 URL + +默认情况为:`http://localhost:9001` + +域名配置,可填写:`https://web.minio.com` + +协议 `https` 取决于是否启用了 SSL/TLS, 是否配置了域名证书。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/minio/data.yml b/appstore/minio/data.yml new file mode 100644 index 00000000..eda20e27 --- /dev/null +++ b/appstore/minio/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + key: minio + name: MinIO + tags: + - WebSite + - Middleware + - Storage + - Runtime + - Local + shortDescZh: 开源的对象存储服务器 + shortDescEn: Open source object storage server + type: website + crossVersionUpdate: true + limit: 0 + website: https://min.io/ + github: https://github.com/minio/minio/ + document: https://min.io/docs/ diff --git a/appstore/minio/logo.png b/appstore/minio/logo.png new file mode 100644 index 00000000..cb983e25 Binary files /dev/null and b/appstore/minio/logo.png differ diff --git a/appstore/movie-pilot/1.9.17/.env b/appstore/movie-pilot/1.9.17/.env new file mode 100644 index 00000000..a66ae0c6 --- /dev/null +++ b/appstore/movie-pilot/1.9.17/.env @@ -0,0 +1,138 @@ +# 数据持久化路径 [必填] +MOVIEPILOT_ROOT_PATH=/home/movie-pilot + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# API 端口 [必填] +PANEL_APP_PORT_API=3001 + +# 管理员用户名 [必填] +SUPERUSER=admin + +# API 令牌 [必填] +API_TOKEN=moviepilot + +# 网络代理 +PROXY_HOST= + +# 自动更新资源包 [必填] +AUTO_UPDATE_RESOURCES=false + +# 自动更新 [必填] +MOVIEPILOT_AUTO_UPDATE=false + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + +# IYUU登录令牌 +IYUU_SIGN= + +# hhclub 用户名 +HHCLUB_USERNAME= + +# hhclub 密钥 +HHCLUB_PASSKEY= + +# audiences 用户ID +AUDIENCES_UID= + +# audiences 密钥 +AUDIENCES_PASSKEY= + +# hddolby 用户ID +HDDOLBY_ID= + +# hddolby 密钥 +HDDOLBY_PASSKEY= + +# zmpt 用户ID +ZMPT_UID= + +# zmpt 密钥 +ZMPT_PASSKEY= + +# freefarm 用户ID +FREEFARM_UID= + +# freefarm 密钥 +FREEFARM_PASSKEY= + +# hdfans 用户ID +HDFANS_UID= + +# hdfans 密钥 +HDFANS_PASSKEY= + +# wintersakura 用户ID +WINTERSAKURA_UID= + +# wintersakura 密钥 +WINTERSAKURA_PASSKEY= + +# leaves 用户ID +LEAVES_UID= + +# leaves 密钥 +LEAVES_PASSKEY= + +# ptba 用户ID +PTBA_UID= + +# ptba 密钥 +PTBA_PASSKEY= + +# icc2022 用户ID +ICC2022_UID= + +# icc2022 密钥 +ICC2022_PASSKEY= + +# xingtan 用户ID +XINGTAN_UID= + +# xingtan 密钥 +XINGTAN_PASSKEY= + +# ptvicomo 用户ID +PTVICOMO_UID= + +# ptvicomo 密钥 +PTVICOMO_PASSKEY= + +# agsvpt 用户ID +AGSVPT_UID= + +# agsvpt 密钥 +AGSVPT_PASSKEY= + +# hdkyl 用户ID +HDKYL_UID= + +# hdkyl 密钥 +HDKYL_PASSKEY= + +# qingwa 用户ID +QINGWA_UID= + +# qingwa 密钥 +QINGWA_PASSKEY= + +# discfan 用户ID +DISCFAN_UID= + +# discfan 密钥 +DISCFAN_PASSKEY= + +# rousi 用户ID +ROUSI_UID= + +# rousi 密钥 +ROUSI_PASSKEY= + diff --git a/appstore/movie-pilot/1.9.17/data.yml b/appstore/movie-pilot/1.9.17/data.yml new file mode 100644 index 00000000..a34b342d --- /dev/null +++ b/appstore/movie-pilot/1.9.17/data.yml @@ -0,0 +1,341 @@ +additionalProperties: + formFields: + - default: "/home/movie-pilot" + edit: true + envKey: MOVIEPILOT_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI Port + required: true + rule: paramPort + type: number + - default: 3001 + edit: true + envKey: PANEL_APP_PORT_API + labelZh: API 端口 + labelEn: API Port + required: true + rule: paramPort + type: number + - default: "admin" + edit: true + envKey: SUPERUSER + labelZh: 管理员用户名 + labelEn: Superuser Username + required: true + type: text + - default: "moviepilot" + edit: true + envKey: API_TOKEN + labelZh: API 令牌 + labelEn: API Token + required: true + type: password + - default: "" + edit: true + envKey: PROXY_HOST + labelZh: 网络代理 + labelEn: Proxy Host + required: false + rule: paramExtUrl + type: text + - default: "false" + edit: true + envKey: AUTO_UPDATE_RESOURCES + labelZh: 自动更新资源包 + labelEn: Auto Update Resources + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 关闭 + value: "false" + - default: "false" + edit: true + envKey: MOVIEPILOT_AUTO_UPDATE + labelZh: 自动更新 + labelEn: Auto Update + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 发布版 + value: "release" + - label: 测试版 + value: "dev" + - label: 关闭 + value: "false" + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text + - default: "" + edit: true + envKey: IYUU_SIGN + labelEn: IYUU Sign + labelZh: IYUU登录令牌 + required: false + type: password + - default: "" + edit: true + envKey: HHCLUB_USERNAME + labelZh: hhclub 用户名 + labelEn: hhclub username + required: false + type: text + - default: "" + edit: true + envKey: HHCLUB_PASSKEY + labelZh: hhclub 密钥 + labelEn: hhclub passkay + required: false + type: password + - default: "" + edit: true + envKey: AUDIENCES_UID + labelZh: audiences 用户ID + labelEn: audiences username + required: false + type: text + - default: "" + edit: true + envKey: AUDIENCES_PASSKEY + labelZh: audiences 密钥 + labelEn: audiences passkay + required: false + type: password + - default: "" + edit: true + envKey: HDDOLBY_ID + labelZh: hddolby 用户ID + labelEn: hddolby username + required: false + type: text + - default: "" + edit: true + envKey: HDDOLBY_PASSKEY + labelZh: hddolby 密钥 + labelEn: hddolby passkay + required: false + type: password + - default: "" + edit: true + envKey: ZMPT_UID + labelZh: zmpt 用户ID + labelEn: zmpt username + required: false + type: text + - default: "" + edit: true + envKey: ZMPT_PASSKEY + labelZh: zmpt 密钥 + labelEn: zmpt passkay + required: false + type: password + - default: "" + edit: true + envKey: FREEFARM_UID + labelZh: freefarm 用户ID + labelEn: freefarm username + required: false + type: text + - default: "" + edit: true + envKey: FREEFARM_PASSKEY + labelZh: freefarm 密钥 + labelEn: freefarm passkay + required: false + type: password + - default: "" + edit: true + envKey: HDFANS_UID + labelZh: hdfans 用户ID + labelEn: hdfans username + required: false + type: text + - default: "" + edit: true + envKey: HDFANS_PASSKEY + labelZh: hdfans 密钥 + labelEn: hdfans passkay + required: false + type: password + - default: "" + edit: true + envKey: WINTERSAKURA_UID + labelZh: wintersakura 用户ID + labelEn: wintersakura username + required: false + type: text + - default: "" + edit: true + envKey: WINTERSAKURA_PASSKEY + labelZh: wintersakura 密钥 + labelEn: wintersakura passkay + required: false + type: password + - default: "" + edit: true + envKey: LEAVES_UID + labelZh: leaves 用户ID + labelEn: leaves username + required: false + type: text + - default: "" + edit: true + envKey: LEAVES_PASSKEY + labelZh: leaves 密钥 + labelEn: leaves passkay + required: false + type: password + - default: "" + edit: true + envKey: PTBA_UID + labelZh: ptba 用户ID + labelEn: ptba username + required: false + type: text + - default: "" + edit: true + envKey: PTBA_PASSKEY + labelZh: ptba 密钥 + labelEn: ptba passkay + required: false + type: password + - default: "" + edit: true + envKey: ICC2022_UID + labelZh: icc2022 用户ID + labelEn: icc2022 username + required: false + type: text + - default: "" + edit: true + envKey: ICC2022_PASSKEY + labelZh: icc2022 密钥 + labelEn: icc2022 passkay + required: false + type: password + - default: "" + edit: true + envKey: XINGTAN_UID + labelZh: xingtan 用户ID + labelEn: xingtan username + required: false + type: text + - default: "" + edit: true + envKey: XINGTAN_PASSKEY + labelZh: xingtan 密钥 + labelEn: xingtan passkay + required: false + type: password + - default: "" + edit: true + envKey: PTVICOMO_UID + labelZh: ptvicomo 用户ID + labelEn: ptvicomo username + required: false + type: text + - default: "" + edit: true + envKey: PTVICOMO_PASSKEY + labelZh: ptvicomo 密钥 + labelEn: ptvicomo passkay + required: false + type: password + - default: "" + edit: true + envKey: AGSVPT_UID + labelZh: agsvpt 用户ID + labelEn: agsvpt username + required: false + type: text + - default: "" + edit: true + envKey: AGSVPT_PASSKEY + labelZh: agsvpt 密钥 + labelEn: agsvpt passkay + required: false + type: password + - default: "" + edit: true + envKey: HDKYL_UID + labelZh: hdkyl 用户ID + labelEn: hdkyl username + required: false + type: text + - default: "" + edit: true + envKey: HDKYL_PASSKEY + labelZh: hdkyl 密钥 + labelEn: hdkyl passkay + required: false + type: password + - default: "" + edit: true + envKey: QINGWA_UID + labelZh: qingwa 用户ID + labelEn: qingwa username + required: false + type: text + - default: "" + edit: true + envKey: QINGWA_PASSKEY + labelZh: qingwa 密钥 + labelEn: qingwa passkay + required: false + type: password + - default: "" + edit: true + envKey: DISCFAN_UID + labelZh: discfan 用户ID + labelEn: discfan username + required: false + type: text + - default: "" + edit: true + envKey: DISCFAN_PASSKEY + labelZh: discfan 密钥 + labelEn: discfan passkay + required: false + type: password + - default: "" + edit: true + envKey: ROUSI_UID + labelZh: rousi 用户ID + labelEn: rousi username + required: false + type: text + - default: "" + edit: true + envKey: ROUSI_PASSKEY + labelZh: rousi 密钥 + labelEn: rousi passkay + required: false + type: password diff --git a/appstore/movie-pilot/1.9.17/docker-compose.yml b/appstore/movie-pilot/1.9.17/docker-compose.yml new file mode 100644 index 00000000..1e72340a --- /dev/null +++ b/appstore/movie-pilot/1.9.17/docker-compose.yml @@ -0,0 +1,37 @@ +networks: + 1panel-network: + external: true +services: + movie-pilot: + container_name: movie-pilot + env_file: + - ./envs/global.env + - ./envs/movie-pilot.env + - .env + environment: + - NGINX_PORT=3000 + - PORT=3001 + - PUID=0 + - PGID=0 + - UMASK=022 + image: jxxghp/moviepilot:1.9.17 + labels: + createdBy: Apps + logging: + driver: json-file + options: + max-size: 5m + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + - ${PANEL_APP_PORT_API}:3001 + restart: always + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ${MOVIEPILOT_ROOT_PATH}/config:/config + - ${MOVIEPILOT_ROOT_PATH}/moviepilot:/moviepilot + - ${MOVIEPILOT_ROOT_PATH}/download:/download + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/movie-pilot/1.9.17/envs/default.env b/appstore/movie-pilot/1.9.17/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/movie-pilot/1.9.17/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/movie-pilot/1.9.17/envs/global.env b/appstore/movie-pilot/1.9.17/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/movie-pilot/1.9.17/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/movie-pilot/1.9.17/envs/movie-pilot.env b/appstore/movie-pilot/1.9.17/envs/movie-pilot.env new file mode 100644 index 00000000..d244ac86 --- /dev/null +++ b/appstore/movie-pilot/1.9.17/envs/movie-pilot.env @@ -0,0 +1,53 @@ +####################################################################### +# 【*】为必配项,其余为选配项,选配项可以删除整项配置项或者保留配置默认值 # +####################################################################### +# 【*】API监听地址(注意不是前端访问地址) +HOST=0.0.0.0 +# 是否调试模式,打开后将输出更多日志 +DEBUG=false +# 是否开发模式,打开后后台服务将不会启动 +DEV=false +# 【*】超级管理员,设置后一但重启将固化到数据库中,修改将无效(初始化超级管理员密码仅会生成一次,请在日志中查看并自行登录系统修改) +SUPERUSER=admin +# 大内存模式,开启后会增加缓存数量,但会占用更多内存 +BIG_MEMORY_MODE=false +# 是否启用DOH域名解析,启用后对于api.themovie.org等域名通过DOH解析,避免域名DNS被污染 +DOH_ENABLE=true +# 元数据识别缓存过期时间,数字型,单位小时,0为系统默认(大内存模式为7天,滞则为3天),调大该值可减少themoviedb的访问次数 +META_CACHE_EXPIRE=0 +# 自动检查和更新站点资源包(索引、认证等) +AUTO_UPDATE_RESOURCE=true +# 【*】API密钥,建议更换复杂字符串,有Jellyseerr/Overseerr、媒体服务器Webhook等配置以及部分支持API_TOKEN的API中使用 +API_TOKEN=moviepilot +# 登录页面电影海报,tmdb/bing,tmdb要求能正常连接api.themoviedb.org +WALLPAPER=tmdb +# TMDB图片地址,无需修改需保留默认值,如果默认地址连通性不好可以尝试修改为:`static-mdb.v.geilijiasu.com` +TMDB_IMAGE_DOMAIN=image.tmdb.org +# TMDB API地址,无需修改需保留默认值,也可配置为`api.tmdb.org`或其它中转代理服务地址,能连通即可 +TMDB_API_DOMAIN=api.themoviedb.org +# 媒体识别来源 themoviedb/douban,使用themoviedb时需要确保能正常连接api.themoviedb.org,使用douban时不支持二级分类 +RECOGNIZE_SOURCE=themoviedb +# Fanart开关 +FANART_ENABLE=true +# 新增已入库媒体是否跟随TMDB信息变化,true/false,为false时即使TMDB信息变化时也会仍然按历史记录中已入库的信息进行刮削 +SCRAP_FOLLOW_TMDB=true +# 刮削来源 themoviedb/douban,使用themoviedb时需要确保能正常连接api.themoviedb.org,使用douban时会缺失部分信息 +SCRAP_SOURCE=themoviedb +# 电影重命名格式,Jinja2语法,参考:https://jinja.palletsprojects.com/en/3.0.x/templates/ +MOVIE_RENAME_FORMAT={{title}}{% if year %} ({{year}}){% endif %}/{{title}}{% if year %} ({{year}}){% endif %}{% if part %}-{{part}}{% endif %}{% if videoFormat %} - {{videoFormat}}{% endif %}{{fileExt}} +# 电视剧重命名格式,Jinja2语法,参考:https://jinja.palletsprojects.com/en/3.0.x/templates/ +TV_RENAME_FORMAT={{title}}{% if year %} ({{year}}){% endif %}/Season {{season}}/{{title}} - {{season_episode}}{% if part %}-{{part}}{% endif %}{% if episode %} - 第 {{episode}} 集{% endif %}{{fileExt}} +# 交互搜索自动下载用户ID(消息通知渠道的用户ID),使用,分割,设置为 all 代表所有用户自动择优下载,未设置需要用户手动选择资源或者回复`0`才自动择优下载 +AUTO_DOWNLOAD_USER= +# 自动下载站点字幕(如有) +DOWNLOAD_SUBTITLE=true +# OCR服务器地址 +OCR_HOST=https://movie-pilot.org +# 插件市场仓库地址,多个地址使用`,`分隔,保留最后的/ +PLUGIN_MARKET=https://github.com/jxxghp/MoviePilot-Plugins,https://github.com/thsrite/MoviePilot-Plugins,https://github.com/InfinityPacer/MoviePilot-Plugins,https://github.com/honue/MoviePilot-Plugins +# 搜索多个名称,true/false,为true时搜索时会同时搜索中英文及原始名称,搜索结果会更全面,但会增加搜索时间;为false时其中一个名称搜索到结果或全部名称搜索完毕即停止 +SEARCH_MULTIPLE_NAME=true + + +# 自定义配置 +AUTH_SITE="iyuu,hhclub,audiences,hddolby,zmpt,freefarm,hdfans,wintersakura,leaves,ptba,icc2022,xingtan,ptvicomo,agsvpt,hdkyl,qingwa,discfan,haidan,rousi" diff --git a/appstore/movie-pilot/1.9.17/scripts/init.sh b/appstore/movie-pilot/1.9.17/scripts/init.sh new file mode 100644 index 00000000..118f924a --- /dev/null +++ b/appstore/movie-pilot/1.9.17/scripts/init.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/movie-pilot.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/movie-pilot/1.9.17/scripts/uninstall.sh b/appstore/movie-pilot/1.9.17/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/movie-pilot/1.9.17/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/movie-pilot/1.9.17/scripts/upgrade.sh b/appstore/movie-pilot/1.9.17/scripts/upgrade.sh new file mode 100644 index 00000000..84793ac8 --- /dev/null +++ b/appstore/movie-pilot/1.9.17/scripts/upgrade.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/movie-pilot.env" >> .env + + echo "Check Finish." +else + echo "Error: .env file not found." +fi diff --git a/appstore/movie-pilot/2.1.0/.env b/appstore/movie-pilot/2.1.0/.env new file mode 100644 index 00000000..f2b00857 --- /dev/null +++ b/appstore/movie-pilot/2.1.0/.env @@ -0,0 +1,33 @@ +# 数据持久化路径 [必填] +MOVIEPILOT_ROOT_PATH=/home/movie-pilot + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# API 端口 [必填] +PANEL_APP_PORT_API=3001 + +# 管理员用户名 [必填] +SUPERUSER=admin + +# API 令牌 [必填] +API_TOKEN=moviepilot + +# 网络代理 +PROXY_HOST= + +# 自动更新资源包 [必填] +AUTO_UPDATE_RESOURCE=false + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + +# IYUU登录令牌 +IYUU_SIGN= + diff --git a/appstore/movie-pilot/2.1.0/data.yml b/appstore/movie-pilot/2.1.0/data.yml new file mode 100644 index 00000000..ab72aa92 --- /dev/null +++ b/appstore/movie-pilot/2.1.0/data.yml @@ -0,0 +1,87 @@ +additionalProperties: + formFields: + - default: "/home/movie-pilot" + edit: true + envKey: MOVIEPILOT_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI Port + required: true + rule: paramPort + type: number + - default: 3001 + edit: true + envKey: PANEL_APP_PORT_API + labelZh: API 端口 + labelEn: API Port + required: true + rule: paramPort + type: number + - default: "admin" + edit: true + envKey: SUPERUSER + labelZh: 管理员用户名 + labelEn: Superuser Username + required: true + type: text + - default: "moviepilot" + edit: true + envKey: API_TOKEN + labelZh: API 令牌 + labelEn: API Token + required: true + type: password + - default: "" + edit: true + envKey: PROXY_HOST + labelZh: 网络代理 + labelEn: Proxy Host + required: false + rule: paramExtUrl + type: text + - default: "false" + edit: true + envKey: AUTO_UPDATE_RESOURCE + labelZh: 自动更新资源包 + labelEn: Auto Update Resources + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 关闭 + value: "false" + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text + - default: "" + edit: true + envKey: IYUU_SIGN + labelEn: IYUU Sign + labelZh: IYUU登录令牌 + required: false + type: password diff --git a/appstore/movie-pilot/2.1.0/docker-compose.yml b/appstore/movie-pilot/2.1.0/docker-compose.yml new file mode 100644 index 00000000..8d788b9e --- /dev/null +++ b/appstore/movie-pilot/2.1.0/docker-compose.yml @@ -0,0 +1,39 @@ +networks: + 1panel-network: + external: true +services: + movie-pilot-v2: + container_name: movie-pilot + env_file: + - ./envs/global.env + - ./envs/movie-pilot.env + - .env + environment: + - NGINX_PORT=3000 + - PORT=3001 + - PUID=0 + - PGID=0 + - UMASK=022 + - HTTP_PROXY=${PROXY_HOST} + - HTTPS_PROXY=${PROXY_HOST} + image: jxxghp/moviepilot-v2:2.1.0 + labels: + createdBy: Apps + logging: + driver: json-file + options: + max-size: 5m + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + - ${PANEL_APP_PORT_API}:3001 + restart: always + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ${MOVIEPILOT_ROOT_PATH}/config:/config + - ${MOVIEPILOT_ROOT_PATH}/moviepilot:/moviepilot + - ${MOVIEPILOT_ROOT_PATH}/download:/download + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/movie-pilot/2.1.0/envs/default.env b/appstore/movie-pilot/2.1.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/movie-pilot/2.1.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/movie-pilot/2.1.0/envs/global.env b/appstore/movie-pilot/2.1.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/movie-pilot/2.1.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/movie-pilot/2.1.0/envs/movie-pilot.env b/appstore/movie-pilot/2.1.0/envs/movie-pilot.env new file mode 100644 index 00000000..78ba50bf --- /dev/null +++ b/appstore/movie-pilot/2.1.0/envs/movie-pilot.env @@ -0,0 +1,63 @@ +####################################################################### +# 【*】为必配项,其余为选配项,选配项可以删除整项配置项或者保留配置默认值 # +####################################################################### +# 【*】API监听地址(注意不是前端访问地址) +HOST=0.0.0.0 +# 是否调试模式,打开后将输出更多日志 +DEBUG=false +# 是否开发模式,打开后后台服务将不会启动 +DEV=false +# 日志级别(DEBUG、INFO、WARNING、ERROR等),当DEBUG=true时,此配置项将被忽略,日志级别始终为DEBUG +LOG_LEVEL=INFO +# 数据库连接池的大小,可适当降低如20-50以减少I/O压力 +DB_POOL_SIZE=100 +# 数据库连接池最大溢出连接数,可适当降低如0以减少I/O压力 +DB_MAX_OVERFLOW=500 +# SQLite 的 busy_timeout 参数,可适当增加如180以减少锁定错误 +DB_TIMEOUT=60 +# 【*】超级管理员,设置后一但重启将固化到数据库中,修改将无效(初始化超级管理员密码仅会生成一次,请在日志中查看并自行登录系统修改) +SUPERUSER=admin +# 辅助认证,允许通过外部服务进行认证、单点登录以及自动创建用户 +AUXILIARY_AUTH_ENABLE=false +# 大内存模式,开启后会增加缓存数量,但会占用更多内存 +BIG_MEMORY_MODE=false +# 是否启用DOH域名解析,启用后对于api.themovie.org等域名通过DOH解析,避免域名DNS被污染 +DOH_ENABLE=true +# 使用 DOH 解析的域名列表,多个域名使用`,`分隔 +DOH_DOMAINS=api.themoviedb.org,api.tmdb.org,webservice.fanart.tv,api.github.com,github.com,raw.githubusercontent.com,api.telegram.org +# DOH 解析服务器列表,多个服务器使用`,`分隔 +DOH_RESOLVERS=1.0.0.1,1.1.1.1,9.9.9.9,149.112.112.112 +# 元数据识别缓存过期时间,数字型,单位小时,0为系统默认(大内存模式为7天,滞则为3天),调大该值可减少themoviedb的访问次数 +META_CACHE_EXPIRE=0 +# 自动检查和更新站点资源包(索引、认证等) +AUTO_UPDATE_RESOURCE=true +# 【*】API密钥,未设置时系统将随机生成,建议使用复杂字符串,用于Jellyseerr/Overseerr、媒体服务器Webhook等配置以及部分支持API_TOKEN的API请求 +API_TOKEN='' +# 登录页面电影海报,tmdb/bing/mediaserver,tmdb要求能正常连接api.themoviedb.org +WALLPAPER=tmdb +# TMDB图片地址,无需修改需保留默认值,如果默认地址连通性不好可以尝试修改为:`static-mdb.v.geilijiasu.com` +TMDB_IMAGE_DOMAIN=image.tmdb.org +# TMDB API地址,无需修改需保留默认值,也可配置为`api.tmdb.org`或其它中转代理服务地址,能连通即可 +TMDB_API_DOMAIN=api.themoviedb.org +# 媒体识别来源 themoviedb/douban,使用themoviedb时需要确保能正常连接api.themoviedb.org,使用douban时不支持二级分类 +RECOGNIZE_SOURCE=themoviedb +# Fanart开关 +FANART_ENABLE=true +# 新增已入库媒体是否跟随TMDB信息变化,true/false,为false时即使TMDB信息变化时也会仍然按历史记录中已入库的信息进行刮削 +SCRAP_FOLLOW_TMDB=true +# 刮削来源 themoviedb/douban,使用themoviedb时需要确保能正常连接api.themoviedb.org,使用douban时会缺失部分信息 +SCRAP_SOURCE=themoviedb +# 电影重命名格式,Jinja2语法,参考:https://jinja.palletsprojects.com/en/3.0.x/templates/ +MOVIE_RENAME_FORMAT={{title}}{% if year %} ({{year}}){% endif %}/{{title}}{% if year %} ({{year}}){% endif %}{% if part %}-{{part}}{% endif %}{% if videoFormat %} - {{videoFormat}}{% endif %}{{fileExt}} +# 电视剧重命名格式,Jinja2语法,参考:https://jinja.palletsprojects.com/en/3.0.x/templates/ +TV_RENAME_FORMAT={{title}}{% if year %} ({{year}}){% endif %}/Season {{season}}/{{title}} - {{season_episode}}{% if part %}-{{part}}{% endif %}{% if episode %} - 第 {{episode}} 集{% endif %}{{fileExt}} +# 交互搜索自动下载用户ID(消息通知渠道的用户ID),使用,分割,设置为 all 代表所有用户自动择优下载,未设置需要用户手动选择资源或者回复`0`才自动择优下载 +AUTO_DOWNLOAD_USER= +# 自动下载站点字幕(如有) +DOWNLOAD_SUBTITLE=true +# OCR服务器地址 +OCR_HOST=https://movie-pilot.org +# 插件市场仓库地址,多个地址使用`,`分隔,保留最后的/ +PLUGIN_MARKET=https://github.com/jxxghp/MoviePilot-Plugins,https://github.com/thsrite/MoviePilot-Plugins,https://github.com/InfinityPacer/MoviePilot-Plugins,https://github.com/honue/MoviePilot-Plugins +# 搜索多个名称,true/false,为true时搜索时会同时搜索中英文及原始名称,搜索结果会更全面,但会增加搜索时间;为false时其中一个名称搜索到结果或全部名称搜索完毕即停止 +SEARCH_MULTIPLE_NAME=true diff --git a/appstore/movie-pilot/2.1.0/scripts/init.sh b/appstore/movie-pilot/2.1.0/scripts/init.sh new file mode 100644 index 00000000..118f924a --- /dev/null +++ b/appstore/movie-pilot/2.1.0/scripts/init.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/movie-pilot.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/movie-pilot/2.1.0/scripts/uninstall.sh b/appstore/movie-pilot/2.1.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/movie-pilot/2.1.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/movie-pilot/2.1.0/scripts/upgrade.sh b/appstore/movie-pilot/2.1.0/scripts/upgrade.sh new file mode 100644 index 00000000..84793ac8 --- /dev/null +++ b/appstore/movie-pilot/2.1.0/scripts/upgrade.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/movie-pilot.env" >> .env + + echo "Check Finish." +else + echo "Error: .env file not found." +fi diff --git a/appstore/movie-pilot/README.md b/appstore/movie-pilot/README.md new file mode 100644 index 00000000..95ea57e2 --- /dev/null +++ b/appstore/movie-pilot/README.md @@ -0,0 +1,127 @@ +# MoviePilot + +MoviePilot 基于 NAStool 部分代码重新设计,聚焦自动化核心需求,减少问题同时更易于扩展和维护 + +> 仪表盘 + +![MoviePilot-Dashboard](https://file.lifebus.top/imgs/movie_pilot_cover.png) + +> 插件库 + +![MoviePilot-Plugin](https://file.lifebus.top/imgs/movie_pilot_plugin.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 安装环境 + +安装前的准备说明 + +### 网络 + +MoviePilot通过调用 TheMovieDb 的Api来读取和匹配媒体元数据,通过访问 Github 来执行程序升级、安装插件等。 + +### Linux 系统 + +部分功能基于文件系统监控实现(如目录监控等),监控的文件较多时,往往会因为操作系统默认允许的文件句柄数太小导致报错,相关功能失效。 +需在宿主机操作系统上(不是docker容器内)执行以下命令并重启生效: + +```shell +echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf +echo fs.inotify.max_user_instances=524288 | sudo tee -a /etc/sysctl.conf +sudo sysctl -p +``` + +### 站点 + +MoviePilot包括两大部分功能:文件整理刮削、资源订阅下载,其中资源订阅下载功能需要有可用的PT站点。 + +#### 用户认证 + +为了控制用户数量避免大规范泛滥使用,MoviePilot引入了PT用户认证机制,你需要有认证站点范围内的账号才能使用软件的资源搜索、订阅及下载功能,出此下策与利益无关,属NAStool一路走来,吸取失败经验的无奈之举。 + +> 站点配置参数 +> +> 安装应用时(除IYUU外),填写格式为 参数名=值,例如: +> +> `HHCLUB_USERNAME=xxxxx` +> +> `HHCLUB_PASSKEY=xxxxx` + +| 站点 | 用户名(用户ID) | 密钥(授权码) | +|:------------:|:------------------:|------------------------| +| iyuu | `IYUU_SIGN` | `无` | +| hhclub | `HHCLUB_USERNAME` | `HHCLUB_PASSKEY` | +| audiences | `AUDIENCES_UID` | `AUDIENCES_PASSKEY` | +| hddolby | `HDDOLBY_ID` | `HDDOLBY_PASSKEY` | +| zmpt | `ZMPT_UID` | `ZMPT_PASSKEY` | +| freefarm | `FREEFARM_UID` | `FREEFARM_PASSKEY` | +| hdfans | `HDFANS_UID` | `HDFANS_PASSKEY` | +| wintersakura | `WINTERSAKURA_UID` | `WINTERSAKURA_PASSKEY` | +| leaves | `LEAVES_UID` | `LEAVES_PASSKEY` | +| ptba | `PTBA_UID` | `PTBA_PASSKEY` | +| icc2022 | `ICC2022_UID` | `ICC2022_PASSKEY` | +| xingtan | `XINGTAN_UID` | `XINGTAN_PASSKEY` | +| ptvicomo | `PTVICOMO_UID` | `PTVICOMO_PASSKEY` | +| agsvpt | `AGSVPT_UID` | `AGSVPT_PASSKEY` | +| hdkyl | `HDKYL_UID` | `HDKYL_PASSKEY` | +| qingwa | `QINGWA_UID` | `QINGWA_PASSKEY` | +| discfan | `DISCFAN_UID` | `DISCFAN_PASSKEY` | + +### 配套软件 + +MoviePilot只是媒体库自动化管理的一环,需要通过调用下载器来完成资源的下载,需要通过媒体服务器来管理和展示媒体资源,同时通过媒体服务器Api来查询库存情况控制重复下载,通过CookieCloud来快速同步站点Cookie和新增站点。安装前需要先完成配套软件的安装。 + +#### 下载器 + ++ Qbittorrent `^4.3.9` ++ Transmission `^3.0` + +#### 媒体服务器 + ++ Emby `^4.8.0.45` ++ Jellyfin `新版` ++ Plex `新版` + +#### CookieCloud + ++ CookieCloud服务端 `可选` + +MoviePilot已经内置了CookieCloud服务端,如需独立安装可参考 easychen/CookieCloud 说明 + ++ CookieCloud浏览器插件 + +不管是使用CookieCloud独立服务端还是使用内置服务,都需要安装浏览器插件。 + +## 安装说明 + ++ 用户初始密码 + +前往 `日志` 页面查看初始密码,首次登录后请及时修改密码 + +## 反向代理 + +如需开启域名访问MoviePilot,则需要搭建反向代理服务。以nginx为例,需要添加以下配置项。 + +```nginx +location / { + proxy_pass http://${Host}:${Port}; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; +} +``` + +反向代理使用SSL时,还需要开启http2,否则会导致日志加载时间过长或不可用。 + +```nginx +server { + listen 443 ssl; + http2 on; + # other settings +} +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/movie-pilot/data.yml b/appstore/movie-pilot/data.yml new file mode 100644 index 00000000..616001b5 --- /dev/null +++ b/appstore/movie-pilot/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: movie-pilot + name: MoviePilot + tags: + - WebSite + - Local + shortDescZh: NAS媒体库自动化管理工具 + shortDescEn: NAS media library automation management tool + type: website + crossVersionUpdate: false + limit: 0 + website: https://github.com/jxxghp/MoviePilot/ + github: https://github.com/jxxghp/MoviePilot/ + document: https://wiki.movie-pilot.org/ diff --git a/appstore/movie-pilot/logo.png b/appstore/movie-pilot/logo.png new file mode 100644 index 00000000..f85c5121 Binary files /dev/null and b/appstore/movie-pilot/logo.png differ diff --git a/appstore/mysql/5.7.44/.env b/appstore/mysql/5.7.44/.env new file mode 100644 index 00000000..1706799c --- /dev/null +++ b/appstore/mysql/5.7.44/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +MYSQL_ROOT_PATH=/home/mysql + +# 连接端口 [必填] +PANEL_APP_PORT_HTTP=3306 + +# 管理员密码 [必填] +MYSQL_ROOT_PASSWORD= + diff --git a/appstore/mysql/5.7.44/config/my.cnf b/appstore/mysql/5.7.44/config/my.cnf new file mode 100644 index 00000000..6d6e1a93 --- /dev/null +++ b/appstore/mysql/5.7.44/config/my.cnf @@ -0,0 +1,42 @@ +# For advice on how to change settings please see +# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html + +[mysqld] +# +# Remove leading # and set to the amount of RAM for the most important data +# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. +# innodb_buffer_pool_size = 128M +# +# Remove leading # to turn on a very important data integrity option: logging +# changes to the binary log between backups. +# log_bin +# +# Remove leading # to set options mainly useful for reporting servers. +# The server defaults are faster for transactions and fast SELECTs. +# Adjust sizes as needed, experiment to find the optimal values. +# join_buffer_size = 128M +# sort_buffer_size = 2M +# read_rnd_buffer_size = 2M +skip-host-cache +skip-name-resolve +datadir=/var/lib/mysql +socket=/var/run/mysqld/mysqld.sock +secure-file-priv=/var/lib/mysql-files +user=mysql + +# Disabling symbolic-links is recommended to prevent assorted security risks +symbolic-links=0 + +#log-error=/var/log/mysqld.log +pid-file=/var/run/mysqld/mysqld.pid + +max_allowed_packet=64M +character_set_server=utf8mb4 +lower_case_table_names=1 +group_concat_max_len=1024000 + +[client] +socket=/var/run/mysqld/mysqld.sock + +!includedir /etc/mysql/conf.d/ +!includedir /etc/mysql/mysql.conf.d/ diff --git a/appstore/mysql/5.7.44/data.yml b/appstore/mysql/5.7.44/data.yml new file mode 100644 index 00000000..b5a36428 --- /dev/null +++ b/appstore/mysql/5.7.44/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: "/home/mysql" + edit: true + envKey: MYSQL_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3306 + envKey: PANEL_APP_PORT_HTTP + labelZh: 连接端口 + labelEn: Connection Port + required: true + rule: paramPort + type: number + - default: "" + envKey: MYSQL_ROOT_PASSWORD + labelZh: 管理员密码 + labelEn: Admin Password + random: true + required: true + rule: paramComplexity + type: password diff --git a/appstore/mysql/5.7.44/docker-compose.yml b/appstore/mysql/5.7.44/docker-compose.yml new file mode 100644 index 00000000..5cac14f4 --- /dev/null +++ b/appstore/mysql/5.7.44/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + mysql: + command: + - --character-set-server=utf8mb4 + - --lower_case_table_names=1 + - --collation-server=utf8mb4_general_ci + - --explicit_defaults_for_timestamp=true + container_name: mysql + env_file: + - ./envs/global.env + - .env + image: mysql:5.7.44 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3306 + restart: always + user: 1000:1000 + volumes: + - ${MYSQL_ROOT_PATH}/data/:/var/lib/mysql + - ${MYSQL_ROOT_PATH}/config/my.cnf:/etc/mysql/my.cnf + - ${MYSQL_ROOT_PATH}/log:/var/log/mysql + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro diff --git a/appstore/mysql/5.7.44/envs/default.env b/appstore/mysql/5.7.44/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/mysql/5.7.44/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/mysql/5.7.44/envs/global.env b/appstore/mysql/5.7.44/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/mysql/5.7.44/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/mysql/5.7.44/scripts/init.sh b/appstore/mysql/5.7.44/scripts/init.sh new file mode 100644 index 00000000..1cdd90c2 --- /dev/null +++ b/appstore/mysql/5.7.44/scripts/init.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + mkdir -p "$MYSQL_ROOT_PATH" + mkdir -p "$MYSQL_ROOT_PATH/config" + mkdir -p "$MYSQL_ROOT_PATH/data" + mkdir -p "$MYSQL_ROOT_PATH/log" + + cp ./config/my.cnf "$MYSQL_ROOT_PATH/config/my.cnf" + + chown -R 1000:1000 "$MYSQL_ROOT_PATH" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mysql/5.7.44/scripts/uninstall.sh b/appstore/mysql/5.7.44/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/mysql/5.7.44/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mysql/5.7.44/scripts/upgrade.sh b/appstore/mysql/5.7.44/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/mysql/5.7.44/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mysql/8.4.3/.env b/appstore/mysql/8.4.3/.env new file mode 100644 index 00000000..1706799c --- /dev/null +++ b/appstore/mysql/8.4.3/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +MYSQL_ROOT_PATH=/home/mysql + +# 连接端口 [必填] +PANEL_APP_PORT_HTTP=3306 + +# 管理员密码 [必填] +MYSQL_ROOT_PASSWORD= + diff --git a/appstore/mysql/8.4.3/config/my.cnf b/appstore/mysql/8.4.3/config/my.cnf new file mode 100644 index 00000000..c53ca32d --- /dev/null +++ b/appstore/mysql/8.4.3/config/my.cnf @@ -0,0 +1,20 @@ +[mysqld] +host_cache_size=0 +skip-name-resolve +datadir=/var/lib/mysql +socket=/var/run/mysqld/mysqld.sock +user=mysql + +mysql_native_password=ON +character_set_server=utf8mb4 +collation_server=utf8mb4_unicode_ci +lower_case_table_names=1 +group_concat_max_len=1024000 +log_bin_trust_function_creators=1 + +secure_file_priv= +pid_file=/var/run/mysqld/mysqld.pid +[client] +socket=/var/run/mysqld/mysqld.sock + +!includedir /etc/mysql/conf.d/ diff --git a/appstore/mysql/8.4.3/data.yml b/appstore/mysql/8.4.3/data.yml new file mode 100644 index 00000000..b5a36428 --- /dev/null +++ b/appstore/mysql/8.4.3/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: "/home/mysql" + edit: true + envKey: MYSQL_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3306 + envKey: PANEL_APP_PORT_HTTP + labelZh: 连接端口 + labelEn: Connection Port + required: true + rule: paramPort + type: number + - default: "" + envKey: MYSQL_ROOT_PASSWORD + labelZh: 管理员密码 + labelEn: Admin Password + random: true + required: true + rule: paramComplexity + type: password diff --git a/appstore/mysql/8.4.3/docker-compose.yml b/appstore/mysql/8.4.3/docker-compose.yml new file mode 100644 index 00000000..12a1d98e --- /dev/null +++ b/appstore/mysql/8.4.3/docker-compose.yml @@ -0,0 +1,28 @@ +networks: + 1panel-network: + external: true +services: + mysql: + command: + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci + - --mysql-native-password=ON + container_name: mysql + env_file: + - ./envs/global.env + - .env + image: mysql:8.4.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3306 + restart: always + user: 1000:1000 + volumes: + - ${MYSQL_ROOT_PATH}/data:/var/lib/mysql + - ${MYSQL_ROOT_PATH}/config/my.cnf:/etc/my.cnf + - ${MYSQL_ROOT_PATH}/log:/var/log/mysql + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro diff --git a/appstore/mysql/8.4.3/envs/default.env b/appstore/mysql/8.4.3/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/mysql/8.4.3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/mysql/8.4.3/envs/global.env b/appstore/mysql/8.4.3/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/mysql/8.4.3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/mysql/8.4.3/scripts/init.sh b/appstore/mysql/8.4.3/scripts/init.sh new file mode 100644 index 00000000..1cdd90c2 --- /dev/null +++ b/appstore/mysql/8.4.3/scripts/init.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + mkdir -p "$MYSQL_ROOT_PATH" + mkdir -p "$MYSQL_ROOT_PATH/config" + mkdir -p "$MYSQL_ROOT_PATH/data" + mkdir -p "$MYSQL_ROOT_PATH/log" + + cp ./config/my.cnf "$MYSQL_ROOT_PATH/config/my.cnf" + + chown -R 1000:1000 "$MYSQL_ROOT_PATH" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mysql/8.4.3/scripts/uninstall.sh b/appstore/mysql/8.4.3/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/mysql/8.4.3/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mysql/8.4.3/scripts/upgrade.sh b/appstore/mysql/8.4.3/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/mysql/8.4.3/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/mysql/README.md b/appstore/mysql/README.md new file mode 100644 index 00000000..3dd46ce2 --- /dev/null +++ b/appstore/mysql/README.md @@ -0,0 +1,24 @@ +# MySQL + +![MySQL](https://file.lifebus.top/imgs/mysql_logo.svg) + +MySQL 是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于Oracle 公司。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。 ++ 支持AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell NetWare、NetBSD、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统。 ++ 为多种编程语言提供了API。这些編程语言包括C、C++、C#、VB.NET、Delphi、Eiffel、Java、Perl、PHP、Python、Ruby和Tcl等。 ++ 支持多线程,充分利用CPU资源,支持多用户。 ++ 优化的SQL查询算法,有效地提高查询速度。 ++ 既能够作为一个单独的应用程序在客户端服务器网络环境中执行,也能够作为一个程序库而嵌入到其他的软件中。 ++ 提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift JIS等都可以用作数据表名和数据列名。 ++ 提供TCP/IP、ODBC和JDBC等多种数据库连接途径。 ++ 提供用于管理、检查、優化数据库操作的管理工具。 ++ 可以处理拥有上千万条记录的大型数据库。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/mysql/data.yml b/appstore/mysql/data.yml new file mode 100644 index 00000000..6aa38b1e --- /dev/null +++ b/appstore/mysql/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: mysql + name: MySQL + tags: + - Database + - Local + shortDescZh: 开源关系型数据库 + shortDescEn: Open source relational database management system + type: runtime + crossVersionUpdate: true + limit: 0 + website: https://www.mysql.com/ + github: https://github.com/mysql/mysql-server/ + document: https://dev.mysql.com/doc/ diff --git a/appstore/mysql/logo.png b/appstore/mysql/logo.png new file mode 100644 index 00000000..269640f5 Binary files /dev/null and b/appstore/mysql/logo.png differ diff --git a/appstore/nacos/2.4.3/.env b/appstore/nacos/2.4.3/.env new file mode 100644 index 00000000..25c02493 --- /dev/null +++ b/appstore/nacos/2.4.3/.env @@ -0,0 +1,66 @@ +# MySQL 服务 (前置检查) [必填] +PANEL_DB_TYPE=mysql + +# 网络模式 [必填] +NETWORK_MODE=host + +# 数据持久化路径 [必填] +NACOS_ROOT_PATH=/home/nacos + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8848 + +# Nacos gRPC 客户端端口 [必填] +PANEL_APP_PORT_GRPC_CLIENT=9848 + +# Nacos gRPC 服务端端口 [必填] +PANEL_APP_PORT_GRPC_SERVER=9849 + +# IP模式/域名模式 [必填] +PREFER_HOST_MODE=ip + +# 服务IP [必填] +NACOS_SERVER_IP= + +# Nacos身份验证密钥键 [必填] +NACOS_AUTH_IDENTITY_KEY=serverIdentity + +# Nacos身份验证密钥值 [必填] +NACOS_AUTH_IDENTITY_VALUE=security + +# Nacos身份验证令牌(至少32位字符的Base64编码) [必填] +NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 + +# JVM_XMS (初始内存大小) [必填] +JVM_XMS=512m + +# JVM_XMX (最大内存大小) [必填] +JVM_XMX=2g + +# JVM_XMN (新生代内存) [必填] +JVM_XMN=128m + +# JVM_MS (初始元空间大小) [必填] +JVM_MS=128m + +# JVM_MMS (最大元空间大小) [必填] +JVM_MMS=320m + +# 数据库 主机 [必填] +MYSQL_SERVICE_HOST=127.0.0.1 + +# 数据库 端口 [必填] +MYSQL_SERVICE_PORT=3306 + +# 数据库 用户名 [必填] +MYSQL_SERVICE_USER=nacos + +# 数据库 密码 [必填] +MYSQL_SERVICE_PASSWORD= + +# 数据库 名称 [必填] +MYSQL_SERVICE_DB_NAME=nacos + +# 数据库 连接参数 [必填] +MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true + diff --git a/appstore/nacos/2.4.3/data.yml b/appstore/nacos/2.4.3/data.yml new file mode 100644 index 00000000..e60115e2 --- /dev/null +++ b/appstore/nacos/2.4.3/data.yml @@ -0,0 +1,185 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: mysql + edit: true + envKey: PANEL_DB_TYPE + labelZh: MySQL 服务 (前置检查) + labelEn: Database Service (Pre-check) + required: true + type: apps + values: + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "host" + edit: true + envKey: NETWORK_MODE + labelEn: Drive path + labelZh: 网络模式 + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: "/home/nacos" + edit: true + envKey: NACOS_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8848 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 9848 + edit: true + envKey: PANEL_APP_PORT_GRPC_CLIENT + labelZh: Nacos gRPC 客户端端口 + labelEn: Nacos gRPC client port + required: true + rule: paramPort + type: number + - default: 9849 + edit: true + envKey: PANEL_APP_PORT_GRPC_SERVER + labelZh: Nacos gRPC 服务端端口 + labelEn: Nacos gRPC server port + required: true + rule: paramPort + type: number + - default: "ip" + envKey: PREFER_HOST_MODE + labelZh: IP模式/域名模式 + labelEn: IP mode/hostname mode + required: true + type: select + values: + - label: IP模式 + value: "ip" + - label: 域名模式 + value: "hostname" + - default: "" + edit: true + envKey: NACOS_SERVER_IP + labelZh: 服务IP + labelEn: Server IP + required: true + type: text + - default: "serverIdentity" + edit: true + envKey: NACOS_AUTH_IDENTITY_KEY + labelZh: Nacos身份验证密钥键 + labelEn: Nacos auth identity key + required: true + type: text + - default: "security" + edit: true + envKey: NACOS_AUTH_IDENTITY_VALUE + labelZh: Nacos身份验证密钥值 + labelEn: Nacos auth identity value + required: true + type: text + - default: "SecretKey012345678901234567890123456789012345678901234567890123456789" + edit: true + envKey: NACOS_AUTH_TOKEN + labelZh: Nacos身份验证令牌(至少32位字符的Base64编码) + labelEn: Nacos auth token + required: true + type: text + - default: "512m" + edit: true + envKey: JVM_XMS + labelZh: JVM_XMS (初始内存大小) + labelEn: JVM_XMS (Initial memory size) + required: true + type: text + - default: "2g" + edit: true + envKey: JVM_XMX + labelEn: JVM_XMX (Maximum memory size) + labelZh: JVM_XMX (最大内存大小) + required: true + type: text + - default: "128m" + edit: true + envKey: JVM_XMN + labelEn: JVM_XMN (New generation memory) + labelZh: JVM_XMN (新生代内存) + required: true + type: text + - default: "128m" + edit: true + envKey: JVM_MS + labelEn: JVM_MS (Initial metaspace) + labelZh: JVM_MS (初始元空间大小) + required: true + type: text + - default: "320m" + edit: true + envKey: JVM_MMS + labelEn: JVM_MMS (Maximum metaspace) + labelZh: JVM_MMS (最大元空间大小) + required: true + type: text + - default: "127.0.0.1" + edit: true + envKey: MYSQL_SERVICE_HOST + labelZh: 数据库 主机 + labelEn: Database Host + required: true + type: text + - default: 3306 + edit: true + envKey: MYSQL_SERVICE_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "nacos" + edit: true + envKey: MYSQL_SERVICE_USER + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "" + edit: true + envKey: MYSQL_SERVICE_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + required: true + type: password + - default: "nacos" + edit: true + envKey: MYSQL_SERVICE_DB_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text + - default: "characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true" + edit: true + envKey: MYSQL_SERVICE_DB_PARAM + labelZh: 数据库 连接参数 + labelEn: Database Connection Parameters + required: true + type: text diff --git a/appstore/nacos/2.4.3/docker-compose.yml b/appstore/nacos/2.4.3/docker-compose.yml new file mode 100644 index 00000000..a2dd1ec2 --- /dev/null +++ b/appstore/nacos/2.4.3/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + nacos: + container_name: nacos + env_file: + - ./envs/global.env + - .env + environment: + - MODE=standalone + - NACOS_SERVER_PORT=8848 + - NACOS_AUTH_ENABLE=true + - SPRING_DATASOURCE_PLATFORM=mysql + image: nacos/nacos-server:v2.4.3 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8848 + - ${PANEL_APP_PORT_GRPC_CLIENT}:9848 + - ${PANEL_APP_PORT_GRPC_SERVER}:9849 + restart: always + volumes: + - ${NACOS_ROOT_PATH}/logs:/home/nacos/logs + - ${NACOS_ROOT_PATH}/data:/home/nacos/data diff --git a/appstore/nacos/2.4.3/envs/default.env b/appstore/nacos/2.4.3/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/nacos/2.4.3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/nacos/2.4.3/envs/global.env b/appstore/nacos/2.4.3/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/nacos/2.4.3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/nacos/2.4.3/init/mysql-schema.sql b/appstore/nacos/2.4.3/init/mysql-schema.sql new file mode 100644 index 00000000..067d67a1 --- /dev/null +++ b/appstore/nacos/2.4.3/init/mysql-schema.sql @@ -0,0 +1,227 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +/******************************************/ +/* 表名称 = config_info */ +/******************************************/ +CREATE TABLE `config_info` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(128) DEFAULT NULL COMMENT 'group_id', + `content` longtext NOT NULL COMMENT 'content', + `md5` varchar(32) DEFAULT NULL COMMENT 'md5', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `src_user` text COMMENT 'source user', + `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', + `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', + `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', + `c_desc` varchar(256) DEFAULT NULL COMMENT 'configuration description', + `c_use` varchar(64) DEFAULT NULL COMMENT 'configuration usage', + `effect` varchar(64) DEFAULT NULL COMMENT '配置生效的描述', + `type` varchar(64) DEFAULT NULL COMMENT '配置的类型', + `c_schema` text COMMENT '配置的模式', + `encrypted_data_key` text NOT NULL COMMENT '密钥', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info'; + +/******************************************/ +/* 表名称 = config_info_aggr */ +/******************************************/ +CREATE TABLE `config_info_aggr` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(128) NOT NULL COMMENT 'group_id', + `datum_id` varchar(255) NOT NULL COMMENT 'datum_id', + `content` longtext NOT NULL COMMENT '内容', + `gmt_modified` datetime NOT NULL COMMENT '修改时间', + `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', + `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段'; + + +/******************************************/ +/* 表名称 = config_info_beta */ +/******************************************/ +CREATE TABLE `config_info_beta` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(128) NOT NULL COMMENT 'group_id', + `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', + `content` longtext NOT NULL COMMENT 'content', + `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps', + `md5` varchar(32) DEFAULT NULL COMMENT 'md5', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `src_user` text COMMENT 'source user', + `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', + `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', + `encrypted_data_key` text NOT NULL COMMENT '密钥', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta'; + +/******************************************/ +/* 表名称 = config_info_tag */ +/******************************************/ +CREATE TABLE `config_info_tag` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(128) NOT NULL COMMENT 'group_id', + `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id', + `tag_id` varchar(128) NOT NULL COMMENT 'tag_id', + `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', + `content` longtext NOT NULL COMMENT 'content', + `md5` varchar(32) DEFAULT NULL COMMENT 'md5', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `src_user` text COMMENT 'source user', + `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag'; + +/******************************************/ +/* 表名称 = config_tags_relation */ +/******************************************/ +CREATE TABLE `config_tags_relation` +( + `id` bigint(20) NOT NULL COMMENT 'id', + `tag_name` varchar(128) NOT NULL COMMENT 'tag_name', + `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(128) NOT NULL COMMENT 'group_id', + `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id', + `nid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增长标识', + PRIMARY KEY (`nid`), + UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`), + KEY `idx_tenant_id` (`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation'; + +/******************************************/ +/* 表名称 = group_capacity */ +/******************************************/ +CREATE TABLE `group_capacity` +( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群', + `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值', + `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量', + `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', + `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值', + `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', + `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_group_id` (`group_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表'; + +/******************************************/ +/* 表名称 = his_config_info */ +/******************************************/ +CREATE TABLE `his_config_info` +( + `id` bigint(20) unsigned NOT NULL COMMENT 'id', + `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增标识', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(128) NOT NULL COMMENT 'group_id', + `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', + `content` longtext NOT NULL COMMENT 'content', + `md5` varchar(32) DEFAULT NULL COMMENT 'md5', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `src_user` text COMMENT 'source user', + `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', + `op_type` char(10) DEFAULT NULL COMMENT 'operation type', + `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', + `encrypted_data_key` text NOT NULL COMMENT '密钥', + PRIMARY KEY (`nid`), + KEY `idx_gmt_create` (`gmt_create`), + KEY `idx_gmt_modified` (`gmt_modified`), + KEY `idx_did` (`data_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造'; + + +/******************************************/ +/* 表名称 = tenant_capacity */ +/******************************************/ +CREATE TABLE `tenant_capacity` +( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID', + `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值', + `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量', + `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', + `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数', + `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', + `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_tenant_id` (`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表'; + + +CREATE TABLE `tenant_info` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `kp` varchar(128) NOT NULL COMMENT 'kp', + `tenant_id` varchar(128) default '' COMMENT 'tenant_id', + `tenant_name` varchar(128) default '' COMMENT 'tenant_name', + `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc', + `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source', + `gmt_create` bigint(20) NOT NULL COMMENT '创建时间', + `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`), + KEY `idx_tenant_id` (`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info'; + +CREATE TABLE `users` +( + `username` varchar(50) NOT NULL PRIMARY KEY COMMENT 'username', + `password` varchar(500) NOT NULL COMMENT 'password', + `enabled` boolean NOT NULL COMMENT 'enabled' +); + +CREATE TABLE `roles` +( + `username` varchar(50) NOT NULL COMMENT 'username', + `role` varchar(50) NOT NULL COMMENT 'role', + UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE +); + +CREATE TABLE `permissions` +( + `role` varchar(50) NOT NULL COMMENT 'role', + `resource` varchar(128) NOT NULL COMMENT 'resource', + `action` varchar(8) NOT NULL COMMENT 'action', + UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE +); + +INSERT INTO users (username, password, enabled) +VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE); + +INSERT INTO roles (username, role) +VALUES ('nacos', 'ROLE_ADMIN'); diff --git a/appstore/nacos/2.4.3/scripts/init.sh b/appstore/nacos/2.4.3/scripts/init.sh new file mode 100644 index 00000000..19193ac7 --- /dev/null +++ b/appstore/nacos/2.4.3/scripts/init.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + if command -v mysql &> /dev/null; then + if [[ -f ./init/mysql-schema.sql ]]; then + mysql -u"$MYSQL_SERVICE_USER" -p"$MYSQL_SERVICE_PASSWORD" -h"$MYSQL_SERVICE_HOST" -P"$MYSQL_SERVICE_PORT" --protocol=TCP "$MYSQL_SERVICE_DB_NAME" < ./init/mysql-schema.sql + else + echo "mysql-schema.sql not found." + fi + else + echo "mysql command not found." + fi + + echo "Check Finish." +else + echo "Error: .env file not found." +fi diff --git a/appstore/nacos/2.4.3/scripts/uninstall.sh b/appstore/nacos/2.4.3/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/nacos/2.4.3/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nacos/2.4.3/scripts/upgrade.sh b/appstore/nacos/2.4.3/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/nacos/2.4.3/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nacos/README.md b/appstore/nacos/README.md new file mode 100644 index 00000000..961dde0b --- /dev/null +++ b/appstore/nacos/README.md @@ -0,0 +1,89 @@ +# Nacos + +一个易于使用的动态服务发现、配置和服务管理平台,用于构建云原生应用。 + +![Nacos](https://github.com/alibaba/nacos/raw/develop/doc/Nacos_Logo.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 安装说明 + +Nacos +2.x默认使用的端口为8848(HTTP管理端口)、9848(客户端gRPC请求服务端端口)和9849(服务端gRPC请求服务端端口)。客户端在连接时,虽然主要配置的是管理端访问端口8848,但实际上客户端会根据服务端的配置自动计算其他端口进行通信。 + +因此我们推荐使用 `host` 模式部署,以避免端口冲突。 + +> 安全路径:`/nacos` +> +> 用户名:`nacos` +> +> 自版本 `2.4.0` 起,取消了默认密码,首次启动需要自行设置密码。 +> 密码:`nacos` + +### 初始化数据库 + +安装前,需要先创建数据库,数据库初始化文件:`mysql-schema.sql` +,可前往[Nacos](https://github.com/alibaba/nacos/blob/master/distribution/conf/mysql-schema.sql)下载。 + +或安装完成后,进入安装目录,在 `init` 文件夹下,导入 `mysql-schema.sql` 文件。 + +### 加密配置 + ++ `Nacos身份验证令牌` + +32位字符串,并使用Base64编码。 + +### JVM参数 + ++ `JVM_XMS` + +这个参数设置 Java 虚拟机堆的初始内存大小。 + +它指定了 JVM 在启动时分配的堆内存大小。 + +例如,-Xms512m 表示 JVM 在启动时将分配 512MB 的堆内存。 + ++ `JVM_XMX` + +这个参数设置 Java 虚拟机堆的最大内存大小。 + +它指定了 JVM 堆内存的上限。 + +例如,-Xmx1024m 表示 JVM 的堆内存最多可以使用 1024MB。 + ++ `JVM_XMN` + +这个参数用于设置新生代的大小。 + +新生代是 JVM 堆内存中的一部分,用于存放新创建的对象。 +设置 -Xmn 参数可以控制新生代的初始大小。 + +例如,-Xmn256m 表示将新生代的初始大小设置为 256MB。 + ++ `JVM_MS` + +这个参数用于设置 JVM 的初始元空间大小。 + +元空间是用于存储类元数据的区域,它在 Java 8 中取代了永久代。 + +例如,-XX: MetaspaceSize=128m 表示将初始的元空间大小设置为 128MB。 + ++ `JVM_MMS` + +这个参数用于设置 JVM 的最大元空间大小。 + +它指定了元空间能够增长的最大限制。 + +例如,-XX:MaxMetaspaceSize=256m 表示将元空间的最大大小限制为 256MB。 + +```shell +- JVM_XMS=64m #-Xms default :1g +- JVM_XMX=64m #-Xmx default :1g +- JVM_XMN=16m #-Xmn default :512m +- JVM_MS=8m #-XX:MetaspaceSize default :128m +- JVM_MMS=8m #-XX:MaxMetaspaceSize default :320m +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/nacos/data.yml b/appstore/nacos/data.yml new file mode 100644 index 00000000..79d52020 --- /dev/null +++ b/appstore/nacos/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: nacos + name: Nacos + tags: + - WebSite + - Tool + - Middleware + - Local + shortDescZh: 动态服务发现、配置管理和服务管理平台 + shortDescEn: Dynamic service discovery, configuration and service management platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://nacos.io/ + github: https://github.com/alibaba/nacos/ + document: https://nacos.io/docs/latest/what-is-nacos/ diff --git a/appstore/nacos/logo.png b/appstore/nacos/logo.png new file mode 100644 index 00000000..e2bc7018 Binary files /dev/null and b/appstore/nacos/logo.png differ diff --git a/appstore/nexusphp/1.8.16/.env b/appstore/nexusphp/1.8.16/.env new file mode 100644 index 00000000..b655406b --- /dev/null +++ b/appstore/nexusphp/1.8.16/.env @@ -0,0 +1,18 @@ +# 数据持久化路径 [必填] +NEXUSPHP_ROOT_PATH=/home/nexusphp + +# 种子目录 [必填] +NEXUSPHP_TORRENTS_ROOT_PATH=/home/nexusphp + +# 上传器目录 [必填] +NEXUSPHP_BITBUCKET_ROOT_PATH=/home/nexusphp + +# 附件目录 [必填] +NEXUSPHP_ATTACHMENTS_ROOT_PATH=/home/nexusphp + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 应用密钥 [必填] +APP_KEY=base64:WUbN2wa2kl3E1VDW4iKaH3RBHw3hKY7BK0hWEkBZmGg= + diff --git a/appstore/nexusphp/1.8.16/data.yml b/appstore/nexusphp/1.8.16/data.yml new file mode 100644 index 00000000..3293ee6a --- /dev/null +++ b/appstore/nexusphp/1.8.16/data.yml @@ -0,0 +1,45 @@ +additionalProperties: + formFields: + - default: "/home/nexusphp" + edit: true + envKey: NEXUSPHP_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "/home/nexusphp" + edit: true + envKey: NEXUSPHP_TORRENTS_ROOT_PATH + labelZh: 种子目录 + labelEn: Torrent persistence path + required: true + type: text + - default: "/home/nexusphp" + edit: true + envKey: NEXUSPHP_BITBUCKET_ROOT_PATH + labelZh: 上传器目录 + labelEn: Uploader persistence path + required: true + type: text + - default: "/home/nexusphp" + edit: true + envKey: NEXUSPHP_ATTACHMENTS_ROOT_PATH + labelZh: 附件目录 + labelEn: Attachment persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number + - default: "base64:WUbN2wa2kl3E1VDW4iKaH3RBHw3hKY7BK0hWEkBZmGg=" + edit: true + envKey: APP_KEY + labelZh: 应用密钥 + labelEn: Application Key + required: true + type: text diff --git a/appstore/nexusphp/1.8.16/docker-compose.yml b/appstore/nexusphp/1.8.16/docker-compose.yml new file mode 100644 index 00000000..ff26b016 --- /dev/null +++ b/appstore/nexusphp/1.8.16/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true +services: + nexusphp: + container_name: nexusphp + env_file: + - ./envs/global.env + - .env + image: qyg2297248353/nexusphp:v1.8.16 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${NEXUSPHP_ROOT_PATH}/config/.env.example:/var/www/html/.env.example + - ${NEXUSPHP_ROOT_PATH}/data:/var/www/html + - ${NEXUSPHP_TORRENTS_ROOT_PATH}/torrents:/var/www/html/torrents + - ${NEXUSPHP_BITBUCKET_ROOT_PATH}/bitbucket:/var/www/html/bitbucket + - ${NEXUSPHP_ATTACHMENTS_ROOT_PATH}/attachments:/var/www/html/attachments diff --git a/appstore/nexusphp/1.8.16/envs/default.env b/appstore/nexusphp/1.8.16/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/nexusphp/1.8.16/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/nexusphp/1.8.16/envs/global.env b/appstore/nexusphp/1.8.16/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/nexusphp/1.8.16/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/nexusphp/1.8.16/envs/nexusphp.env b/appstore/nexusphp/1.8.16/envs/nexusphp.env new file mode 100644 index 00000000..9fe2c609 --- /dev/null +++ b/appstore/nexusphp/1.8.16/envs/nexusphp.env @@ -0,0 +1,94 @@ +APP_NAME=NexusPHP +APP_ENV=local +APP_KEY=base64:WUbN2wa2kl3E1VDW4iKaH3RBHw3hKY7BK0hWEkBZmGg= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=nexusphp +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=redis +QUEUE_CONNECTION=redis +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +MEMCACHED_HOST=127.0.0.1 + +MAIL_MAILER=smtp +MAIL_HOST=mailhog +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS=null +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_APP_CLUSTER=mt1 + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" + + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD= +REDIS_PORT=6379 +REDIS_DB=0 + +USE_CRON_TRIGGER_CLEANUP=true + +LOG_FILE=/tmp/nexus.log + +TIMEZONE=Asia/Shanghai + +GOOGLE_DRIVE_CLIENT_ID= +GOOGLE_DRIVE_CLIENT_SECRET= +GOOGLE_DRIVE_REFRESH_TOKEN= +GOOGLE_DRIVE_FOLDER_ID= + +GEOIP2_DATABASE=/var/www/html/geoip2/geoip2.mmdb + +ELASTICSEARCH_HOST= +ELASTICSEARCH_PORT= +ELASTICSEARCH_SCHEME= +ELASTICSEARCH_USER= +ELASTICSEARCH_PASS= +ELASTICSEARCH_SSL_VERIFICATION +ELASTICSEARCH_ENABLED= + +SFTP_HOST= +SFTP_USERNAME= +SFTP_PASSWORD= +SFTP_PORT= +SFTP_ROOT=/tmp + +UID_STARTS=10001 + +PHP_PATH= +NAS_TOOLS_KEY= +IYUU_SECRET= + +MEILISEARCH_SCHEME=http +MEILISEARCH_HOST=127.0.0.1 +MEILISEARCH_PORT=7700 +MEILISEARCH_MASTER_KEY= + +CACHE_KEY_AGENT_ALLOW=all_agent_allows +CACHE_KEY_AGENT_DENY=all_agent_denies +CHANNEL_NAME_SETTING=channel_setting +CHANNEL_NAME_MODEL_EVENT=channel_model_event diff --git a/appstore/nexusphp/1.8.16/scripts/init.sh b/appstore/nexusphp/1.8.16/scripts/init.sh new file mode 100644 index 00000000..9a8966d3 --- /dev/null +++ b/appstore/nexusphp/1.8.16/scripts/init.sh @@ -0,0 +1,36 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + # setup-2 download geoip2 + GEOIP_DIR="$NEXUSPHP_ROOT_PATH/geoip2" + mkdir -p "$GEOIP_DIR" + + GEOIP_FILE="$GEOIP_DIR/geoip2.mmdb" + if curl -o "$GEOIP_FILE" -L "https://cdn.jsdelivr.net/gh/Hackl0us/GeoIP2-CN@release/Country.mmdb"; then + echo "GeoIP2 database downloaded successfully to $GEOIP_FILE" + else + echo "Error: Failed to download GeoIP2 database." + fi + + # setup-3 copy env file + CONFIG_DIR="$NEXUSPHP_ROOT_PATH/config" + mkdir -p "$CONFIG_DIR" + + CONFIG_FILE="$CONFIG_DIR/.env.example" + cp ./envs/nexusphp.env $CONFIG_FILE + sed -i "s/APP_KEY=.*/APP_KEY=$APP_KEY/" $CONFIG_FILE + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nexusphp/1.8.16/scripts/uninstall.sh b/appstore/nexusphp/1.8.16/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/nexusphp/1.8.16/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nexusphp/1.8.16/scripts/upgrade.sh b/appstore/nexusphp/1.8.16/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/nexusphp/1.8.16/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nexusphp/README.md b/appstore/nexusphp/README.md new file mode 100644 index 00000000..bc6d5d87 --- /dev/null +++ b/appstore/nexusphp/README.md @@ -0,0 +1,98 @@ +# NexusPHP + +完整的 PT 建站解决方案。基于 NexusPHP + Laravel + Filament。 + +![NexusPHP](https://file.lifebus.top/imgs/nexusphp_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 发种 ++ 特别区 ++ 求种 ++ 字幕 ++ 考核 ++ H&R ++ 认领 ++ 审核 ++ 签到 ++ 补签卡 ++ 勋章 ++ 道具 ++ 自定义标签 ++ 第三方全文搜索 ++ 盒子规则 ++ 论坛 ++ 申诉 ++ 多语言 ++ 自动备份 ++ 插件支持 ++ 管理后台 ++ Json API + +## 安装说明 + +默认语言为英语,如需中文,请在安装完成后,登录后在站点设置中设置。 + +安装完成后,请尽快完成初始化操作,并重启Docker容器。 + +重启后,请检查 `public/install` 目录是否已删除,如未删除,请手动删除。 + +### 生成 APP KEY + +#### 通过终端生成 + +1. 通过 `openssl` 得到 32位的十六进制字符串 + +```bash +openssl rand -hex 32 +``` + +2. 转换为 base64 格式 + +```bash +echo -n "your_hex_string" | xxd -r -p | base64 +``` + +3. 得到完整密钥 + +拼接 `base64:` 和上一步得到的字符串 + +```bash +base64:your_base64_string +``` + +#### 使用 PHP 函数 + +1. 通过 `random_bytes` 函数得到 32位的十六进制字符串 + +```php + +``` + +2. 转换为 base64 格式 + +```bash +echo -n "your_hex_string" | xxd -r -p | base64 +``` + +3. 得到完整密钥 + +拼接 `base64:` 和上一步得到的字符串 + +### 使用 Artisan 命令行工具 + +需要在项目根目录中执行 + +这个命令会自动修改 .env 文件中的 APP_KEY 配置,并设置一个随机生成的密钥。 + +```php +php artisan key:generate +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/nexusphp/data.yml b/appstore/nexusphp/data.yml new file mode 100644 index 00000000..b716b636 --- /dev/null +++ b/appstore/nexusphp/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: nexusphp + name: NexusPHP + tags: + - WebSite + - Local + shortDescZh: 完整的 PT 建站解决方案 + shortDescEn: 完整的 PT 建站解决方案 + type: website + crossVersionUpdate: true + limit: 0 + website: https://nexusphp.org/ + github: https://github.com/xiaomlove/nexusphp/ + document: https://doc.nexusphp.org/ diff --git a/appstore/nexusphp/logo.png b/appstore/nexusphp/logo.png new file mode 100644 index 00000000..03a60839 Binary files /dev/null and b/appstore/nexusphp/logo.png differ diff --git a/appstore/nezha-dash/1.5.5/.env b/appstore/nezha-dash/1.5.5/.env new file mode 100644 index 00000000..50272d38 --- /dev/null +++ b/appstore/nezha-dash/1.5.5/.env @@ -0,0 +1,9 @@ +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# 哪吒服务地址 [必填] +NezhaBaseUrl= + +# 哪吒 API Token [必填] +NezhaAuth= + diff --git a/appstore/nezha-dash/1.5.5/data.yml b/appstore/nezha-dash/1.5.5/data.yml new file mode 100644 index 00000000..4cf9387d --- /dev/null +++ b/appstore/nezha-dash/1.5.5/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: NezhaBaseUrl + labelZh: 哪吒服务地址 + labelEn: Nezha service address + required: true + type: text + - default: "" + edit: true + envKey: NezhaAuth + labelZh: 哪吒 API Token + labelEn: Nezha API Token + required: true + type: text diff --git a/appstore/nezha-dash/1.5.5/docker-compose.yml b/appstore/nezha-dash/1.5.5/docker-compose.yml new file mode 100644 index 00000000..16db6c92 --- /dev/null +++ b/appstore/nezha-dash/1.5.5/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + nezha-dash: + container_name: nezha-dash + env_file: + - ./envs/global.env + - .env + environment: + - DefaultLocale=zh + - ForceShowAllServers=false + - NEXT_PUBLIC_NezhaFetchInterval=5000 + - NEXT_PUBLIC_ShowFlag=true + - NEXT_PUBLIC_DisableCartoon=false + - NEXT_PUBLIC_ShowTag=true + - NEXT_PUBLIC_ShowNetTransfer=false + - NEXT_PUBLIC_ForceUseSvgFlag=false + - NEXT_PUBLIC_CustomLogo=https://nezha-cf.buycoffee.top/apple-touch-icon.png + - NEXT_PUBLIC_CustomTitle=NezhaDash + - NEXT_PUBLIC_CustomDescription=NezhaDash is a dashboard for Nezha. + image: hamster1963/nezha-dash:v1.5.5 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + restart: always diff --git a/appstore/nezha-dash/1.5.5/envs/default.env b/appstore/nezha-dash/1.5.5/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/nezha-dash/1.5.5/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/nezha-dash/1.5.5/envs/global.env b/appstore/nezha-dash/1.5.5/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/nezha-dash/1.5.5/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/nezha-dash/1.5.5/scripts/init.sh b/appstore/nezha-dash/1.5.5/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/nezha-dash/1.5.5/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nezha-dash/1.5.5/scripts/uninstall.sh b/appstore/nezha-dash/1.5.5/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/nezha-dash/1.5.5/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nezha-dash/1.5.5/scripts/upgrade.sh b/appstore/nezha-dash/1.5.5/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/nezha-dash/1.5.5/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nezha-dash/README.md b/appstore/nezha-dash/README.md new file mode 100644 index 00000000..8c9cd628 --- /dev/null +++ b/appstore/nezha-dash/README.md @@ -0,0 +1,19 @@ +# NezhaDash + +NezhaDash 是一个基于 Next.js 和 哪吒监控 的仪表盘 + +![哪吒监控](https://file.lifebus.top/imgs/nezha_dash_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +> 该应用是一个基于 Next.js 的仪表盘,用于展示哪吒监控的数据 +> +> 与 [哪吒监控](https://nezha.wiki/) 配合使用,可以实现监控数据的展示 +> +> 该应用作者与哪吒监控的作者没有任何关系,仅仅是一个爱好者的作品 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/nezha-dash/data.yml b/appstore/nezha-dash/data.yml new file mode 100644 index 00000000..e9ef95b8 --- /dev/null +++ b/appstore/nezha-dash/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: nezha-dash + name: NezhaDash + tags: + - WebSite + - Middleware + - Local + shortDescZh: 基于 Next.js 和 哪吒监控 的仪表盘 + shortDescEn: Dashboard based on Next.js and Nezha Monitor + type: website + crossVersionUpdate: true + limit: 0 + website: https://nezha-cf.buycoffee.top/ + github: https://github.com/hamster1963/nezha-dash/ + document: https://buycoffee.top/blog/tech/nezha-docker/ diff --git a/appstore/nezha-dash/logo.png b/appstore/nezha-dash/logo.png new file mode 100644 index 00000000..516d91b6 Binary files /dev/null and b/appstore/nezha-dash/logo.png differ diff --git a/appstore/nezha/0.20.13/.env b/appstore/nezha/0.20.13/.env new file mode 100644 index 00000000..54509260 --- /dev/null +++ b/appstore/nezha/0.20.13/.env @@ -0,0 +1,33 @@ +# 数据持久化路径 [必填] +NEZHA_ROOT_PATH=/home/nezha + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8008 + +# gRPC 端口 [必填] +PANEL_APP_PORT_GRPC=5555 + +# OAuth 服务商 [必填] +OAUTH2_TYPE=github + +# 管理员账号ID [必填] +OAUTH2_ADMIN= + +# OAuth 客户端 ID [必填] +OAUTH2_CLIENTID= + +# OAuth 客户端 Secret [必填] +OAUTH2_CLIENTSECRET= + +# OAuth 端点 (可选) +OAUTH2_ENDPOINT= + +# 网站标题 [必填] +NZ_SITE_TITLE=哪吒监控 + +# Cookie 名称 (默认) [必填] +NZ_COOKIE_NAME=nezha-dashboard + +# 网站主题 (默认) [必填] +NZ_THEME=default + diff --git a/appstore/nezha/0.20.13/data.yml b/appstore/nezha/0.20.13/data.yml new file mode 100644 index 00000000..3d6fca20 --- /dev/null +++ b/appstore/nezha/0.20.13/data.yml @@ -0,0 +1,94 @@ +additionalProperties: + formFields: + - default: "/home/nezha" + edit: true + envKey: NEZHA_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8008 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 5555 + edit: true + envKey: PANEL_APP_PORT_GRPC + labelZh: gRPC 端口 + labelEn: gRPC Port + required: true + rule: paramPort + type: number + - default: "github" + edit: true + envKey: OAUTH2_TYPE + labelZh: OAuth 服务商 + labelEn: OAuth Provider + required: true + type: select + values: + - label: GitHub + value: "github" + - label: Cloudflare + value: "cloudflare" + - label: GitLab + value: "gitlab" + - label: Gitee + value: "gitee" + - label: Gitea + value: "gitea" + - label: Jihulab + value: "jihulab" + - default: "" + edit: true + envKey: OAUTH2_ADMIN + labelZh: 管理员账号ID + labelEn: Admin Account ID + required: true + type: text + - default: "" + edit: true + envKey: OAUTH2_CLIENTID + labelEn: OAuth Client ID + labelZh: OAuth 客户端 ID + required: true + type: text + - default: "" + edit: true + envKey: OAUTH2_CLIENTSECRET + labelEn: OAuth Client Secret + labelZh: OAuth 客户端 Secret + required: true + type: text + - default: "" + edit: true + envKey: OAUTH2_ENDPOINT + labelEn: OAuth Callback + labelZh: OAuth 端点 (可选) + required: false + type: text + - default: "哪吒监控" + edit: true + envKey: NZ_SITE_TITLE + labelZh: 网站标题 + labelEn: Site Title + required: true + type: text + - default: "nezha-dashboard" + edit: true + envKey: NZ_COOKIE_NAME + labelZh: Cookie 名称 (默认) + labelEn: Cookie Name + required: true + type: text + - default: "default" + edit: true + envKey: NZ_THEME + labelZh: 网站主题 (默认) + labelEn: Theme + required: true + type: text diff --git a/appstore/nezha/0.20.13/data/config-example.yaml b/appstore/nezha/0.20.13/data/config-example.yaml new file mode 100644 index 00000000..d063cf9f --- /dev/null +++ b/appstore/nezha/0.20.13/data/config-example.yaml @@ -0,0 +1,33 @@ +debug: false +httpport: 80 +language: zh-CN +grpcport: nz_grpc_port +oauth2: + type: "nz_oauth2_type" + admin: "nz_admin_logins" + clientid: "nz_github_oauth_client_id" + clientsecret: "nz_github_oauth_client_secret" + endpoint: "" +site: + brand: "nz_site_title" + cookiename: "nezha-dashboard" + theme: "default" +ddns: + enable: false + provider: "webhook" + accessid: "" + accesssecret: "" + webhookmethod: "" + webhookurl: "" + webhookrequestbody: "" + webhookheaders: "" + maxretries: 3 + profiles: + example: + provider: "" + accessid: "" + accesssecret: "" + webhookmethod: "" + webhookurl: "" + webhookrequestbody: "" + webhookheaders: "" diff --git a/appstore/nezha/0.20.13/docker-compose.yml b/appstore/nezha/0.20.13/docker-compose.yml new file mode 100644 index 00000000..ff7b23dd --- /dev/null +++ b/appstore/nezha/0.20.13/docker-compose.yml @@ -0,0 +1,20 @@ +networks: + 1panel-network: + external: true +services: + nezha-dashboard: + container_name: nezha + image: ghcr.io/naiba/nezha-dashboard:v0.20.13 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + - ${PANEL_APP_PORT_GRPC}:${PANEL_APP_PORT_GRPC} + restart: always + volumes: + - ${NEZHA_ROOT_PATH}/data:/dashboard/data + - ${NEZHA_ROOT_PATH}/static-custom/static:/dashboard/resource/static/custom + - ${NEZHA_ROOT_PATH}/theme-custom/template:/dashboard/resource/template/theme-custom + - ${NEZHA_ROOT_PATH}/dashboard-custom/template:/dashboard/resource/template/dashboard-custom diff --git a/appstore/nezha/0.20.13/envs/default.env b/appstore/nezha/0.20.13/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/nezha/0.20.13/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/nezha/0.20.13/envs/global.env b/appstore/nezha/0.20.13/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/nezha/0.20.13/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/nezha/0.20.13/scripts/init.sh b/appstore/nezha/0.20.13/scripts/init.sh new file mode 100644 index 00000000..47a3bd83 --- /dev/null +++ b/appstore/nezha/0.20.13/scripts/init.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +if [[ -f .env ]]; then + source .env + + mkdir -p $NEZHA_ROOT_PATH + mkdir -p $NEZHA_ROOT_PATH/data + + cp -f ./data/config-example.yaml ./data/nezha-config.yaml + sed -i "s/grpcport: nz_grpc_port/grpcport: $PANEL_APP_PORT_GRPC/g" ./data/nezha-config.yaml + sed -i "s/type: \"nz_oauth2_type\"/type: \"$OAUTH2_TYPE\"/g" ./data/nezha-config.yaml + sed -i "s/admin: \"nz_admin_logins\"/admin: \"$OAUTH2_ADMIN\"/g" ./data/nezha-config.yaml + sed -i "s/clientid: \"nz_github_oauth_client_id\"/clientid: \"$OAUTH2_CLIENTID\"/g" ./data/nezha-config.yaml + sed -i "s/clientsecret: \"nz_github_oauth_client_secret\"/clientsecret: \"$OAUTH2_CLIENTSECRET\"/g" ./data/nezha-config.yaml + sed -i "s/endpoint: \"\"/endpoint: \"$OAUTH2_ENDPOINT\"/g" ./data/nezha-config.yaml + sed -i "s/brand: \"nz_site_title\"/brand: \"$NZ_SITE_TITLE\"/g" ./data/nezha-config.yaml + sed -i "s/cookiename: \"nezha-dashboard\"/cookiename: \"$NZ_COOKIE_NAME\"/g" ./data/nezha-config.yaml + sed -i "s/theme: \"default\"/theme: \"$NZ_THEME\"/g" ./data/nezha-config.yaml + cp -f ./data/nezha-config.yaml $NEZHA_ROOT_PATH/data/config.yaml + chmod -R 777 $NEZHA_ROOT_PATH + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nezha/0.20.13/scripts/uninstall.sh b/appstore/nezha/0.20.13/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/nezha/0.20.13/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nezha/0.20.13/scripts/upgrade.sh b/appstore/nezha/0.20.13/scripts/upgrade.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/nezha/0.20.13/scripts/upgrade.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nezha/README.md b/appstore/nezha/README.md new file mode 100644 index 00000000..bd822adc --- /dev/null +++ b/appstore/nezha/README.md @@ -0,0 +1,94 @@ +# 哪吒监控 + +开源、轻量、易用的服务器监控、运维工具 + +![哪吒监控](https://file.lifebus.top/imgs/nezha_logo.svg) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## OAuth2 配置 + +推荐使用 `Gitee` 或 `Gitea` 作为管理员账号登录,因为 `Github` 在中国大陆访问速度较慢。 + +### 获取 Github 的 Client ID 和密钥 + +哪吒监控接入 Github、Gitlab、Gitee 作为后台管理员账号 + ++ 新建一个验证应用 + 以 Github 为例,登录 Github 后,打开 https://github.com/settings/developers + + 依次选择 “OAuth Apps” - “New OAuth App” + + Application name - 随意填写 + + Homepage URL - 填写面板的访问域名,如:"http://dashboard.example.com" (你的域名) + + Authorization callback URL - 填写回调地址,如:"http://dashboard.example.com/oauth2/callback" + (不要忘记/oauth2/callback) ++ 点击 “Register application” ++ 保存页面中的 Client ID,然后点击 “Generate a new client secret“,创建一个新的 Client Secret,新建的密钥仅会显示一次,请妥善保存 + +### 获取 Cloudflare Access 作为 OAuth2 提供方 + +位于中国大陆的用户可能无法直接连接 Github,如您在使用 Github、Gitlab、Gitee 作为管理员账户登录时遇到问题,您可以优先考虑切换 +使用 Cloudflare Access 作为 OAuth2 提供方作为登录方式 + +新建 SaaS-OIDC 应用流程 + ++ 前往 Zero Trust Dashboard,使用 Cloudflare 账号登录; ++ My Team -> Users -> <具体用户> -> 获取 User ID 并保存; ++ Access -> Application -> Add an Application; ++ 选择 SaaS,在 Application 中输入自定义的应用名称(例如 nezha),选择 OIDC 后点击 Add application; ++ Scopes 选择 openid, email, profile, groups; ++ Redirect URLs 填写你的 callback 地址,例如 https://dashboard.example.com/oauth2/callback; ++ 保存 Client ID、Client Secret、Issuer 地址中协议与域名的部分,例如 https://xxxxx.cloudflareaccess.com + +> 使用此方式,安装 Dashboard,需要将 Endpoint 配置修改为之前保存的Issuer地址 + +## 反向代理 + +> Nginx + +```nginx + location / { + proxy_pass http://127.0.0.1:8008; + proxy_set_header Host $http_host; + proxy_set_header Upgrade $http_upgrade; + } + + location ~ ^/(ws|terminal/.+)$ { + proxy_pass http://127.0.0.1:8008; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $http_host; + } +``` + +## 关于 Agent 安装 + +Agent 是哪吒监控的数据采集工具,用于采集服务器的性能数据,Agent 会将数据发送到哪吒监控的服务端 + +### 在 Linux(Ubuntu、Debian、CentOS) 中安装 Agent + ++ 首先在管理面板中添加一台服务器 ++ 点击新添加的服务器旁,绿色的 Linux 图标按钮,复制一键安装命令 ++ 在被控端服务器中运行复制的一键安装命令,等待安装完成后返回到 Dashboard 主页查看服务器是否上线 + +### 在 Windows 中安装 Agent + +参考文章: [哪吒探针 - Windows 客户端安装](https://nyko.me/2020/12/13/nezha-windows-client.html) + +## DDNS 支持 + +哪吒监控支持 DDNS,可以在管理面板中添加 DDNS 配置即可修改配置文件。 + +如需手动修改配置文件,可以在 `/home/nezha/data/config.yaml` 中修改 `ddns` 配置。 + +其中 `/home/nezha` 为持久化路径,如果你的持久化路径不同,请自行替换。 + +## 常见问题 + ++ 修改配置重建不生效 + +请前往持久化目录下的 `data` 目录中的 `config.yaml` 修改配置后,然后重启容器 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/nezha/data.yml b/appstore/nezha/data.yml new file mode 100644 index 00000000..b7d5d871 --- /dev/null +++ b/appstore/nezha/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: nezha + name: 哪吒监控 + tags: + - WebSite + - DevOps + - Local + shortDescZh: 开源、轻量、易用的服务器监控、运维工具 + shortDescEn: Open source, lightweight, easy-to-use server monitoring and operation and maintenance tools + type: tool + crossVersionUpdate: true + limit: 0 + website: https://nezha.wiki/ + github: https://github.com/naiba/nezha/ + document: https://nezha.wiki/guide/dashboard.html diff --git a/appstore/nezha/logo.png b/appstore/nezha/logo.png new file mode 100644 index 00000000..2f5199ad Binary files /dev/null and b/appstore/nezha/logo.png differ diff --git a/appstore/nginx-ui/2.0.0/.env b/appstore/nginx-ui/2.0.0/.env new file mode 100644 index 00000000..654572fa --- /dev/null +++ b/appstore/nginx-ui/2.0.0/.env @@ -0,0 +1,30 @@ +# 数据持久化路径 [必填] +NGINX_UI_ROOT_PATH=/home/nginx-ui + +# Web UI 端口 [必填] +PANEL_APP_PORT_HTTP=80 + +# Web UI 端口 (HTTPS) [必填] +PANEL_APP_PORT_HTTPS=443 + +# 管理员邮箱 [必填] +ADMINMAIL= + +# 管理员密码 [必填] +ADMINPASS= + +# JWT 密钥盐 [必填] +NGINX_UI_SERVER_JWT_SECRET= + +# GitHub 代理地址 +NGINX_UI_SERVER_GITHUB_PROXY=https://mirror.ghproxy.com/ + +# Nginx UI 显示标题 [必填] +NGINX_UI_SERVER_NAME=Nginx UI + +# 预设用户名 +NGINX_UI_PREDEFINED_USER_NAME= + +# 预设密码 +NGINX_UI_PREDEFINED_USER_PASSWORD= + diff --git a/appstore/nginx-ui/2.0.0/data.yml b/appstore/nginx-ui/2.0.0/data.yml new file mode 100644 index 00000000..abd7b3c9 --- /dev/null +++ b/appstore/nginx-ui/2.0.0/data.yml @@ -0,0 +1,74 @@ +additionalProperties: + formFields: + - default: "/home/nginx-ui" + edit: true + envKey: NGINX_UI_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 80 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Web UI 端口 + labelEn: Web UI Port + required: true + rule: paramPort + type: number + - default: 443 + edit: true + envKey: PANEL_APP_PORT_HTTPS + labelZh: Web UI 端口 (HTTPS) + labelEn: Web UI Port (HTTPS) + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: ADMINMAIL + labelZh: 管理员邮箱 + labelEn: Admin Email + required: true + type: text + - default: "" + edit: true + envKey: ADMINPASS + labelZh: 管理员密码 + labelEn: Admin Password + required: true + type: password + - default: "" + edit: true + envKey: NGINX_UI_SERVER_JWT_SECRET + labelZh: JWT 密钥盐 + labelEn: JWT Secret Salt + required: true + type: password + - default: "https://mirror.ghproxy.com/" + edit: true + envKey: NGINX_UI_SERVER_GITHUB_PROXY + labelZh: GitHub 代理地址 + labelEn: GitHub Proxy + required: false + type: text + - default: "Nginx UI" + edit: true + envKey: NGINX_UI_SERVER_NAME + labelZh: Nginx UI 显示标题 + labelEn: Nginx UI Display Title + required: true + type: text + - default: "" + edit: true + envKey: NGINX_UI_PREDEFINED_USER_NAME + labelZh: 预设用户名 + labelEn: Predefined Username + required: false + type: text + - default: "" + edit: true + envKey: NGINX_UI_PREDEFINED_USER_PASSWORD + labelZh: 预设密码 + labelEn: Predefined Password + required: false + type: text diff --git a/appstore/nginx-ui/2.0.0/docker-compose.yml b/appstore/nginx-ui/2.0.0/docker-compose.yml new file mode 100644 index 00000000..c00ca948 --- /dev/null +++ b/appstore/nginx-ui/2.0.0/docker-compose.yml @@ -0,0 +1,35 @@ +networks: + 1panel-network: + external: true +services: + nginx-ui: + container_name: nginx-ui + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + - NGINX_UI_SERVER_HTTP_HOST=0.0.0.0 + - NGINX_UI_SERVER_HTTP_PORT=9000 + - NGINX_UI_SERVER_RUN_MODE=release + - NGINX_UI_SERVER_HTTP_CHALLENGE_PORT=9180 + - NGINX_UI_SERVER_DATABASE=database + - NGINX_UI_SERVER_START_CMD=login + - NGINX_UI_SERVER_START_CMD=database + - NGINX_UI_SERVER_PAGE_SIZE=10 + - NGINX_UI_SERVER_CERT_RENEWAL_INTERVAL=7 + - NGINX_UI_SERVER_SKIP_INSTALLATION=true + image: uozi/nginx-ui:v2.0.0-beta.39 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + - ${PANEL_APP_PORT_HTTPS}:443 + restart: always + stdin_open: true + volumes: + - ${NGINX_UI_ROOT_PATH}/nginx:/etc/nginx + - ${NGINX_UI_ROOT_PATH}/nginx-ui:/etc/nginx-ui + - ${NGINX_UI_ROOT_PATH}/www:/var/www diff --git a/appstore/nginx-ui/2.0.0/envs/default.env b/appstore/nginx-ui/2.0.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/nginx-ui/2.0.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/nginx-ui/2.0.0/envs/global.env b/appstore/nginx-ui/2.0.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/nginx-ui/2.0.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/nginx-ui/2.0.0/scripts/init.sh b/appstore/nginx-ui/2.0.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/nginx-ui/2.0.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nginx-ui/2.0.0/scripts/uninstall.sh b/appstore/nginx-ui/2.0.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/nginx-ui/2.0.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nginx-ui/2.0.0/scripts/upgrade.sh b/appstore/nginx-ui/2.0.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/nginx-ui/2.0.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nginx-ui/README.md b/appstore/nginx-ui/README.md new file mode 100644 index 00000000..f73ec155 --- /dev/null +++ b/appstore/nginx-ui/README.md @@ -0,0 +1,31 @@ +# Nginx UI + +Nginx 网络管理界面 + +![Nginx UI](https://file.lifebus.top/imgs/nginx-ui_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Nginx UI 是一个全新的 Nginx 网络管理界面,旨在简化 Nginx 服务器的管理和配置。它提供实时服务器统计数据、ChatGPT +助手、一键部署、Let's Encrypt 证书的自动续签以及用户友好的网站配置编辑工具。此外,Nginx UI 还提供了在线访问 Nginx +日志、配置文件的自动测试和重载、网络终端、深色模式和自适应网页设计等功能。Nginx UI 采用 Go 和 Vue 构建,确保在管理 Nginx +服务器时提供无缝高效的体验。 + +## 特性 + ++ 在线查看服务器 CPU、内存、系统负载、磁盘使用率等指标 ++ 在线 ChatGPT 助理 ++ 一键申请和自动续签 Let's encrypt 证书 ++ 在线编辑 Nginx 配置文件,编辑器支持 Nginx 配置语法高亮 ++ 在线查看 Nginx 日志 ++ 使用 Go 和 Vue 开发,发行版本为单个可执行的二进制文件 ++ 保存配置后自动测试配置文件并重载 Nginx ++ 基于网页浏览器的高级命令行终端 ++ 支持深色模式 ++ 自适应网页设计 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/nginx-ui/data.yml b/appstore/nginx-ui/data.yml new file mode 100644 index 00000000..44482333 --- /dev/null +++ b/appstore/nginx-ui/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: nginx-ui + name: Nginx UI + tags: + - WebSite + - Middleware + - Local + shortDescZh: 全新的 Nginx 网络管理界面,旨在简化 Nginx 服务器的管理和配置 + shortDescEn: A new Nginx network management interface designed to simplify the management and configuration of Nginx servers + type: website + crossVersionUpdate: true + limit: 0 + website: https://nginxui.com/ + github: https://github.com/0xJacky/nginx-ui/ + document: https://nginxui.com/zh_CN/guide/about.html diff --git a/appstore/nginx-ui/logo.png b/appstore/nginx-ui/logo.png new file mode 100644 index 00000000..3a0a8436 Binary files /dev/null and b/appstore/nginx-ui/logo.png differ diff --git a/appstore/nocodb/0.258.3/.env b/appstore/nocodb/0.258.3/.env new file mode 100644 index 00000000..87a525b2 --- /dev/null +++ b/appstore/nocodb/0.258.3/.env @@ -0,0 +1,57 @@ +# 数据库 服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化路径 [必填] +NOCODB_ROOT_PATH=/home/nocodb + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 管理员邮箱 [必填] +NC_ADMIN_EMAIL= + +# 管理员密码 [必填] +NC_ADMIN_PASSWORD= + +# 数据加密密钥 [必填] +NC_AUTH_JWT_SECRET= + +# 数据库 类型 [必填] +DB_TYPE=pg + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 用户名 [必填] +DB_USER=nocodb + +# 数据库 密码 [必填] +DB_PASSWD= + +# 数据库 名称 [必填] +DB_NAME=nocodb + +# Redis 缓存地址 +NC_REDIS_URL= + +# 域名 +NC_PUBLIC_URL= + +# 邮件服务器地址 +NC_SMTP_HOST= + +# 邮件服务器端口 +NC_SMTP_PORT=465 + +# 邮件服务用户名 +NC_SMTP_USERNAME= + +# 邮件服务密码 +NC_SMTP_PASSWORD= + +# 邮件服务发件人 +NC_SMTP_FROM= + diff --git a/appstore/nocodb/0.258.3/data.yml b/appstore/nocodb/0.258.3/data.yml new file mode 100644 index 00000000..c1a53574 --- /dev/null +++ b/appstore/nocodb/0.258.3/data.yml @@ -0,0 +1,159 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: postgresql + edit: true + envKey: PANEL_DB_TYPE + labelZh: 数据库 服务 (前置检查) + labelEn: Database Service (Pre-check) + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/nocodb" + edit: true + envKey: NOCODB_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: NC_ADMIN_EMAIL + labelZh: 管理员邮箱 + labelEn: Administrator email + required: true + type: text + - default: "" + edit: true + envKey: NC_ADMIN_PASSWORD + labelZh: 管理员密码 + labelEn: Administrator password + required: true + rule: paramComplexity + type: password + - default: "" + edit: true + envKey: NC_AUTH_JWT_SECRET + labelZh: 数据加密密钥 + labelEn: Data encryption key + required: true + type: password + - default: pg + edit: true + envKey: DB_TYPE + labelZh: 数据库 类型 + labelEn: Database Type + required: true + type: select + values: + - label: PostgreSQL + value: pg + - label: MySQL (MariaDB, Percona) + value: mysql2 + - default: "127.0.0.1" + edit: true + envKey: DB_HOSTNAME + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "nocodb" + edit: true + envKey: DB_USER + labelZh: 数据库 用户名 + labelEn: Database User + required: true + type: text + - default: "" + edit: true + envKey: DB_PASSWD + labelEn: Database Password + labelZh: 数据库 密码 + random: true + required: true + rule: paramComplexity + type: password + - default: "nocodb" + edit: true + envKey: DB_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text + - default: "" + edit: true + envKey: NC_REDIS_URL + labelZh: Redis 缓存地址 + labelEn: Redis Cache Address + required: false + type: text + - default: "" + edit: true + envKey: NC_PUBLIC_URL + labelZh: 域名 + labelEn: Domain Name + required: false + type: text + - default: "" + edit: true + envKey: NC_SMTP_HOST + labelZh: 邮件服务器地址 + labelEn: Mailer Server Address + required: false + type: text + - default: 465 + edit: true + envKey: NC_SMTP_PORT + labelZh: 邮件服务器端口 + labelEn: Mailer Server Port + required: false + type: number + - default: "" + edit: true + envKey: NC_SMTP_USERNAME + labelZh: 邮件服务用户名 + labelEn: Mailer Username + required: false + type: text + - default: "" + edit: true + envKey: NC_SMTP_PASSWORD + labelZh: 邮件服务密码 + labelEn: Mailer Password + required: false + type: text + - default: "" + edit: true + envKey: NC_SMTP_FROM + labelZh: 邮件服务发件人 + labelEn: Mailer From + required: false + type: text diff --git a/appstore/nocodb/0.258.3/docker-compose.yml b/appstore/nocodb/0.258.3/docker-compose.yml new file mode 100644 index 00000000..3072d3cc --- /dev/null +++ b/appstore/nocodb/0.258.3/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + nocodb: + container_name: nocodb + env_file: + - ./envs/global.env + - .env + environment: + - PORT=8080 + - NC_ALLOW_LOCAL_HOOKS=false + - NC_DISABLE_CACHE=false + - NC_DISABLE_TELE=true + - NC_DASHBOARD_URL=/dashboard + - NUXT_PUBLIC_NC_BACKEND_URL=http://localhost:8080 + - NC_SMTP_SECURE=true + - NC_SMTP_IGNORE_TLS=false + - NC_DB=${DB_TYPE}://${DB_HOSTNAME}:${DB_PORT}?u=${DB_USER}&p=${DB_PASSWD}&d=${DB_NAME} + image: nocodb/nocodb:0.258.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${NOCODB_ROOT_PATH}/data:/usr/app/data diff --git a/appstore/nocodb/0.258.3/envs/default.env b/appstore/nocodb/0.258.3/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/nocodb/0.258.3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/nocodb/0.258.3/envs/global.env b/appstore/nocodb/0.258.3/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/nocodb/0.258.3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/nocodb/0.258.3/scripts/init.sh b/appstore/nocodb/0.258.3/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/nocodb/0.258.3/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nocodb/0.258.3/scripts/uninstall.sh b/appstore/nocodb/0.258.3/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/nocodb/0.258.3/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nocodb/0.258.3/scripts/upgrade.sh b/appstore/nocodb/0.258.3/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/nocodb/0.258.3/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/nocodb/README.md b/appstore/nocodb/README.md new file mode 100644 index 00000000..7e3bd657 --- /dev/null +++ b/appstore/nocodb/README.md @@ -0,0 +1,109 @@ +# NocoDB + +NocoDB 是一个无代码数据库平台,允许团队通过熟悉且直观的电子表格界面轻松协作和构建应用程序。 + +![NocoDB](https://file.lifebus.top/imgs/nocodb_cover.png) + +NocoDB 的工作原理是连接到任何关系数据库并将其转换为智能电子表格界面!这使您可以与团队协作构建无代码应用程序。 NocoDB 目前可与 +MySQL、PostgreSQL 和 SQLite(仅限开源)数据库配合使用。 + +此外,NocoDB 的应用程序商店允许您结合 Slack、Microsoft Teams、Discord、Twilio、Whatsapp、电子邮件和任何第三方 API +的组合在视图上构建业务工作流程。 + +另外,NocoDB 提供对 API 的编程访问,以便您也可以构建与 Zapier / Integromat 和自定义应用程序的集成。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + +> 丰富的电子表格 + +⚡ 基本操作:表、字段和记录的创建、读取、更新和删除 + +⚡ 字段操作:排序、过滤、隐藏/取消隐藏字段 + +⚡ 多种视图类型:网格(默认)、图库、表单视图和看板视图 + +⚡ 查看权限类型:协作视图和锁定视图 + +⚡ 共享基础/视图:公共或私有(受密码保护) + +⚡ 变体单元格类型:ID、链接、查找、汇总、单行文本、附件、货币、公式等 + +⚡ 角色访问控制:不同级别的细粒度访问控制 + +⚡ 还有更多... + +> 用于工作流程 应用商店 + +我们在三个主要类别中提供不同的集成。 + +⚡ 聊天:Slack、Discord、Mattermost 等等 + +⚡ 电子邮件:AWS SES、SMTP、MailerSend 等 + +⚡ 存储:AWS S3、Google Cloud Storage、Minio 等 + +> 程序化 + +我们提供以下方法让用户以编程方式调用操作。您可以使用令牌(JWT 或社交身份验证)来签署 NocoDB 授权请求。 + +⚡ REST API + +⚡ NocoDB SDK + +⚡ SQL Access:从 NocoDB UI 本身对数据源运行 SQL 查询(即将推出!) + +> 同步 + +如果您在 NocoDB GUI 之外进行了更改,我们允许您同步架构更改。但是,必须注意的是,您将必须携带自己的架构迁移才能从环境迁移到其他环境。 + +## 安装说明 + +数据支持:MySQL、PostgreSQL 和 `SQLite(仅限开源)` 数据库,由于 SQLite 的限制,我们建议在生产环境中使用 MySQL 或 PostgreSQL。 + +缓存支持:Redis(可选),未配置 Redis 时,NocoDB 将使用内存作为缓存。 + +> `Redis 缓存地址` 配置 + +如果您想要使用 Redis 作为缓存,请填写对应配置。 + +格式:`redis://:password@host:port/cache_index` + +示例:`redis://:password@localhost:6379/0` + +> '域名' 配置 + +当您在生产环境中使用 NocoDB 时,我们建议您配置域名。 + +这是用于在电子邮件模板中构建 URL、生成 Swagger 文档 URL 以及处理后端 URL 要求的基本 URL。 + +示例:`https://your-domain.com` + +## 维护说明 + +> 彻底禁用 `Redis 缓存` 功能 + +您可以通过设置环境变量 `NC_DISABLE_CACHE` 为 `true` 来彻底禁用此功能。 + +默认状态下会更具配置自动启用或禁用。 + +> 默认情况下,我们关闭了 `webhook` 调用本地网络功能 + +您可以通过设置环境变量 `NC_ALLOW_LOCAL_HOOKS` 为 `true` 来启用此功能。 + +> 默认情况下,我们关闭了 `遥测` 功能 + +您可以通过设置环境变量 `NC_DISABLE_TELE` 为 `false` 来启用此功能。 + +> 默认情况下,我们开启了 SMTP 插件 `安全身份验证` 功能 + +您可以通过设置环境变量 `NC_SMTP_SECURE` 为 `false` 来禁用此功能。 + +> 默认情况下,我们关闭了 `忽略 SMTP 插件的 TLS` 功能 + +您可以通过设置环境变量 `NC_SMTP_IGNORE_TLS` 为 `true` 来启用此功能。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/nocodb/data.yml b/appstore/nocodb/data.yml new file mode 100644 index 00000000..f104ce60 --- /dev/null +++ b/appstore/nocodb/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: nocodb + name: NocoDB + tags: + - WebSite + - Database + - Storage + - Local + shortDescZh: 无代码数据库平台 + shortDescEn: Code-free database platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://nocodb.com/ + github: https://github.com/nocodb/nocodb/ + document: https://docs.nocodb.com/ diff --git a/appstore/nocodb/logo.png b/appstore/nocodb/logo.png new file mode 100644 index 00000000..70af4926 Binary files /dev/null and b/appstore/nocodb/logo.png differ diff --git a/appstore/onedev/11.5.3/.env b/appstore/onedev/11.5.3/.env new file mode 100644 index 00000000..e7ab9a0b --- /dev/null +++ b/appstore/onedev/11.5.3/.env @@ -0,0 +1,24 @@ +# 数据持久化路径 [必填] +ONEDEV_ROOT_PATH=/home/onedev + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=6610 + +# SSH 端口 [必填] +PANEL_APP_PORT_SSH=6611 + +# 管理员帐户 +INITIAL_USER=root + +# 管理员密码 +INITIAL_PASSWORD= + +# 管理员电子邮件 +INITIAL_EMAIL= + +# 服务端地址 +INITIAL_SERVER_URL= + +# SSH 服务端地址 +INITIAL_SSH_ROOT_URL= + diff --git a/appstore/onedev/11.5.3/data.yml b/appstore/onedev/11.5.3/data.yml new file mode 100644 index 00000000..762286ba --- /dev/null +++ b/appstore/onedev/11.5.3/data.yml @@ -0,0 +1,64 @@ +additionalProperties: + formFields: + - default: "/home/onedev" + edit: true + envKey: ONEDEV_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 6610 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI Port + required: true + rule: paramPort + type: number + - default: 6611 + edit: true + envKey: PANEL_APP_PORT_SSH + labelZh: SSH 端口 + labelEn: SSH Port + required: true + rule: paramPort + type: number + - default: "root" + edit: true + envKey: INITIAL_USER + labelZh: 管理员帐户 + labelEn: Admin Username + required: false + rule: paramCommon + type: text + - default: "" + edit: true + envKey: INITIAL_PASSWORD + labelZh: 管理员密码 + labelEn: Admin Password + required: false + random: true + rule: paramComplexity + type: password + - default: "" + edit: true + envKey: INITIAL_EMAIL + labelZh: 管理员电子邮件 + labelEn: Admin Email + required: false + type: text + - default: "" + edit: true + envKey: INITIAL_SERVER_URL + labelZh: 服务端地址 + labelEn: Server URL + required: false + rule: paramExtUrl + type: text + - default: "" + edit: true + envKey: INITIAL_SSH_ROOT_URL + labelZh: SSH 服务端地址 + labelEn: SSH Server URL + required: false + type: text diff --git a/appstore/onedev/11.5.3/docker-compose.yml b/appstore/onedev/11.5.3/docker-compose.yml new file mode 100644 index 00000000..5a8b9b3d --- /dev/null +++ b/appstore/onedev/11.5.3/docker-compose.yml @@ -0,0 +1,28 @@ +networks: + 1panel-network: + external: true +services: + onedev: + container_name: onedev + env_file: + - ./envs/global.env + - ./envs/onedev.env + - .env + environment: + - initial_user=${INITIAL_USER} + - initial_password=${INITIAL_PASSWORD} + - initial_email=${INITIAL_EMAIL} + - initial_server_url=${INITIAL_SERVER_URL} + - initial_ssh_root_url=${INITIAL_SSH_ROOT_URL} + image: 1dev/server:11.5.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:6610 + - ${PANEL_APP_PORT_SSH}:6611 + restart: always + volumes: + - ${ONEDEV_ROOT_PATH}/data:/opt/onedev + - /var/run/docker.sock:/var/run/docker.sock diff --git a/appstore/onedev/11.5.3/envs/default.env b/appstore/onedev/11.5.3/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/onedev/11.5.3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/onedev/11.5.3/envs/global.env b/appstore/onedev/11.5.3/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/onedev/11.5.3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/onedev/11.5.3/envs/onedev.env b/appstore/onedev/11.5.3/envs/onedev.env new file mode 100644 index 00000000..134c16dd --- /dev/null +++ b/appstore/onedev/11.5.3/envs/onedev.env @@ -0,0 +1,29 @@ +# 外部数据库支持配置 + +# PostgreSQL +# hibernate_dialect=io.onedev.server.persistence.PostgreSQLDialect +# hibernate_connection_driver_class=org.postgresql.Driver +# hibernate_connection_url=jdbc:postgresql://localhost:5432/onedev +# hibernate_connection_username=postgres +# hibernate_connection_password=postgres + +# MySQL +# hibernate_dialect=org.hibernate.dialect.MySQL5InnoDBDialect +# hibernate_connection_driver_class=com.mysql.cj.jdbc.Driver +# hibernate_connection_url=jdbc:mysql://localhost:3306/onedev?serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false&disableMariaDbDriver=true +# hibernate_connection_username=root +# hibernate_connection_password=root + +# MariaDB +# hibernate_dialect=org.hibernate.dialect.MySQL5InnoDBDialect +# hibernate_connection_driver_class=org.mariadb.jdbc.Driver +# hibernate_connection_url=jdbc:mariadb://localhost:3306/onedev +# hibernate_connection_username=root +# hibernate_connection_password=root + +# MS SQL Server +# hibernate_dialect=org.hibernate.dialect.SQLServer2012Dialect +# hibernate_connection_driver_class=com.microsoft.sqlserver.jdbc.SQLServerDriver +# hibernate_connection_url=jdbc:sqlserver://localhost:1433;databaseName=onedev +# hibernate_connection_username=sa +# hibernate_connection_password=sa diff --git a/appstore/onedev/11.5.3/scripts/init.sh b/appstore/onedev/11.5.3/scripts/init.sh new file mode 100644 index 00000000..4232c6f8 --- /dev/null +++ b/appstore/onedev/11.5.3/scripts/init.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/onedev.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/onedev/11.5.3/scripts/uninstall.sh b/appstore/onedev/11.5.3/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/onedev/11.5.3/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/onedev/11.5.3/scripts/upgrade.sh b/appstore/onedev/11.5.3/scripts/upgrade.sh new file mode 100644 index 00000000..4232c6f8 --- /dev/null +++ b/appstore/onedev/11.5.3/scripts/upgrade.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/onedev.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/onedev/README.md b/appstore/onedev/README.md new file mode 100644 index 00000000..f8e3f0fa --- /dev/null +++ b/appstore/onedev/README.md @@ -0,0 +1,236 @@ +# OneDev + +DevOps 平台 + +![OneDev](https://file.lifebus.top/imgs/onedev_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +OneDev 可以在 2 核 2GB 盒子上愉快地运行。 + +OneDev 是迄今为止我在软件工程师职业生涯中使用过的最好的工具。 +它使我和我的团队能够轻松跟踪任务和代码,为我们的 CI/CD 创建深入的可重用管道,实施(可选)基于角色的分支保护,为拉取请求提供高度详细的代码审查。 + +### 功能特性 + +🔎 开箱即用的代码搜索和导航 + +任何提交中的语言感知符号搜索和导航。单击符号可显示当前文件中出现的情况。使用正则表达式进行快速代码搜索。 + +👮‍ 灵活的安全性和合规性扫描 + +扫描代码依赖项、构建的二进制文件或容器映像,以查找安全漏洞、许可证违规或秘密泄露。 + +🚦 用覆盖率和问题注释代码 + +代码将标注覆盖率信息以及 CI/CD 管道中发现的问题,以方便代码审查。 + +💬 随时随地代码讨论 + +选择任何代码或差异以开始讨论。建议并应用更改。讨论集中在代码上,以帮助理解代码。 + +🔒 多功能的代码保护规则 + +设置规则,当某些用户触摸某些分支中的某些文件时,要求进行审查或 CI/CD 验证。 + +📋 自动化看板以保持团队井井有条 + +在看板中手动移动任务,或定义规则以在提交/测试/发布/部署相关工作时自动移动任务。 + +🛠 可定制且灵活的问题工作流程 + +自定义问题状态和字段。手动或自动状态转换规则。发布同步操作和状态的链接。公共项目中的机密问题。 + +📨 服务台将电子邮件与问题链接起来 + +使用问题作为票证系统通过电子邮件为客户提供支持,无需他们注册帐户。为不同的项目或客户分配不同的支持联系人。 + +⏰ 时间跟踪和报告 + +跟踪任务上的估计/花费时间。自动聚合子任务的时间。生成工作统计和计费的时间表。 + +💡 CI/CD 作为代码,无需编写代码 + +用于创建 CI/CD 作业的直观 GUI。典型框架的模板。键入参数。矩阵作业。 CI/CD 逻辑重用。缓存管理。 + +🚀 从简单到规模化的多功能 CI/CD 执行器 + +在容器中或裸机上开箱即用地运行 CI/CD。与 Kubernetes 或代理同时运行大量作业。 + +🛠 调试 CI/CD 作业的工具 + +暂停作业执行的命令。用于检查作业执行环境的Web终端。针对未提交的更改在本地运行作业。 + +📦 内置包注册表 + +内置注册表来管理二进制包。将包与 CI/CD 作业链接。 + +🧩 深度融合、信息交叉引用 + +通过提交、CI/CD 或拉取请求传输问题状态。显示问题的修复版本。查询构建/包版本之间的已修复问题或代码更改。 + +🌲 项目树,方便维护 + +使用树形结构清晰有效地组织项目。在父项目中定义通用设置并在子项目中继承。 + +🐒 智能查询,可保存、订阅 + +强大而直观的查询功能。保存查询以便快速访问。订阅查询以获取有趣事件的通知。 + +🎛️ 团队和用户的仪表板 + +在自定义仪表板中排列小工具,以便一目了然地获取重要信息。与用户或组共享仪表板,或将其公开给所有人。 + +👯 轻松的高可用性和可扩展性 + +轻松的集群设置。跨不同服务器复制项目以实现高可用性,或分发项目以实现水平可扩展性。 + +🛸 用于快速访问的命令面板 + +使用 cmd/ctrl-k 从任何地方调出命令面板。搜索任何内容并跳转到它,而无需翻阅菜单。 + +📈 各语言的 SLOC 趋势 + +检查主分支的 git 历史记录,以有效计算按语言划分的源代码行趋势 + +🕊️ 快速、轻便、可靠 + +精心设计时考虑了资源使用和性能。通过适用于中型项目的 1 核 2G 内存盒获得上述所有功能。密集使用超过5年,可靠性经过实战验证。 + +## 安装说明 + +### 无人值守 + +通过填写必须的环境变量来配置 OneDev,无需通过 Web 界面进行配置。 + ++ `管理员帐户` - 管理员帐户的用户名 ++ `管理员密码` - 管理员帐户的密码 ++ `管理员电子邮件` - 管理员帐户的电子邮件地址 ++ `服务端地址` - OneDev 服务端的地址 (例如 `https://onedev.io`) ++ `SSH 服务端地址` - (可选) 用于 SSH 克隆的地址 (例如 `ssh://onedev.io`) + +不填写 `SSH 服务端地址` 时,将从 `服务端地址` 派生。 + +### 使用外部数据库 + +OneDev 默认使用嵌入式数据库存储数据。使用外部数据库需要前往应用安装目录下的 `config` 目录,编辑 `onedev.env` 文件,配置数据库连接信息。 + +填写 `onedev.env` 时,请删除对应 `#` 开头的注释行。数据库只能选择一种,填写多个数据库配置信息将导致启动失败。 + +外部数据库类型,支持 `MySQL`、`PostgreSQL`、`MariaDB`、`MS SQL Server` + +> 数据库配置信息 +> +> `hibernate_dialect` - 数据库方言 (固定值) +> +> `hibernate_connection_driver_class` - 数据库驱动 (固定值) +> +> `hibernate_connection_url` - 数据库连接地址 (请根据数据库类型填写) +> +> `hibernate_connection_username` - 数据库用户名 (请根据数据库类型填写) +> +> `hibernate_connection_password` - 数据库密码 (请根据数据库类型填写) + +| Database | Hibernate Dialect | Driver Class | Connection URL | Username | Password | Notes | +|---------------|------------------------------------------------|----------------------------------------------|---------------------------------------------------------------------------------------------------------------------------|----------|----------|-------------------------| +| MySQL | org.hibernate.dialect.MySQL5InnoDBDialect | com.mysql.cj.jdbc.Driver | jdbc:mysql://localhost:3306/onedev?serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false&disableMariaDbDriver=true | root | root | | +| PostgreSQL | io.onedev.server.persistence.PostgreSQLDialect | org.postgresql.Driver | jdbc:postgresql://localhost:5432/onedev | postgres | postgres | 请确保在此处使用 OneDev 自己版本的方言 | +| MariaDB | org.hibernate.dialect.MySQL5InnoDBDialect | org.mariadb.jdbc.Driver | jdbc:mariadb://localhost:3306/onedev | root | root | | +| MS SQL Server | org.hibernate.dialect.SQLServer2012Dialect | com.microsoft.sqlserver.jdbc.SQLServerDriver | jdbc:sqlserver://localhost:1433;databaseName=onedev | sa | sa | | + +#### 示例 + +> MySQL + +```env +hibernate_dialect=org.hibernate.dialect.MySQL5InnoDBDialect +hibernate_connection_driver_class=com.mysql.cj.jdbc.Driver +hibernate_connection_url=jdbc:mysql://localhost:3306/onedev?serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false&disableMariaDbDriver=true +hibernate_connection_username=root +hibernate_connection_password=root +``` + +> PostgreSQL + +```env +hibernate_dialect=io.onedev.server.persistence.PostgreSQLDialect +hibernate_connection_driver_class=org.postgresql.Driver +hibernate_connection_url=jdbc:postgresql://localhost:5432/onedev +hibernate_connection_username=postgres +hibernate_connection_password=postgres +``` + +> MariaDB + +```env +hibernate_dialect=org.hibernate.dialect.MySQL5InnoDBDialect +hibernate_connection_driver_class=org.mariadb.jdbc.Driver +hibernate_connection_url=jdbc:mariadb://localhost:3306/onedev +hibernate_connection_username=root +hibernate_connection_password=root +``` + +> MS SQL Server + +```env +hibernate_dialect=org.hibernate.dialect.SQLServer2012Dialect +hibernate_connection_driver_class=com.microsoft.sqlserver.jdbc.SQLServerDriver +hibernate_connection_url=jdbc:sqlserver://localhost:1433;databaseName=onedev +hibernate_connection_username=sa +hibernate_connection_password=sa +``` + +## 反向代理 + +假设您的 OneDev 实例在端口 6610 上运行,并且您希望通过 http://onedev.example.com 访问它。 + +请注意不要使用 `localhost` 作为 `proxy_pass` 的目标,Docker 容器内的 `localhost` 是容器本身,而不是宿主机。 + +### Nginx + +```nginx +server { + listen 80; + listen [::]:80; + + server_name onedev.example.com; + + # 上传文件大小不限制 + client_max_body_size 0; + + location /wicket/websocket { + proxy_pass http://localhost:6610/wicket/websocket; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } + + location /~server { + proxy_pass http://localhost:6610/~server; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + } + + location /~api/streaming { + proxy_pass http://localhost:6610/~api/streaming; + proxy_buffering off; + } + + location / { + proxy_pass http://localhost:6610/; + } +} +``` + +### Caddy Server + +```caddy + caddy reverse-proxy --from onedev.example.com --to localhost:6610 +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/onedev/data.yml b/appstore/onedev/data.yml new file mode 100644 index 00000000..4b0ae71a --- /dev/null +++ b/appstore/onedev/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: onedev + name: OneDev + tags: + - DevOps + - Storage + - Local + shortDescZh: 单一 DevOps 平台 + shortDescEn: Single DevOps Platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://onedev.io + github: https://github.com/theonedev/onedev/ + document: https://docs.onedev.io diff --git a/appstore/onedev/logo.png b/appstore/onedev/logo.png new file mode 100644 index 00000000..2a258552 Binary files /dev/null and b/appstore/onedev/logo.png differ diff --git a/appstore/openfire/4.9.0/.env b/appstore/openfire/4.9.0/.env new file mode 100644 index 00000000..dd4f4559 --- /dev/null +++ b/appstore/openfire/4.9.0/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +OPENFIRE_ROOT_PATH=/home/openfire + +# WebUI 端口 (HTTP) [必填] +PANEL_APP_PORT_HTTP=9090 + +# WebUI 端口 (HTTPS) [必填] +PANEL_APP_PORT_HTTPS=9091 + +# 服务端口 [必填] +PANEL_APP_PORT_SERVER=5222 + +# 消息服务端口 [必填] +PANEL_APP_PORT_MESSAGE=7777 + diff --git a/appstore/openfire/4.9.0/data.yml b/appstore/openfire/4.9.0/data.yml new file mode 100644 index 00000000..3a75c5e5 --- /dev/null +++ b/appstore/openfire/4.9.0/data.yml @@ -0,0 +1,41 @@ +additionalProperties: + formFields: + - default: "/home/openfire" + edit: true + envKey: OPENFIRE_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 9090 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 (HTTP) + labelEn: WebUI port (HTTP) + required: true + rule: paramPort + type: number + - default: 9091 + edit: true + envKey: PANEL_APP_PORT_HTTPS + labelZh: WebUI 端口 (HTTPS) + labelEn: WebUI port (HTTPS) + required: true + rule: paramPort + type: number + - default: 5222 + edit: true + envKey: PANEL_APP_PORT_SERVER + labelZh: 服务端口 + labelEn: Server port + required: true + rule: paramPort + type: number + - default: 7777 + edit: true + envKey: PANEL_APP_PORT_MESSAGE + labelZh: 消息服务端口 + labelEn: Message service port + required: true + rule: paramPort + type: number diff --git a/appstore/openfire/4.9.0/docker-compose.yml b/appstore/openfire/4.9.0/docker-compose.yml new file mode 100644 index 00000000..18d3bc56 --- /dev/null +++ b/appstore/openfire/4.9.0/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true +services: + openfire: + container_name: openfire + env_file: + - ./envs/global.env + - .env + image: nasqueron/openfire:4.9.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:9090 + - ${PANEL_APP_PORT_WSS}:9091 + - ${PANEL_APP_PORT_SERVER}:5222 + - ${PANEL_APP_PORT_MESSAGE}:7777 + restart: always + volumes: + - ${OPENFIRE_ROOT_PATH}/data:/var/lib/openfire + - ${OPENFIRE_ROOT_PATH}/logs:/var/log/openfire diff --git a/appstore/openfire/4.9.0/envs/default.env b/appstore/openfire/4.9.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/openfire/4.9.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/openfire/4.9.0/envs/global.env b/appstore/openfire/4.9.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/openfire/4.9.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/openfire/4.9.0/scripts/init.sh b/appstore/openfire/4.9.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/openfire/4.9.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/openfire/4.9.0/scripts/uninstall.sh b/appstore/openfire/4.9.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/openfire/4.9.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/openfire/4.9.0/scripts/upgrade.sh b/appstore/openfire/4.9.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/openfire/4.9.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/openfire/README.md b/appstore/openfire/README.md new file mode 100644 index 00000000..033b9d1b --- /dev/null +++ b/appstore/openfire/README.md @@ -0,0 +1,19 @@ +# OpenFire + +OpenFire 是一个实时协作服务器。它使用了唯一被广泛采用的即时通讯开放协议 XMPP(也叫 Jabber) + +![OpenFire](https://file.lifebus.top/imgs/openfire_logo.svg) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 说明 + +当前应用处于测试阶段,仅供学习交流使用。 + +## 安装说明 + +由于该服务需要开放很多端口,请注意防火墙配置。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/openfire/data.yml b/appstore/openfire/data.yml new file mode 100644 index 00000000..cd827a1d --- /dev/null +++ b/appstore/openfire/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: openfire + name: OpenFire + tags: + - WebSite + - Middleware + - Tool + - Local + shortDescZh: OpenFire 是一个实时协作服务器。它使用了唯一被广泛采用的即时通讯开放协议 XMPP(也叫 Jabber) + shortDescEn: OpenFire is a real-time collaboration server. It uses the only widely adopted open protocol for instant messaging, XMPP (also called Jabber) + type: website + crossVersionUpdate: true + limit: 0 + website: https://igniterealtime.org/ + github: https://github.com/igniterealtime/Openfire/ + document: https://igniterealtime.org/projects/openfire/ diff --git a/appstore/openfire/logo.png b/appstore/openfire/logo.png new file mode 100644 index 00000000..be734a6c Binary files /dev/null and b/appstore/openfire/logo.png differ diff --git a/appstore/outline/0.81.1/.env b/appstore/outline/0.81.1/.env new file mode 100644 index 00000000..b19151eb --- /dev/null +++ b/appstore/outline/0.81.1/.env @@ -0,0 +1,108 @@ +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# 数据持久化路径 [必填] +OUTLINE_ROOT_PATH=/home/outline + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# 加密密钥 [必填] +SECRET_KEY=fbad4f5da794acbc10f060cdfcf8673300f3302d87f076d7f6e781d4840e9c3d + +# 工具密钥 [必填] +UTILS_SECRET=b2be1c54acbfe6d965bda01e63195cc815e4743a6fb5ba5f82eae916d98989b5 + +# 域名 [必填] +URL=http://127.0.0.1:3000 + +# CDN 域名 +CDN_URL= + +# iFramely 地址 [必填] +IFRAMELY_URL=https://iframe.ly/api/iframely + +# iFramely 密钥 +IFRAMELY_API_KEY= + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 用户名 [必填] +DB_USERNAME=outline + +# 数据库 密码 [必填] +DB_PASSWORD= + +# 数据库 名称 [必填] +DB_DATABASE_NAME=outline + +# Redis 链接 [必填] +REDIS_URL=redis://localhost:6379 + +# Slack 客户端 ID (鉴权) +SLACK_CLIENT_ID= + +# Slack 客户端密钥 (鉴权) +SLACK_CLIENT_SECRET= + +# Google 客户端 ID (鉴权) +GOOGLE_CLIENT_ID= + +# Google 客户端密钥 (鉴权) +GOOGLE_CLIENT_SECRET= + +# Discord 客户端 ID (鉴权) +DISCORD_CLIENT_ID= + +# Discord 客户端密钥 (鉴权) +DISCORD_CLIENT_SECRET= + +# Discord 服务端 ID (鉴权) +DISCORD_SERVER_ID= + +# Discord 服务端角色 (鉴权) +DISCORD_SERVER_ROLES= + +# SMTP 主机 +SMTP_HOST= + +# SMTP 端口 +SMTP_PORT=465 + +# SMTP 用户名 +SMTP_USERNAME= + +# SMTP 密码 +SMTP_PASSWORD= + +# SMTP 发件人 +SMTP_FROM_EMAIL= + +# Slack 验证令牌 (Slack 集成) +SLACK_VERIFICATION_TOKEN= + +# Slack 应用ID (Slack 集成) +SLACK_APP_ID= + +# GitHub 客户端 ID (GitHub 集成) +GITHUB_CLIENT_ID= + +# GitHub 客户端密钥 (GitHub 集成) +GITHUB_CLIENT_SECRET= + +# GitHub 应用名称 (GitHub 集成) +GITHUB_APP_NAME= + +# GitHub 应用ID (GitHub 集成) +GITHUB_APP_ID= + +# GitHub 应用私钥 (GitHub 集成) +GITHUB_APP_PRIVATE_KEY= + diff --git a/appstore/outline/0.81.1/data.yml b/appstore/outline/0.81.1/data.yml new file mode 100644 index 00000000..c2e78f0e --- /dev/null +++ b/appstore/outline/0.81.1/data.yml @@ -0,0 +1,274 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_REDIS_SERVICE + required: true + type: service + default: redis + envKey: PANEL_REDIS_TYPE + labelZh: Redis 服务 (前置检查) + labelEn: Redis Service (Pre-check) + required: true + type: apps + values: + - label: Redis + value: redis + - child: + default: "" + envKey: PANEL_POSTGRES_SERVICE + required: true + type: service + default: postgresql + envKey: PANEL_POSTGRES_TYPE + labelZh: Postgres 服务 (前置检查) + labelEn: Postgres Service (Pre-check) + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - default: "/home/outline" + edit: true + envKey: OUTLINE_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "fbad4f5da794acbc10f060cdfcf8673300f3302d87f076d7f6e781d4840e9c3d" + edit: true + envKey: SECRET_KEY + labelZh: 加密密钥 + labelEn: Secret Key + required: true + type: password + - default: "b2be1c54acbfe6d965bda01e63195cc815e4743a6fb5ba5f82eae916d98989b5" + edit: true + envKey: UTILS_SECRET + labelZh: 工具密钥 + labelEn: Utils Secret + required: true + type: password + - default: "http://127.0.0.1:3000" + edit: true + envKey: URL + labelZh: 域名 + labelEn: Domain + required: true + rule: paramExtUrl + type: text + - default: "" + edit: true + envKey: CDN_URL + labelZh: CDN 域名 + labelEn: CDN Domain + required: false + type: text + - default: "https://iframe.ly/api/iframely" + edit: true + envKey: IFRAMELY_URL + labelZh: iFramely 地址 + labelEn: iFramely URL + required: true + rule: paramExtUrl + type: text + - default: "" + edit: true + envKey: IFRAMELY_API_KEY + labelZh: iFramely 密钥 + labelEn: iFramely API Key + required: false + type: text + - default: "127.0.0.1" + edit: true + envKey: DB_HOSTNAME + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "outline" + edit: true + envKey: DB_USERNAME + labelZh: 数据库 用户名 + labelEn: Database User + required: true + type: text + - default: "" + edit: true + envKey: DB_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + random: true + required: true + rule: paramComplexity + type: password + - default: "outline" + edit: true + envKey: DB_DATABASE_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text + - default: "redis://localhost:6379" + edit: true + envKey: REDIS_URL + labelZh: Redis 链接 + labelEn: Redis URL + required: true + type: text + - default: "" + edit: true + envKey: SLACK_CLIENT_ID + labelZh: Slack 客户端 ID (鉴权) + labelEn: Slack Client ID (Auth) + required: false + type: text + - default: "" + edit: true + envKey: SLACK_CLIENT_SECRET + labelZh: Slack 客户端密钥 (鉴权) + labelEn: Slack Client Secret (Auth) + required: false + type: password + - default: "" + edit: true + envKey: GOOGLE_CLIENT_ID + labelZh: Google 客户端 ID (鉴权) + labelEn: Google Client ID (Auth) + required: false + type: text + - default: "" + edit: true + envKey: GOOGLE_CLIENT_SECRET + labelZh: Google 客户端密钥 (鉴权) + labelEn: Google Client Secret (Auth) + required: false + type: password + - default: "" + edit: true + envKey: DISCORD_CLIENT_ID + labelZh: Discord 客户端 ID (鉴权) + labelEn: Discord Client ID (Auth) + required: false + type: text + - default: "" + edit: true + envKey: DISCORD_CLIENT_SECRET + labelZh: Discord 客户端密钥 (鉴权) + labelEn: Discord Client Secret (Auth) + required: false + type: password + - default: "" + edit: true + envKey: DISCORD_SERVER_ID + labelZh: Discord 服务端 ID (鉴权) + labelEn: Discord Server ID (Auth) + required: false + type: text + - default: "" + edit: true + envKey: DISCORD_SERVER_ROLES + labelZh: Discord 服务端角色 (鉴权) + labelEn: Discord Server Roles (Auth) + required: false + type: text + - default: "" + edit: true + envKey: SMTP_HOST + labelZh: SMTP 主机 + labelEn: SMTP Host + required: false + type: text + - default: 465 + edit: true + envKey: SMTP_PORT + labelZh: SMTP 端口 + labelEn: SMTP Port + required: false + type: number + - default: "" + edit: true + envKey: SMTP_USERNAME + labelZh: SMTP 用户名 + labelEn: SMTP Username + required: false + type: text + - default: "" + edit: true + envKey: SMTP_PASSWORD + labelZh: SMTP 密码 + labelEn: SMTP Password + required: false + type: password + - default: "" + edit: true + envKey: SMTP_FROM_EMAIL + labelZh: SMTP 发件人 + labelEn: SMTP From Email + required: false + type: text + - default: "" + edit: true + envKey: SLACK_VERIFICATION_TOKEN + labelZh: Slack 验证令牌 (Slack 集成) + labelEn: Slack Verification Token (Slack Integration) + required: false + type: text + - default: "" + edit: true + envKey: SLACK_APP_ID + labelZh: Slack 应用ID (Slack 集成) + labelEn: Slack App ID (Slack Integration) + required: false + type: text + - default: "" + edit: true + envKey: GITHUB_CLIENT_ID + labelZh: GitHub 客户端 ID (GitHub 集成) + labelEn: GitHub Client ID (GitHub Integration) + required: false + type: text + - default: "" + edit: true + envKey: GITHUB_CLIENT_SECRET + labelZh: GitHub 客户端密钥 (GitHub 集成) + labelEn: GitHub Client Secret (GitHub Integration) + required: false + type: password + - default: "" + edit: true + envKey: GITHUB_APP_NAME + labelZh: GitHub 应用名称 (GitHub 集成) + labelEn: GitHub App Name (GitHub Integration) + required: false + type: text + - default: "" + edit: true + envKey: GITHUB_APP_ID + labelZh: GitHub 应用ID (GitHub 集成) + labelEn: GitHub App ID (GitHub Integration) + required: false + type: text + - default: "" + edit: true + envKey: GITHUB_APP_PRIVATE_KEY + labelZh: GitHub 应用私钥 (GitHub 集成) + labelEn: GitHub App Private Key (GitHub Integration) + required: false + type: password diff --git a/appstore/outline/0.81.1/docker-compose.yml b/appstore/outline/0.81.1/docker-compose.yml new file mode 100644 index 00000000..8a45f39a --- /dev/null +++ b/appstore/outline/0.81.1/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + outline: + container_name: outline + env_file: + - ./envs/global.env + - ./envs/outline.env + - .env + environment: + - DATABASE_URL=postgres://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOSTNAME}:${DB_PORT}/${DB_DATABASE_NAME} + image: outlinewiki/outline:0.81.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + restart: always + volumes: + - ${OUTLINE_ROOT_PATH}/data:/var/lib/outline/data diff --git a/appstore/outline/0.81.1/envs/default.env b/appstore/outline/0.81.1/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/outline/0.81.1/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/outline/0.81.1/envs/global.env b/appstore/outline/0.81.1/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/outline/0.81.1/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/outline/0.81.1/envs/outline.env b/appstore/outline/0.81.1/envs/outline.env new file mode 100644 index 00000000..1e366c08 --- /dev/null +++ b/appstore/outline/0.81.1/envs/outline.env @@ -0,0 +1,224 @@ +# –––––––––––––––– REQUIRED –––––––––––––––– + +NODE_ENV=production + +# Generate a hex-encoded 32-byte random key. You should use `openssl rand -hex 32` +# in your terminal to generate a random value. +SECRET_KEY=generate_a_new_key + +# Generate a unique random key. The format is not important but you could still use +# `openssl rand -hex 32` in your terminal to produce this. +UTILS_SECRET=generate_a_new_key + +# For production point these at your databases, in development the default +# should work out of the box. +DATABASE_URL=postgres://user:pass@localhost:5432/outline +DATABASE_CONNECTION_POOL_MIN= +DATABASE_CONNECTION_POOL_MAX= +# Uncomment this to disable SSL for connecting to Postgres +PGSSLMODE=disable + +# For redis you can either specify an ioredis compatible url like this +REDIS_URL=redis://localhost:6379 +# or alternatively, if you would like to provide additional connection options, +# use a base64 encoded JSON connection option object. Refer to the ioredis documentation +# for a list of available options. +# Example: Use Redis Sentinel for high availability +# {"sentinels":[{"host":"sentinel-0","port":26379},{"host":"sentinel-1","port":26379}],"name":"mymaster"} +# REDIS_URL=ioredis://eyJzZW50aW5lbHMiOlt7Imhvc3QiOiJzZW50aW5lbC0wIiwicG9ydCI6MjYzNzl9LHsiaG9zdCI6InNlbnRpbmVsLTEiLCJwb3J0IjoyNjM3OX1dLCJuYW1lIjoibXltYXN0ZXIifQ== + +# URL should point to the fully qualified, publicly accessible URL. If using a +# proxy the port in URL and PORT may be different. +URL=http://127.0.0.1:3000 +PORT=3000 + +# See [documentation](docs/SERVICES.md) on running a separate collaboration +# server, for normal operation this does not need to be set. +COLLABORATION_URL= + +# Specify what storage system to use. Possible value is one of "s3" or "local". +# For "local", the avatar images and document attachments will be saved on local disk. +FILE_STORAGE=local + +# If "local" is configured for FILE_STORAGE above, then this sets the parent directory under +# which all attachments/images go. Make sure that the process has permissions to create +# this path and also to write files to it. +FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data + +# Maximum allowed size for the uploaded attachment. +FILE_STORAGE_UPLOAD_MAX_SIZE=262144000 + +# Override the maximum size of document imports, generally this should be lower +# than the document attachment maximum size. +FILE_STORAGE_IMPORT_MAX_SIZE= + +# Override the maximum size of workspace imports, these can be especially large +# and the files are temporary being automatically deleted after a period of time. +FILE_STORAGE_WORKSPACE_IMPORT_MAX_SIZE= + +# To support uploading of images for avatars and document attachments in a distributed +# architecture an s3-compatible storage can be configured if FILE_STORAGE=s3 above. +AWS_ACCESS_KEY_ID=get_a_key_from_aws +AWS_SECRET_ACCESS_KEY=get_the_secret_of_above_key +AWS_REGION=xx-xxxx-x +AWS_S3_ACCELERATE_URL= +AWS_S3_UPLOAD_BUCKET_URL=http://s3:4569 +AWS_S3_UPLOAD_BUCKET_NAME=bucket_name_here +AWS_S3_FORCE_PATH_STYLE=true +AWS_S3_ACL=private + +# –––––––––––––– AUTHENTICATION –––––––––––––– + +# Third party signin credentials, at least ONE OF EITHER Google, Slack, +# or Microsoft is required for a working installation or you'll have no sign-in +# options. + +# To configure Slack auth, you'll need to create an Application at +# => https://api.slack.com/apps +# +# When configuring the Client ID, add a redirect URL under "OAuth & Permissions": +# https:///auth/slack.callback +SLACK_CLIENT_ID=get_a_key_from_slack +SLACK_CLIENT_SECRET=get_the_secret_of_above_key + +# To configure Google auth, you'll need to create an OAuth Client ID at +# => https://console.cloud.google.com/apis/credentials +# +# When configuring the Client ID, add an Authorized redirect URI: +# https:///auth/google.callback +GOOGLE_CLIENT_ID= +GOOGLE_CLIENT_SECRET= + +# To configure Microsoft/Azure auth, you'll need to create an OAuth Client. See +# the guide for details on setting up your Azure App: +# => https://wiki.generaloutline.com/share/dfa77e56-d4d2-4b51-8ff8-84ea6608faa4 +AZURE_CLIENT_ID= +AZURE_CLIENT_SECRET= +AZURE_RESOURCE_APP_ID= + +# To configure generic OIDC auth, you'll need some kind of identity provider. +# See documentation for whichever IdP you use to acquire the following info: +# Redirect URI is https:///auth/oidc.callback +OIDC_CLIENT_ID= +OIDC_CLIENT_SECRET= +OIDC_AUTH_URI= +OIDC_TOKEN_URI= +OIDC_USERINFO_URI= +OIDC_LOGOUT_URI= + +# Specify which claims to derive user information from +# Supports any valid JSON path with the JWT payload +OIDC_USERNAME_CLAIM=preferred_username + +# Display name for OIDC authentication +OIDC_DISPLAY_NAME=OpenID Connect + +# Space separated auth scopes. +OIDC_SCOPES=openid profile email + +# To configure the GitHub integration, you'll need to create a GitHub App at +# => https://github.com/settings/apps +# +# When configuring the Client ID, add a redirect URL under "Permissions & events": +# https:///api/github.callback +GITHUB_CLIENT_ID= +GITHUB_CLIENT_SECRET= +GITHUB_APP_NAME= +GITHUB_APP_ID= +GITHUB_APP_PRIVATE_KEY= + +# To configure Discord auth, you'll need to create a Discord Application at +# => https://discord.com/developers/applications/ +# +# When configuring the Client ID, add a redirect URL under "OAuth2": +# https:///auth/discord.callback +DISCORD_CLIENT_ID= +DISCORD_CLIENT_SECRET= + +# DISCORD_SERVER_ID should be the ID of the Discord server that Outline is +# integrated with. +# Used to verify that the user is a member of the server as well as server +# metadata such as nicknames, server icon and name. +DISCORD_SERVER_ID= + +# DISCORD_SERVER_ROLES should be a comma separated list of role IDs that are +# allowed to access Outline. If this is not set, all members of the server +# will be allowed to access Outline. +# DISCORD_SERVER_ID and DISCORD_SERVER_ROLES must be set together. +DISCORD_SERVER_ROLES= + +# –––––––––––––––– OPTIONAL –––––––––––––––– + +# Base64 encoded private key and certificate for HTTPS termination. This is only +# required if you do not use an external reverse proxy. See documentation: +# https://wiki.generaloutline.com/share/1c922644-40d8-41fe-98f9-df2b67239d45 +SSL_KEY= +SSL_CERT= + +# If using a Cloudfront/Cloudflare distribution or similar it can be set below. +# This will cause paths to javascript, stylesheets, and images to be updated to +# the hostname defined in CDN_URL. In your CDN configuration the origin server +# should be set to the same as URL. +CDN_URL= + +# Auto-redirect to https in production. The default is true but you may set to +# false if you can be sure that SSL is terminated at an external loadbalancer. +FORCE_HTTPS=false + +# Have the installation check for updates by sending anonymized statistics to +# the maintainers +ENABLE_UPDATES=true + +# How many processes should be spawned. As a reasonable rule divide your servers +# available memory by 512 for a rough estimate +WEB_CONCURRENCY=1 + +# You can remove this line if your reverse proxy already logs incoming http +# requests and this ends up being duplicative +DEBUG=http + +# Configure lowest severity level for server logs. Should be one of +# error, warn, info, http, verbose, debug and silly +LOG_LEVEL=info + +# For a complete Slack integration with search and posting to channels the +# following configs are also needed, some more details +# => https://wiki.generaloutline.com/share/be25efd1-b3ef-4450-b8e5-c4a4fc11e02a +# +SLACK_VERIFICATION_TOKEN=your_token +SLACK_APP_ID=A0XXXXXXX +SLACK_MESSAGE_ACTIONS=true + +# Optionally enable Sentry (sentry.io) to track errors and performance, +# and optionally add a Sentry proxy tunnel for bypassing ad blockers in the UI: +# https://docs.sentry.io/platforms/javascript/troubleshooting/#using-the-tunnel-option) +SENTRY_DSN= +SENTRY_TUNNEL= + +# To support sending outgoing transactional emails such as "document updated" or +# "you've been invited" you'll need to provide authentication for an SMTP server +SMTP_HOST= +SMTP_PORT= +SMTP_USERNAME= +SMTP_PASSWORD= +SMTP_FROM_EMAIL= +SMTP_REPLY_EMAIL= +SMTP_TLS_CIPHERS= +SMTP_SECURE=true + +# The default interface language. See translate.getoutline.com for a list of +# available language codes and their rough percentage translated. +DEFAULT_LANGUAGE=zh_CN + +# Optionally enable rate limiter at application web server +RATE_LIMITER_ENABLED=true + +# Configure default throttling parameters for rate limiter +RATE_LIMITER_REQUESTS=1000 +RATE_LIMITER_DURATION_WINDOW=60 + +# Iframely API config +# https://iframe.ly/api/oembed +# https://iframe.ly/api/iframely +IFRAMELY_URL=https://iframe.ly/api/iframely +# IFRAMELY_API_KEY= diff --git a/appstore/outline/0.81.1/scripts/init.sh b/appstore/outline/0.81.1/scripts/init.sh new file mode 100644 index 00000000..df380dc9 --- /dev/null +++ b/appstore/outline/0.81.1/scripts/init.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/outline.env" >> .env + + # setup-2 remove empty values + sed -i '/^.*=""/d' .env + + # setup-3 update directory permissions + chmod 777 -R "$OUTLINE_ROOT_PATH" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/outline/0.81.1/scripts/uninstall.sh b/appstore/outline/0.81.1/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/outline/0.81.1/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/outline/0.81.1/scripts/upgrade.sh b/appstore/outline/0.81.1/scripts/upgrade.sh new file mode 100644 index 00000000..754933ac --- /dev/null +++ b/appstore/outline/0.81.1/scripts/upgrade.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/outline.env" >> .env + + chmod 777 -R "$OUTLINE_ROOT_PATH" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/outline/README.md b/appstore/outline/README.md new file mode 100644 index 00000000..7145c3b4 --- /dev/null +++ b/appstore/outline/README.md @@ -0,0 +1,82 @@ +# Outline + +您团队的知识库 + +![Outline](https://file.lifebus.top/imgs/outline_cover.png) + +迷失在乱七八糟的文档中?无法确定谁有访问权限?同事在聊天中反复询问相同的信息?是时候整理团队知识了。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 安装说明 + +### 参数 `加密密钥` 与 `工具密钥` 配置 + +`加密密钥` 与 `工具密钥` 为必填项,且必须为 32 位长度的字符串。 + +可在终端使用 `openssl` 生成 + +```sh +openssl rand -hex 32 +``` + +### 参数 `Redis 链接` 配置 + +由于Redis特殊性,需要按照格式填写,格式如下: + +格式:`redis://[:password@]host[:port][/database][?option=value]` + +``` +# 无密码 +redis://127.0.0.1:6379 + +# 有密码 password +redis://password@127.0.0.1:6379 + +# 有用户名 username,有密码 password +redis://username:password@127.0.0.1:6379 + +# 有密码,指定数据库 1 +redis://password@127.0.0.1:6379/1 + +# 有密码,指定数据库,指定超时时间 +redis://password@127.0.0.1:6379/1?timeout=10 + +# 有密码,指定数据库,指定超时时间,指定连接池大小 +redis://password@127.0.0.1:6379/1?timeout=10&pool_size=10 +``` + +同时,支持使用 `ioredis://` 协议,格式如下: + +> 示例: +> `ioredis://eyJzZW50aW5lbHMiOlt7Imhvc3QiOiJzZW50aW5lbC0wIiwicG9ydCI6MjYzNzl9LHsiaG9zdCI6InNlbnRpbmVsLTEiLCJwb3J0IjoyNjM3OX1dLCJuYW1lIjoibXltYXN0ZXIifQ==` +> +> 对应的解码后的内容为: +> {"sentinels":[{"host":"sentinel-0","port":26379},{"host":"sentinel-1","port":26379}],"name":"mymaster"} + +格式:`ioredis://Base64({})` + +## 反向代理 + +> Nginx + +```nginx + location / { + proxy_pass http://localhost:3000/; + + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_header Host $host; + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Scheme $scheme; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_redirect off; + } +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/outline/data.yml b/appstore/outline/data.yml new file mode 100644 index 00000000..c94b653d --- /dev/null +++ b/appstore/outline/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: outline + name: Outline + tags: + - WebSite + - Storage + - Local + shortDescZh: 您团队的知识库 + shortDescEn: Your team's knowledge base + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.getoutline.com/ + github: https://github.com/outline/outline/ + document: https://docs.getoutline.com/ diff --git a/appstore/outline/logo.png b/appstore/outline/logo.png new file mode 100644 index 00000000..215ab1c4 Binary files /dev/null and b/appstore/outline/logo.png differ diff --git a/appstore/page-spy-web/1.9.6/.env b/appstore/page-spy-web/1.9.6/.env new file mode 100644 index 00000000..ae48894f --- /dev/null +++ b/appstore/page-spy-web/1.9.6/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +PAGE_SPY_WEB_ROOT_PATH=/home/PageSpy + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=6752 + diff --git a/appstore/page-spy-web/1.9.6/data.yml b/appstore/page-spy-web/1.9.6/data.yml new file mode 100644 index 00000000..aff2e78d --- /dev/null +++ b/appstore/page-spy-web/1.9.6/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: "/home/PageSpy" + edit: true + envKey: PAGE_SPY_WEB_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 6752 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number diff --git a/appstore/page-spy-web/1.9.6/docker-compose.yml b/appstore/page-spy-web/1.9.6/docker-compose.yml new file mode 100644 index 00000000..631aefc6 --- /dev/null +++ b/appstore/page-spy-web/1.9.6/docker-compose.yml @@ -0,0 +1,20 @@ +networks: + 1panel-network: + external: true +services: + page-spy-web: + container_name: page-spy-web + env_file: + - ./envs/global.env + - .env + image: huolalatech/page-spy-web:v1.9.6 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:6752 + restart: always + volumes: + - ${PAGE_SPY_WEB_ROOT_PATH}/log:/app/log + - ${PAGE_SPY_WEB_ROOT_PATH}/data:/app/data diff --git a/appstore/page-spy-web/1.9.6/envs/default.env b/appstore/page-spy-web/1.9.6/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/page-spy-web/1.9.6/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/page-spy-web/1.9.6/envs/global.env b/appstore/page-spy-web/1.9.6/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/page-spy-web/1.9.6/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/page-spy-web/1.9.6/scripts/init.sh b/appstore/page-spy-web/1.9.6/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/page-spy-web/1.9.6/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/page-spy-web/1.9.6/scripts/uninstall.sh b/appstore/page-spy-web/1.9.6/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/page-spy-web/1.9.6/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/page-spy-web/1.9.6/scripts/upgrade.sh b/appstore/page-spy-web/1.9.6/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/page-spy-web/1.9.6/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/page-spy-web/README.md b/appstore/page-spy-web/README.md new file mode 100644 index 00000000..e20df235 --- /dev/null +++ b/appstore/page-spy-web/README.md @@ -0,0 +1,27 @@ +# PageSpy + +PageSpy 是一个用于在 Web、小程序和 HarmonyOS 应用等平台上调试项目的工具。 + +![PageSpy](https://file.lifebus.top/imgs/pagespy_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +PageSpy 是一款兼容 Web / 小程序 / React Native / 鸿蒙 App 等平台项目的开源调试平台。基于对原生 API +的封装,它将调用原生方法时的参数进行过滤、转化,整理成一定格式的消息供调试端消费;调试端收到消息数据后,提供类似本地控制台的功能界面将数据呈现出来。 + +![PageSpy 流程图](https://file.lifebus.top/imgs/pagespy_process.png) + +## 何时使用 + +任何无法在本地使用控制台调试的场景,都是 PageSpy 可以大显身手的时候! 一起来看下面的几个场景案例: + +本地调试 H5、Webview 应用:以往有些产品提供了可以在 H5 上查看信息的面板,但移动端屏幕太小操作不便、显示不友好,以及信息被截断等问题; +远程办公、跨地区协同:传统沟通方式如邮件、电话、视频会议等,沟通效率不高、故障信息不全面,容易误解误判; +用户终端上出现白屏问题:传统定位问题的方式包括数据监控、日志分析等,这些方式依赖排障人员要理解业务需求场景、技术实现; +PageSpy 的目标,就是为包括以上场景的人员提供帮助。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/page-spy-web/data.yml b/appstore/page-spy-web/data.yml new file mode 100644 index 00000000..651f4e10 --- /dev/null +++ b/appstore/page-spy-web/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: page-spy-web + name: PageSpy + tags: + - WebSite + - Middleware + - Local + shortDescZh: 开源调试平台 + shortDescEn: Open source debugging platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.pagespy.org/ + github: https://github.com/HuolalaTech/page-spy-web/ + document: https://www.pagespy.org/ diff --git a/appstore/page-spy-web/logo.png b/appstore/page-spy-web/logo.png new file mode 100644 index 00000000..528a5d7e Binary files /dev/null and b/appstore/page-spy-web/logo.png differ diff --git a/appstore/percona/8.0/.env b/appstore/percona/8.0/.env new file mode 100644 index 00000000..f9ccfd0f --- /dev/null +++ b/appstore/percona/8.0/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +PERCONA_ROOT_PATH=/home/percona + +# 连接端口 [必填] +PANEL_APP_PORT_HTTP=3306 + +# 管理员密码 [必填] +MYSQL_ROOT_PASSWORD= + diff --git a/appstore/percona/8.0/config/my.cnf b/appstore/percona/8.0/config/my.cnf new file mode 100644 index 00000000..feee7b63 --- /dev/null +++ b/appstore/percona/8.0/config/my.cnf @@ -0,0 +1,19 @@ +[mysqld] +skip-host-cache +skip-name-resolve +datadir=/var/lib/mysql +socket=/var/run/mysqld/mysqld.sock +secure-file-priv=/var/lib/mysql-files +user=mysql +log_error_suppression_list='MY-013360' + +character_set_server=utf8 +lower_case_table_names=1 +group_concat_max_len=1024000 +log_bin_trust_function_creators=1 + +pid-file=/var/run/mysqld/mysqld.pid +[client] +socket=/var/run/mysqld/mysqld.sock + +!includedir /etc/mysql/conf.d/ diff --git a/appstore/percona/8.0/data.yml b/appstore/percona/8.0/data.yml new file mode 100644 index 00000000..787019e9 --- /dev/null +++ b/appstore/percona/8.0/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: "/home/percona" + edit: true + envKey: PERCONA_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3306 + envKey: PANEL_APP_PORT_HTTP + labelZh: 连接端口 + labelEn: Connection Port + required: true + rule: paramPort + type: number + - default: "" + envKey: MYSQL_ROOT_PASSWORD + labelZh: 管理员密码 + labelEn: Admin Password + random: true + required: true + rule: paramComplexity + type: password diff --git a/appstore/percona/8.0/docker-compose.yml b/appstore/percona/8.0/docker-compose.yml new file mode 100644 index 00000000..826f3896 --- /dev/null +++ b/appstore/percona/8.0/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + percona: + command: + - --default-authentication-plugin=mysql_native_password + container_name: percona + env_file: + - ./envs/global.env + - .env + image: percona:8.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3306 + restart: always + user: ${UID:-1000}:${GID:-1000} + volumes: + - ${PERCONA_ROOT_PATH}/data:/var/lib/mysql + - ${PERCONA_ROOT_PATH}/config/my.cnf:/etc/my.cnf + - ${PERCONA_ROOT_PATH}/log:/var/log/mysql + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro diff --git a/appstore/percona/8.0/envs/default.env b/appstore/percona/8.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/percona/8.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/percona/8.0/envs/global.env b/appstore/percona/8.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/percona/8.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/percona/8.0/scripts/init.sh b/appstore/percona/8.0/scripts/init.sh new file mode 100644 index 00000000..ae47f700 --- /dev/null +++ b/appstore/percona/8.0/scripts/init.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + mkdir -p "$PERCONA_ROOT_PATH" + mkdir -p "$PERCONA_ROOT_PATH/config" + mkdir -p "$PERCONA_ROOT_PATH/data" + mkdir -p "$PERCONA_ROOT_PATH/log" + + cp ./config/my.cnf "$PERCONA_ROOT_PATH/config/my.cnf" + + chown -R 1000:1000 "$PERCONA_ROOT_PATH" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/percona/8.0/scripts/uninstall.sh b/appstore/percona/8.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/percona/8.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/percona/8.0/scripts/upgrade.sh b/appstore/percona/8.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/percona/8.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/percona/README.md b/appstore/percona/README.md new file mode 100644 index 00000000..5d3ae973 --- /dev/null +++ b/appstore/percona/README.md @@ -0,0 +1,18 @@ +# Percona + +Percona Server for MySQL + +![Percona](https://file.lifebus.top/imgs/percona_logo.jpg) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Percona Server for MySQL 是任何 MySQL 数据库的免费、完全兼容、增强且开源的直接替代品。它提供卓越的性能、可扩展性和仪器。 + +Percona Server for MySQL 受到数千家企业的信赖,可以为其最苛刻的工作负载提供更好的性能和并发性。 +它通过优化的性能、更高的性能可扩展性和可用性、增强的备份以及更高的可见性为 MySQL 服务器用户提供更高的价值。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/percona/data.yml b/appstore/percona/data.yml new file mode 100644 index 00000000..20d33838 --- /dev/null +++ b/appstore/percona/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: percona + name: Percona + tags: + - Database + - Local + shortDescZh: 关系型数据库 + shortDescEn: Open source relational database management system + type: runtime + crossVersionUpdate: true + limit: 0 + website: https://www.percona.com/ + github: https://github.com/percona/percona-server/ + document: https://www.percona.com/mysql/software/percona-server-for-mysql/ diff --git a/appstore/percona/logo.png b/appstore/percona/logo.png new file mode 100644 index 00000000..c8dd3e36 Binary files /dev/null and b/appstore/percona/logo.png differ diff --git a/appstore/photoprism/240915/.env b/appstore/photoprism/240915/.env new file mode 100644 index 00000000..16e27336 --- /dev/null +++ b/appstore/photoprism/240915/.env @@ -0,0 +1,60 @@ +# MySQL 服务 (前置检查) [必填] +PANEL_DB_TYPE=mariadb + +# 数据持久化路径 [必填] +PHOTOPRISM_ROOT_PATH=/home/photoprism + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2342 + +# 管理员用户名 [必填] +PHOTOPRISM_ADMIN_USER=admin + +# 管理员密码 (8-72 字符) [必填] +PHOTOPRISM_ADMIN_PASSWORD=password_random + +# 认证模式 [必填] +PHOTOPRISM_AUTH_MODE=password + +# 网站 URL [必填] +PHOTOPRISM_SITE_URL=http://127.0.0.1:2342 + +# 网站标题 [必填] +PHOTOPRISM_SITE_CAPTION=AI-Powered Photos App + +# 网站描述 +PHOTOPRISM_SITE_DESCRIPTION= + +# 网站作者 +PHOTOPRISM_SITE_AUTHOR= + +# 数据库 地址 [必填] +PHOTOPRISM_DATABASE_SERVER=127.0.0.1:3306 + +# 数据库 用户名 [必填] +PHOTOPRISM_DATABASE_USER=photoprism + +# 数据库 密码 [必填] +PHOTOPRISM_DATABASE_PASSWORD= + +# 数据库 名称 [必填] +PHOTOPRISM_DATABASE_NAME=photoprism + +# 原始文件限制最大值 (MB) [必填] +PHOTOPRISM_ORIGINALS_LIMIT=5000 + +# 开启定时备份计划 [必填] +PHOTOPRISM_BACKUP_DATABASE=true + +# 定时备份计划周期 (daily, weekly, cron) [必填] +PHOTOPRISM_BACKUP_SCHEDULE=daily + +# 视频编码器 [必填] +PHOTOPRISM_FFMPEG_ENCODER=software + +# 视频分辨率限制 [必填] +PHOTOPRISM_FFMPEG_SIZE=1920 + +# 视频比特率限制 [必填] +PHOTOPRISM_FFMPEG_BITRATE=32 + diff --git a/appstore/photoprism/240915/data.yml b/appstore/photoprism/240915/data.yml new file mode 100644 index 00000000..877fada8 --- /dev/null +++ b/appstore/photoprism/240915/data.yml @@ -0,0 +1,180 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: mariadb + edit: true + envKey: PANEL_DB_TYPE + labelZh: MySQL 服务 (前置检查) + labelEn: Database Service (Pre-check) + required: true + type: apps + values: + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/photoprism" + edit: true + envKey: PHOTOPRISM_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 2342 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "admin" + edit: true + envKey: PHOTOPRISM_ADMIN_USER + labelZh: 管理员用户名 + labelEn: Admin username + required: true + type: text + - default: "password_random" + edit: true + envKey: PHOTOPRISM_ADMIN_PASSWORD + labelZh: 管理员密码 (8-72 字符) + labelEn: Admin password + required: true + rule: paramComplexity + random: true + type: password + - default: "password" + edit: true + envKey: PHOTOPRISM_AUTH_MODE + labelZh: 认证模式 + labelEn: Authentication mode + required: true + type: select + values: + - label: 密码 + value: "password" + - label: 公开 + value: "public" + - default: "http://127.0.0.1:2342" + edit: true + envKey: PHOTOPRISM_SITE_URL + labelZh: 网站 URL + labelEn: Site URL + required: true + type: text + - default: "AI-Powered Photos App" + edit: true + envKey: PHOTOPRISM_SITE_CAPTION + labelZh: 网站标题 + labelEn: Site caption + required: true + type: text + - default: "" + edit: true + envKey: PHOTOPRISM_SITE_DESCRIPTION + labelZh: 网站描述 + labelEn: Site description + required: false + type: text + - default: "" + edit: true + envKey: PHOTOPRISM_SITE_AUTHOR + labelZh: 网站作者 + labelEn: Site author + required: false + type: text + - default: "127.0.0.1:3306" + edit: true + envKey: PHOTOPRISM_DATABASE_SERVER + labelZh: 数据库 地址 + labelEn: Database Server + required: true + type: text + - default: "photoprism" + edit: true + envKey: PHOTOPRISM_DATABASE_USER + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "" + edit: true + envKey: PHOTOPRISM_DATABASE_PASSWORD + labelZh: 数据库 密码 + labelEn: Database Password + required: true + type: password + - default: "photoprism" + edit: true + envKey: PHOTOPRISM_DATABASE_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text + - default: 5000 + edit: true + envKey: PHOTOPRISM_ORIGINALS_LIMIT + labelZh: 原始文件限制最大值 (MB) + labelEn: Originals limit max value (MB) + required: true + type: number + - default: "true" + edit: true + envKey: PHOTOPRISM_BACKUP_DATABASE + labelZh: 开启定时备份计划 + labelEn: Enable scheduled backup plan + required: true + type: select + values: + - label: + value: "true" + - label: + value: "false" + - default: "daily" + edit: true + envKey: PHOTOPRISM_BACKUP_SCHEDULE + labelZh: 定时备份计划周期 (daily, weekly, cron) + labelEn: Scheduled backup plan cycle (daily, weekly, cron format) + required: true + type: text + - default: "software" + edit: true + envKey: PHOTOPRISM_FFMPEG_ENCODER + labelZh: 视频编码器 + labelEn: Video encoder + required: true + type: select + values: + - label: 软解 + value: "software" + - label: 硬解 (Intel) + value: "intel" + - label: 硬解 (nvidia) + value: "nvidia" + - label: 硬解 (apple) + value: "apple" + - label: 硬解 (raspberry) + value: "raspberry" + - label: 硬解 (vaapi) + value: "vaapi" + - default: "1920" + edit: true + envKey: PHOTOPRISM_FFMPEG_SIZE + labelZh: 视频分辨率限制 + labelEn: Video resolution limit + required: true + type: text + - default: "32" + edit: true + envKey: PHOTOPRISM_FFMPEG_BITRATE + labelZh: 视频比特率限制 + labelEn: Video bitrate limit + required: true + type: text diff --git a/appstore/photoprism/240915/docker-compose.yml b/appstore/photoprism/240915/docker-compose.yml new file mode 100644 index 00000000..9f97a2cb --- /dev/null +++ b/appstore/photoprism/240915/docker-compose.yml @@ -0,0 +1,38 @@ +networks: + 1panel-network: + external: true +services: + photoprism: + container_name: photoprism + devices: + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - ./envs/photoprism.env + - .env + environment: + PHOTOPRISM_ADMIN_USERNAME: ${PHOTOPRISM_ADMIN_USER} + PHOTOPRISM_DATABASE_DRIVER: mysql + PHOTOPRISM_GID: 0 + PHOTOPRISM_PASSWORD_LENGTH: 8 + PHOTOPRISM_UID: 0 + PHOTOPRISM_UMASK: 18 + image: photoprism/photoprism:240915 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2342 + restart: always + security_opt: + - seccomp:unconfined + - apparmor:unconfined + stop_grace_period: 10s + user: 1000:1000 + volumes: + - ${PHOTOPRISM_ROOT_PATH}/originals:/photoprism/originals + - ${PHOTOPRISM_ROOT_PATH}/storage:/photoprism/storage + - ${PHOTOPRISM_ROOT_PATH}/family:/photoprism/originals/family + - ${PHOTOPRISM_ROOT_PATH}/import:/photoprism/import + working_dir: /photoprism diff --git a/appstore/photoprism/240915/envs/default.env b/appstore/photoprism/240915/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/photoprism/240915/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/photoprism/240915/envs/global.env b/appstore/photoprism/240915/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/photoprism/240915/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/photoprism/240915/envs/photoprism.env b/appstore/photoprism/240915/envs/photoprism.env new file mode 100644 index 00000000..4cbf9229 --- /dev/null +++ b/appstore/photoprism/240915/envs/photoprism.env @@ -0,0 +1,25 @@ +PHOTOPRISM_DISABLE_TLS="false" +PHOTOPRISM_DEFAULT_TLS="true" +PHOTOPRISM_HTTP_COMPRESSION="gzip" +PHOTOPRISM_LOG_LEVEL="info" +PHOTOPRISM_READONLY="false" +PHOTOPRISM_EXPERIMENTAL="false" +PHOTOPRISM_DISABLE_CHOWN="false" +PHOTOPRISM_DISABLE_WEBDAV="false" +PHOTOPRISM_DISABLE_SETTINGS="false" +PHOTOPRISM_DISABLE_TENSORFLOW="false" +PHOTOPRISM_DISABLE_FACES="false" +PHOTOPRISM_DISABLE_CLASSIFICATION="false" +PHOTOPRISM_DISABLE_VECTORS="false" +PHOTOPRISM_DISABLE_RAW="false" +PHOTOPRISM_RAW_PRESETS="false" +PHOTOPRISM_SIDECAR_YAML="true" +PHOTOPRISM_BACKUP_ALBUMS="true" +PHOTOPRISM_BACKUP_DATABASE="true" +PHOTOPRISM_BACKUP_SCHEDULE="daily" +PHOTOPRISM_INDEX_SCHEDULE="" +PHOTOPRISM_AUTO_INDEX=300 +PHOTOPRISM_AUTO_IMPORT=-1 +PHOTOPRISM_DETECT_NSFW="false" +PHOTOPRISM_UPLOAD_NSFW="true" +PHOTOPRISM_INIT="https gpu ffmpeg tensorflow" diff --git a/appstore/photoprism/240915/scripts/init.sh b/appstore/photoprism/240915/scripts/init.sh new file mode 100644 index 00000000..b762dc6b --- /dev/null +++ b/appstore/photoprism/240915/scripts/init.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/photoprism.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/photoprism/240915/scripts/uninstall.sh b/appstore/photoprism/240915/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/photoprism/240915/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/photoprism/240915/scripts/upgrade.sh b/appstore/photoprism/240915/scripts/upgrade.sh new file mode 100644 index 00000000..b762dc6b --- /dev/null +++ b/appstore/photoprism/240915/scripts/upgrade.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + sed -i '/^APP_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + echo "APP_ENV_FILE=${CURRENT_DIR}/envs/photoprism.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/photoprism/README.md b/appstore/photoprism/README.md new file mode 100644 index 00000000..e5d02541 --- /dev/null +++ b/appstore/photoprism/README.md @@ -0,0 +1,122 @@ +# PhotoPrism + +面向去中心化网络的人工智能照片应用程序 + +![PhotoPrism](https://file.lifebus.top/imgs/photoprism_cover.png) + +PhotoPrism® 是一款适用于去中心化网络的人工智能照片应用程序。它利用最新技术自动标记和查找图片,而不会妨碍您。您可以在家中、私人服务器上或在云中运行它。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + +我们的使命是提供对用户和隐私最友好的解决方案,让您的图片井然有序且易于访问。这就是为什么 PhotoPrism +是从头开始构建的,可以在您需要的任何地方运行,而不会影响自由、隐私或功能: + ++ 浏览所有照片和视频,无需担心RAW 转换、重复或视频格式 ++ 使用强大的搜索过滤器轻松查找特定图片 ++ 认出家人和朋友的面孔 ++ 根据图片内容和位置自动分类 ++ 将鼠标悬停在相册和搜索结果中的实时照片上即可播放它们 ++ 由于用户界面是渐进式 Web 应用程序,因此它提供了类似本机应用程序的体验,您可以方便地将其安装在所有主要操作系统和移动设备的主屏幕上 ++ 包括四张高分辨率世界地图,带回您最喜欢的旅行的回忆 ++ 元数据从 Exif、XMP 和其他来源(例如 Google Photos)中提取并合并 ++ 还可以搜索更多图像属性,例如Colors 、 Chroma和Quality ++ 使用PhotoSync在后台安全备份 iOS 和 Android 手机 ++ WebDAV 客户端(例如 Microsoft 的 Windows Explorer 和 Apple 的 Finder)可以直接连接到 + PhotoPrism,允许您从计算机中打开、编辑和删除文件,就像它们是本地文件一样 + +## 环境说明 + +由于 `PhotoPrism` 有依赖于 `FFmpeg`,所以需要在安装时进行自动安装。 + +`PhotoPrism` 会自动安装 `FFmpeg`,并且会在初始化时进行检测。 + +由于使用 `TensorFlow` 进行人脸识别,等相关数据处理,所以需要在安装时进行自动安装。 + +`PhotoPrism` 会自动安装 `TensorFlow`,并且会在初始化时进行检测。 + +建议用户开启 至少 `4GB` 交换分区,增大内存使用。 + +## 安装说明 + +推荐使用 `MariaDB` 数据库,作为 `PhotoPrism` 的数据库存储。 + +### `数据库 地址` 配置 + +格式:`host:port` + +示例:`127.0.0.1:3306` + +### `认证模式` 配置 + +默认值:`密码` + +程序必须登录才能使用。 + +如果您选择: `公开` + +那么任何人都将允许访问程序。 + +### 硬件驱动挂载 + +默认仅挂载: `/dev/dri`,如果您的设备不存在硬件驱动,请使用删除完整 `devices` 配置。 + +可以通过 `ls /dev/` 查看存在的设备驱动。 + +```yml +devices: + - /dev/dri:/dev/dri + # - /dev/nvidia0:/dev/nvidia0 + # - /dev/nvidiactl:/dev/nvidiactl + # - /dev/nvidia-modeset:/dev/nvidia-modeset + # - /dev/nvidia-nvswitchctl:/dev/nvidia-nvswitchctl + # - /dev/nvidia-uvm:/dev/nvidia-uvm + # - /dev/nvidia-uvm-tools:/dev/nvidia-uvm-tools + # - /dev/video11:/dev/video11 +``` + +如果您的设备存在其他硬件驱动,可以选择挂载。删除 `# ` 号即可。格式为:`宿主机路径:容器路径`。 + +格式请与 `- /dev/dri:/dev/dri` 保持一致。 + +### `视频编码器` 配置 + +`PhotoPrism` 支持 `FFmpeg` 视频编码器,需要安装 `FFmpeg`。 + +初始化时,`PhotoPrism` 会自动进行 `FFmpeg` 的安装。 + +使用 `FFmpeg` 时,需要选择 `软解`。 + +如果您的设备存在其他硬件驱动,可以选择 `硬解` 的方式加速 `视频转码`。 + +很不幸的是 Windows 下不能很好的映射驱动程序,所以 `硬解` 选项在 Windows 下不可用。 + +### `视频分辨率限制` 配置 + +默认值: `1920`,表达为 `1920x1080`。 + +当转码低于此分辨率的视频时,`PhotoPrism` 会保持原始分辨率,不会将其放大处理。 + +### `视频比特率限制` 配置 + +默认值: `32`,单位为 `Mbit/s`。 + +如果有需要,可以根据自己的需求进行调整。 + +## 设备同步 PhotoSync + +
+
+ App Store + App Store +
+
+ Google Play + Google Play +
+
+ +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/photoprism/data.yml b/appstore/photoprism/data.yml new file mode 100644 index 00000000..2c7577bb --- /dev/null +++ b/appstore/photoprism/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: photoprism + name: PhotoPrism + tags: + - WebSite + - Tool + - Local + shortDescZh: 面向去中心化网络的人工智能照片应用程序 + shortDescEn: 面向去中心化网络的人工智能照片应用程序 + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.photoprism.app/ + github: https://github.com/photoprism/photoprism/ + document: https://docs.photoprism.app/ diff --git a/appstore/photoprism/logo.png b/appstore/photoprism/logo.png new file mode 100644 index 00000000..35c1d6b1 Binary files /dev/null and b/appstore/photoprism/logo.png differ diff --git a/appstore/pingvin-share/1.6.1/.env b/appstore/pingvin-share/1.6.1/.env new file mode 100644 index 00000000..219831f2 --- /dev/null +++ b/appstore/pingvin-share/1.6.1/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +PINGVIN_SHARE_ROOT_PATH=/home/pingvin-share + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=3333 + +# 是否信任代理 [必填] +TRUST_PROXY=false + diff --git a/appstore/pingvin-share/1.6.1/data.yml b/appstore/pingvin-share/1.6.1/data.yml new file mode 100644 index 00000000..d021fb90 --- /dev/null +++ b/appstore/pingvin-share/1.6.1/data.yml @@ -0,0 +1,29 @@ +additionalProperties: + formFields: + - default: "/home/pingvin-share" + edit: true + envKey: PINGVIN_SHARE_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3333 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number + - default: "false" + edit: true + envKey: TRUST_PROXY + labelZh: 是否信任代理 + labelEn: Trust proxy + required: true + type: select + values: + - label: 信任代理 + value: "true" + - label: 不信任代理 + value: "false" diff --git a/appstore/pingvin-share/1.6.1/docker-compose.yml b/appstore/pingvin-share/1.6.1/docker-compose.yml new file mode 100644 index 00000000..b245ce88 --- /dev/null +++ b/appstore/pingvin-share/1.6.1/docker-compose.yml @@ -0,0 +1,25 @@ +networks: + 1panel-network: + external: true +services: + pingvin-share: + container_name: pingvin-share + env_file: + - ./envs/global.env + - .env + environment: + - BACKEND_PORT=8080 + - PORT=3333 + - API_URL=http://localhost:8080 + - TRUST_PROXY=false + image: stonith404/pingvin-share:v1.6.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3333 + restart: always + volumes: + - ${PINGVIN_SHARE_ROOT_PATH}/data:/opt/app/backend/data + - ${PINGVIN_SHARE_ROOT_PATH}/images:/opt/app/frontend/public/img diff --git a/appstore/pingvin-share/1.6.1/envs/default.env b/appstore/pingvin-share/1.6.1/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/pingvin-share/1.6.1/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/pingvin-share/1.6.1/envs/global.env b/appstore/pingvin-share/1.6.1/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/pingvin-share/1.6.1/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/pingvin-share/1.6.1/scripts/init.sh b/appstore/pingvin-share/1.6.1/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/pingvin-share/1.6.1/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/pingvin-share/1.6.1/scripts/uninstall.sh b/appstore/pingvin-share/1.6.1/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/pingvin-share/1.6.1/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/pingvin-share/1.6.1/scripts/upgrade.sh b/appstore/pingvin-share/1.6.1/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/pingvin-share/1.6.1/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/pingvin-share/README.md b/appstore/pingvin-share/README.md new file mode 100644 index 00000000..a28fa118 --- /dev/null +++ b/appstore/pingvin-share/README.md @@ -0,0 +1,20 @@ +# Pingvin Share + +Pingvin Share 是一个自托管的文件共享平台,是 WeTransfer 的替代方案。 + +![Pingvin Share](https://file.lifebus.top/imgs/pingvin-share_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 使用链接共享文件 ++ 无限制的文件大小(仅受限于磁盘空间) ++ 为股份设置失效日期 ++ 安全共享,有限制访客和密码 ++ 收件人 ++ 与 ClamAV 的集成以进行安全扫描 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/pingvin-share/data.yml b/appstore/pingvin-share/data.yml new file mode 100644 index 00000000..bd400d33 --- /dev/null +++ b/appstore/pingvin-share/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: pingvin-share + name: Pingvin Share + tags: + - WebSite + - Local + shortDescZh: 一个集轻盈与美观于一体的自托管文件共享平台 + shortDescEn: A self-hosted file sharing platform that combines lightness and beauty + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/stonith404/pingvin-share/ + github: https://github.com/stonith404/pingvin-share/ + document: https://stonith404.github.io/pingvin-share/introduction/ diff --git a/appstore/pingvin-share/logo.png b/appstore/pingvin-share/logo.png new file mode 100644 index 00000000..bb7ea122 Binary files /dev/null and b/appstore/pingvin-share/logo.png differ diff --git a/appstore/pixman/1.8.2/.env b/appstore/pixman/1.8.2/.env new file mode 100644 index 00000000..8ccfb02d --- /dev/null +++ b/appstore/pixman/1.8.2/.env @@ -0,0 +1,12 @@ +# 数据持久化路径 [必填] +PIXMAN_ROOT_PATH=/home/pixman + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5000 + +# MyTVSuper 授权码 +MYTVSUPER_TOKEN= + +# 网络代理 +NETWORK_PROXY= + diff --git a/appstore/pixman/1.8.2/data.yml b/appstore/pixman/1.8.2/data.yml new file mode 100644 index 00000000..2edb4e67 --- /dev/null +++ b/appstore/pixman/1.8.2/data.yml @@ -0,0 +1,31 @@ +additionalProperties: + formFields: + - default: "/home/pixman" + edit: true + envKey: PIXMAN_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 5000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: MYTVSUPER_TOKEN + labelZh: MyTVSuper 授权码 + labelEn: MyTVSuper Token + required: false + type: text + - default: "" + edit: true + envKey: NETWORK_PROXY + labelZh: 网络代理 + labelEn: Network Proxy + required: false + type: text diff --git a/appstore/pixman/1.8.2/docker-compose.yml b/appstore/pixman/1.8.2/docker-compose.yml new file mode 100644 index 00000000..e162c6a8 --- /dev/null +++ b/appstore/pixman/1.8.2/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + pixman: + container_name: pixman + env_file: + - ./envs/global.env + - .env + environment: + - http_proxy=${NETWORK_PROXY:-} + - https_proxy=${NETWORK_PROXY:-} + image: pixman/pixman:v1.8.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5000 + restart: always + volumes: + - ${PIXMAN_ROOT_PATH}/m3u:/app/app/data/m3u diff --git a/appstore/pixman/1.8.2/envs/default.env b/appstore/pixman/1.8.2/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/pixman/1.8.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/pixman/1.8.2/envs/global.env b/appstore/pixman/1.8.2/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/pixman/1.8.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/pixman/1.8.2/m3u/Adult.m3u b/appstore/pixman/1.8.2/m3u/Adult.m3u new file mode 100644 index 00000000..d4147496 --- /dev/null +++ b/appstore/pixman/1.8.2/m3u/Adult.m3u @@ -0,0 +1,50 @@ +#EXTINF:-1 tvg-id="" tvg-name="Live Cams" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Live Cams +http://cdn.adultiptv.net/livecams.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="MILF" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",MILF +http://cdn.adultiptv.net/milf.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Big Dick" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Big Dick +http://cdn.adultiptv.net/bigdick.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Big Tits" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Big Tits +http://cdn.adultiptv.net/bigtits.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Fetish" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Fetish +http://cdn.adultiptv.net/fetish.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Pornstar" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Pornstar +http://cdn.adultiptv.net/pornstar.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Big Ass" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Big Ass +http://cdn.adultiptv.net/bigass.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Interracial" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Interracial +http://cdn.adultiptv.net/interracial.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Latina" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Latina +http://cdn.adultiptv.net/latina.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="POV" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",POV +http://cdn.adultiptv.net/pov.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Blowjob" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Blowjob +http://cdn.adultiptv.net/blowjob.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Teen" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Teen +http://cdn.adultiptv.net/teen.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Hardcore" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Hardcore +http://cdn.adultiptv.net/hardcore.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Cuckold" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Cuckold +http://cdn.adultiptv.net/cuckold.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Threesome" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Threesome +http://cdn.adultiptv.net/threesome.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Russian" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Russian +http://cdn.adultiptv.net/russian.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Lesbian" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Lesbian +http://cdn.adultiptv.net/lesbian.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Rough" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Rough +http://cdn.adultiptv.net/rough.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Gangbang" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Gangbang +http://cdn.adultiptv.net/gangbang.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Anal" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Anal +http://cdn.adultiptv.net/anal.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Compilation" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Compilation +http://cdn.adultiptv.net/compilation.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Brunette" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Brunette +http://cdn.adultiptv.net/brunette.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Blonde" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Blonde +http://cdn.adultiptv.net/blonde.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Gay" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Gay +http://cdn.adultiptv.net/gay.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Asian" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Asian +http://cdn.adultiptv.net/asian.m3u8 diff --git a/appstore/pixman/1.8.2/m3u/CCTV.m3u b/appstore/pixman/1.8.2/m3u/CCTV.m3u new file mode 100644 index 00000000..b8299e56 --- /dev/null +++ b/appstore/pixman/1.8.2/m3u/CCTV.m3u @@ -0,0 +1,57 @@ +#EXTM3U +#EXTINF:-1 tvg-name="CCTV1" tvg-logo="https://live.fanmingming.com/tv/CCTV1.png" group-title="央视频道",CCTV-1 综合 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN111128BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUU6FFmRK8Hl0ytyd5e5kWGEwoDIwMxbrlyyVy9x6ZDKnldIYKOjBOUjRyoym5n7Kg0yIYstFTUfqtC14fzxhy5Y +#EXTINF:-1 tvg-name="CCTV2" tvg-logo="https://live.fanmingming.com/tv/CCTV2.png" group-title="央视频道",CCTV-2 财经 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000036BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfGVSARKsxkWGZw7vFUuOj2QZHeRzosIxVbl7i2QHFATHA3k5wDWG1qHkZQAleNv%2FbI +#EXTINF:-1 tvg-name="CCTV3" tvg-logo="https://live.fanmingming.com/tv/CCTV3.png" group-title="央视频道",CCTV-3 综艺 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727c125355/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMUNNEYLCPUtKY62j1Wp5u04wipypKUQ1TTuR2lXvBl5YpHqBJmlA19x22TD9bUOjk +#EXTINF:-1 tvg-name="CCTV4" tvg-logo="https://live.fanmingming.com/tv/CCTV4.png" group-title="央视频道",CCTV-4 中文国际 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000037BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfH0ZQXwaiVktPr6ILPKXqwOUC2ZXft7ZULN6h9qLQPFOTSlVTfophiKaMb8h1kPV74 +#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://live.fanmingming.com/tv/CCTV5.png" group-title="央视频道",CCTV-5 体育 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727e617ca0/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMSXw4ajlL%2FoUYC2RZQQDco6uQSifXBocz5ID6RePfIKQ4rFWiHjq%2FeZoDmrzW%2FKlw +#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://live.fanmingming.com/tv/CCTV5+.png" group-title="央视频道",CCTV-5+ 体育赛事 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63872908d48f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSBx06ZL9Bo6JOM%2BSTjxZRK254G1jtietGzDaHvFNRtjXOvFnbf%2BTao33JqYlfMYYn2z3agOn9gvNMT9KmBaR9o +#EXTINF:-1 tvg-name="CCTV6" tvg-logo="https://live.fanmingming.com/tv/CCTV6.png" group-title="央视频道",CCTV-6 电影 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728804b1f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdazJhFQmuq4XUiks9ZrIlJN%2BknLs8H%2BSxcDXy%2BTesEc8Q0KCN89MjYoj85Sol1kbKI4 +#EXTINF:-1 tvg-name="CCTV7" tvg-logo="https://live.fanmingming.com/tv/CCTV7.png" group-title="央视频道",CCTV-7 国防军事 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000038BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHYKFve4MwNzRa0jPXeHjqnBjPmzSdKDNWNHhnZSaMGCXKmdx8d%2BnYdhVK5ge22ot4 +#EXTINF:-1 tvg-name="CCTV8" tvg-logo="https://live.fanmingming.com/tv/CCTV8.png" group-title="央视频道",CCTV-8 电视剧 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728970aa82/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdaymid9ta2tVUW0%2FdVrFqszC1EVEkAbpip1IYxn%2Ba2aA%2BVAihIiw9D8ejUsDbfU0K68 +#EXTINF:-1 tvg-name="CCTV9" tvg-logo="https://live.fanmingming.com/tv/CCTV9.png" group-title="央视频道",CCTV-9 纪录 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000039BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHArfvJF2pWpm4RxcBNhZ7j9vEUeCQte%2BbQaOGNIUEEK%2B3RBE1BC9EUsM18gnb%2FyAA +#EXTINF:-1 tvg-name="CCTV10" tvg-logo="https://live.fanmingming.com/tv/CCTV10.png" group-title="央视频道",CCTV-10 科教 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949784BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5OuXozn3alq9%2BUx7ZLG1w9aOfkLjZvYj56D3xkOAtSOIoLsdw8c1%2BCwLDg1aS4esN4 +#EXTINF:-1 tvg-name="CCTV11" tvg-logo="https://live.fanmingming.com/tv/CCTV11.png" group-title="央视频道",CCTV-11 戏曲 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000053BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Qj2xHA4vdPGsjBbxSL3p%2FmAObVTfznR%2Fpc%2B76QYmLRMuL3Lj9iabhv8arW7kJe6%2F4 +#EXTINF:-1 tvg-name="CCTV12" tvg-logo="https://live.fanmingming.com/tv/CCTV12.png" group-title="央视频道",CCTV-12 社会与法 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000040BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUd3JM2PCgDefrKOVZLNt0QMAmpLefguRLiOPXiDRWhxHg8yim2giTBA8RILsb%2B8Y5pkFUyZBE%2FkNJAbwncEegkU +#EXTINF:-1 tvg-name="CCTV13" tvg-logo="https://live.fanmingming.com/tv/CCTV13.png" group-title="央视频道",CCTV-13 新闻 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000054BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0SuXozn3alq9%2BUx7ZLG1w9awc14iEUxQ5VsTsr5pEBsmF56tXUfsukRUpygmTCKvAI +#EXTINF:-1 tvg-name="CCTV14" tvg-logo="https://live.fanmingming.com/tv/CCTV14.png" group-title="央视频道",CCTV-14 少儿 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949788BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5PYKFve4MwNzRa0jPXeHjqnp7khdLaCMP6L4QpTf84Oz6DvCG1%2BJ81QvStkxO%2FoGm8 +#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://live.fanmingming.com/tv/CCTV15.png" group-title="央视频道",CCTV-15 音乐 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000055BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Tdo%2FUL80msfbhDYvoWpNl31Dy7jHvMl%2FzVUrNxhL1ek1YEGVDZ7lCg0LtKJY4Ku%2B8 +#EXTINF:-1 tvg-name="CCTV16" tvg-logo="https://live.fanmingming.com/tv/CCTV16.png" group-title="央视频道",CCTV-16 奥林匹克 +http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226100/index.m3u8 +#EXTINF:-1 tvg-name="CCTV17" tvg-logo="https://live.fanmingming.com/tv/CCTV17.png" group-title="央视频道",CCTV-17 农业农村 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728afa13b4/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdaz%2FyAI9to%2FMBBt%2FivcdSfljJ1%2FqqamWUjAiBAxNssfyBlZUDSXAIMtStS86hRHFuJM +#EXTINF:-1 tvg-name="CCTV4K" tvg-logo="https://live.fanmingming.com/tv/CCTV4K.png" group-title="央视频道",CCTV-4K 超高清 +http://liveop.cctv.cn/hls/4KHD/playlist.m3u8 +#EXTINF:-1 tvg-name="CHC影迷电影" tvg-logo="https://live.fanmingming.com/tv/CHC影迷电影.png" group-title="央视频道",CHC影迷电影 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380764b172c9/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CHC动作电影" tvg-logo="https://live.fanmingming.com/tv/CHC动作电影.png" group-title="央视频道",CHC动作电影 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380763222d00/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CHC家庭影院" tvg-logo="https://live.fanmingming.com/tv/CHC家庭影院.png" group-title="央视频道",CHC家庭影院 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807601b19dd/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN" tvg-logo="https://live.fanmingming.com/tv/CGTN.png" group-title="央视频道",CGTN英语 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806f4f64099/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN纪录" tvg-logo="https://live.fanmingming.com/tv/CGTN纪录.png" group-title="央视频道",CGTN记录 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63a15d0ee63f3/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN俄语" tvg-logo="https://live.fanmingming.com/tv/CGTN俄语.png" group-title="央视频道",CGTN俄语 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638071d299009/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN法语" tvg-logo="https://live.fanmingming.com/tv/CGTN法语.png" group-title="央视频道",CGTN法语 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806fb631afe/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN西语" tvg-logo="https://live.fanmingming.com/tv/CGTN西语.png" group-title="央视频道",CGTN西语 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806f81c8eb5/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN阿语" tvg-logo="https://live.fanmingming.com/tv/CGTN阿语.png" group-title="央视频道",CGTN阿语 +http://livear.cgtn.com/1000a/prog_index.m3u8 diff --git a/appstore/pixman/1.8.2/m3u/CNTV.m3u b/appstore/pixman/1.8.2/m3u/CNTV.m3u new file mode 100644 index 00000000..0745157c --- /dev/null +++ b/appstore/pixman/1.8.2/m3u/CNTV.m3u @@ -0,0 +1,171 @@ +#EXTM3U +#EXTINF:-1 tvg-name="凤凰中文" tvg-logo="https://live.fanmingming.com/tv/凤凰卫视中文台.png" group-title="卫视频道",凤凰中文 +http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701pcc72.m3u8 +#EXTINF:-1 tvg-name="凤凰资讯" tvg-logo="https://live.fanmingming.com/tv/凤凰卫视资讯台.png" group-title="卫视频道",凤凰资讯 +http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701pin72.m3u8 +#EXTINF:-1 tvg-name="凤凰香港" tvg-logo="https://live.fanmingming.com/tv/凤凰卫视香港台.png" group-title="卫视频道",凤凰香港 +http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701phk72.m3u8 +#EXTINF:-1 tvg-name="北京卫视" tvg-logo="https://live.fanmingming.com/tv/北京卫视.png" group-title="卫视频道",北京卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8 +#EXTINF:-1 tvg-name="湖南卫视" tvg-logo="https://live.fanmingming.com/tv/湖南卫视.png" group-title="卫视频道",湖南卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8 +#EXTINF:-1 tvg-name="东方卫视" tvg-logo="https://live.fanmingming.com/tv/东方卫视.png" group-title="卫视频道",东方卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8 +#EXTINF:-1 tvg-name="四川卫视" tvg-logo="https://live.fanmingming.com/tv/四川卫视.png" group-title="卫视频道",四川卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8 +#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://live.fanmingming.com/tv/天津卫视.png" group-title="卫视频道",天津卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8 +#EXTINF:-1 tvg-name="安徽卫视" tvg-logo="https://live.fanmingming.com/tv/安徽卫视.png" group-title="卫视频道",安徽卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8 +#EXTINF:-1 tvg-name="山东卫视" tvg-logo="https://live.fanmingming.com/tv/山东卫视.png" group-title="卫视频道",山东卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8 +#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://live.fanmingming.com/tv/深圳卫视.png" group-title="卫视频道",深圳卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8 +#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://live.fanmingming.com/tv/广东卫视.png" group-title="卫视频道",广东卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8 +#EXTINF:-1 tvg-name="广西卫视" tvg-logo="https://live.fanmingming.com/tv/广西卫视.png" group-title="卫视频道",广西卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226549/index.m3u8 +#EXTINF:-1 tvg-name="江苏卫视" tvg-logo="https://live.fanmingming.com/tv/江苏卫视.png" group-title="卫视频道",江苏卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8 +#EXTINF:-1 tvg-name="江西卫视" tvg-logo="https://live.fanmingming.com/tv/江西卫视.png" group-title="卫视频道",江西卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8 +#EXTINF:-1 tvg-name="河北卫视" tvg-logo="https://live.fanmingming.com/tv/河北卫视.png" group-title="卫视频道",河北卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8 +#EXTINF:-1 tvg-name="河南卫视" tvg-logo="https://live.fanmingming.com/tv/河南卫视.png" group-title="卫视频道",河南卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8 +#EXTINF:-1 tvg-name="浙江卫视" tvg-logo="https://live.fanmingming.com/tv/浙江卫视.png" group-title="卫视频道",浙江卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8 +#EXTINF:-1 tvg-name="海南卫视" tvg-logo="https://live.fanmingming.com/tv/海南卫视.png" group-title="卫视频道",海南卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8 +#EXTINF:-1 tvg-name="湖北卫视" tvg-logo="https://live.fanmingming.com/tv/湖北卫视.png" group-title="卫视频道",湖北卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8 +#EXTINF:-1 tvg-name="山西卫视" tvg-logo="https://live.fanmingming.com/tv/山西卫视.png" group-title="卫视频道",山西卫视 +http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/00000001000000060000000000000318/index.m3u8?IAS +#EXTINF:-1 tvg-name="东南卫视" tvg-logo="https://live.fanmingming.com/tv/东南卫视.png" group-title="卫视频道",东南卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8 +#EXTINF:-1 tvg-name="贵州卫视" tvg-logo="https://live.fanmingming.com/tv/贵州卫视.png" group-title="卫视频道",贵州卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8 +#EXTINF:-1 tvg-name="辽宁卫视" tvg-logo="https://live.fanmingming.com/tv/辽宁卫视.png" group-title="卫视频道",辽宁卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.m3u8 +#EXTINF:-1 tvg-name="重庆卫视" tvg-logo="https://live.fanmingming.com/tv/重庆卫视.png" group-title="卫视频道",重庆卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8 +#EXTINF:-1 tvg-name="黑龙江卫视" tvg-logo="https://live.fanmingming.com/tv/黑龙江卫视.png" group-title="卫视频道",黑龙江卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8 +#EXTINF:-1 tvg-name="内蒙古卫视" tvg-logo="https://live.fanmingming.com/tv/内蒙古卫视.png" group-title="卫视频道",内蒙古卫视 +http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000319/index.m3u8?IAS +#EXTINF:-1 tvg-name="宁夏卫视" tvg-logo="https://live.fanmingming.com/tv/宁夏卫视.png" group-title="卫视频道",宁夏卫视 +http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000309/index.m3u8?IAS +#EXTINF:-1 tvg-name="陕西卫视" tvg-logo="https://live.fanmingming.com/tv/陕西卫视.png" group-title="卫视频道",陕西卫视 +http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000313/index.m3u8?IAS +#EXTINF:-1 tvg-name="吉林卫视" tvg-logo="https://live.fanmingming.com/tv/吉林卫视.png" group-title="卫视频道",吉林卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8 +#EXTINF:-1 tvg-name="甘肃卫视" tvg-logo="https://live.fanmingming.com/tv/甘肃卫视.png" group-title="卫视频道",甘肃卫视 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8 +#EXTINF:-1 tvg-name="云南卫视" tvg-logo="https://live.fanmingming.com/tv/云南卫视.png" group-title="卫视频道",云南卫视 +http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000305/index.m3u8?IAS +#EXTINF:-1 tvg-name="三沙卫视" tvg-logo="https://live.fanmingming.com/tv/三沙卫视.png" group-title="卫视频道",三沙卫视 +http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?IAS +#EXTINF:-1 tvg-name="青海卫视" tvg-logo="https://live.fanmingming.com/tv/青海卫视.png" group-title="卫视频道",青海卫视 +http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225628/index.m3u8 +#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://live.fanmingming.com/tv/新疆卫视.png" group-title="卫视频道",新疆卫视 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225635/index.m3u8 +#EXTINF:-1 tvg-name="西藏卫视" tvg-logo="https://live.fanmingming.com/tv/西藏卫视.png" group-title="卫视频道",西藏卫视 +http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000317/index.m3u8?IAS +#EXTINF:-1 tvg-name="兵团卫视" tvg-logo="https://live.fanmingming.com/tv/兵团卫视.png" group-title="卫视频道",兵团卫视 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226439/index.m3u8 +#EXTINF:-1 tvg-name="延边卫视" tvg-logo="https://live.fanmingming.com/tv/延边卫视.png" group-title="卫视频道",延边卫视 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8 +#EXTINF:-1 tvg-name="安多卫视" tvg-logo="https://live.fanmingming.com/tv/安多卫视.png" group-title="卫视频道",安多卫视 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8 +#EXTINF:-1 tvg-name="厦门卫视" tvg-logo="https://live.fanmingming.com/tv/厦门卫视.png" group-title="卫视频道",厦门卫视 +http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000193/index.m3u8?IAS +#EXTINF:-1 tvg-name="康巴卫视" tvg-logo="https://live.fanmingming.com/tv/康巴卫视.png" group-title="卫视频道",康巴卫视 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8 +#EXTINF:-1 tvg-name="中国教育1台" tvg-logo="https://live.fanmingming.com/tv/CETV1.png" group-title="卫视频道",CETV-1 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8 +#EXTINF:-1 tvg-name="中国教育2台" tvg-logo="https://live.fanmingming.com/tv/CETV2.png" group-title="卫视频道",CETV-2 +http://[2409:8087:1a0b:df::4013]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8 +#EXTINF:-1 tvg-name="中国教育4台" tvg-logo="https://live.fanmingming.com/tv/CETV4.png" group-title="卫视频道",CETV-4 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8 +#EXTINF:-1 tvg-name="内蒙古蒙语卫视" tvg-logo="https://live.fanmingming.com/tv/内蒙古蒙语卫视.png" group-title="内蒙频道",蒙语卫视 +https://livestream-bt.nmtv.cn/nmtv/2315general.m3u8?txSecret=e2b255285dd119a92c8aa5cdf00f8b84&txTime=771EF880 +#EXTINF:-1 tvg-name="爱上4K" tvg-logo="https://live.fanmingming.com/tv/爱上4K.png" tvg-logo="" group-title="数字频道",爱上4K +http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000459/index.m3u8?IAS +#EXTINF:-1 tvg-name="上海纪实人文" tvg-logo="https://live.fanmingming.com/tv/纪实人文.png" group-title="数字频道",纪实人文 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225738/index.m3u8 +#EXTINF:-1 tvg-name="纪实科教" tvg-logo="https://live.fanmingming.com/tv/北京纪实科教.png" group-title="数字频道",纪实科教 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225729/index.m3u8 +#EXTINF:-1 tvg-name="劲爆体育" tvg-logo="https://live.fanmingming.com/tv/劲爆体育.png" group-title="数字频道",劲爆体育 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000008&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="全纪实" tvg-logo="https://live.fanmingming.com/tv/乐游.png" group-title="数字频道",乐游频道 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000092/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000092&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="卡酷动画" tvg-logo="https://live.fanmingming.com/tv/卡酷少儿.png" group-title="数字频道",卡酷少儿 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225654/index.m3u8 +#EXTINF:-1 tvg-name="金鹰卡通" tvg-logo="https://live.fanmingming.com/tv/金鹰卡通.png" group-title="数字频道",金鹰卡通 +http://[2409:8087:1a0b:df::4008]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225653/index.m3u8 +#EXTINF:-1 tvg-name="金鹰纪实" tvg-logo="https://live.fanmingming.com/tv/金鹰纪实.png" group-title="数字频道",金鹰纪实 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN4766929BESTVSMGSMG/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="茶" tvg-logo="https://live.fanmingming.com/tv/茶.png" group-title="数字频道",茶友频道 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638729d8aca53/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSBx06ZL9Bo6JOM%2BSTjxZRIdUCZxTtaM%2Bza0L7mJjkPMmnEhAf%2Bi68sKjzRCbPoTU0E%2B6Pia2CkRtxgPs8Tmw7I +#EXTINF:-1 tvg-name="快乐垂钓" tvg-logo="https://live.fanmingming.com/tv/快乐垂钓.png" group-title="数字频道",快乐垂钓 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638729b6002c4/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="哒啵赛事" tvg-logo="https://live.fanmingming.com/tv/哒啵赛事.png" group-title="数字频道",哒啵赛事 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225675/index.m3u8 +#EXTINF:-1 tvg-name="哒啵电竞" tvg-logo="https://live.fanmingming.com/tv/哒啵电竞.png" group-title="数字频道",哒啵电竞 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000003000000066/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000003000000066&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://live.fanmingming.com/tv/优漫卡通.png" group-title="数字频道",优漫卡通 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8 +#EXTINF:-1 tvg-name="哈哈炫动" tvg-logo="https://live.fanmingming.com/tv/哈哈炫动.png" group-title="数字频道",哈哈炫动 +http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8 +#EXTINF:-1 tvg-name="黑莓动画" tvg-logo="https://live.fanmingming.com/tv/黑莓动画.png" group-title="数字频道",黑莓动画 +http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8 +#EXTINF:-1 tvg-name="黑莓电影" tvg-logo="https://live.fanmingming.com/tv/黑莓电影.png" group-title="数字频道",黑莓电影 +http://[2409:8087:1a0b:df::4014]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225743/index.m3u8 +#EXTINF:-1 tvg-name="梨园" tvg-logo="https://live.fanmingming.com/tv/河南梨园.png" group-title="数字频道",梨园频道 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380788ba7bed/index.m3u8?AuthInfo=toEYVdLfxymUP2l9NZpQI5%2BK6T7j%2FlRm%2BvbM9VO7bA0q1S1k1f36SqqriM0FZoFSAJRfCt8SS7X6sTRmXb81a8O4H%2FdroDKjLoDeaMQdyJQ +#EXTINF:-1 tvg-name="求索记录" tvg-logo="https://live.fanmingming.com/tv/求索记录.png" group-title="数字频道",求索记录 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000010/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000010&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="求索动物" tvg-logo="https://live.fanmingming.com/tv/求索动物.png" group-title="数字频道",求索动物 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000009/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000009&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="求索科学" tvg-logo="https://live.fanmingming.com/tv/求索科学.png" group-title="数字频道",求索科学 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000011/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000011&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="求索生活" tvg-logo="https://live.fanmingming.com/tv/求索生活.png" group-title="数字频道",求索生活 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000008&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="newtv超级体育" tvg-logo="https://live.fanmingming.com/tv/NEWTV超级体育.png" group-title="数字频道",超级体育 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8 +#EXTINF:-1 tvg-name="newtv超级电影" tvg-logo="https://live.fanmingming.com/tv/NEWTV超级电影.png" group-title="数字频道",超级电影 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8 +#EXTINF:-1 tvg-name="newtv超级电视剧" tvg-logo="https://live.fanmingming.com/tv/NEWTV超级电视剧.png" group-title="数字频道",超级视剧 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225716/index.m3u8 +#EXTINF:-1 tvg-name="newtv东北热剧" tvg-logo="https://live.fanmingming.com/tv/NEWTV东北热剧.png" group-title="数字频道",东北热剧 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225741/index.m3u8 +#EXTINF:-1 tvg-name="newtv海外剧场" tvg-logo="https://live.fanmingming.com/tv/NEWTV海外剧场.png" group-title="数字频道",海外剧场 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225671/index.m3u8 +#EXTINF:-1 tvg-name="newtv中国功夫" tvg-logo="https://live.fanmingming.com/tv/NEWTV中国功夫.png" group-title="数字频道",中国功夫 +http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225681/index.m3u8 +#EXTINF:-1 tvg-name="newtv军旅剧场" tvg-logo="https://live.fanmingming.com/tv/NEWTV军旅剧场.png" group-title="数字频道",军旅剧场 +http://[2409:8087:1a0b:df::4018]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225676/index.m3u8 +#EXTINF:-1 tvg-name="newtv惊悚悬疑" tvg-logo="https://live.fanmingming.com/tv/NEWTV惊悚悬疑.png" group-title="数字频道",惊悚悬疑 +http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8 +#EXTINF:-1 tvg-name="newtv潮妈辣婆" tvg-logo="https://live.fanmingming.com/tv/NEWTV潮妈辣婆.png" group-title="数字频道",潮妈辣婆 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225685/index.m3u8 +#EXTINF:-1 tvg-name="newtv精品体育" tvg-logo="https://live.fanmingming.com/tv/NEWTV精品体育.png" group-title="数字频道",精品体育 +http://[2409:8087:1a0b:df::4004]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8 +#EXTINF:-1 tvg-name="newtv精品纪录" tvg-logo="https://live.fanmingming.com/tv/NEWTV精品纪录.png" group-title="数字频道",精品纪录 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225672/index.m3u8 +#EXTINF:-1 tvg-name="newtv家庭剧场" tvg-logo="https://live.fanmingming.com/tv/NEWTV家庭剧场.png" group-title="数字频道",家庭剧场 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225677/index.m3u8 +#EXTINF:-1 tvg-name="newtv精品大剧" tvg-logo="https://live.fanmingming.com/tv/NEWTV精品大剧.png" group-title="数字频道",精品大剧 +http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225670/index.m3u8 +#EXTINF:-1 tvg-name="newtv军事评论" tvg-logo="https://live.fanmingming.com/tv/NEWTV军事评论.png" group-title="数字频道",军事评论 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225668/index.m3u8 +#EXTINF:-1 tvg-name="newtv明星大片" tvg-logo="https://live.fanmingming.com/tv/NEWTV明星大片.png" group-title="数字频道",明星大片 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225664/index.m3u8 +#EXTINF:-1 tvg-name="newtv欢乐剧场" tvg-logo="https://live.fanmingming.com/tv/NEWTV欢乐剧场.png" group-title="数字频道",欢乐剧场 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225742/index.m3u8 +#EXTINF:-1 tvg-name="newtv精品萌宠" tvg-logo="https://live.fanmingming.com/tv/NEWTV精品萌宠.png" group-title="数字频道",精品萌宠 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226505/index.m3u8 +#EXTINF:-1 tvg-name="newtv超级综艺" tvg-logo="https://live.fanmingming.com/tv/NEWTV超级综艺.png" group-title="数字频道",超级综艺 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225714/index.m3u8 +#EXTINF:-1 tvg-name="newtv金牌综艺" tvg-logo="https://live.fanmingming.com/tv/NEWTV金牌综艺.png" group-title="数字频道",金牌综艺 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8 diff --git a/appstore/pixman/1.8.2/m3u/IPTV.m3u b/appstore/pixman/1.8.2/m3u/IPTV.m3u new file mode 100644 index 00000000..a673d103 --- /dev/null +++ b/appstore/pixman/1.8.2/m3u/IPTV.m3u @@ -0,0 +1,277 @@ +#EXTM3U +#EXTINF:-1 tvg-name="CCTV1" tvg-logo="https://live.fanmingming.com/tv/CCTV1.png" group-title="央视频道",CCTV-1 综合 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN111128BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUU6FFmRK8Hl0ytyd5e5kWGEwoDIwMxbrlyyVy9x6ZDKnldIYKOjBOUjRyoym5n7Kg0yIYstFTUfqtC14fzxhy5Y +#EXTINF:-1 tvg-name="CCTV2" tvg-logo="https://live.fanmingming.com/tv/CCTV2.png" group-title="央视频道",CCTV-2 财经 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000036BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfGVSARKsxkWGZw7vFUuOj2QZHeRzosIxVbl7i2QHFATHA3k5wDWG1qHkZQAleNv%2FbI +#EXTINF:-1 tvg-name="CCTV3" tvg-logo="https://live.fanmingming.com/tv/CCTV3.png" group-title="央视频道",CCTV-3 综艺 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727c125355/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMUNNEYLCPUtKY62j1Wp5u04wipypKUQ1TTuR2lXvBl5YpHqBJmlA19x22TD9bUOjk +#EXTINF:-1 tvg-name="CCTV4" tvg-logo="https://live.fanmingming.com/tv/CCTV4.png" group-title="央视频道",CCTV-4 中文国际 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000037BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfH0ZQXwaiVktPr6ILPKXqwOUC2ZXft7ZULN6h9qLQPFOTSlVTfophiKaMb8h1kPV74 +#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://live.fanmingming.com/tv/CCTV5.png" group-title="央视频道",CCTV-5 体育 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727e617ca0/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMSXw4ajlL%2FoUYC2RZQQDco6uQSifXBocz5ID6RePfIKQ4rFWiHjq%2FeZoDmrzW%2FKlw +#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://live.fanmingming.com/tv/CCTV5+.png" group-title="央视频道",CCTV-5+ 体育赛事 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63872908d48f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSBx06ZL9Bo6JOM%2BSTjxZRK254G1jtietGzDaHvFNRtjXOvFnbf%2BTao33JqYlfMYYn2z3agOn9gvNMT9KmBaR9o +#EXTINF:-1 tvg-name="CCTV6" tvg-logo="https://live.fanmingming.com/tv/CCTV6.png" group-title="央视频道",CCTV-6 电影 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728804b1f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdazJhFQmuq4XUiks9ZrIlJN%2BknLs8H%2BSxcDXy%2BTesEc8Q0KCN89MjYoj85Sol1kbKI4 +#EXTINF:-1 tvg-name="CCTV7" tvg-logo="https://live.fanmingming.com/tv/CCTV7.png" group-title="央视频道",CCTV-7 国防军事 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000038BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHYKFve4MwNzRa0jPXeHjqnBjPmzSdKDNWNHhnZSaMGCXKmdx8d%2BnYdhVK5ge22ot4 +#EXTINF:-1 tvg-name="CCTV8" tvg-logo="https://live.fanmingming.com/tv/CCTV8.png" group-title="央视频道",CCTV-8 电视剧 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728970aa82/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdaymid9ta2tVUW0%2FdVrFqszC1EVEkAbpip1IYxn%2Ba2aA%2BVAihIiw9D8ejUsDbfU0K68 +#EXTINF:-1 tvg-name="CCTV9" tvg-logo="https://live.fanmingming.com/tv/CCTV9.png" group-title="央视频道",CCTV-9 纪录 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000039BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHArfvJF2pWpm4RxcBNhZ7j9vEUeCQte%2BbQaOGNIUEEK%2B3RBE1BC9EUsM18gnb%2FyAA +#EXTINF:-1 tvg-name="CCTV10" tvg-logo="https://live.fanmingming.com/tv/CCTV10.png" group-title="央视频道",CCTV-10 科教 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949784BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5OuXozn3alq9%2BUx7ZLG1w9aOfkLjZvYj56D3xkOAtSOIoLsdw8c1%2BCwLDg1aS4esN4 +#EXTINF:-1 tvg-name="CCTV11" tvg-logo="https://live.fanmingming.com/tv/CCTV11.png" group-title="央视频道",CCTV-11 戏曲 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000053BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Qj2xHA4vdPGsjBbxSL3p%2FmAObVTfznR%2Fpc%2B76QYmLRMuL3Lj9iabhv8arW7kJe6%2F4 +#EXTINF:-1 tvg-name="CCTV12" tvg-logo="https://live.fanmingming.com/tv/CCTV12.png" group-title="央视频道",CCTV-12 社会与法 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000040BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUd3JM2PCgDefrKOVZLNt0QMAmpLefguRLiOPXiDRWhxHg8yim2giTBA8RILsb%2B8Y5pkFUyZBE%2FkNJAbwncEegkU +#EXTINF:-1 tvg-name="CCTV13" tvg-logo="https://live.fanmingming.com/tv/CCTV13.png" group-title="央视频道",CCTV-13 新闻 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000054BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0SuXozn3alq9%2BUx7ZLG1w9awc14iEUxQ5VsTsr5pEBsmF56tXUfsukRUpygmTCKvAI +#EXTINF:-1 tvg-name="CCTV14" tvg-logo="https://live.fanmingming.com/tv/CCTV14.png" group-title="央视频道",CCTV-14 少儿 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949788BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5PYKFve4MwNzRa0jPXeHjqnp7khdLaCMP6L4QpTf84Oz6DvCG1%2BJ81QvStkxO%2FoGm8 +#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://live.fanmingming.com/tv/CCTV15.png" group-title="央视频道",CCTV-15 音乐 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000055BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Tdo%2FUL80msfbhDYvoWpNl31Dy7jHvMl%2FzVUrNxhL1ek1YEGVDZ7lCg0LtKJY4Ku%2B8 +#EXTINF:-1 tvg-name="CCTV16" tvg-logo="https://live.fanmingming.com/tv/CCTV16.png" group-title="央视频道",CCTV-16 奥林匹克 +http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226100/index.m3u8 +#EXTINF:-1 tvg-name="CCTV17" tvg-logo="https://live.fanmingming.com/tv/CCTV17.png" group-title="央视频道",CCTV-17 农业农村 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728afa13b4/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdaz%2FyAI9to%2FMBBt%2FivcdSfljJ1%2FqqamWUjAiBAxNssfyBlZUDSXAIMtStS86hRHFuJM +#EXTINF:-1 tvg-name="CCTV4K" tvg-logo="https://live.fanmingming.com/tv/CCTV4K.png" group-title="央视频道",CCTV-4K 超高清 +http://liveop.cctv.cn/hls/4KHD/playlist.m3u8 +#EXTINF:-1 tvg-name="CHC影迷电影" tvg-logo="https://live.fanmingming.com/tv/CHC影迷电影.png" group-title="央视频道",CHC影迷电影 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380764b172c9/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CHC动作电影" tvg-logo="https://live.fanmingming.com/tv/CHC动作电影.png" group-title="央视频道",CHC动作电影 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380763222d00/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CHC家庭影院" tvg-logo="https://live.fanmingming.com/tv/CHC家庭影院.png" group-title="央视频道",CHC家庭影院 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807601b19dd/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN" tvg-logo="https://live.fanmingming.com/tv/CGTN.png" group-title="央视频道",CGTN英语 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806f4f64099/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN纪录" tvg-logo="https://live.fanmingming.com/tv/CGTN纪录.png" group-title="央视频道",CGTN记录 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63a15d0ee63f3/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN俄语" tvg-logo="https://live.fanmingming.com/tv/CGTN俄语.png" group-title="央视频道",CGTN俄语 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638071d299009/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN法语" tvg-logo="https://live.fanmingming.com/tv/CGTN法语.png" group-title="央视频道",CGTN法语 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806fb631afe/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN西语" tvg-logo="https://live.fanmingming.com/tv/CGTN西语.png" group-title="央视频道",CGTN西语 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806f81c8eb5/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN阿语" tvg-logo="https://live.fanmingming.com/tv/CGTN阿语.png" group-title="央视频道",CGTN阿语 +http://livear.cgtn.com/1000a/prog_index.m3u8 +#EXTINF:-1 tvg-name="凤凰中文" tvg-logo="https://live.fanmingming.com/tv/凤凰卫视中文台.png" group-title="卫视频道",凤凰中文 +http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701pcc72.m3u8 +#EXTINF:-1 tvg-name="凤凰资讯" tvg-logo="https://live.fanmingming.com/tv/凤凰卫视资讯台.png" group-title="卫视频道",凤凰资讯 +http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701pin72.m3u8 +#EXTINF:-1 tvg-name="凤凰香港" tvg-logo="https://live.fanmingming.com/tv/凤凰卫视香港台.png" group-title="卫视频道",凤凰香港 +http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701phk72.m3u8 +#EXTINF:-1 tvg-name="北京卫视" tvg-logo="https://live.fanmingming.com/tv/北京卫视.png" group-title="卫视频道",北京卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8 +#EXTINF:-1 tvg-name="湖南卫视" tvg-logo="https://live.fanmingming.com/tv/湖南卫视.png" group-title="卫视频道",湖南卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8 +#EXTINF:-1 tvg-name="东方卫视" tvg-logo="https://live.fanmingming.com/tv/东方卫视.png" group-title="卫视频道",东方卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8 +#EXTINF:-1 tvg-name="四川卫视" tvg-logo="https://live.fanmingming.com/tv/四川卫视.png" group-title="卫视频道",四川卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8 +#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://live.fanmingming.com/tv/天津卫视.png" group-title="卫视频道",天津卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8 +#EXTINF:-1 tvg-name="安徽卫视" tvg-logo="https://live.fanmingming.com/tv/安徽卫视.png" group-title="卫视频道",安徽卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8 +#EXTINF:-1 tvg-name="山东卫视" tvg-logo="https://live.fanmingming.com/tv/山东卫视.png" group-title="卫视频道",山东卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8 +#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://live.fanmingming.com/tv/深圳卫视.png" group-title="卫视频道",深圳卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8 +#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://live.fanmingming.com/tv/广东卫视.png" group-title="卫视频道",广东卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8 +#EXTINF:-1 tvg-name="广西卫视" tvg-logo="https://live.fanmingming.com/tv/广西卫视.png" group-title="卫视频道",广西卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226549/index.m3u8 +#EXTINF:-1 tvg-name="江苏卫视" tvg-logo="https://live.fanmingming.com/tv/江苏卫视.png" group-title="卫视频道",江苏卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8 +#EXTINF:-1 tvg-name="江西卫视" tvg-logo="https://live.fanmingming.com/tv/江西卫视.png" group-title="卫视频道",江西卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8 +#EXTINF:-1 tvg-name="河北卫视" tvg-logo="https://live.fanmingming.com/tv/河北卫视.png" group-title="卫视频道",河北卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8 +#EXTINF:-1 tvg-name="河南卫视" tvg-logo="https://live.fanmingming.com/tv/河南卫视.png" group-title="卫视频道",河南卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8 +#EXTINF:-1 tvg-name="浙江卫视" tvg-logo="https://live.fanmingming.com/tv/浙江卫视.png" group-title="卫视频道",浙江卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8 +#EXTINF:-1 tvg-name="海南卫视" tvg-logo="https://live.fanmingming.com/tv/海南卫视.png" group-title="卫视频道",海南卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8 +#EXTINF:-1 tvg-name="湖北卫视" tvg-logo="https://live.fanmingming.com/tv/湖北卫视.png" group-title="卫视频道",湖北卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8 +#EXTINF:-1 tvg-name="山西卫视" tvg-logo="https://live.fanmingming.com/tv/山西卫视.png" group-title="卫视频道",山西卫视 +http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/00000001000000060000000000000318/index.m3u8?IAS +#EXTINF:-1 tvg-name="东南卫视" tvg-logo="https://live.fanmingming.com/tv/东南卫视.png" group-title="卫视频道",东南卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8 +#EXTINF:-1 tvg-name="贵州卫视" tvg-logo="https://live.fanmingming.com/tv/贵州卫视.png" group-title="卫视频道",贵州卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8 +#EXTINF:-1 tvg-name="辽宁卫视" tvg-logo="https://live.fanmingming.com/tv/辽宁卫视.png" group-title="卫视频道",辽宁卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.m3u8 +#EXTINF:-1 tvg-name="重庆卫视" tvg-logo="https://live.fanmingming.com/tv/重庆卫视.png" group-title="卫视频道",重庆卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8 +#EXTINF:-1 tvg-name="黑龙江卫视" tvg-logo="https://live.fanmingming.com/tv/黑龙江卫视.png" group-title="卫视频道",黑龙江卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8 +#EXTINF:-1 tvg-name="内蒙古卫视" tvg-logo="https://live.fanmingming.com/tv/内蒙古卫视.png" group-title="卫视频道",内蒙古卫视 +http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000319/index.m3u8?IAS +#EXTINF:-1 tvg-name="宁夏卫视" tvg-logo="https://live.fanmingming.com/tv/宁夏卫视.png" group-title="卫视频道",宁夏卫视 +http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000309/index.m3u8?IAS +#EXTINF:-1 tvg-name="陕西卫视" tvg-logo="https://live.fanmingming.com/tv/陕西卫视.png" group-title="卫视频道",陕西卫视 +http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000313/index.m3u8?IAS +#EXTINF:-1 tvg-name="吉林卫视" tvg-logo="https://live.fanmingming.com/tv/吉林卫视.png" group-title="卫视频道",吉林卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8 +#EXTINF:-1 tvg-name="甘肃卫视" tvg-logo="https://live.fanmingming.com/tv/甘肃卫视.png" group-title="卫视频道",甘肃卫视 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8 +#EXTINF:-1 tvg-name="云南卫视" tvg-logo="https://live.fanmingming.com/tv/云南卫视.png" group-title="卫视频道",云南卫视 +http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000305/index.m3u8?IAS +#EXTINF:-1 tvg-name="三沙卫视" tvg-logo="https://live.fanmingming.com/tv/三沙卫视.png" group-title="卫视频道",三沙卫视 +http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?IAS +#EXTINF:-1 tvg-name="青海卫视" tvg-logo="https://live.fanmingming.com/tv/青海卫视.png" group-title="卫视频道",青海卫视 +http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225628/index.m3u8 +#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://live.fanmingming.com/tv/新疆卫视.png" group-title="卫视频道",新疆卫视 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225635/index.m3u8 +#EXTINF:-1 tvg-name="西藏卫视" tvg-logo="https://live.fanmingming.com/tv/西藏卫视.png" group-title="卫视频道",西藏卫视 +http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000317/index.m3u8?IAS +#EXTINF:-1 tvg-name="兵团卫视" tvg-logo="https://live.fanmingming.com/tv/兵团卫视.png" group-title="卫视频道",兵团卫视 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226439/index.m3u8 +#EXTINF:-1 tvg-name="延边卫视" tvg-logo="https://live.fanmingming.com/tv/延边卫视.png" group-title="卫视频道",延边卫视 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8 +#EXTINF:-1 tvg-name="安多卫视" tvg-logo="https://live.fanmingming.com/tv/安多卫视.png" group-title="卫视频道",安多卫视 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8 +#EXTINF:-1 tvg-name="厦门卫视" tvg-logo="https://live.fanmingming.com/tv/厦门卫视.png" group-title="卫视频道",厦门卫视 +http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000193/index.m3u8?IAS +#EXTINF:-1 tvg-name="康巴卫视" tvg-logo="https://live.fanmingming.com/tv/康巴卫视.png" group-title="卫视频道",康巴卫视 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8 +#EXTINF:-1 tvg-name="中国教育1台" tvg-logo="https://live.fanmingming.com/tv/CETV1.png" group-title="卫视频道",CETV-1 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8 +#EXTINF:-1 tvg-name="中国教育2台" tvg-logo="https://live.fanmingming.com/tv/CETV2.png" group-title="卫视频道",CETV-2 +http://[2409:8087:1a0b:df::4013]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8 +#EXTINF:-1 tvg-name="中国教育4台" tvg-logo="https://live.fanmingming.com/tv/CETV4.png" group-title="卫视频道",CETV-4 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8 +#EXTINF:-1 tvg-name="内蒙古蒙语卫视" tvg-logo="https://live.fanmingming.com/tv/内蒙古蒙语卫视.png" group-title="内蒙频道",蒙语卫视 +https://livestream-bt.nmtv.cn/nmtv/2315general.m3u8?txSecret=e2b255285dd119a92c8aa5cdf00f8b84&txTime=771EF880 +#EXTINF:-1 tvg-name="爱上4K" tvg-logo="https://live.fanmingming.com/tv/爱上4K.png" tvg-logo="" group-title="数字频道",爱上4K +http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000459/index.m3u8?IAS +#EXTINF:-1 tvg-name="上海纪实人文" tvg-logo="https://live.fanmingming.com/tv/纪实人文.png" group-title="数字频道",纪实人文 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225738/index.m3u8 +#EXTINF:-1 tvg-name="纪实科教" tvg-logo="https://live.fanmingming.com/tv/北京纪实科教.png" group-title="数字频道",纪实科教 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225729/index.m3u8 +#EXTINF:-1 tvg-name="劲爆体育" tvg-logo="https://live.fanmingming.com/tv/劲爆体育.png" group-title="数字频道",劲爆体育 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000008&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="全纪实" tvg-logo="https://live.fanmingming.com/tv/乐游.png" group-title="数字频道",乐游频道 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000092/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000092&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="卡酷动画" tvg-logo="https://live.fanmingming.com/tv/卡酷少儿.png" group-title="数字频道",卡酷少儿 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225654/index.m3u8 +#EXTINF:-1 tvg-name="金鹰卡通" tvg-logo="https://live.fanmingming.com/tv/金鹰卡通.png" group-title="数字频道",金鹰卡通 +http://[2409:8087:1a0b:df::4008]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225653/index.m3u8 +#EXTINF:-1 tvg-name="金鹰纪实" tvg-logo="https://live.fanmingming.com/tv/金鹰纪实.png" group-title="数字频道",金鹰纪实 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN4766929BESTVSMGSMG/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="茶" tvg-logo="https://live.fanmingming.com/tv/茶.png" group-title="数字频道",茶友频道 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638729d8aca53/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSBx06ZL9Bo6JOM%2BSTjxZRIdUCZxTtaM%2Bza0L7mJjkPMmnEhAf%2Bi68sKjzRCbPoTU0E%2B6Pia2CkRtxgPs8Tmw7I +#EXTINF:-1 tvg-name="快乐垂钓" tvg-logo="https://live.fanmingming.com/tv/快乐垂钓.png" group-title="数字频道",快乐垂钓 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638729b6002c4/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="哒啵赛事" tvg-logo="https://live.fanmingming.com/tv/哒啵赛事.png" group-title="数字频道",哒啵赛事 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225675/index.m3u8 +#EXTINF:-1 tvg-name="哒啵电竞" tvg-logo="https://live.fanmingming.com/tv/哒啵电竞.png" group-title="数字频道",哒啵电竞 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000003000000066/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000003000000066&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://live.fanmingming.com/tv/优漫卡通.png" group-title="数字频道",优漫卡通 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8 +#EXTINF:-1 tvg-name="哈哈炫动" tvg-logo="https://live.fanmingming.com/tv/哈哈炫动.png" group-title="数字频道",哈哈炫动 +http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8 +#EXTINF:-1 tvg-name="黑莓动画" tvg-logo="https://live.fanmingming.com/tv/黑莓动画.png" group-title="数字频道",黑莓动画 +http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8 +#EXTINF:-1 tvg-name="黑莓电影" tvg-logo="https://live.fanmingming.com/tv/黑莓电影.png" group-title="数字频道",黑莓电影 +http://[2409:8087:1a0b:df::4014]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225743/index.m3u8 +#EXTINF:-1 tvg-name="梨园" tvg-logo="https://live.fanmingming.com/tv/河南梨园.png" group-title="数字频道",梨园频道 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380788ba7bed/index.m3u8?AuthInfo=toEYVdLfxymUP2l9NZpQI5%2BK6T7j%2FlRm%2BvbM9VO7bA0q1S1k1f36SqqriM0FZoFSAJRfCt8SS7X6sTRmXb81a8O4H%2FdroDKjLoDeaMQdyJQ +#EXTINF:-1 tvg-name="求索记录" tvg-logo="https://live.fanmingming.com/tv/求索记录.png" group-title="数字频道",求索记录 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000010/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000010&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="求索动物" tvg-logo="https://live.fanmingming.com/tv/求索动物.png" group-title="数字频道",求索动物 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000009/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000009&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="求索科学" tvg-logo="https://live.fanmingming.com/tv/求索科学.png" group-title="数字频道",求索科学 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000011/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000011&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="求索生活" tvg-logo="https://live.fanmingming.com/tv/求索生活.png" group-title="数字频道",求索生活 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000008&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="newtv超级体育" tvg-logo="https://live.fanmingming.com/tv/NEWTV超级体育.png" group-title="数字频道",超级体育 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8 +#EXTINF:-1 tvg-name="newtv超级电影" tvg-logo="https://live.fanmingming.com/tv/NEWTV超级电影.png" group-title="数字频道",超级电影 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8 +#EXTINF:-1 tvg-name="newtv超级电视剧" tvg-logo="https://live.fanmingming.com/tv/NEWTV超级电视剧.png" group-title="数字频道",超级视剧 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225716/index.m3u8 +#EXTINF:-1 tvg-name="newtv东北热剧" tvg-logo="https://live.fanmingming.com/tv/NEWTV东北热剧.png" group-title="数字频道",东北热剧 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225741/index.m3u8 +#EXTINF:-1 tvg-name="newtv海外剧场" tvg-logo="https://live.fanmingming.com/tv/NEWTV海外剧场.png" group-title="数字频道",海外剧场 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225671/index.m3u8 +#EXTINF:-1 tvg-name="newtv中国功夫" tvg-logo="https://live.fanmingming.com/tv/NEWTV中国功夫.png" group-title="数字频道",中国功夫 +http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225681/index.m3u8 +#EXTINF:-1 tvg-name="newtv军旅剧场" tvg-logo="https://live.fanmingming.com/tv/NEWTV军旅剧场.png" group-title="数字频道",军旅剧场 +http://[2409:8087:1a0b:df::4018]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225676/index.m3u8 +#EXTINF:-1 tvg-name="newtv惊悚悬疑" tvg-logo="https://live.fanmingming.com/tv/NEWTV惊悚悬疑.png" group-title="数字频道",惊悚悬疑 +http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8 +#EXTINF:-1 tvg-name="newtv潮妈辣婆" tvg-logo="https://live.fanmingming.com/tv/NEWTV潮妈辣婆.png" group-title="数字频道",潮妈辣婆 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225685/index.m3u8 +#EXTINF:-1 tvg-name="newtv精品体育" tvg-logo="https://live.fanmingming.com/tv/NEWTV精品体育.png" group-title="数字频道",精品体育 +http://[2409:8087:1a0b:df::4004]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8 +#EXTINF:-1 tvg-name="newtv精品纪录" tvg-logo="https://live.fanmingming.com/tv/NEWTV精品纪录.png" group-title="数字频道",精品纪录 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225672/index.m3u8 +#EXTINF:-1 tvg-name="newtv家庭剧场" tvg-logo="https://live.fanmingming.com/tv/NEWTV家庭剧场.png" group-title="数字频道",家庭剧场 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225677/index.m3u8 +#EXTINF:-1 tvg-name="newtv精品大剧" tvg-logo="https://live.fanmingming.com/tv/NEWTV精品大剧.png" group-title="数字频道",精品大剧 +http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225670/index.m3u8 +#EXTINF:-1 tvg-name="newtv军事评论" tvg-logo="https://live.fanmingming.com/tv/NEWTV军事评论.png" group-title="数字频道",军事评论 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225668/index.m3u8 +#EXTINF:-1 tvg-name="newtv明星大片" tvg-logo="https://live.fanmingming.com/tv/NEWTV明星大片.png" group-title="数字频道",明星大片 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225664/index.m3u8 +#EXTINF:-1 tvg-name="newtv欢乐剧场" tvg-logo="https://live.fanmingming.com/tv/NEWTV欢乐剧场.png" group-title="数字频道",欢乐剧场 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225742/index.m3u8 +#EXTINF:-1 tvg-name="newtv精品萌宠" tvg-logo="https://live.fanmingming.com/tv/NEWTV精品萌宠.png" group-title="数字频道",精品萌宠 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226505/index.m3u8 +#EXTINF:-1 tvg-name="newtv超级综艺" tvg-logo="https://live.fanmingming.com/tv/NEWTV超级综艺.png" group-title="数字频道",超级综艺 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225714/index.m3u8 +#EXTINF:-1 tvg-name="newtv金牌综艺" tvg-logo="https://live.fanmingming.com/tv/NEWTV金牌综艺.png" group-title="数字频道",金牌综艺 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Live Cams" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Live Cams +http://cdn.adultiptv.net/livecams.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="MILF" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",MILF +http://cdn.adultiptv.net/milf.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Big Dick" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Big Dick +http://cdn.adultiptv.net/bigdick.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Big Tits" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Big Tits +http://cdn.adultiptv.net/bigtits.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Fetish" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Fetish +http://cdn.adultiptv.net/fetish.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Pornstar" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Pornstar +http://cdn.adultiptv.net/pornstar.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Big Ass" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Big Ass +http://cdn.adultiptv.net/bigass.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Interracial" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Interracial +http://cdn.adultiptv.net/interracial.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Latina" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Latina +http://cdn.adultiptv.net/latina.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="POV" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",POV +http://cdn.adultiptv.net/pov.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Blowjob" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Blowjob +http://cdn.adultiptv.net/blowjob.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Teen" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Teen +http://cdn.adultiptv.net/teen.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Hardcore" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Hardcore +http://cdn.adultiptv.net/hardcore.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Cuckold" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Cuckold +http://cdn.adultiptv.net/cuckold.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Threesome" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Threesome +http://cdn.adultiptv.net/threesome.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Russian" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Russian +http://cdn.adultiptv.net/russian.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Lesbian" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Lesbian +http://cdn.adultiptv.net/lesbian.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Rough" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Rough +http://cdn.adultiptv.net/rough.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Gangbang" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Gangbang +http://cdn.adultiptv.net/gangbang.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Anal" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Anal +http://cdn.adultiptv.net/anal.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Compilation" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Compilation +http://cdn.adultiptv.net/compilation.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Brunette" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Brunette +http://cdn.adultiptv.net/brunette.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Blonde" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Blonde +http://cdn.adultiptv.net/blonde.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Gay" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Gay +http://cdn.adultiptv.net/gay.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Asian" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Asian +http://cdn.adultiptv.net/asian.m3u8 diff --git a/appstore/pixman/1.8.2/scripts/init.sh b/appstore/pixman/1.8.2/scripts/init.sh new file mode 100644 index 00000000..a33a4a55 --- /dev/null +++ b/appstore/pixman/1.8.2/scripts/init.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + if [ ! -d $PIXMAN_ROOT_PATH/m3u ]; then + mkdir -p $PIXMAN_ROOT_PATH/m3u + fi + cp -rf ./m3u/* $PIXMAN_ROOT_PATH/m3u/ + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/pixman/1.8.2/scripts/uninstall.sh b/appstore/pixman/1.8.2/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/pixman/1.8.2/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/pixman/1.8.2/scripts/upgrade.sh b/appstore/pixman/1.8.2/scripts/upgrade.sh new file mode 100644 index 00000000..a33a4a55 --- /dev/null +++ b/appstore/pixman/1.8.2/scripts/upgrade.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + if [ ! -d $PIXMAN_ROOT_PATH/m3u ]; then + mkdir -p $PIXMAN_ROOT_PATH/m3u + fi + cp -rf ./m3u/* $PIXMAN_ROOT_PATH/m3u/ + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/pixman/README.md b/appstore/pixman/README.md new file mode 100644 index 00000000..b923f11c --- /dev/null +++ b/appstore/pixman/README.md @@ -0,0 +1,133 @@ +# Pixman + +IPTV、M3U8 流媒体代理方案 + + + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 免责声明 + +本程序仅供学习或测试设备,禁止 `中国大陆用户` 使用,不得用于商业用途,否则后果自负 + +## 使用说明 + +除内置资源外,可自行挂载 `.m3u` 文件。 + +可挂载到 持久化目录 `m3u` 目录下,并通过 `http://{host_ip}:{port}/<文件名>.m3u` 使用。 + +可在 媒体库中,通过添加电视直播源,使用 `http://{host_ip}:{port}/m3u/<文件名>.m3u` 使用。 + +访问 `http://{host_ip}:{port}/` 查看内置资源文档。 + +## 快捷操作 + +> 清理缓存 + +```shell +flask clean_cache +``` + +> 更新 mytvsuper_tivimate.m3u 文件 + +```shell +flask mytvsuper_tivimate +``` + +## 支持的直播源 + +### `四季線上 4GTV` + +文件地址 `http://127.0.0.1:5000/4gtv.m3u` + ++ `四季線上 4GTV` 解析播放代码 第一弹 ++ `四季線上 4GTV` 无需解锁代理播放 第二弹 ++ `四季線上 4GTV` 免费播放全部频道 第三弹 ++ `LITV 直播源` 已合并到 `四季線上 4GTV` + +### 江苏移动魔百盒 TPTV + +文件地址 `http://127.0.0.1:5000/tptv.m3u` 或 `http://127.0.0.1:5000/tptv_proxy.m3u` + ++ 江苏移动魔百盒 全国 CDN 版本 ++ Nginx 代理 TPTV 和 iTV ++ 江苏移动 IPTV 频道更新 + +### 央视频直播源 + +文件地址 `http://127.0.0.1:5000/ysp.m3u` + ++ 抛砖引玉 央视频直播源已发布 + +### YouTube 直播源 + +文件地址 `http://127.0.0.1:5000/youtube/{VIDEO_ID}` + ++ pixman 已支持 YouTube 直播源拉取 ++ YouTube 直播支持通过播放列表生成 M3U + +### MytvSuper 直播源 + +文件地址 `http://127.0.0.1:5000/mytvsuper.m3u` + ++ pixman 已支持 MytvSuper 直播源 + +### Beesport 直播源 + +文件地址 `http://127.0.0.1:5000/beesport.m3u` + ++ pixman 新增一批体育频道 + +### 中国移动 iTV 平台 + +文件地址 `http://127.0.0.1:5000/itv.m3u` 或 `http://127.0.0.1:5000/itv_proxy.m3u` + ++ 无需 IPV6,三网通看移动 iTV 直播源 ++ Nginx 代理 TPTV 和 iTV + +### TheTV + +文件地址 http://127.0.0.1:5000/thetv.m3u + +### 自定义直播源 + +文件地址 `http://127.0.0.1:5000/.m3u` + +## 代理规则 + +常见的 Clash 内核软件或 Surge 软件的规则配置如下: + +```yaml +rules: + # 国内 + - DOMAIN-SUFFIX,dnsany.com,DIRECT + - DOMAIN-SUFFIX,cmvideo.cn,DIRECT + - DOMAIN-SUFFIX,chinamobile.com,DIRECT + - DOMAIN-SUFFIX,mobaibox.com,DIRECT + - DOMAIN-SUFFIX,gitv.tv,DIRECT + - DOMAIN-SUFFIX,cctv.cn,DIRECT + - DOMAIN-SUFFIX,yangshipin.cn,DIRECT + - DOMAIN-SUFFIX,gcable.cn,DIRECT + - IP-CIDR,183.206.0.0/15,DIRECT,no-resolve + - IP-CIDR,223.5.5.5/32,DIRECT,no-resolve + - IP-CIDR,27.36.0.0/14,DIRECT,no-resolve + - IP-CIDR,183.238.66.0/24,DIRECT,no-resolve + + # 自行测试当地是否能够直连,不能直连删掉下面这行 + - DOMAIN,beesport.livednow.com,DIRECT + + # 海外 + - DOMAIN-SUFFIX,livednow.com,Proxy + - DOMAIN-SUFFIX,orz-7.com,Proxy + - DOMAIN-SUFFIX,4gtv.tv,Proxy + - DOMAIN-SUFFIX,hinet.net,Proxy + - DOMAIN-SUFFIX,ofiii.com,Proxy + - DOMAIN-SUFFIX,googlevideo.com,Proxy + - DOMAIN-SUFFIX,youtube.com,Proxy + - DOMAIN-SUFFIX,mytvsuper.com,Proxy + - DOMAIN-SUFFIX,thetvapp.to,Proxy +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/pixman/data.yml b/appstore/pixman/data.yml new file mode 100644 index 00000000..39bc6cc2 --- /dev/null +++ b/appstore/pixman/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: pixman + name: Pixman + tags: + - Media + - Local + shortDescZh: IPTV、M3U8 流媒体代理方案 + shortDescEn: IPTV、M3U8 streaming media proxy solution + type: website + crossVersionUpdate: true + limit: 0 + website: https://pixman.io/ + github: https://pixman.io/ + document: https://pixman.io/ diff --git a/appstore/pixman/logo.png b/appstore/pixman/logo.png new file mode 100644 index 00000000..e9b7d0cd Binary files /dev/null and b/appstore/pixman/logo.png differ diff --git a/appstore/postgresql/16.6-alpine/.env b/appstore/postgresql/16.6-alpine/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/appstore/postgresql/16.6-alpine/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/appstore/postgresql/16.6-alpine/data.yml b/appstore/postgresql/16.6-alpine/data.yml new file mode 100644 index 00000000..ac55698b --- /dev/null +++ b/appstore/postgresql/16.6-alpine/data.yml @@ -0,0 +1,40 @@ +additionalProperties: + formFields: + - default: "/home/postgres" + edit: true + envKey: POSTGRES_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: false + envKey: POSTGRES_PASSWORD + labelZh: Postgres 密码 (首次生效) + labelEn: Postgres Password (First Time) + required: true + random: true + rule: paramComplexity + type: password + - default: 5432 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Postgres 端口 + labelEn: Postgres Port + required: true + rule: paramPort + type: number + - default: "postgres" + edit: false + envKey: POSTGRES_USER + labelZh: Postgres 用户(不建议改动) + labelEn: Postgres User + required: false + type: text + - default: "postgres" + edit: false + envKey: POSTGRES_DB + labelZh: Postgres 数据库名称(不建议改动) + labelEn: Postgres Database Name + required: false + type: text diff --git a/appstore/postgresql/16.6-alpine/docker-compose.yml b/appstore/postgresql/16.6-alpine/docker-compose.yml new file mode 100644 index 00000000..0d03dd25 --- /dev/null +++ b/appstore/postgresql/16.6-alpine/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:16.6-alpine + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/appstore/postgresql/16.6-alpine/envs/default.env b/appstore/postgresql/16.6-alpine/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/postgresql/16.6-alpine/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/postgresql/16.6-alpine/envs/global.env b/appstore/postgresql/16.6-alpine/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/postgresql/16.6-alpine/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/postgresql/16.6-alpine/scripts/init.sh b/appstore/postgresql/16.6-alpine/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/16.6-alpine/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/16.6-alpine/scripts/uninstall.sh b/appstore/postgresql/16.6-alpine/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/postgresql/16.6-alpine/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/16.6-alpine/scripts/upgrade.sh b/appstore/postgresql/16.6-alpine/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/16.6-alpine/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/16.6/.env b/appstore/postgresql/16.6/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/appstore/postgresql/16.6/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/appstore/postgresql/16.6/data.yml b/appstore/postgresql/16.6/data.yml new file mode 100644 index 00000000..ac55698b --- /dev/null +++ b/appstore/postgresql/16.6/data.yml @@ -0,0 +1,40 @@ +additionalProperties: + formFields: + - default: "/home/postgres" + edit: true + envKey: POSTGRES_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: false + envKey: POSTGRES_PASSWORD + labelZh: Postgres 密码 (首次生效) + labelEn: Postgres Password (First Time) + required: true + random: true + rule: paramComplexity + type: password + - default: 5432 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Postgres 端口 + labelEn: Postgres Port + required: true + rule: paramPort + type: number + - default: "postgres" + edit: false + envKey: POSTGRES_USER + labelZh: Postgres 用户(不建议改动) + labelEn: Postgres User + required: false + type: text + - default: "postgres" + edit: false + envKey: POSTGRES_DB + labelZh: Postgres 数据库名称(不建议改动) + labelEn: Postgres Database Name + required: false + type: text diff --git a/appstore/postgresql/16.6/docker-compose.yml b/appstore/postgresql/16.6/docker-compose.yml new file mode 100644 index 00000000..080abe7d --- /dev/null +++ b/appstore/postgresql/16.6/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:16.6 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/appstore/postgresql/16.6/envs/default.env b/appstore/postgresql/16.6/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/postgresql/16.6/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/postgresql/16.6/envs/global.env b/appstore/postgresql/16.6/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/postgresql/16.6/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/postgresql/16.6/scripts/init.sh b/appstore/postgresql/16.6/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/16.6/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/16.6/scripts/uninstall.sh b/appstore/postgresql/16.6/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/postgresql/16.6/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/16.6/scripts/upgrade.sh b/appstore/postgresql/16.6/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/16.6/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/17.2-alpine/.env b/appstore/postgresql/17.2-alpine/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/appstore/postgresql/17.2-alpine/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/appstore/postgresql/17.2-alpine/data.yml b/appstore/postgresql/17.2-alpine/data.yml new file mode 100644 index 00000000..ac55698b --- /dev/null +++ b/appstore/postgresql/17.2-alpine/data.yml @@ -0,0 +1,40 @@ +additionalProperties: + formFields: + - default: "/home/postgres" + edit: true + envKey: POSTGRES_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: false + envKey: POSTGRES_PASSWORD + labelZh: Postgres 密码 (首次生效) + labelEn: Postgres Password (First Time) + required: true + random: true + rule: paramComplexity + type: password + - default: 5432 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Postgres 端口 + labelEn: Postgres Port + required: true + rule: paramPort + type: number + - default: "postgres" + edit: false + envKey: POSTGRES_USER + labelZh: Postgres 用户(不建议改动) + labelEn: Postgres User + required: false + type: text + - default: "postgres" + edit: false + envKey: POSTGRES_DB + labelZh: Postgres 数据库名称(不建议改动) + labelEn: Postgres Database Name + required: false + type: text diff --git a/appstore/postgresql/17.2-alpine/docker-compose.yml b/appstore/postgresql/17.2-alpine/docker-compose.yml new file mode 100644 index 00000000..755bbd95 --- /dev/null +++ b/appstore/postgresql/17.2-alpine/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:17.2-alpine + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/appstore/postgresql/17.2-alpine/envs/default.env b/appstore/postgresql/17.2-alpine/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/postgresql/17.2-alpine/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/postgresql/17.2-alpine/envs/global.env b/appstore/postgresql/17.2-alpine/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/postgresql/17.2-alpine/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/postgresql/17.2-alpine/scripts/init.sh b/appstore/postgresql/17.2-alpine/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/17.2-alpine/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/17.2-alpine/scripts/uninstall.sh b/appstore/postgresql/17.2-alpine/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/postgresql/17.2-alpine/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/17.2-alpine/scripts/upgrade.sh b/appstore/postgresql/17.2-alpine/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/17.2-alpine/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/17.2/.env b/appstore/postgresql/17.2/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/appstore/postgresql/17.2/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/appstore/postgresql/17.2/data.yml b/appstore/postgresql/17.2/data.yml new file mode 100644 index 00000000..ac55698b --- /dev/null +++ b/appstore/postgresql/17.2/data.yml @@ -0,0 +1,40 @@ +additionalProperties: + formFields: + - default: "/home/postgres" + edit: true + envKey: POSTGRES_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: false + envKey: POSTGRES_PASSWORD + labelZh: Postgres 密码 (首次生效) + labelEn: Postgres Password (First Time) + required: true + random: true + rule: paramComplexity + type: password + - default: 5432 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Postgres 端口 + labelEn: Postgres Port + required: true + rule: paramPort + type: number + - default: "postgres" + edit: false + envKey: POSTGRES_USER + labelZh: Postgres 用户(不建议改动) + labelEn: Postgres User + required: false + type: text + - default: "postgres" + edit: false + envKey: POSTGRES_DB + labelZh: Postgres 数据库名称(不建议改动) + labelEn: Postgres Database Name + required: false + type: text diff --git a/appstore/postgresql/17.2/docker-compose.yml b/appstore/postgresql/17.2/docker-compose.yml new file mode 100644 index 00000000..1252085c --- /dev/null +++ b/appstore/postgresql/17.2/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:17.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/appstore/postgresql/17.2/envs/default.env b/appstore/postgresql/17.2/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/postgresql/17.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/postgresql/17.2/envs/global.env b/appstore/postgresql/17.2/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/postgresql/17.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/postgresql/17.2/scripts/init.sh b/appstore/postgresql/17.2/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/17.2/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/17.2/scripts/uninstall.sh b/appstore/postgresql/17.2/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/postgresql/17.2/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/17.2/scripts/upgrade.sh b/appstore/postgresql/17.2/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/17.2/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/README.md b/appstore/postgresql/README.md new file mode 100644 index 00000000..e1a19702 --- /dev/null +++ b/appstore/postgresql/README.md @@ -0,0 +1,50 @@ +# PostgreSQL + +### PostgreSQL:世界上最先进的开源关系数据库 + +![PostgreSQL](https://file.lifebus.top/imgs/postgresql_logo.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +PostgreSQL 是一个功能强大的开源对象关系型数据库系统,它使用并扩展了 SQL 语言,并结合了多种功能,可以安全地存储和扩展最复杂的数据工作负载。PostgreSQL +起源于 1986 年加州大学伯克利分校的 POSTGRES 项目,在核心平台上已有超过 35 年的活跃开发历史。 + +PostgreSQL 因其成熟的架构、可靠性、数据完整性、强大的功能集、可扩展性,以及该软件背后的开源社区为持续提供高性能和创新解决方案所做出的奉献而赢得了良好的声誉。 +PostgreSQL 可在所有主流操作系统上运行,自 2001 年以来一直符合 ACID 标准,并拥有强大的附加功能,如广受欢迎的 PostGIS +地理空间数据库扩展器。因此,PostgreSQL 成为许多人和组织首选的开源关系数据库也就不足为奇了。 + +开始使用PostgreSQL从未如此简单--选择一个你想建立的项目,让PostgreSQL安全稳健地存储你的数据。 + +### 为什么使用 PostgreSQL + +PostgreSQL 具有许多功能,旨在帮助开发人员构建应用程序,帮助管理员保护数据完整性和构建容错环境,并帮助您管理数据,无论数据集大小。除了免费和开源之外,PostgreSQL +还具有高度可扩展性。例如,您可以定义自己的数据类型,创建自定义函数,甚至可以使用不同的编程语言编写代码,而无需重新编译数据库! + +在不违背传统功能或可能导致架构决策失误的情况下,PostgreSQL 会尽量符合 SQL 标准。SQL 标准所要求的许多功能都得到了支持,尽管有时语法或功能略有不同。 +随着时间的推移,有望进一步实现一致性。截至 2023 年 9 月发布的第 16 版,PostgreSQL 至少符合 SQL:2023 核心一致性 179 个强制功能中的 +170 个。 +截至目前,还没有关系型数据库完全符合这一标准。 + +## 版本选择 + +- `vectors` - 内置 vectors 插件。 + + + 插件名称:vectors + + + 插件描述:vectors 插件用于存储和查询矢量数据,如地理坐标、几何图形等。 + + + 插件链接:[https://github.com/tensorchord/pgvecto.rs](https://github.com/tensorchord/pgvecto.rs) + +- `alpine` - 基于 Alpine Linux 发行版。 + + + 精简版 PostgreSQL,基于 Alpine Linux 发行版,提供了更小的镜像体积和更快的启动速度。 + +- `{version}` 默认版 + + + 官方默认 PostgreSQL 版本,基于 Debian Linux 发行版。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/postgresql/data.yml b/appstore/postgresql/data.yml new file mode 100644 index 00000000..ee642ec3 --- /dev/null +++ b/appstore/postgresql/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: postgresql + name: PostgreSQL + tags: + - Database + - Local + shortDescZh: 开源关系型数据库 + shortDescEn: Open Source Relational Database + type: runtime + crossVersionUpdate: false + limit: 0 + website: https://www.postgresql.org/ + github: https://github.com/postgres/postgres/ + document: https://www.postgresql.org/docs/ diff --git a/appstore/postgresql/logo.png b/appstore/postgresql/logo.png new file mode 100644 index 00000000..2c14e305 Binary files /dev/null and b/appstore/postgresql/logo.png differ diff --git a/appstore/postgresql/pg14-alpine/.env b/appstore/postgresql/pg14-alpine/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/appstore/postgresql/pg14-alpine/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/appstore/postgresql/pg14-alpine/data.yml b/appstore/postgresql/pg14-alpine/data.yml new file mode 100644 index 00000000..ac55698b --- /dev/null +++ b/appstore/postgresql/pg14-alpine/data.yml @@ -0,0 +1,40 @@ +additionalProperties: + formFields: + - default: "/home/postgres" + edit: true + envKey: POSTGRES_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: false + envKey: POSTGRES_PASSWORD + labelZh: Postgres 密码 (首次生效) + labelEn: Postgres Password (First Time) + required: true + random: true + rule: paramComplexity + type: password + - default: 5432 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Postgres 端口 + labelEn: Postgres Port + required: true + rule: paramPort + type: number + - default: "postgres" + edit: false + envKey: POSTGRES_USER + labelZh: Postgres 用户(不建议改动) + labelEn: Postgres User + required: false + type: text + - default: "postgres" + edit: false + envKey: POSTGRES_DB + labelZh: Postgres 数据库名称(不建议改动) + labelEn: Postgres Database Name + required: false + type: text diff --git a/appstore/postgresql/pg14-alpine/docker-compose.yml b/appstore/postgresql/pg14-alpine/docker-compose.yml new file mode 100644 index 00000000..ba67b95b --- /dev/null +++ b/appstore/postgresql/pg14-alpine/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg14-alpine-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:14-alpine + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/appstore/postgresql/pg14-alpine/envs/default.env b/appstore/postgresql/pg14-alpine/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/postgresql/pg14-alpine/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/postgresql/pg14-alpine/envs/global.env b/appstore/postgresql/pg14-alpine/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/postgresql/pg14-alpine/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/postgresql/pg14-alpine/scripts/init.sh b/appstore/postgresql/pg14-alpine/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg14-alpine/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg14-alpine/scripts/uninstall.sh b/appstore/postgresql/pg14-alpine/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/postgresql/pg14-alpine/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg14-alpine/scripts/upgrade.sh b/appstore/postgresql/pg14-alpine/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg14-alpine/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg14-vectors/.env b/appstore/postgresql/pg14-vectors/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/appstore/postgresql/pg14-vectors/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/appstore/postgresql/pg14-vectors/data.yml b/appstore/postgresql/pg14-vectors/data.yml new file mode 100644 index 00000000..ac55698b --- /dev/null +++ b/appstore/postgresql/pg14-vectors/data.yml @@ -0,0 +1,40 @@ +additionalProperties: + formFields: + - default: "/home/postgres" + edit: true + envKey: POSTGRES_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: false + envKey: POSTGRES_PASSWORD + labelZh: Postgres 密码 (首次生效) + labelEn: Postgres Password (First Time) + required: true + random: true + rule: paramComplexity + type: password + - default: 5432 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Postgres 端口 + labelEn: Postgres Port + required: true + rule: paramPort + type: number + - default: "postgres" + edit: false + envKey: POSTGRES_USER + labelZh: Postgres 用户(不建议改动) + labelEn: Postgres User + required: false + type: text + - default: "postgres" + edit: false + envKey: POSTGRES_DB + labelZh: Postgres 数据库名称(不建议改动) + labelEn: Postgres Database Name + required: false + type: text diff --git a/appstore/postgresql/pg14-vectors/docker-compose.yml b/appstore/postgresql/pg14-vectors/docker-compose.yml new file mode 100644 index 00000000..a02df308 --- /dev/null +++ b/appstore/postgresql/pg14-vectors/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg14-vectors-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: tensorchord/pgvecto-rs:pg14-v0.2.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/appstore/postgresql/pg14-vectors/envs/default.env b/appstore/postgresql/pg14-vectors/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/postgresql/pg14-vectors/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/postgresql/pg14-vectors/envs/global.env b/appstore/postgresql/pg14-vectors/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/postgresql/pg14-vectors/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/postgresql/pg14-vectors/scripts/init.sh b/appstore/postgresql/pg14-vectors/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg14-vectors/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg14-vectors/scripts/uninstall.sh b/appstore/postgresql/pg14-vectors/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/postgresql/pg14-vectors/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg14-vectors/scripts/upgrade.sh b/appstore/postgresql/pg14-vectors/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg14-vectors/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg14/.env b/appstore/postgresql/pg14/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/appstore/postgresql/pg14/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/appstore/postgresql/pg14/data.yml b/appstore/postgresql/pg14/data.yml new file mode 100644 index 00000000..ac55698b --- /dev/null +++ b/appstore/postgresql/pg14/data.yml @@ -0,0 +1,40 @@ +additionalProperties: + formFields: + - default: "/home/postgres" + edit: true + envKey: POSTGRES_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: false + envKey: POSTGRES_PASSWORD + labelZh: Postgres 密码 (首次生效) + labelEn: Postgres Password (First Time) + required: true + random: true + rule: paramComplexity + type: password + - default: 5432 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Postgres 端口 + labelEn: Postgres Port + required: true + rule: paramPort + type: number + - default: "postgres" + edit: false + envKey: POSTGRES_USER + labelZh: Postgres 用户(不建议改动) + labelEn: Postgres User + required: false + type: text + - default: "postgres" + edit: false + envKey: POSTGRES_DB + labelZh: Postgres 数据库名称(不建议改动) + labelEn: Postgres Database Name + required: false + type: text diff --git a/appstore/postgresql/pg14/docker-compose.yml b/appstore/postgresql/pg14/docker-compose.yml new file mode 100644 index 00000000..9724e766 --- /dev/null +++ b/appstore/postgresql/pg14/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg14-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:14 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/appstore/postgresql/pg14/envs/default.env b/appstore/postgresql/pg14/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/postgresql/pg14/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/postgresql/pg14/envs/global.env b/appstore/postgresql/pg14/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/postgresql/pg14/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/postgresql/pg14/scripts/init.sh b/appstore/postgresql/pg14/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg14/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg14/scripts/uninstall.sh b/appstore/postgresql/pg14/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/postgresql/pg14/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg14/scripts/upgrade.sh b/appstore/postgresql/pg14/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg14/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg15-alpine/.env b/appstore/postgresql/pg15-alpine/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/appstore/postgresql/pg15-alpine/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/appstore/postgresql/pg15-alpine/data.yml b/appstore/postgresql/pg15-alpine/data.yml new file mode 100644 index 00000000..ac55698b --- /dev/null +++ b/appstore/postgresql/pg15-alpine/data.yml @@ -0,0 +1,40 @@ +additionalProperties: + formFields: + - default: "/home/postgres" + edit: true + envKey: POSTGRES_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: false + envKey: POSTGRES_PASSWORD + labelZh: Postgres 密码 (首次生效) + labelEn: Postgres Password (First Time) + required: true + random: true + rule: paramComplexity + type: password + - default: 5432 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Postgres 端口 + labelEn: Postgres Port + required: true + rule: paramPort + type: number + - default: "postgres" + edit: false + envKey: POSTGRES_USER + labelZh: Postgres 用户(不建议改动) + labelEn: Postgres User + required: false + type: text + - default: "postgres" + edit: false + envKey: POSTGRES_DB + labelZh: Postgres 数据库名称(不建议改动) + labelEn: Postgres Database Name + required: false + type: text diff --git a/appstore/postgresql/pg15-alpine/docker-compose.yml b/appstore/postgresql/pg15-alpine/docker-compose.yml new file mode 100644 index 00000000..d7d310cd --- /dev/null +++ b/appstore/postgresql/pg15-alpine/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg15-alpine-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:15-alpine + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/appstore/postgresql/pg15-alpine/envs/default.env b/appstore/postgresql/pg15-alpine/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/postgresql/pg15-alpine/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/postgresql/pg15-alpine/envs/global.env b/appstore/postgresql/pg15-alpine/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/postgresql/pg15-alpine/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/postgresql/pg15-alpine/scripts/init.sh b/appstore/postgresql/pg15-alpine/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg15-alpine/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg15-alpine/scripts/uninstall.sh b/appstore/postgresql/pg15-alpine/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/postgresql/pg15-alpine/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg15-alpine/scripts/upgrade.sh b/appstore/postgresql/pg15-alpine/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg15-alpine/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg15-vectors/.env b/appstore/postgresql/pg15-vectors/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/appstore/postgresql/pg15-vectors/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/appstore/postgresql/pg15-vectors/data.yml b/appstore/postgresql/pg15-vectors/data.yml new file mode 100644 index 00000000..ac55698b --- /dev/null +++ b/appstore/postgresql/pg15-vectors/data.yml @@ -0,0 +1,40 @@ +additionalProperties: + formFields: + - default: "/home/postgres" + edit: true + envKey: POSTGRES_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: false + envKey: POSTGRES_PASSWORD + labelZh: Postgres 密码 (首次生效) + labelEn: Postgres Password (First Time) + required: true + random: true + rule: paramComplexity + type: password + - default: 5432 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Postgres 端口 + labelEn: Postgres Port + required: true + rule: paramPort + type: number + - default: "postgres" + edit: false + envKey: POSTGRES_USER + labelZh: Postgres 用户(不建议改动) + labelEn: Postgres User + required: false + type: text + - default: "postgres" + edit: false + envKey: POSTGRES_DB + labelZh: Postgres 数据库名称(不建议改动) + labelEn: Postgres Database Name + required: false + type: text diff --git a/appstore/postgresql/pg15-vectors/docker-compose.yml b/appstore/postgresql/pg15-vectors/docker-compose.yml new file mode 100644 index 00000000..644e2fa7 --- /dev/null +++ b/appstore/postgresql/pg15-vectors/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg15-vectors-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: tensorchord/pgvecto-rs:pg15-v0.2.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/appstore/postgresql/pg15-vectors/envs/default.env b/appstore/postgresql/pg15-vectors/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/postgresql/pg15-vectors/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/postgresql/pg15-vectors/envs/global.env b/appstore/postgresql/pg15-vectors/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/postgresql/pg15-vectors/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/postgresql/pg15-vectors/scripts/init.sh b/appstore/postgresql/pg15-vectors/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg15-vectors/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg15-vectors/scripts/uninstall.sh b/appstore/postgresql/pg15-vectors/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/postgresql/pg15-vectors/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg15-vectors/scripts/upgrade.sh b/appstore/postgresql/pg15-vectors/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg15-vectors/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg15/.env b/appstore/postgresql/pg15/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/appstore/postgresql/pg15/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/appstore/postgresql/pg15/data.yml b/appstore/postgresql/pg15/data.yml new file mode 100644 index 00000000..ac55698b --- /dev/null +++ b/appstore/postgresql/pg15/data.yml @@ -0,0 +1,40 @@ +additionalProperties: + formFields: + - default: "/home/postgres" + edit: true + envKey: POSTGRES_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: false + envKey: POSTGRES_PASSWORD + labelZh: Postgres 密码 (首次生效) + labelEn: Postgres Password (First Time) + required: true + random: true + rule: paramComplexity + type: password + - default: 5432 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Postgres 端口 + labelEn: Postgres Port + required: true + rule: paramPort + type: number + - default: "postgres" + edit: false + envKey: POSTGRES_USER + labelZh: Postgres 用户(不建议改动) + labelEn: Postgres User + required: false + type: text + - default: "postgres" + edit: false + envKey: POSTGRES_DB + labelZh: Postgres 数据库名称(不建议改动) + labelEn: Postgres Database Name + required: false + type: text diff --git a/appstore/postgresql/pg15/docker-compose.yml b/appstore/postgresql/pg15/docker-compose.yml new file mode 100644 index 00000000..7ee42ec3 --- /dev/null +++ b/appstore/postgresql/pg15/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg15-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:15 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/appstore/postgresql/pg15/envs/default.env b/appstore/postgresql/pg15/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/postgresql/pg15/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/postgresql/pg15/envs/global.env b/appstore/postgresql/pg15/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/postgresql/pg15/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/postgresql/pg15/scripts/init.sh b/appstore/postgresql/pg15/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg15/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg15/scripts/uninstall.sh b/appstore/postgresql/pg15/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/postgresql/pg15/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg15/scripts/upgrade.sh b/appstore/postgresql/pg15/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg15/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg16-alpine/.env b/appstore/postgresql/pg16-alpine/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/appstore/postgresql/pg16-alpine/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/appstore/postgresql/pg16-alpine/data.yml b/appstore/postgresql/pg16-alpine/data.yml new file mode 100644 index 00000000..ac55698b --- /dev/null +++ b/appstore/postgresql/pg16-alpine/data.yml @@ -0,0 +1,40 @@ +additionalProperties: + formFields: + - default: "/home/postgres" + edit: true + envKey: POSTGRES_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: false + envKey: POSTGRES_PASSWORD + labelZh: Postgres 密码 (首次生效) + labelEn: Postgres Password (First Time) + required: true + random: true + rule: paramComplexity + type: password + - default: 5432 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Postgres 端口 + labelEn: Postgres Port + required: true + rule: paramPort + type: number + - default: "postgres" + edit: false + envKey: POSTGRES_USER + labelZh: Postgres 用户(不建议改动) + labelEn: Postgres User + required: false + type: text + - default: "postgres" + edit: false + envKey: POSTGRES_DB + labelZh: Postgres 数据库名称(不建议改动) + labelEn: Postgres Database Name + required: false + type: text diff --git a/appstore/postgresql/pg16-alpine/docker-compose.yml b/appstore/postgresql/pg16-alpine/docker-compose.yml new file mode 100644 index 00000000..6826af06 --- /dev/null +++ b/appstore/postgresql/pg16-alpine/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg16-alpine-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:16-alpine + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/appstore/postgresql/pg16-alpine/envs/default.env b/appstore/postgresql/pg16-alpine/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/postgresql/pg16-alpine/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/postgresql/pg16-alpine/envs/global.env b/appstore/postgresql/pg16-alpine/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/postgresql/pg16-alpine/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/postgresql/pg16-alpine/scripts/init.sh b/appstore/postgresql/pg16-alpine/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg16-alpine/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg16-alpine/scripts/uninstall.sh b/appstore/postgresql/pg16-alpine/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/postgresql/pg16-alpine/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg16-alpine/scripts/upgrade.sh b/appstore/postgresql/pg16-alpine/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg16-alpine/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg16-vectors/.env b/appstore/postgresql/pg16-vectors/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/appstore/postgresql/pg16-vectors/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/appstore/postgresql/pg16-vectors/data.yml b/appstore/postgresql/pg16-vectors/data.yml new file mode 100644 index 00000000..ac55698b --- /dev/null +++ b/appstore/postgresql/pg16-vectors/data.yml @@ -0,0 +1,40 @@ +additionalProperties: + formFields: + - default: "/home/postgres" + edit: true + envKey: POSTGRES_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: false + envKey: POSTGRES_PASSWORD + labelZh: Postgres 密码 (首次生效) + labelEn: Postgres Password (First Time) + required: true + random: true + rule: paramComplexity + type: password + - default: 5432 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Postgres 端口 + labelEn: Postgres Port + required: true + rule: paramPort + type: number + - default: "postgres" + edit: false + envKey: POSTGRES_USER + labelZh: Postgres 用户(不建议改动) + labelEn: Postgres User + required: false + type: text + - default: "postgres" + edit: false + envKey: POSTGRES_DB + labelZh: Postgres 数据库名称(不建议改动) + labelEn: Postgres Database Name + required: false + type: text diff --git a/appstore/postgresql/pg16-vectors/docker-compose.yml b/appstore/postgresql/pg16-vectors/docker-compose.yml new file mode 100644 index 00000000..a51bbf2f --- /dev/null +++ b/appstore/postgresql/pg16-vectors/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg16-vectors-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: tensorchord/pgvecto-rs:pg16-v0.2.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/appstore/postgresql/pg16-vectors/envs/default.env b/appstore/postgresql/pg16-vectors/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/postgresql/pg16-vectors/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/postgresql/pg16-vectors/envs/global.env b/appstore/postgresql/pg16-vectors/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/postgresql/pg16-vectors/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/postgresql/pg16-vectors/scripts/init.sh b/appstore/postgresql/pg16-vectors/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg16-vectors/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg16-vectors/scripts/uninstall.sh b/appstore/postgresql/pg16-vectors/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/postgresql/pg16-vectors/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg16-vectors/scripts/upgrade.sh b/appstore/postgresql/pg16-vectors/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg16-vectors/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg16/.env b/appstore/postgresql/pg16/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/appstore/postgresql/pg16/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/appstore/postgresql/pg16/data.yml b/appstore/postgresql/pg16/data.yml new file mode 100644 index 00000000..ac55698b --- /dev/null +++ b/appstore/postgresql/pg16/data.yml @@ -0,0 +1,40 @@ +additionalProperties: + formFields: + - default: "/home/postgres" + edit: true + envKey: POSTGRES_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: false + envKey: POSTGRES_PASSWORD + labelZh: Postgres 密码 (首次生效) + labelEn: Postgres Password (First Time) + required: true + random: true + rule: paramComplexity + type: password + - default: 5432 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: Postgres 端口 + labelEn: Postgres Port + required: true + rule: paramPort + type: number + - default: "postgres" + edit: false + envKey: POSTGRES_USER + labelZh: Postgres 用户(不建议改动) + labelEn: Postgres User + required: false + type: text + - default: "postgres" + edit: false + envKey: POSTGRES_DB + labelZh: Postgres 数据库名称(不建议改动) + labelEn: Postgres Database Name + required: false + type: text diff --git a/appstore/postgresql/pg16/docker-compose.yml b/appstore/postgresql/pg16/docker-compose.yml new file mode 100644 index 00000000..53121747 --- /dev/null +++ b/appstore/postgresql/pg16/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg16-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:16 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/appstore/postgresql/pg16/envs/default.env b/appstore/postgresql/pg16/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/postgresql/pg16/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/postgresql/pg16/envs/global.env b/appstore/postgresql/pg16/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/postgresql/pg16/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/postgresql/pg16/scripts/init.sh b/appstore/postgresql/pg16/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg16/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg16/scripts/uninstall.sh b/appstore/postgresql/pg16/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/postgresql/pg16/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/postgresql/pg16/scripts/upgrade.sh b/appstore/postgresql/pg16/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/postgresql/pg16/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/prowlarr/1.27.0/.env b/appstore/prowlarr/1.27.0/.env new file mode 100644 index 00000000..3000d877 --- /dev/null +++ b/appstore/prowlarr/1.27.0/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +PROWLARR_ROOT_PATH=/home/prowlarr + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=9696 + diff --git a/appstore/prowlarr/1.27.0/data.yml b/appstore/prowlarr/1.27.0/data.yml new file mode 100644 index 00000000..0afacf0f --- /dev/null +++ b/appstore/prowlarr/1.27.0/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + formFields: + - default: "/home/prowlarr" + edit: true + envKey: PROWLARR_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 9696 + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number diff --git a/appstore/prowlarr/1.27.0/docker-compose.yml b/appstore/prowlarr/1.27.0/docker-compose.yml new file mode 100644 index 00000000..2f609c89 --- /dev/null +++ b/appstore/prowlarr/1.27.0/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + prowlarr: + container_name: prowlarr + env_file: + - ./envs/global.env + - .env + environment: + - PUID=1000 + - PGID=1000 + - UMASK=022 + - TZ=Asia/Shanghai + image: linuxserver/prowlarr:1.27.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:9696 + restart: always + volumes: + - ${PROWLARR_ROOT_PATH}/config:/config diff --git a/appstore/prowlarr/1.27.0/envs/default.env b/appstore/prowlarr/1.27.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/prowlarr/1.27.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/prowlarr/1.27.0/envs/global.env b/appstore/prowlarr/1.27.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/prowlarr/1.27.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/prowlarr/1.27.0/scripts/init.sh b/appstore/prowlarr/1.27.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/prowlarr/1.27.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/prowlarr/1.27.0/scripts/uninstall.sh b/appstore/prowlarr/1.27.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/prowlarr/1.27.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/prowlarr/1.27.0/scripts/upgrade.sh b/appstore/prowlarr/1.27.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/prowlarr/1.27.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/prowlarr/README.md b/appstore/prowlarr/README.md new file mode 100644 index 00000000..e56a593d --- /dev/null +++ b/appstore/prowlarr/README.md @@ -0,0 +1,76 @@ +# Prowlarr + +终极索引器管理器。 + +![Prowlarr](https://file.lifebus.top/imgs/prowlarr_cover.png) + +Prowlarr 是一个基于流行 *arr .net/reactjs 基础堆栈的索引器管理/代理工具,旨在与您的各种 PVR 应用集成,支持对磁贴跟踪器和 +Usenet 索引器的管理。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + +它与 Lidarr、Mylar3、Radarr、Readarr 和 Sonarr 无缝集成,提供对您的索引器的全面管理,无需为每个应用单独设置索引器(我们全部为您完成)。 + ++ 本地支持 24 个索引器的 Usenet,包括 Headphones VIP ++ 通过“通用 Newznab”对于任何 Newznab 兼容的索引器的 Usenet 支持 ++ 对超过 500 个跟踪器的种子支持,且不断添加更多 ++ 通过“通用 Torznab”支持任何与 Torznab 兼容的追踪器 ++ 通过 Cardigann 支持自定义 YML 定义,包括 JSON 和 XML 解析 ++ 索引器同步到 Lidarr/Mylar3/Radarr/Readarr/Sonarr,因此无需对其他应用程序进行手动配置 ++ 索引器历史和统计 ++ 手动在类别级别搜索追踪器和索引器 ++ 基于参数的手动搜索 ++ 支持一次直接将多个发布推送到您的下载客户端从 Prowlarr ++ 索引器健康和状态通知 ++ 代理支持索引器(SOCKS4、SOCKS5、HTTP、Flaresolverr) + +## 反向代理 + +> Nginx +> +> BaseUrl 为 `/prowlarr` 时的反向代理配置如下: + +```nginx + location /prowlarr { + proxy_pass http://127.0.0.1:9696; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_redirect off; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + } + + # Allow the API/Indexer External Access via NGINX + location ~ /prowlarr(/[0-9]+)?/api { + auth_basic off; + proxy_pass http://127.0.0.1:9696; + } +``` + +> Nginx +> +> BaseUrl 为 `/` 时的反向代理配置如下: + +```nginx + location / { + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + proxy_redirect off; + proxy_http_version 1.1; + + proxy_pass http://127.0.0.1:9696; + } +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/prowlarr/data.yml b/appstore/prowlarr/data.yml new file mode 100644 index 00000000..4d5884e7 --- /dev/null +++ b/appstore/prowlarr/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: prowlarr + name: Prowlarr + tags: + - WebSite + - Storage + - Local + shortDescZh: 终极索引器管理器 + shortDescEn: The ultimate indexer manager + type: website + crossVersionUpdate: true + limit: 0 + website: https://prowlarr.com/ + github: https://github.com/Prowlarr/Prowlarr/ + document: https://wiki.servarr.com/prowlarr/ diff --git a/appstore/prowlarr/logo.png b/appstore/prowlarr/logo.png new file mode 100644 index 00000000..2040da30 Binary files /dev/null and b/appstore/prowlarr/logo.png differ diff --git a/appstore/puff/0.2.2/.env b/appstore/puff/0.2.2/.env new file mode 100644 index 00000000..743cc24d --- /dev/null +++ b/appstore/puff/0.2.2/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +PUFF_ROOT_PATH=/home/puff + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + diff --git a/appstore/puff/0.2.2/data.yml b/appstore/puff/0.2.2/data.yml new file mode 100644 index 00000000..492027b7 --- /dev/null +++ b/appstore/puff/0.2.2/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: "/home/puff" + edit: true + envKey: PUFF_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number diff --git a/appstore/puff/0.2.2/docker-compose.yml b/appstore/puff/0.2.2/docker-compose.yml new file mode 100644 index 00000000..fb46fd31 --- /dev/null +++ b/appstore/puff/0.2.2/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + puff: + container_name: puff + env_file: + - ./envs/global.env + - .env + image: bitaur/puff:v0.2.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${PUFF_ROOT_PATH}/data:/app/data diff --git a/appstore/puff/0.2.2/envs/default.env b/appstore/puff/0.2.2/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/puff/0.2.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/puff/0.2.2/envs/global.env b/appstore/puff/0.2.2/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/puff/0.2.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/puff/0.2.2/scripts/init.sh b/appstore/puff/0.2.2/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/puff/0.2.2/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/puff/0.2.2/scripts/uninstall.sh b/appstore/puff/0.2.2/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/puff/0.2.2/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/puff/0.2.2/scripts/upgrade.sh b/appstore/puff/0.2.2/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/puff/0.2.2/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/puff/README.md b/appstore/puff/README.md new file mode 100644 index 00000000..d92c5dbd --- /dev/null +++ b/appstore/puff/README.md @@ -0,0 +1,29 @@ +# Puff + +域名监控工具 + +![Puff](https://file.lifebus.top/imgs/puff_logo.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +### Puff - 开源的域名监控工具 + +> 2024-09-27 · PROJ · ROYWANG + +昨天早上在群里吹水,关注的一个域名橘子已经回复会删除了,但多久删除没有底,想问问群里的大佬多久会删除,但是问了一圈都不知道,所以萌生了写一个域名监控的想法。 + +目前这个服务呢,仅支持监控域名掉落,不能负责抢注,但抢注更多的不是技术难题,而是别的方面。后续打算增加一个域名动态检测的功能,如果域名过期了、进入赎回期、待删除之类的,都可以提醒一下(已支持)。 + +## 安装说明 + +> 默认用户名:`admin` +> +> 默认密码:`admin` + + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) +o diff --git a/appstore/puff/data.yml b/appstore/puff/data.yml new file mode 100644 index 00000000..3e16f2ff --- /dev/null +++ b/appstore/puff/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: puff + name: Puff + tags: + - WebSite + - Tool + - Local + shortDescZh: 域名监控程序 + shortDescEn: Domain monitoring program + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/BitAUR/Puff/ + github: https://github.com/BitAUR/Puff/ + document: https://github.com/BitAUR/Puff/ diff --git a/appstore/puff/logo.png b/appstore/puff/logo.png new file mode 100644 index 00000000..78ac01c7 Binary files /dev/null and b/appstore/puff/logo.png differ diff --git a/appstore/qbittorrent/4.6.7/.env b/appstore/qbittorrent/4.6.7/.env new file mode 100644 index 00000000..63b576a9 --- /dev/null +++ b/appstore/qbittorrent/4.6.7/.env @@ -0,0 +1,21 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# Torrenting 端口 [必填] +PANEL_APP_PORT_TORRENTING=6881 + +# 数据持久化路径 [必填] +QBITTORRENT_ROOT_PATH=/home/qBittorrent + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/qbittorrent/4.6.7/data.yml b/appstore/qbittorrent/4.6.7/data.yml new file mode 100644 index 00000000..5f122be9 --- /dev/null +++ b/appstore/qbittorrent/4.6.7/data.yml @@ -0,0 +1,62 @@ +additionalProperties: + formFields: + - default: "host" + edit: true + envKey: NETWORK_MODE + labelZh: 网络模式 + labelEn: Network Mode + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI Port + required: true + rule: paramPort + type: number + - default: 6881 + edit: true + envKey: PANEL_APP_PORT_TORRENTING + labelZh: Torrenting 端口 + labelEn: Torrenting Port + required: true + rule: paramPort + type: number + - default: "/home/qBittorrent" + edit: true + envKey: QBITTORRENT_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/qbittorrent/4.6.7/docker-compose.yml b/appstore/qbittorrent/4.6.7/docker-compose.yml new file mode 100644 index 00000000..5ec4b458 --- /dev/null +++ b/appstore/qbittorrent/4.6.7/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + qbittorrent: + container_name: qbittorrent + env_file: + - ./envs/global.env + environment: + - PUID=0 + - PGID=0 + - UMASK=022 + - WEBUI_PORT=${PANEL_APP_PORT_HTTP} + - TORRENTING_PORT=${PANEL_APP_PORT_TORRENTING} + image: linuxserver/qbittorrent:4.6.7 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP} + - ${PANEL_APP_PORT_TORRENTING} + - ${PANEL_APP_PORT_TORRENTING}/udp + restart: always + volumes: + - ${QBITTORRENT_ROOT_PATH}/config:/config + - ${QBITTORRENT_ROOT_PATH}/downloads:/downloads + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/qbittorrent/4.6.7/envs/default.env b/appstore/qbittorrent/4.6.7/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/qbittorrent/4.6.7/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/qbittorrent/4.6.7/envs/global.env b/appstore/qbittorrent/4.6.7/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/qbittorrent/4.6.7/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/qbittorrent/4.6.7/scripts/init.sh b/appstore/qbittorrent/4.6.7/scripts/init.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/qbittorrent/4.6.7/scripts/init.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/qbittorrent/4.6.7/scripts/uninstall.sh b/appstore/qbittorrent/4.6.7/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/qbittorrent/4.6.7/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/qbittorrent/4.6.7/scripts/upgrade.sh b/appstore/qbittorrent/4.6.7/scripts/upgrade.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/qbittorrent/4.6.7/scripts/upgrade.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/qbittorrent/5.0.2/.env b/appstore/qbittorrent/5.0.2/.env new file mode 100644 index 00000000..63b576a9 --- /dev/null +++ b/appstore/qbittorrent/5.0.2/.env @@ -0,0 +1,21 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# Torrenting 端口 [必填] +PANEL_APP_PORT_TORRENTING=6881 + +# 数据持久化路径 [必填] +QBITTORRENT_ROOT_PATH=/home/qBittorrent + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/qbittorrent/5.0.2/data.yml b/appstore/qbittorrent/5.0.2/data.yml new file mode 100644 index 00000000..5f122be9 --- /dev/null +++ b/appstore/qbittorrent/5.0.2/data.yml @@ -0,0 +1,62 @@ +additionalProperties: + formFields: + - default: "host" + edit: true + envKey: NETWORK_MODE + labelZh: 网络模式 + labelEn: Network Mode + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI Port + required: true + rule: paramPort + type: number + - default: 6881 + edit: true + envKey: PANEL_APP_PORT_TORRENTING + labelZh: Torrenting 端口 + labelEn: Torrenting Port + required: true + rule: paramPort + type: number + - default: "/home/qBittorrent" + edit: true + envKey: QBITTORRENT_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/qbittorrent/5.0.2/docker-compose.yml b/appstore/qbittorrent/5.0.2/docker-compose.yml new file mode 100644 index 00000000..f0dd9eba --- /dev/null +++ b/appstore/qbittorrent/5.0.2/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + qbittorrent: + container_name: qbittorrent + env_file: + - ./envs/global.env + environment: + - PUID=0 + - PGID=0 + - UMASK=022 + - WEBUI_PORT=${PANEL_APP_PORT_HTTP} + - TORRENTING_PORT=${PANEL_APP_PORT_TORRENTING} + image: linuxserver/qbittorrent:5.0.2 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP} + - ${PANEL_APP_PORT_TORRENTING} + - ${PANEL_APP_PORT_TORRENTING}/udp + restart: always + volumes: + - ${QBITTORRENT_ROOT_PATH}/config:/config + - ${QBITTORRENT_ROOT_PATH}/downloads:/downloads + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/qbittorrent/5.0.2/envs/default.env b/appstore/qbittorrent/5.0.2/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/qbittorrent/5.0.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/qbittorrent/5.0.2/envs/global.env b/appstore/qbittorrent/5.0.2/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/qbittorrent/5.0.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/qbittorrent/5.0.2/scripts/init.sh b/appstore/qbittorrent/5.0.2/scripts/init.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/qbittorrent/5.0.2/scripts/init.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/qbittorrent/5.0.2/scripts/uninstall.sh b/appstore/qbittorrent/5.0.2/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/qbittorrent/5.0.2/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/qbittorrent/5.0.2/scripts/upgrade.sh b/appstore/qbittorrent/5.0.2/scripts/upgrade.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/qbittorrent/5.0.2/scripts/upgrade.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/qbittorrent/README.md b/appstore/qbittorrent/README.md new file mode 100644 index 00000000..14c1ed35 --- /dev/null +++ b/appstore/qbittorrent/README.md @@ -0,0 +1,37 @@ +# qBittorrent + +qBittorrent是一个跨平台的开源、自由的BitTorrent客户端,其图形用户界面是通过Qt所写,后端使用libtorrent。 + +![qBittorrent](https://file.lifebus.top/imgs/qbittorrent_cover.jpg) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ DHT, PEX, 加密连接, 本地节点发现, UPnP, NAT-PMP 端口中继, µTP, 磁力链接, PT下载 ++ 带宽管理 ++ 可以指定网络接口 ++ 易于管理torrent, tracker 和节点(torrent的队列、优先顺序,和其中文件各自分别的下载顺序) ++ Unicode支持 ++ 75种语言的本地化。 ++ 综合的搜索引擎,接口类似eMule。 ++ IP过滤: 文件类型 eMule dat, 或 PeerGuardian ++ 支持IPv6 ++ 集成RSS阅读器,可以订阅并下载 ++ 内置torrrent搜索引擎(同时搜索多个torrent网站) ++ Web界面 ++ Torrent创建工具 + +## 安装说明 + +您必须在设置的 Web UI 部分更改用户名/密码。 + +如果不更改密码,每次容器启动时都会生成一个新密码。 + +> 用户名:admin +> +> 密码:{日志中查询} + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/qbittorrent/data.yml b/appstore/qbittorrent/data.yml new file mode 100644 index 00000000..0323418f --- /dev/null +++ b/appstore/qbittorrent/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: qbittorrent + name: qBittorrent + tags: + - WebSite + - Tool + - Local + shortDescZh: BitTorrent客户端 + shortDescEn: BitTorrent client + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.qbittorrent.org/ + github: https://github.com/qbittorrent/qBittorrent/ + document: https://github.com/qbittorrent/qBittorrent/wiki/ diff --git a/appstore/qbittorrent/logo.png b/appstore/qbittorrent/logo.png new file mode 100644 index 00000000..fb57111b Binary files /dev/null and b/appstore/qbittorrent/logo.png differ diff --git a/appstore/qinglong/2.17.12/.env b/appstore/qinglong/2.17.12/.env new file mode 100644 index 00000000..6b1207e9 --- /dev/null +++ b/appstore/qinglong/2.17.12/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +QINGLONG_ROOT_PATH=/home/qinglong + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5700 + +# 部署路径 +QINGLONG_BASE_URL=/ + diff --git a/appstore/qinglong/2.17.12/data.yml b/appstore/qinglong/2.17.12/data.yml new file mode 100644 index 00000000..b32ae486 --- /dev/null +++ b/appstore/qinglong/2.17.12/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: "/home/qinglong" + edit: true + envKey: QINGLONG_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 5700 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI Port + required: true + rule: paramPort + type: number + - default: "/" + edit: true + envKey: QINGLONG_BASE_URL + labelZh: 部署路径 + labelEn: Deployment path + required: false + type: text diff --git a/appstore/qinglong/2.17.12/docker-compose.yml b/appstore/qinglong/2.17.12/docker-compose.yml new file mode 100644 index 00000000..1bd8fd56 --- /dev/null +++ b/appstore/qinglong/2.17.12/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + qinglong: + container_name: qinglong + environment: + - QlPort=5700 + - QlBaseUrl=${QINGLONG_BASE_URL:-/} + image: whyour/qinglong:2.17.12 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP:-5700}:5700 + restart: always + volumes: + - ${QINGLONG_ROOT_PATH}/data:/ql/data diff --git a/appstore/qinglong/2.17.12/envs/default.env b/appstore/qinglong/2.17.12/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/qinglong/2.17.12/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/qinglong/2.17.12/envs/global.env b/appstore/qinglong/2.17.12/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/qinglong/2.17.12/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/qinglong/2.17.12/scripts/init.sh b/appstore/qinglong/2.17.12/scripts/init.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/qinglong/2.17.12/scripts/init.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/qinglong/2.17.12/scripts/uninstall.sh b/appstore/qinglong/2.17.12/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/qinglong/2.17.12/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/qinglong/2.17.12/scripts/upgrade.sh b/appstore/qinglong/2.17.12/scripts/upgrade.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/qinglong/2.17.12/scripts/upgrade.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/qinglong/README.md b/appstore/qinglong/README.md new file mode 100644 index 00000000..7ba76521 --- /dev/null +++ b/appstore/qinglong/README.md @@ -0,0 +1,79 @@ +# 青龙 + +支持 Python3、JavaScript、Shell、Typescript 的定时任务管理平台 + +![青龙](https://file.lifebus.top/imgs/qinglong_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + ++ 支持多种脚本语言(python3、javaScript、shell、typescript) ++ 支持在线管理脚本、环境变量、配置文件 ++ 支持在线查看任务日志 ++ 支持秒级任务设置 ++ 支持系统级通知 ++ 支持暗黑模式 ++ 支持手机端操作 + +## API 文档 + +[青龙 Apifox](https://qinglong.apifox.cn/) + +## 内置命令 + +### `task` 任务命令 + +```shell +# 依次执行,如果设置了随机延迟,将随机延迟一定秒数 +task +# 依次执行,无论是否设置了随机延迟,均立即运行,前台会输出日,同时记录在日志文件中 +task now +# 并发执行,无论是否设置了随机延迟,均立即运行,前台不产生日,直接记录在日志文件中,且可指定账号执行 +task conc (可选的) +# 指定账号执行,无论是否设置了随机延迟,均立即运行 +task desi +# 设置任务超时时间 +task -m +# 使用 -- 分割,-- 后面的参数会传给脚本,下面的例子,脚本就可接收到参数 -u whyour -p password +task -- -u whyour -p password +``` + +### `ql` 青龙命令 + +```shell +# 更新并重启青龙 +ql update +# 运行自定义脚本extra.sh +ql extra +# 添加单个脚本文件 +ql raw +# 添加单个仓库的指定脚本 +ql repo +# 删除旧日志 +ql rmlog +# 启动tg-bot +ql bot +# 检测青龙环境并修复 +ql check +# 重置登录错误次数 +ql resetlet +# 禁用两步登录 +ql resettfa +``` + +| **参数** | **说明** | +|------------|---------------------------------------------------| +| file_url | 脚本地址 | +| repo_url | 仓库地址 | +| whitelist | 拉取仓库时的白名单,即就是需要拉取的脚本的路径包含的字符串,多个竖线分割 | +| blacklist | 拉取仓库时的黑名单,即就是需要拉取的脚本的路径不包含的字符串,多个竖线分割 | +| dependence | 拉取仓库需要的依赖文件,会直接从仓库拷贝到scripts下的仓库目录,不受黑名单影响,多个竖线分割 | +| extensions | 拉取仓库的文件后缀,多个竖线分割 | +| branch | 拉取仓库的分支 | +| days | 需要保留的日志的天数 | +| file_path | 任务执行时的文件路径 | + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/qinglong/data.yml b/appstore/qinglong/data.yml new file mode 100644 index 00000000..25797e26 --- /dev/null +++ b/appstore/qinglong/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: qinglong + name: 青龙 + tags: + - WebSite + - Local + shortDescZh: 定时任务管理平台 + shortDescEn: A scheduled task management platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://qinglong.online/ + github: https://github.com/whyour/qinglong/ + document: https://qinglong.online/ diff --git a/appstore/qinglong/logo.png b/appstore/qinglong/logo.png new file mode 100644 index 00000000..81308ade Binary files /dev/null and b/appstore/qinglong/logo.png differ diff --git a/appstore/radarr/5.15.1/.env b/appstore/radarr/5.15.1/.env new file mode 100644 index 00000000..8ff38249 --- /dev/null +++ b/appstore/radarr/5.15.1/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +RADARR_ROOT_PATH=/home/radarr + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=7878 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/radarr/5.15.1/data.yml b/appstore/radarr/5.15.1/data.yml new file mode 100644 index 00000000..43605312 --- /dev/null +++ b/appstore/radarr/5.15.1/data.yml @@ -0,0 +1,37 @@ +additionalProperties: + formFields: + - default: "/home/radarr" + edit: true + envKey: RADARR_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 7878 + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/radarr/5.15.1/docker-compose.yml b/appstore/radarr/5.15.1/docker-compose.yml new file mode 100644 index 00000000..db129b54 --- /dev/null +++ b/appstore/radarr/5.15.1/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + radarr: + container_name: radarr + env_file: + - ./envs/global.env + - .env + environment: + - PUID=1000 + - PGID=1000 + - UMASK=022 + - TZ=Asia/Shanghai + image: linuxserver/radarr:5.15.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:7878 + restart: always + volumes: + - ${RADARR_ROOT_PATH}/config:/config + - ${RADARR_ROOT_PATH}/movies:/movies + - ${RADARR_ROOT_PATH}/downloads:/downloads + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/radarr/5.15.1/envs/default.env b/appstore/radarr/5.15.1/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/radarr/5.15.1/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/radarr/5.15.1/envs/global.env b/appstore/radarr/5.15.1/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/radarr/5.15.1/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/radarr/5.15.1/scripts/init.sh b/appstore/radarr/5.15.1/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/radarr/5.15.1/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/radarr/5.15.1/scripts/uninstall.sh b/appstore/radarr/5.15.1/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/radarr/5.15.1/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/radarr/5.15.1/scripts/upgrade.sh b/appstore/radarr/5.15.1/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/radarr/5.15.1/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/radarr/README.md b/appstore/radarr/README.md new file mode 100644 index 00000000..fa439bc9 --- /dev/null +++ b/appstore/radarr/README.md @@ -0,0 +1,78 @@ +# Radarr + +电影组织者/管理员,适用于 Usenet 和 torrent 用户。 + +![Radarr](https://file.lifebus.top/imgs/radarr_cover.png) + +Radarr 是为 Usenet 和 BitTorrent 用户设计的电影收藏管理器。它可以监控多个 RSS 源,寻找新电影,并与客户端和索引器接口,抓取、排序和重命名它们。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 添加包含大量信息的新电影,如预告片、评分等。 ++ 主要平台支持:Windows,Linux,macOS,Raspberry Pi 等。 ++ 可以监控您拥有的电影质量,并自动升级。例如,从 DVD 升级到蓝光。 ++ 自动失败下载处理将在一个失败时尝试另一个版本 ++ 手动搜索,以便您可以选择任何版本或查看未自动下载版本的原因 ++ 与 SABnzbd 和 NZBGet 的全面整合 ++ 自动搜索发布内容以及 RSS 同步 ++ 自动导入下载的电影 ++ 识别特别版、导演剪辑版等。 ++ 识别具有硬编码字幕的发布 ++ 识别带有别名电影名的发布 ++ SABnzbd,NZBGet,QBittorrent,Deluge,rTorrent,Transmission,uTorrent 和其他下载客户端被支持并集成 ++ 与 Kodi 和 Plex 的全面整合(通知,库更新) ++ 导入元数据,如预告片或字幕 ++ 为 Kodi 和其他人添加元数据,如海报和信息 ++ 高级配置文件自定义,使得 Radarr 总是下载您想要的副本 ++ 美观的 UI + +## 反向代理 + +> Nginx +> +> BaseUrl 为 `/radarr` 时的反向代理配置如下: + +```nginx + location ^~ /radarr { + proxy_pass http://127.0.0.1:7878; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_redirect off; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + } + # Allow the API External Access via NGINX + location ^~ /radarr/api { + auth_basic off; + proxy_pass http://127.0.0.1:7878; + } +``` + +> Nginx +> +> BaseUrl 为 `/` 时的反向代理配置如下: + +```nginx + location / { + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + + proxy_redirect off; + proxy_http_version 1.1; + + proxy_pass http://127.0.0.1:7878; + } +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/radarr/data.yml b/appstore/radarr/data.yml new file mode 100644 index 00000000..03719dc9 --- /dev/null +++ b/appstore/radarr/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: radarr + name: Radarr + tags: + - WebSite + - Storage + - Local + shortDescZh: 电影组织者/管理员,适用于 Usenet 和 torrent 用户 + shortDescEn: Movie organizer and manager, suitable for Usenet and torrent users + type: website + crossVersionUpdate: true + limit: 0 + website: https://radarr.video/ + github: https://github.com/Radarr/Radarr/ + document: https://wiki.servarr.com/radarr/ diff --git a/appstore/radarr/logo.png b/appstore/radarr/logo.png new file mode 100644 index 00000000..0c259d39 Binary files /dev/null and b/appstore/radarr/logo.png differ diff --git a/appstore/reader3-webview/3.2.0/.env b/appstore/reader3-webview/3.2.0/.env new file mode 100644 index 00000000..8cb19dcc --- /dev/null +++ b/appstore/reader3-webview/3.2.0/.env @@ -0,0 +1,3 @@ +# API 端口 [必填] +PANEL_APP_PORT_HTTP=8050 + diff --git a/appstore/reader3-webview/3.2.0/data.yml b/appstore/reader3-webview/3.2.0/data.yml new file mode 100644 index 00000000..63a28ae5 --- /dev/null +++ b/appstore/reader3-webview/3.2.0/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: 8050 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: API 端口 + labelEn: API port + required: true + rule: paramPort + type: number diff --git a/appstore/reader3-webview/3.2.0/docker-compose.yml b/appstore/reader3-webview/3.2.0/docker-compose.yml new file mode 100644 index 00000000..faccb3e1 --- /dev/null +++ b/appstore/reader3-webview/3.2.0/docker-compose.yml @@ -0,0 +1,16 @@ +networks: + 1panel-network: + external: true +services: + reader3-webview: + container_name: reader3-webview + env_file: + - ./envs/global.env + image: hectorqin/remote-webview:3.2.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8050 + restart: always diff --git a/appstore/reader3-webview/3.2.0/envs/default.env b/appstore/reader3-webview/3.2.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/reader3-webview/3.2.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/reader3-webview/3.2.0/envs/global.env b/appstore/reader3-webview/3.2.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/reader3-webview/3.2.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/reader3-webview/3.2.0/scripts/init.sh b/appstore/reader3-webview/3.2.0/scripts/init.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/reader3-webview/3.2.0/scripts/init.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/reader3-webview/3.2.0/scripts/uninstall.sh b/appstore/reader3-webview/3.2.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/reader3-webview/3.2.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/reader3-webview/3.2.0/scripts/upgrade.sh b/appstore/reader3-webview/3.2.0/scripts/upgrade.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/reader3-webview/3.2.0/scripts/upgrade.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/reader3-webview/README.md b/appstore/reader3-webview/README.md new file mode 100644 index 00000000..f526b6de --- /dev/null +++ b/appstore/reader3-webview/README.md @@ -0,0 +1,15 @@ +# 阅读3 Webview插件 + +阅读是一款提供网络文学搜索的工具,为广大网络文学爱好者提供一种方便、快捷舒适的试读体验。 + + + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 应用说明 + +当前应用为 `阅读3` 的 Webview 插件,提供了一个简单的 Webview 容器,用于 `阅读3` 的订阅源书籍加载功能。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/reader3-webview/data.yml b/appstore/reader3-webview/data.yml new file mode 100644 index 00000000..5c531246 --- /dev/null +++ b/appstore/reader3-webview/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: reader3-webview + name: 阅读3 Webview插件 + tags: + - Tool + - Local + shortDescZh: 阅读3服务器版,不需要手机 + shortDescEn: Reader3 server version, no need for mobile phone + type: tool + crossVersionUpdate: true + limit: 0 + website: https://github.com/hectorqin/reader/ + github: https://github.com/hectorqin/reader/ + document: https://github.com/hectorqin/reader/ diff --git a/appstore/reader3-webview/logo.png b/appstore/reader3-webview/logo.png new file mode 100644 index 00000000..913666f0 Binary files /dev/null and b/appstore/reader3-webview/logo.png differ diff --git a/appstore/reader3/3.2.10/.env b/appstore/reader3/3.2.10/.env new file mode 100644 index 00000000..62e99f56 --- /dev/null +++ b/appstore/reader3/3.2.10/.env @@ -0,0 +1,39 @@ +# 数据持久化路径 [必填] +READER3_ROOT_PATH=/home/reader3 + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 管理员 密码 [必填] +READER_APP_SECUREKEY= + +# 邀请码 +READER_APP_INVITECODE= + +# 缓存章节内容 [必填] +READER_APP_CACHECHAPTERCONTENT=true + +# 自动清理不活跃用户 (天) [必填] +READER_APP_AUTOCLEARINACTIVEUSER=0 + +# 远程 WebView API 地址 (插件) +READER_APP_REMOTEWEBVIEWAPI= + +# 新用户默认启用 WebDAV [必填] +READER_APP_DEFAULTUSERENABLEWEBDAV=false + +# 新用户默认启用 LocalStore [必填] +READER_APP_DEFAULTUSERENABLELOCALSTORE=false + +# 允许新用户编辑书源 [必填] +READER_APP_DEFAULTUSERENABLEBOOKSOURCE=false + +# 允许新用户编辑 RSS 源 [必填] +READER_APP_DEFAULTUSERENABLERSSSOURCE=false + +# 新用户书源数量限制 [必填] +READER_APP_DEFAULTUSERBOOKSOURCELIMIT=200 + +# 用户密码最小长度 [必填] +READER_APP_minUserPasswordLength=8 + diff --git a/appstore/reader3/3.2.10/data.yml b/appstore/reader3/3.2.10/data.yml new file mode 100644 index 00000000..fcf52b04 --- /dev/null +++ b/appstore/reader3/3.2.10/data.yml @@ -0,0 +1,119 @@ +additionalProperties: + formFields: + - default: "/home/reader3" + edit: true + envKey: READER3_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: READER_APP_SECUREKEY + labelZh: 管理员 密码 + labelEn: Admin Password + required: true + type: password + - default: "" + edit: true + envKey: READER_APP_INVITECODE + labelZh: 邀请码 + labelEn: Invite Code + required: false + type: text + - default: "true" + edit: true + envKey: READER_APP_CACHECHAPTERCONTENT + labelZh: 缓存章节内容 + labelEn: Cache Chapter Content + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 关闭 + value: "false" + - default: 0 + edit: true + envKey: READER_APP_AUTOCLEARINACTIVEUSER + labelZh: 自动清理不活跃用户 (天) + labelEn: Auto Clear Inactive User (Days) + required: true + type: number + - default: "" + edit: true + envKey: READER_APP_REMOTEWEBVIEWAPI + labelZh: 远程 WebView API 地址 (插件) + labelEn: Remote WebView API Address (Plugin) + required: false + type: text + - default: "false" + edit: true + envKey: READER_APP_DEFAULTUSERENABLEWEBDAV + labelZh: 新用户默认启用 WebDAV + labelEn: New User Default Enable WebDAV + required: true + type: select + values: + - label: 启用 + value: "true" + - label: 禁用 + value: "false" + - default: "false" + edit: true + envKey: READER_APP_DEFAULTUSERENABLELOCALSTORE + labelZh: 新用户默认启用 LocalStore + labelEn: New User Default Enable LocalStore + required: true + type: select + values: + - label: 启用 + value: "true" + - label: 禁用 + value: "false" + - default: "false" + edit: true + envKey: READER_APP_DEFAULTUSERENABLEBOOKSOURCE + labelZh: 允许新用户编辑书源 + labelEn: Allow New User Edit Book Source + required: true + type: select + values: + - label: 允许 + value: "true" + - label: 禁止 + value: "false" + - default: "false" + edit: true + envKey: READER_APP_DEFAULTUSERENABLERSSSOURCE + labelZh: 允许新用户编辑 RSS 源 + labelEn: Allow New User Edit RSS Source + required: true + type: select + values: + - label: 允许 + value: "true" + - label: 禁止 + value: "false" + - default: 200 + edit: true + envKey: READER_APP_DEFAULTUSERBOOKSOURCELIMIT + labelZh: 新用户书源数量限制 + labelEn: New User Book Source Limit + required: true + type: number + - default: 8 + edit: true + envKey: READER_APP_minUserPasswordLength + labelZh: 用户密码最小长度 + labelEn: User Password Min Length + required: true + type: number diff --git a/appstore/reader3/3.2.10/docker-compose.yml b/appstore/reader3/3.2.10/docker-compose.yml new file mode 100644 index 00000000..c0c6d20f --- /dev/null +++ b/appstore/reader3/3.2.10/docker-compose.yml @@ -0,0 +1,28 @@ +networks: + 1panel-network: + external: true +services: + reader3: + container_name: reader3 + env_file: + - ./envs/global.env + - .env + environment: + - SPRING_PROFILES_ACTIVE=prod + - READER_SERVER_PORT=8080 + - READER_SERVER_CONTEXTPATH=${READER_SERVER_CONTEXTPATH:-} + - READER_APP_USERLIMIT=50 + - READER_APP_SECURE=true + - READER_APP_SHELFUPDATEINTEVAL=10 + - READER_APP_REMOTEBOOKSOURCEUPDATEINTERVAL=720 + image: hectorqin/reader:3.2.10 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${READER3_ROOT_PATH}/logs:/logs + - ${READER3_ROOT_PATH}/storage:/storage diff --git a/appstore/reader3/3.2.10/envs/default.env b/appstore/reader3/3.2.10/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/reader3/3.2.10/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/reader3/3.2.10/envs/global.env b/appstore/reader3/3.2.10/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/reader3/3.2.10/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/reader3/3.2.10/scripts/init.sh b/appstore/reader3/3.2.10/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/reader3/3.2.10/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/reader3/3.2.10/scripts/uninstall.sh b/appstore/reader3/3.2.10/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/reader3/3.2.10/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/reader3/3.2.10/scripts/upgrade.sh b/appstore/reader3/3.2.10/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/reader3/3.2.10/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/reader3/README.md b/appstore/reader3/README.md new file mode 100644 index 00000000..45ccfec3 --- /dev/null +++ b/appstore/reader3/README.md @@ -0,0 +1,107 @@ +# 阅读3 + +阅读是一款提供网络文学搜索的工具,为广大网络文学爱好者提供一种方便、快捷舒适的试读体验。 + +![阅读3](https://file.lifebus.top/imgs/reader3_cover.jpg) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 免责声明 + +阅读是一款提供网络文学搜索的工具,为广大网络文学爱好者提供一种方便、快捷舒适的试读体验。 + +当您搜索一本书的时,阅读会将该书的书名以关键词的形式提交到各个第三方网络文学网站。各第三方网站返回的内容与阅读无关,阅读对其概不负责,亦不承担任何法律责任。任何通过使用阅读而链接到的第三方网页均系他人制作或提供,您可能从第三方网页上获得其他服务,阅读对其合法性概不负责,亦不承担任何法律责任。第三方搜索引擎结果根据您提交的书名自动搜索获得并提供试读,不代表阅读赞成或被搜索链接到的第三方网页上的内容或立场。您应该对使用搜索引擎的结果自行承担风险。 + +阅读不做任何形式的保证:不保证第三方搜索引擎的搜索结果满足您的要求,不保证搜索服务不中断,不保证搜索结果的安全性、正确性、及时性、合法性。因网络状况、通讯线路、第三方网站等任何原因而导致您不能正常使用阅读,阅读不承担任何法律责任。阅读尊重并保护所有使用阅读用户的个人隐私权,您注册的用户名、电子邮件地址等个人资料,非经您亲自许可或根据相关法律、法规的强制性规定,阅读不会主动地泄露给第三方。 + +阅读致力于最大程度地减少网络文学阅读者在自行搜寻过程中的无意义的时间浪费,通过专业搜索展示不同网站中网络文学的最新章节。阅读在为广大小说爱好者提供方便、快捷舒适的试读体验的同时,也使优秀网络文学得以迅速、更广泛的传播,从而达到了在一定程度促进网络文学充分繁荣发展之目的。阅读鼓励广大小说爱好者通过阅读发现优秀网络小说及其提供商,并建议阅读正版图书。任何单位或个人认为通过阅读搜索链接到的第三方网页内容可能涉嫌侵犯其信息网络传播权,应该及时向阅读提出书面权力通知,并提供身份证明、权属证明及详细侵权情况证明。阅读在收到上述法律文件后,将会依法尽快断开相关链接内容。 + +## 服务地址说明 + +> 1. 全功能web端 +> +> 访问地址:`http://{host_ip}:{port}` +> +> 用户需要自行注册账号 +> +> 2. 适配kindle的 simple-web (收费) +> +> 访问地址:`http://{host_ip}:{port}/simple-web` +> +> 3. WebDAV同步配置 +> +> 访问地址:`http://{host_ip}:{port}/reader3/webdav/` +> +> 用户名 `default` 或 用户名 +> +> 密码 `123456` 或 用户密码 + +## 安装说明 + +> `远程 WebView API 地址 (插件)` 配置 + +此配置为远程 WebView API 地址,用于阅读3加载订阅源文章使用。 + +此项配置非强制配置,如果遇到无法加载订阅源文章的情况,可以尝试配置此项。 + +请先在应用商店搜索安装 `阅读3 Webview插件` 插件,然后配置 `远程 WebView API 地址`。 + +```yaml +http://host_ip:port +``` + +## 数据存储树 + +```yaml +storage +├── assets # 静态资源 +│ ├── hector # 用户 hector 的资源目录 +│ | |── covers # 本地 epub 书籍的封面图片目录 +│ │ ├── background # 自定义阅读背景图片保存目录 +│ │ │ └── 6.jpg +│ └── reader.css # 自定义CSS样式文件 +├── cache # 缓存目录 +│ ├── 6190ac40068e74c2c82624e91a5f8a0c.jpg # 书籍封面缓存 +│ ├── bookInfoCache # 书籍搜索缓存 ACache 目录 +│ └── ea11967236129bdae6133c3c9ff8c2dd.jpg +├── data # 数据目录 +│ ├── default # 系统默认用户的数据目录 (reader.app.secure为false时) +│ │ ├── bookSource.json # 书源列表 +│ │ ├── bookshelf.json # 书架书籍列表 +│ │ ├── 斗罗大陆_唐家三少 # 书籍缓存目录 +│ │ │ ├── 5d01bc88d6b19ebbe974acaac1675811 # A书源章节缓存目录 +│ │ │ ├── 5d01bc88d6b19ebbe974acaac1675811.json # A书源目录列表 +│ │ │ ├── 7e5ca1cc2a1ea2e09fdec4ee2e150f02 # B书源章节缓存目录 +│ │ │ ├── 7e5ca1cc2a1ea2e09fdec4ee2e150f02.json # B书源目录列表 +│ │ │ └── bookSource.json # 书籍书源列表 +│ ├── hector # 用户 hector 的数据目录 (reader.app.secure为true时的用户目录) +│ │ ├── bookSource.json # 书源列表 +│ │ ├── bookshelf.json # 书架书籍列表 +│ │ ├── webdav # webdav 存储目录 可能会存在 legado 子目录 +│ │ │ ├── backup2021-09-15.zip # 阅读3备份文件 +│ │ │ └── bookProgress # 阅读3书籍进度备份目录 +│ │ │ └── 斗罗大陆_唐家三少.json # 阅读3书籍进度 +│ │ └── 斗罗大陆_唐家三少 # 书籍缓存目录 +│ │ |── 2d44d0ec2397b6c1d4010b97d914031e # A书源章节缓存目录 +│ │ └── 2d44d0ec2397b6c1d4010b97d914031e.json # A书源目录列表 +│ └── users.json # 用户列表 +├── localStore # 本地书仓,所有用户共享(用户需要开启书仓权限,才能访问) +│ |── 斗破苍穹.txt # 本地书仓书籍 +│ └── 斗罗大陆.txt # 本地书仓书籍 +└── windowConfig.json # 窗口配置文件 +``` + +## 获取激活码 + +已知付费功能 + +- 适配kindle的 simple-web +- 用户数量限制 (默认最大值为 50 个) + +如果需要付费功能,请联系作者获取 `激活密钥` 。 + + + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/reader3/data.yml b/appstore/reader3/data.yml new file mode 100644 index 00000000..62e1ca38 --- /dev/null +++ b/appstore/reader3/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: reader3 + name: 阅读3 + tags: + - WebSite + - Local + shortDescZh: 阅读3服务器版,不需要手机 + shortDescEn: Reader3 server version, no need for mobile phone + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/hectorqin/reader/ + github: https://github.com/hectorqin/reader/ + document: https://github.com/hectorqin/reader/ diff --git a/appstore/reader3/logo.png b/appstore/reader3/logo.png new file mode 100644 index 00000000..913666f0 Binary files /dev/null and b/appstore/reader3/logo.png differ diff --git a/appstore/redis/6.2.16/.env b/appstore/redis/6.2.16/.env new file mode 100644 index 00000000..969809e6 --- /dev/null +++ b/appstore/redis/6.2.16/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +REDIS_ROOT_PATH=/home/redis + +# 端口 [必填] +PANEL_APP_PORT_HTTP=6379 + +# 密码 +REDIS_ROOT_PASSWORD= + diff --git a/appstore/redis/6.2.16/config/redis.conf b/appstore/redis/6.2.16/config/redis.conf new file mode 100644 index 00000000..ca22ec9f --- /dev/null +++ b/appstore/redis/6.2.16/config/redis.conf @@ -0,0 +1,1877 @@ +# Redis configuration file example. +# +# Note that in order to read the configuration file, Redis must be +# started with the file path as first argument: +# +# ./redis-server /path/to/redis.conf + +# Note on units: when memory size is needed, it is possible to specify +# it in the usual form of 1k 5GB 4M and so forth: +# +# 1k => 1000 bytes +# 1kb => 1024 bytes +# 1m => 1000000 bytes +# 1mb => 1024*1024 bytes +# 1g => 1000000000 bytes +# 1gb => 1024*1024*1024 bytes +# +# units are case insensitive so 1GB 1Gb 1gB are all the same. + +################################## INCLUDES ################################### + +# Include one or more other config files here. This is useful if you +# have a standard template that goes to all Redis servers but also need +# to customize a few per-server settings. Include files can include +# other files, so use this wisely. +# +# Note that option "include" won't be rewritten by command "CONFIG REWRITE" +# from admin or Redis Sentinel. Since Redis always uses the last processed +# line as value of a configuration directive, you'd better put includes +# at the beginning of this file to avoid overwriting config change at runtime. +# +# If instead you are interested in using includes to override configuration +# options, it is better to use include as the last line. +# +# include /path/to/local.conf +# include /path/to/other.conf + +################################## MODULES ##################################### + +# Load modules at startup. If the server is not able to load modules +# it will abort. It is possible to use multiple loadmodule directives. +# +# loadmodule /path/to/my_module.so +# loadmodule /path/to/other_module.so + +################################## NETWORK ##################################### + +# By default, if no "bind" configuration directive is specified, Redis listens +# for connections from all available network interfaces on the host machine. +# It is possible to listen to just one or multiple selected interfaces using +# the "bind" configuration directive, followed by one or more IP addresses. +# +# Examples: +# +# bind 192.168.1.100 10.0.0.1 +# bind 127.0.0.1 ::1 +# +# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the +# internet, binding to all the interfaces is dangerous and will expose the +# instance to everybody on the internet. So by default we uncomment the +# following bind directive, that will force Redis to listen only on the +# IPv4 loopback interface address (this means Redis will only be able to +# accept client connections from the same host that it is running on). +# +# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES +# JUST COMMENT OUT THE FOLLOWING LINE. +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +bind 0.0.0.0 + +# Protected mode is a layer of security protection, in order to avoid that +# Redis instances left open on the internet are accessed and exploited. +# +# When protected mode is on and if: +# +# 1) The server is not binding explicitly to a set of addresses using the +# "bind" directive. +# 2) No password is configured. +# +# The server only accepts connections from clients connecting from the +# IPv4 and IPv6 loopback addresses 127.0.0.1 and ::1, and from Unix domain +# sockets. +# +# By default protected mode is enabled. You should disable it only if +# you are sure you want clients from other hosts to connect to Redis +# even if no authentication is configured, nor a specific set of interfaces +# are explicitly listed using the "bind" directive. +protected-mode yes + +# Accept connections on the specified port, default is 6379 (IANA #815344). +# If port 0 is specified Redis will not listen on a TCP socket. +port 6379 + +# TCP listen() backlog. +# +# In high requests-per-second environments you need a high backlog in order +# to avoid slow clients connection issues. Note that the Linux kernel +# will silently truncate it to the value of /proc/sys/net/core/somaxconn so +# make sure to raise both the value of somaxconn and tcp_max_syn_backlog +# in order to get the desired effect. +tcp-backlog 511 + +# Unix socket. +# +# Specify the path for the Unix socket that will be used to listen for +# incoming connections. There is no default, so Redis will not listen +# on a unix socket when not specified. +# +# unixsocket /tmp/redis.sock +# unixsocketperm 700 + +# Close the connection after a client is idle for N seconds (0 to disable) +timeout 0 + +# TCP keepalive. +# +# If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence +# of communication. This is useful for two reasons: +# +# 1) Detect dead peers. +# 2) Force network equipment in the middle to consider the connection to be +# alive. +# +# On Linux, the specified value (in seconds) is the period used to send ACKs. +# Note that to close the connection the double of the time is needed. +# On other kernels the period depends on the kernel configuration. +# +# A reasonable value for this option is 300 seconds, which is the new +# Redis default starting with Redis 3.2.1. +tcp-keepalive 300 + +################################# TLS/SSL ##################################### + +# By default, TLS/SSL is disabled. To enable it, the "tls-port" configuration +# directive can be used to define TLS-listening ports. To enable TLS on the +# default port, use: +# +# port 0 +# tls-port 6379 + +# Configure a X.509 certificate and private key to use for authenticating the +# server to connected clients, masters or cluster peers. These files should be +# PEM formatted. +# +# tls-cert-file redis.crt +# tls-key-file redis.key + +# Configure a DH parameters file to enable Diffie-Hellman (DH) key exchange: +# +# tls-dh-params-file redis.dh + +# Configure a CA certificate(s) bundle or directory to authenticate TLS/SSL +# clients and peers. Redis requires an explicit configuration of at least one +# of these, and will not implicitly use the system wide configuration. +# +# tls-ca-cert-file ca.crt +# tls-ca-cert-dir /etc/ssl/certs + +# By default, clients (including replica servers) on a TLS port are required +# to authenticate using valid client side certificates. +# +# If "no" is specified, client certificates are not required and not accepted. +# If "optional" is specified, client certificates are accepted and must be +# valid if provided, but are not required. +# +# tls-auth-clients no +# tls-auth-clients optional + +# By default, a Redis replica does not attempt to establish a TLS connection +# with its master. +# +# Use the following directive to enable TLS on replication links. +# +# tls-replication yes + +# By default, the Redis Cluster bus uses a plain TCP connection. To enable +# TLS for the bus protocol, use the following directive: +# +# tls-cluster yes + +# Explicitly specify TLS versions to support. Allowed values are case insensitive +# and include "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3" (OpenSSL >= 1.1.1) or +# any combination. To enable only TLSv1.2 and TLSv1.3, use: +# +# tls-protocols "TLSv1.2 TLSv1.3" + +# Configure allowed ciphers. See the ciphers(1ssl) manpage for more information +# about the syntax of this string. +# +# Note: this configuration applies only to <= TLSv1.2. +# +# tls-ciphers DEFAULT:!MEDIUM + +# Configure allowed TLSv1.3 ciphersuites. See the ciphers(1ssl) manpage for more +# information about the syntax of this string, and specifically for TLSv1.3 +# ciphersuites. +# +# tls-ciphersuites TLS_CHACHA20_POLY1305_SHA256 + +# When choosing a cipher, use the server's preference instead of the client +# preference. By default, the server follows the client's preference. +# +# tls-prefer-server-ciphers yes + +# By default, TLS session caching is enabled to allow faster and less expensive +# reconnections by clients that support it. Use the following directive to disable +# caching. +# +# tls-session-caching no + +# Change the default number of TLS sessions cached. A zero value sets the cache +# to unlimited size. The default size is 20480. +# +# tls-session-cache-size 5000 + +# Change the default timeout of cached TLS sessions. The default timeout is 300 +# seconds. +# +# tls-session-cache-timeout 60 + +################################# GENERAL ##################################### + +# By default Redis does not run as a daemon. Use 'yes' if you need it. +# Note that Redis will write a pid file in /var/run/redis.pid when daemonized. +daemonize no + +# If you run Redis from upstart or systemd, Redis can interact with your +# supervision tree. Options: +# supervised no - no supervision interaction +# supervised upstart - signal upstart by putting Redis into SIGSTOP mode +# requires "expect stop" in your upstart job config +# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET +# supervised auto - detect upstart or systemd method based on +# UPSTART_JOB or NOTIFY_SOCKET environment variables +# Note: these supervision methods only signal "process is ready." +# They do not enable continuous pings back to your supervisor. +supervised no + +# If a pid file is specified, Redis writes it where specified at startup +# and removes it at exit. +# +# When the server runs non daemonized, no pid file is created if none is +# specified in the configuration. When the server is daemonized, the pid file +# is used even if not specified, defaulting to "/var/run/redis.pid". +# +# Creating a pid file is best effort: if Redis is not able to create it +# nothing bad happens, the server will start and run normally. +pidfile /var/run/redis_6379.pid + +# Specify the server verbosity level. +# This can be one of: +# debug (a lot of information, useful for development/testing) +# verbose (many rarely useful info, but not a mess like the debug level) +# notice (moderately verbose, what you want in production probably) +# warning (only very important / critical messages are logged) +loglevel notice + +# Specify the log file name. Also the empty string can be used to force +# Redis to log on the standard output. Note that if you use standard +# output for logging but daemonize, logs will be sent to /dev/null +logfile "" + +# To enable logging to the system logger, just set 'syslog-enabled' to yes, +# and optionally update the other syslog parameters to suit your needs. +# syslog-enabled no + +# Specify the syslog identity. +# syslog-ident redis + +# Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7. +# syslog-facility local0 + +# Set the number of databases. The default database is DB 0, you can select +# a different one on a per-connection basis using SELECT where +# dbid is a number between 0 and 'databases'-1 +databases 16 + +# By default Redis shows an ASCII art logo only when started to log to the +# standard output and if the standard output is a TTY. Basically this means +# that normally a logo is displayed only in interactive sessions. +# +# However it is possible to force the pre-4.0 behavior and always show a +# ASCII art logo in startup logs by setting the following option to yes. +always-show-logo yes + +################################ SNAPSHOTTING ################################ +# +# Save the DB on disk: +# +# save +# +# Will save the DB if both the given number of seconds and the given +# number of write operations against the DB occurred. +# +# In the example below the behavior will be to save: +# after 900 sec (15 min) if at least 1 key changed +# after 300 sec (5 min) if at least 10 keys changed +# after 60 sec if at least 10000 keys changed +# +# Note: you can disable saving completely by commenting out all "save" lines. +# +# It is also possible to remove all the previously configured save +# points by adding a save directive with a single empty string argument +# like in the following example: +# +# save "" + +save 900 1 +save 300 10 +save 60 10000 + +# By default Redis will stop accepting writes if RDB snapshots are enabled +# (at least one save point) and the latest background save failed. +# This will make the user aware (in a hard way) that data is not persisting +# on disk properly, otherwise chances are that no one will notice and some +# disaster will happen. +# +# If the background saving process will start working again Redis will +# automatically allow writes again. +# +# However if you have setup your proper monitoring of the Redis server +# and persistence, you may want to disable this feature so that Redis will +# continue to work as usual even if there are problems with disk, +# permissions, and so forth. +stop-writes-on-bgsave-error yes + +# Compress string objects using LZF when dump .rdb databases? +# By default compression is enabled as it's almost always a win. +# If you want to save some CPU in the saving child set it to 'no' but +# the dataset will likely be bigger if you have compressible values or keys. +rdbcompression yes + +# Since version 5 of RDB a CRC64 checksum is placed at the end of the file. +# This makes the format more resistant to corruption but there is a performance +# hit to pay (around 10%) when saving and loading RDB files, so you can disable it +# for maximum performances. +# +# RDB files created with checksum disabled have a checksum of zero that will +# tell the loading code to skip the check. +rdbchecksum yes + +# The filename where to dump the DB +dbfilename dump.rdb + +# Remove RDB files used by replication in instances without persistence +# enabled. By default this option is disabled, however there are environments +# where for regulations or other security concerns, RDB files persisted on +# disk by masters in order to feed replicas, or stored on disk by replicas +# in order to load them for the initial synchronization, should be deleted +# ASAP. Note that this option ONLY WORKS in instances that have both AOF +# and RDB persistence disabled, otherwise is completely ignored. +# +# An alternative (and sometimes better) way to obtain the same effect is +# to use diskless replication on both master and replicas instances. However +# in the case of replicas, diskless is not always an option. +rdb-del-sync-files no + +# The working directory. +# +# The DB will be written inside this directory, with the filename specified +# above using the 'dbfilename' configuration directive. +# +# The Append Only File will also be created inside this directory. +# +# Note that you must specify a directory here, not a file name. +dir ./ + +################################# REPLICATION ################################# + +# Master-Replica replication. Use replicaof to make a Redis instance a copy of +# another Redis server. A few things to understand ASAP about Redis replication. +# +# +------------------+ +---------------+ +# | Master | ---> | Replica | +# | (receive writes) | | (exact copy) | +# +------------------+ +---------------+ +# +# 1) Redis replication is asynchronous, but you can configure a master to +# stop accepting writes if it appears to be not connected with at least +# a given number of replicas. +# 2) Redis replicas are able to perform a partial resynchronization with the +# master if the replication link is lost for a relatively small amount of +# time. You may want to configure the replication backlog size (see the next +# sections of this file) with a sensible value depending on your needs. +# 3) Replication is automatic and does not need user intervention. After a +# network partition replicas automatically try to reconnect to masters +# and resynchronize with them. +# +# replicaof + +# If the master is password protected (using the "requirepass" configuration +# directive below) it is possible to tell the replica to authenticate before +# starting the replication synchronization process, otherwise the master will +# refuse the replica request. +# +# masterauth +# +# However this is not enough if you are using Redis ACLs (for Redis version +# 6 or greater), and the default user is not capable of running the PSYNC +# command and/or other commands needed for replication. In this case it's +# better to configure a special user to use with replication, and specify the +# masteruser configuration as such: +# +# masteruser +# +# When masteruser is specified, the replica will authenticate against its +# master using the new AUTH form: AUTH . + +# When a replica loses its connection with the master, or when the replication +# is still in progress, the replica can act in two different ways: +# +# 1) if replica-serve-stale-data is set to 'yes' (the default) the replica will +# still reply to client requests, possibly with out of date data, or the +# data set may just be empty if this is the first synchronization. +# +# 2) If replica-serve-stale-data is set to 'no' the replica will reply with +# an error "SYNC with master in progress" to all commands except: +# INFO, REPLICAOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG, SUBSCRIBE, +# UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB, COMMAND, POST, +# HOST and LATENCY. +# +replica-serve-stale-data yes + +# You can configure a replica instance to accept writes or not. Writing against +# a replica instance may be useful to store some ephemeral data (because data +# written on a replica will be easily deleted after resync with the master) but +# may also cause problems if clients are writing to it because of a +# misconfiguration. +# +# Since Redis 2.6 by default replicas are read-only. +# +# Note: read only replicas are not designed to be exposed to untrusted clients +# on the internet. It's just a protection layer against misuse of the instance. +# Still a read only replica exports by default all the administrative commands +# such as CONFIG, DEBUG, and so forth. To a limited extent you can improve +# security of read only replicas using 'rename-command' to shadow all the +# administrative / dangerous commands. +replica-read-only yes + +# Replication SYNC strategy: disk or socket. +# +# New replicas and reconnecting replicas that are not able to continue the +# replication process just receiving differences, need to do what is called a +# "full synchronization". An RDB file is transmitted from the master to the +# replicas. +# +# The transmission can happen in two different ways: +# +# 1) Disk-backed: The Redis master creates a new process that writes the RDB +# file on disk. Later the file is transferred by the parent +# process to the replicas incrementally. +# 2) Diskless: The Redis master creates a new process that directly writes the +# RDB file to replica sockets, without touching the disk at all. +# +# With disk-backed replication, while the RDB file is generated, more replicas +# can be queued and served with the RDB file as soon as the current child +# producing the RDB file finishes its work. With diskless replication instead +# once the transfer starts, new replicas arriving will be queued and a new +# transfer will start when the current one terminates. +# +# When diskless replication is used, the master waits a configurable amount of +# time (in seconds) before starting the transfer in the hope that multiple +# replicas will arrive and the transfer can be parallelized. +# +# With slow disks and fast (large bandwidth) networks, diskless replication +# works better. +repl-diskless-sync no + +# When diskless replication is enabled, it is possible to configure the delay +# the server waits in order to spawn the child that transfers the RDB via socket +# to the replicas. +# +# This is important since once the transfer starts, it is not possible to serve +# new replicas arriving, that will be queued for the next RDB transfer, so the +# server waits a delay in order to let more replicas arrive. +# +# The delay is specified in seconds, and by default is 5 seconds. To disable +# it entirely just set it to 0 seconds and the transfer will start ASAP. +repl-diskless-sync-delay 5 + +# ----------------------------------------------------------------------------- +# WARNING: RDB diskless load is experimental. Since in this setup the replica +# does not immediately store an RDB on disk, it may cause data loss during +# failovers. RDB diskless load + Redis modules not handling I/O reads may also +# cause Redis to abort in case of I/O errors during the initial synchronization +# stage with the master. Use only if your do what you are doing. +# ----------------------------------------------------------------------------- +# +# Replica can load the RDB it reads from the replication link directly from the +# socket, or store the RDB to a file and read that file after it was completely +# received from the master. +# +# In many cases the disk is slower than the network, and storing and loading +# the RDB file may increase replication time (and even increase the master's +# Copy on Write memory and salve buffers). +# However, parsing the RDB file directly from the socket may mean that we have +# to flush the contents of the current database before the full rdb was +# received. For this reason we have the following options: +# +# "disabled" - Don't use diskless load (store the rdb file to the disk first) +# "on-empty-db" - Use diskless load only when it is completely safe. +# "swapdb" - Keep a copy of the current db contents in RAM while parsing +# the data directly from the socket. note that this requires +# sufficient memory, if you don't have it, you risk an OOM kill. +repl-diskless-load disabled + +# Replicas send PINGs to server in a predefined interval. It's possible to +# change this interval with the repl_ping_replica_period option. The default +# value is 10 seconds. +# +# repl-ping-replica-period 10 + +# The following option sets the replication timeout for: +# +# 1) Bulk transfer I/O during SYNC, from the point of view of replica. +# 2) Master timeout from the point of view of replicas (data, pings). +# 3) Replica timeout from the point of view of masters (REPLCONF ACK pings). +# +# It is important to make sure that this value is greater than the value +# specified for repl-ping-replica-period otherwise a timeout will be detected +# every time there is low traffic between the master and the replica. The default +# value is 60 seconds. +# +# repl-timeout 60 + +# Disable TCP_NODELAY on the replica socket after SYNC? +# +# If you select "yes" Redis will use a smaller number of TCP packets and +# less bandwidth to send data to replicas. But this can add a delay for +# the data to appear on the replica side, up to 40 milliseconds with +# Linux kernels using a default configuration. +# +# If you select "no" the delay for data to appear on the replica side will +# be reduced but more bandwidth will be used for replication. +# +# By default we optimize for low latency, but in very high traffic conditions +# or when the master and replicas are many hops away, turning this to "yes" may +# be a good idea. +repl-disable-tcp-nodelay no + +# Set the replication backlog size. The backlog is a buffer that accumulates +# replica data when replicas are disconnected for some time, so that when a +# replica wants to reconnect again, often a full resync is not needed, but a +# partial resync is enough, just passing the portion of data the replica +# missed while disconnected. +# +# The bigger the replication backlog, the longer the replica can endure the +# disconnect and later be able to perform a partial resynchronization. +# +# The backlog is only allocated if there is at least one replica connected. +# +# repl-backlog-size 1mb + +# After a master has no connected replicas for some time, the backlog will be +# freed. The following option configures the amount of seconds that need to +# elapse, starting from the time the last replica disconnected, for the backlog +# buffer to be freed. +# +# Note that replicas never free the backlog for timeout, since they may be +# promoted to masters later, and should be able to correctly "partially +# resynchronize" with other replicas: hence they should always accumulate backlog. +# +# A value of 0 means to never release the backlog. +# +# repl-backlog-ttl 3600 + +# The replica priority is an integer number published by Redis in the INFO +# output. It is used by Redis Sentinel in order to select a replica to promote +# into a master if the master is no longer working correctly. +# +# A replica with a low priority number is considered better for promotion, so +# for instance if there are three replicas with priority 10, 100, 25 Sentinel +# will pick the one with priority 10, that is the lowest. +# +# However a special priority of 0 marks the replica as not able to perform the +# role of master, so a replica with priority of 0 will never be selected by +# Redis Sentinel for promotion. +# +# By default the priority is 100. +replica-priority 100 + +# It is possible for a master to stop accepting writes if there are less than +# N replicas connected, having a lag less or equal than M seconds. +# +# The N replicas need to be in "online" state. +# +# The lag in seconds, that must be <= the specified value, is calculated from +# the last ping received from the replica, that is usually sent every second. +# +# This option does not GUARANTEE that N replicas will accept the write, but +# will limit the window of exposure for lost writes in case not enough replicas +# are available, to the specified number of seconds. +# +# For example to require at least 3 replicas with a lag <= 10 seconds use: +# +# min-replicas-to-write 3 +# min-replicas-max-lag 10 +# +# Setting one or the other to 0 disables the feature. +# +# By default min-replicas-to-write is set to 0 (feature disabled) and +# min-replicas-max-lag is set to 10. + +# A Redis master is able to list the address and port of the attached +# replicas in different ways. For example the "INFO replication" section +# offers this information, which is used, among other tools, by +# Redis Sentinel in order to discover replica instances. +# Another place where this info is available is in the output of the +# "ROLE" command of a master. +# +# The listed IP address and port normally reported by a replica is +# obtained in the following way: +# +# IP: The address is auto detected by checking the peer address +# of the socket used by the replica to connect with the master. +# +# Port: The port is communicated by the replica during the replication +# handshake, and is normally the port that the replica is using to +# listen for connections. +# +# However when port forwarding or Network Address Translation (NAT) is +# used, the replica may actually be reachable via different IP and port +# pairs. The following two options can be used by a replica in order to +# report to its master a specific set of IP and port, so that both INFO +# and ROLE will report those values. +# +# There is no need to use both the options if you need to override just +# the port or the IP address. +# +# replica-announce-ip 5.5.5.5 +# replica-announce-port 1234 + +############################### KEYS TRACKING ################################# + +# Redis implements server assisted support for client side caching of values. +# This is implemented using an invalidation table that remembers, using +# 16 millions of slots, what clients may have certain subsets of keys. In turn +# this is used in order to send invalidation messages to clients. Please +# check this page to understand more about the feature: +# +# https://redis.io/topics/client-side-caching +# +# When tracking is enabled for a client, all the read only queries are assumed +# to be cached: this will force Redis to store information in the invalidation +# table. When keys are modified, such information is flushed away, and +# invalidation messages are sent to the clients. However if the workload is +# heavily dominated by reads, Redis could use more and more memory in order +# to track the keys fetched by many clients. +# +# For this reason it is possible to configure a maximum fill value for the +# invalidation table. By default it is set to 1M of keys, and once this limit +# is reached, Redis will start to evict keys in the invalidation table +# even if they were not modified, just to reclaim memory: this will in turn +# force the clients to invalidate the cached values. Basically the table +# maximum size is a trade off between the memory you want to spend server +# side to track information about who cached what, and the ability of clients +# to retain cached objects in memory. +# +# If you set the value to 0, it means there are no limits, and Redis will +# retain as many keys as needed in the invalidation table. +# In the "stats" INFO section, you can find information about the number of +# keys in the invalidation table at every given moment. +# +# Note: when key tracking is used in broadcasting mode, no memory is used +# in the server side so this setting is useless. +# +# tracking-table-max-keys 1000000 + +################################## SECURITY ################################### + +# Warning: since Redis is pretty fast, an outside user can try up to +# 1 million passwords per second against a modern box. This means that you +# should use very strong passwords, otherwise they will be very easy to break. +# Note that because the password is really a shared secret between the client +# and the server, and should not be memorized by any human, the password +# can be easily a long string from /dev/urandom or whatever, so by using a +# long and unguessable password no brute force attack will be possible. + +# Redis ACL users are defined in the following format: +# +# user ... acl rules ... +# +# For example: +# +# user worker +@list +@connection ~jobs:* on >ffa9203c493aa99 +# +# The special username "default" is used for new connections. If this user +# has the "nopass" rule, then new connections will be immediately authenticated +# as the "default" user without the need of any password provided via the +# AUTH command. Otherwise if the "default" user is not flagged with "nopass" +# the connections will start in not authenticated state, and will require +# AUTH (or the HELLO command AUTH option) in order to be authenticated and +# start to work. +# +# The ACL rules that describe what a user can do are the following: +# +# on Enable the user: it is possible to authenticate as this user. +# off Disable the user: it's no longer possible to authenticate +# with this user, however the already authenticated connections +# will still work. +# + Allow the execution of that command +# - Disallow the execution of that command +# +@ Allow the execution of all the commands in such category +# with valid categories are like @admin, @set, @sortedset, ... +# and so forth, see the full list in the server.c file where +# the Redis command table is described and defined. +# The special category @all means all the commands, but currently +# present in the server, and that will be loaded in the future +# via modules. +# +|subcommand Allow a specific subcommand of an otherwise +# disabled command. Note that this form is not +# allowed as negative like -DEBUG|SEGFAULT, but +# only additive starting with "+". +# allcommands Alias for +@all. Note that it implies the ability to execute +# all the future commands loaded via the modules system. +# nocommands Alias for -@all. +# ~ Add a pattern of keys that can be mentioned as part of +# commands. For instance ~* allows all the keys. The pattern +# is a glob-style pattern like the one of KEYS. +# It is possible to specify multiple patterns. +# allkeys Alias for ~* +# resetkeys Flush the list of allowed keys patterns. +# > Add this password to the list of valid password for the user. +# For example >mypass will add "mypass" to the list. +# This directive clears the "nopass" flag (see later). +# < Remove this password from the list of valid passwords. +# nopass All the set passwords of the user are removed, and the user +# is flagged as requiring no password: it means that every +# password will work against this user. If this directive is +# used for the default user, every new connection will be +# immediately authenticated with the default user without +# any explicit AUTH command required. Note that the "resetpass" +# directive will clear this condition. +# resetpass Flush the list of allowed passwords. Moreover removes the +# "nopass" status. After "resetpass" the user has no associated +# passwords and there is no way to authenticate without adding +# some password (or setting it as "nopass" later). +# reset Performs the following actions: resetpass, resetkeys, off, +# -@all. The user returns to the same state it has immediately +# after its creation. +# +# ACL rules can be specified in any order: for instance you can start with +# passwords, then flags, or key patterns. However note that the additive +# and subtractive rules will CHANGE MEANING depending on the ordering. +# For instance see the following example: +# +# user alice on +@all -DEBUG ~* >somepassword +# +# This will allow "alice" to use all the commands with the exception of the +# DEBUG command, since +@all added all the commands to the set of the commands +# alice can use, and later DEBUG was removed. However if we invert the order +# of two ACL rules the result will be different: +# +# user alice on -DEBUG +@all ~* >somepassword +# +# Now DEBUG was removed when alice had yet no commands in the set of allowed +# commands, later all the commands are added, so the user will be able to +# execute everything. +# +# Basically ACL rules are processed left-to-right. +# +# For more information about ACL configuration please refer to +# the Redis web site at https://redis.io/topics/acl + +# ACL LOG +# +# The ACL Log tracks failed commands and authentication events associated +# with ACLs. The ACL Log is useful to troubleshoot failed commands blocked +# by ACLs. The ACL Log is stored in memory. You can reclaim memory with +# ACL LOG RESET. Define the maximum entry length of the ACL Log below. +acllog-max-len 128 + +# Using an external ACL file +# +# Instead of configuring users here in this file, it is possible to use +# a stand-alone file just listing users. The two methods cannot be mixed: +# if you configure users here and at the same time you activate the external +# ACL file, the server will refuse to start. +# +# The format of the external ACL user file is exactly the same as the +# format that is used inside redis.conf to describe users. +# +# aclfile /etc/redis/users.acl + +# IMPORTANT NOTE: starting with Redis 6 "requirepass" is just a compatibility +# layer on top of the new ACL system. The option effect will be just setting +# the password for the default user. Clients will still authenticate using +# AUTH as usually, or more explicitly with AUTH default +# if they follow the new protocol: both will work. +# +# requirepass foobared + +# Command renaming (DEPRECATED). +# +# ------------------------------------------------------------------------ +# WARNING: avoid using this option if possible. Instead use ACLs to remove +# commands from the default user, and put them only in some admin user you +# create for administrative purposes. +# ------------------------------------------------------------------------ +# +# It is possible to change the name of dangerous commands in a shared +# environment. For instance the CONFIG command may be renamed into something +# hard to guess so that it will still be available for internal-use tools +# but not available for general clients. +# +# Example: +# +# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 +# +# It is also possible to completely kill a command by renaming it into +# an empty string: +# +# rename-command CONFIG "" +# +# Please note that changing the name of commands that are logged into the +# AOF file or transmitted to replicas may cause problems. + +################################### CLIENTS #################################### + +# Set the max number of connected clients at the same time. By default +# this limit is set to 10000 clients, however if the Redis server is not +# able to configure the process file limit to allow for the specified limit +# the max number of allowed clients is set to the current file limit +# minus 32 (as Redis reserves a few file descriptors for internal uses). +# +# Once the limit is reached Redis will close all the new connections sending +# an error 'max number of clients reached'. +# +# IMPORTANT: When Redis Cluster is used, the max number of connections is also +# shared with the cluster bus: every node in the cluster will use two +# connections, one incoming and another outgoing. It is important to size the +# limit accordingly in case of very large clusters. +# +# maxclients 10000 + +############################## MEMORY MANAGEMENT ################################ + +# Set a memory usage limit to the specified amount of bytes. +# When the memory limit is reached Redis will try to remove keys +# according to the eviction policy selected (see maxmemory-policy). +# +# If Redis can't remove keys according to the policy, or if the policy is +# set to 'noeviction', Redis will start to reply with errors to commands +# that would use more memory, like SET, LPUSH, and so on, and will continue +# to reply to read-only commands like GET. +# +# This option is usually useful when using Redis as an LRU or LFU cache, or to +# set a hard memory limit for an instance (using the 'noeviction' policy). +# +# WARNING: If you have replicas attached to an instance with maxmemory on, +# the size of the output buffers needed to feed the replicas are subtracted +# from the used memory count, so that network problems / resyncs will +# not trigger a loop where keys are evicted, and in turn the output +# buffer of replicas is full with DELs of keys evicted triggering the deletion +# of more keys, and so forth until the database is completely emptied. +# +# In short... if you have replicas attached it is suggested that you set a lower +# limit for maxmemory so that there is some free RAM on the system for replica +# output buffers (but this is not needed if the policy is 'noeviction'). +# +# maxmemory + +# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory +# is reached. You can select one from the following behaviors: +# +# volatile-lru -> Evict using approximated LRU, only keys with an expire set. +# allkeys-lru -> Evict any key using approximated LRU. +# volatile-lfu -> Evict using approximated LFU, only keys with an expire set. +# allkeys-lfu -> Evict any key using approximated LFU. +# volatile-random -> Remove a random key having an expire set. +# allkeys-random -> Remove a random key, any key. +# volatile-ttl -> Remove the key with the nearest expire time (minor TTL) +# noeviction -> Don't evict anything, just return an error on write operations. +# +# LRU means Least Recently Used +# LFU means Least Frequently Used +# +# Both LRU, LFU and volatile-ttl are implemented using approximated +# randomized algorithms. +# +# Note: with any of the above policies, Redis will return an error on write +# operations, when there are no suitable keys for eviction. +# +# At the date of writing these commands are: set setnx setex append +# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd +# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby +# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby +# getset mset msetnx exec sort +# +# The default is: +# +# maxmemory-policy noeviction + +# LRU, LFU and minimal TTL algorithms are not precise algorithms but approximated +# algorithms (in order to save memory), so you can tune it for speed or +# accuracy. By default Redis will check five keys and pick the one that was +# used least recently, you can change the sample size using the following +# configuration directive. +# +# The default of 5 produces good enough results. 10 Approximates very closely +# true LRU but costs more CPU. 3 is faster but not very accurate. +# +# maxmemory-samples 5 + +# Starting from Redis 5, by default a replica will ignore its maxmemory setting +# (unless it is promoted to master after a failover or manually). It means +# that the eviction of keys will be just handled by the master, sending the +# DEL commands to the replica as keys evict in the master side. +# +# This behavior ensures that masters and replicas stay consistent, and is usually +# what you want, however if your replica is writable, or you want the replica +# to have a different memory setting, and you are sure all the writes performed +# to the replica are idempotent, then you may change this default (but be sure +# to understand what you are doing). +# +# Note that since the replica by default does not evict, it may end using more +# memory than the one set via maxmemory (there are certain buffers that may +# be larger on the replica, or data structures may sometimes take more memory +# and so forth). So make sure you monitor your replicas and make sure they +# have enough memory to never hit a real out-of-memory condition before the +# master hits the configured maxmemory setting. +# +# replica-ignore-maxmemory yes + +# Redis reclaims expired keys in two ways: upon access when those keys are +# found to be expired, and also in background, in what is called the +# "active expire key". The key space is slowly and interactively scanned +# looking for expired keys to reclaim, so that it is possible to free memory +# of keys that are expired and will never be accessed again in a short time. +# +# The default effort of the expire cycle will try to avoid having more than +# ten percent of expired keys still in memory, and will try to avoid consuming +# more than 25% of total memory and to add latency to the system. However +# it is possible to increase the expire "effort" that is normally set to +# "1", to a greater value, up to the value "10". At its maximum value the +# system will use more CPU, longer cycles (and technically may introduce +# more latency), and will tolerate less already expired keys still present +# in the system. It's a tradeoff between memory, CPU and latency. +# +# active-expire-effort 1 + +############################# LAZY FREEING #################################### + +# Redis has two primitives to delete keys. One is called DEL and is a blocking +# deletion of the object. It means that the server stops processing new commands +# in order to reclaim all the memory associated with an object in a synchronous +# way. If the key deleted is associated with a small object, the time needed +# in order to execute the DEL command is very small and comparable to most other +# O(1) or O(log_N) commands in Redis. However if the key is associated with an +# aggregated value containing millions of elements, the server can block for +# a long time (even seconds) in order to complete the operation. +# +# For the above reasons Redis also offers non blocking deletion primitives +# such as UNLINK (non blocking DEL) and the ASYNC option of FLUSHALL and +# FLUSHDB commands, in order to reclaim memory in background. Those commands +# are executed in constant time. Another thread will incrementally free the +# object in the background as fast as possible. +# +# DEL, UNLINK and ASYNC option of FLUSHALL and FLUSHDB are user-controlled. +# It's up to the design of the application to understand when it is a good +# idea to use one or the other. However the Redis server sometimes has to +# delete keys or flush the whole database as a side effect of other operations. +# Specifically Redis deletes objects independently of a user call in the +# following scenarios: +# +# 1) On eviction, because of the maxmemory and maxmemory policy configurations, +# in order to make room for new data, without going over the specified +# memory limit. +# 2) Because of expire: when a key with an associated time to live (see the +# EXPIRE command) must be deleted from memory. +# 3) Because of a side effect of a command that stores data on a key that may +# already exist. For example the RENAME command may delete the old key +# content when it is replaced with another one. Similarly SUNIONSTORE +# or SORT with STORE option may delete existing keys. The SET command +# itself removes any old content of the specified key in order to replace +# it with the specified string. +# 4) During replication, when a replica performs a full resynchronization with +# its master, the content of the whole database is removed in order to +# load the RDB file just transferred. +# +# In all the above cases the default is to delete objects in a blocking way, +# like if DEL was called. However you can configure each case specifically +# in order to instead release memory in a non-blocking way like if UNLINK +# was called, using the following configuration directives. + +lazyfree-lazy-eviction no +lazyfree-lazy-expire no +lazyfree-lazy-server-del no +replica-lazy-flush no + +# It is also possible, for the case when to replace the user code DEL calls +# with UNLINK calls is not easy, to modify the default behavior of the DEL +# command to act exactly like UNLINK, using the following configuration +# directive: + +lazyfree-lazy-user-del no + +################################ THREADED I/O ################################# + +# Redis is mostly single threaded, however there are certain threaded +# operations such as UNLINK, slow I/O accesses and other things that are +# performed on side threads. +# +# Now it is also possible to handle Redis clients socket reads and writes +# in different I/O threads. Since especially writing is so slow, normally +# Redis users use pipelining in order to speed up the Redis performances per +# core, and spawn multiple instances in order to scale more. Using I/O +# threads it is possible to easily speedup two times Redis without resorting +# to pipelining nor sharding of the instance. +# +# By default threading is disabled, we suggest enabling it only in machines +# that have at least 4 or more cores, leaving at least one spare core. +# Using more than 8 threads is unlikely to help much. We also recommend using +# threaded I/O only if you actually have performance problems, with Redis +# instances being able to use a quite big percentage of CPU time, otherwise +# there is no point in using this feature. +# +# So for instance if you have a four cores boxes, try to use 2 or 3 I/O +# threads, if you have a 8 cores, try to use 6 threads. In order to +# enable I/O threads use the following configuration directive: +# +# io-threads 4 +# +# Setting io-threads to 1 will just use the main thread as usual. +# When I/O threads are enabled, we only use threads for writes, that is +# to thread the write(2) syscall and transfer the client buffers to the +# socket. However it is also possible to enable threading of reads and +# protocol parsing using the following configuration directive, by setting +# it to yes: +# +# io-threads-do-reads no +# +# Usually threading reads doesn't help much. +# +# NOTE 1: This configuration directive cannot be changed at runtime via +# CONFIG SET. Aso this feature currently does not work when SSL is +# enabled. +# +# NOTE 2: If you want to test the Redis speedup using redis-benchmark, make +# sure you also run the benchmark itself in threaded mode, using the +# --threads option to match the number of Redis threads, otherwise you'll not +# be able to notice the improvements. + +############################ KERNEL OOM CONTROL ############################## + +# On Linux, it is possible to hint the kernel OOM killer on what processes +# should be killed first when out of memory. +# +# Enabling this feature makes Redis actively control the oom_score_adj value +# for all its processes, depending on their role. The default scores will +# attempt to have background child processes killed before all others, and +# replicas killed before masters. +# +# Redis supports three options: +# +# no: Don't make changes to oom-score-adj (default). +# yes: Alias to "relative" see below. +# absolute: Values in oom-score-adj-values are written as is to the kernel. +# relative: Values are used relative to the initial value of oom_score_adj when +# the server starts and are then clamped to a range of -1000 to 1000. +# Because typically the initial value is 0, they will often match the +# absolute values. +oom-score-adj no + +# When oom-score-adj is used, this directive controls the specific values used +# for master, replica and background child processes. Values range -2000 to +# 2000 (higher means more likely to be killed). +# +# Unprivileged processes (not root, and without CAP_SYS_RESOURCE capabilities) +# can freely increase their value, but not decrease it below its initial +# settings. This means that setting oom-score-adj to "relative" and setting the +# oom-score-adj-values to positive values will always succeed. +oom-score-adj-values 0 200 800 + +############################## APPEND ONLY MODE ############################### + +# By default Redis asynchronously dumps the dataset on disk. This mode is +# good enough in many applications, but an issue with the Redis process or +# a power outage may result into a few minutes of writes lost (depending on +# the configured save points). +# +# The Append Only File is an alternative persistence mode that provides +# much better durability. For instance using the default data fsync policy +# (see later in the config file) Redis can lose just one second of writes in a +# dramatic event like a server power outage, or a single write if something +# wrong with the Redis process itself happens, but the operating system is +# still running correctly. +# +# AOF and RDB persistence can be enabled at the same time without problems. +# If the AOF is enabled on startup Redis will load the AOF, that is the file +# with the better durability guarantees. +# +# Please check http://redis.io/topics/persistence for more information. + +appendonly no + +# The name of the append only file (default: "appendonly.aof") + +appendfilename "appendonly.aof" + +# The fsync() call tells the Operating System to actually write data on disk +# instead of waiting for more data in the output buffer. Some OS will really flush +# data on disk, some other OS will just try to do it ASAP. +# +# Redis supports three different modes: +# +# no: don't fsync, just let the OS flush the data when it wants. Faster. +# always: fsync after every write to the append only log. Slow, Safest. +# everysec: fsync only one time every second. Compromise. +# +# The default is "everysec", as that's usually the right compromise between +# speed and data safety. It's up to you to understand if you can relax this to +# "no" that will let the operating system flush the output buffer when +# it wants, for better performances (but if you can live with the idea of +# some data loss consider the default persistence mode that's snapshotting), +# or on the contrary, use "always" that's very slow but a bit safer than +# everysec. +# +# More details please check the following article: +# http://antirez.com/post/redis-persistence-demystified.html +# +# If unsure, use "everysec". + +# appendfsync always +appendfsync everysec +# appendfsync no + +# When the AOF fsync policy is set to always or everysec, and a background +# saving process (a background save or AOF log background rewriting) is +# performing a lot of I/O against the disk, in some Linux configurations +# Redis may block too long on the fsync() call. Note that there is no fix for +# this currently, as even performing fsync in a different thread will block +# our synchronous write(2) call. +# +# In order to mitigate this problem it's possible to use the following option +# that will prevent fsync() from being called in the main process while a +# BGSAVE or BGREWRITEAOF is in progress. +# +# This means that while another child is saving, the durability of Redis is +# the same as "appendfsync none". In practical terms, this means that it is +# possible to lose up to 30 seconds of log in the worst scenario (with the +# default Linux settings). +# +# If you have latency problems turn this to "yes". Otherwise leave it as +# "no" that is the safest pick from the point of view of durability. + +no-appendfsync-on-rewrite no + +# Automatic rewrite of the append only file. +# Redis is able to automatically rewrite the log file implicitly calling +# BGREWRITEAOF when the AOF log size grows by the specified percentage. +# +# This is how it works: Redis remembers the size of the AOF file after the +# latest rewrite (if no rewrite has happened since the restart, the size of +# the AOF at startup is used). +# +# This base size is compared to the current size. If the current size is +# bigger than the specified percentage, the rewrite is triggered. Also +# you need to specify a minimal size for the AOF file to be rewritten, this +# is useful to avoid rewriting the AOF file even if the percentage increase +# is reached but it is still pretty small. +# +# Specify a percentage of zero in order to disable the automatic AOF +# rewrite feature. + +auto-aof-rewrite-percentage 100 +auto-aof-rewrite-min-size 64mb + +# An AOF file may be found to be truncated at the end during the Redis +# startup process, when the AOF data gets loaded back into memory. +# This may happen when the system where Redis is running +# crashes, especially when an ext4 filesystem is mounted without the +# data=ordered option (however this can't happen when Redis itself +# crashes or aborts but the operating system still works correctly). +# +# Redis can either exit with an error when this happens, or load as much +# data as possible (the default now) and start if the AOF file is found +# to be truncated at the end. The following option controls this behavior. +# +# If aof-load-truncated is set to yes, a truncated AOF file is loaded and +# the Redis server starts emitting a log to inform the user of the event. +# Otherwise if the option is set to no, the server aborts with an error +# and refuses to start. When the option is set to no, the user requires +# to fix the AOF file using the "redis-check-aof" utility before to restart +# the server. +# +# Note that if the AOF file will be found to be corrupted in the middle +# the server will still exit with an error. This option only applies when +# Redis will try to read more data from the AOF file but not enough bytes +# will be found. +aof-load-truncated yes + +# When rewriting the AOF file, Redis is able to use an RDB preamble in the +# AOF file for faster rewrites and recoveries. When this option is turned +# on the rewritten AOF file is composed of two different stanzas: +# +# [RDB file][AOF tail] +# +# When loading, Redis recognizes that the AOF file starts with the "REDIS" +# string and loads the prefixed RDB file, then continues loading the AOF +# tail. +aof-use-rdb-preamble yes + +################################ LUA SCRIPTING ############################### + +# Max execution time of a Lua script in milliseconds. +# +# If the maximum execution time is reached Redis will log that a script is +# still in execution after the maximum allowed time and will start to +# reply to queries with an error. +# +# When a long running script exceeds the maximum execution time only the +# SCRIPT KILL and SHUTDOWN NOSAVE commands are available. The first can be +# used to stop a script that did not yet call any write commands. The second +# is the only way to shut down the server in the case a write command was +# already issued by the script but the user doesn't want to wait for the natural +# termination of the script. +# +# Set it to 0 or a negative value for unlimited execution without warnings. +lua-time-limit 5000 + +################################ REDIS CLUSTER ############################### + +# Normal Redis instances can't be part of a Redis Cluster; only nodes that are +# started as cluster nodes can. In order to start a Redis instance as a +# cluster node enable the cluster support uncommenting the following: +# +# cluster-enabled yes + +# Every cluster node has a cluster configuration file. This file is not +# intended to be edited by hand. It is created and updated by Redis nodes. +# Every Redis Cluster node requires a different cluster configuration file. +# Make sure that instances running in the same system do not have +# overlapping cluster configuration file names. +# +# cluster-config-file nodes-6379.conf + +# Cluster node timeout is the amount of milliseconds a node must be unreachable +# for it to be considered in failure state. +# Most other internal time limits are a multiple of the node timeout. +# +# cluster-node-timeout 15000 + +# A replica of a failing master will avoid to start a failover if its data +# looks too old. +# +# There is no simple way for a replica to actually have an exact measure of +# its "data age", so the following two checks are performed: +# +# 1) If there are multiple replicas able to failover, they exchange messages +# in order to try to give an advantage to the replica with the best +# replication offset (more data from the master processed). +# Replicas will try to get their rank by offset, and apply to the start +# of the failover a delay proportional to their rank. +# +# 2) Every single replica computes the time of the last interaction with +# its master. This can be the last ping or command received (if the master +# is still in the "connected" state), or the time that elapsed since the +# disconnection with the master (if the replication link is currently down). +# If the last interaction is too old, the replica will not try to failover +# at all. +# +# The point "2" can be tuned by user. Specifically a replica will not perform +# the failover if, since the last interaction with the master, the time +# elapsed is greater than: +# +# (node-timeout * cluster-replica-validity-factor) + repl-ping-replica-period +# +# So for example if node-timeout is 30 seconds, and the cluster-replica-validity-factor +# is 10, and assuming a default repl-ping-replica-period of 10 seconds, the +# replica will not try to failover if it was not able to talk with the master +# for longer than 310 seconds. +# +# A large cluster-replica-validity-factor may allow replicas with too old data to failover +# a master, while a too small value may prevent the cluster from being able to +# elect a replica at all. +# +# For maximum availability, it is possible to set the cluster-replica-validity-factor +# to a value of 0, which means, that replicas will always try to failover the +# master regardless of the last time they interacted with the master. +# (However they'll always try to apply a delay proportional to their +# offset rank). +# +# Zero is the only value able to guarantee that when all the partitions heal +# the cluster will always be able to continue. +# +# cluster-replica-validity-factor 10 + +# Cluster replicas are able to migrate to orphaned masters, that are masters +# that are left without working replicas. This improves the cluster ability +# to resist to failures as otherwise an orphaned master can't be failed over +# in case of failure if it has no working replicas. +# +# Replicas migrate to orphaned masters only if there are still at least a +# given number of other working replicas for their old master. This number +# is the "migration barrier". A migration barrier of 1 means that a replica +# will migrate only if there is at least 1 other working replica for its master +# and so forth. It usually reflects the number of replicas you want for every +# master in your cluster. +# +# Default is 1 (replicas migrate only if their masters remain with at least +# one replica). To disable migration just set it to a very large value. +# A value of 0 can be set but is useful only for debugging and dangerous +# in production. +# +# cluster-migration-barrier 1 + +# By default Redis Cluster nodes stop accepting queries if they detect there +# is at least a hash slot uncovered (no available node is serving it). +# This way if the cluster is partially down (for example a range of hash slots +# are no longer covered) all the cluster becomes, eventually, unavailable. +# It automatically returns available as soon as all the slots are covered again. +# +# However sometimes you want the subset of the cluster which is working, +# to continue to accept queries for the part of the key space that is still +# covered. In order to do so, just set the cluster-require-full-coverage +# option to no. +# +# cluster-require-full-coverage yes + +# This option, when set to yes, prevents replicas from trying to failover its +# master during master failures. However the master can still perform a +# manual failover, if forced to do so. +# +# This is useful in different scenarios, especially in the case of multiple +# data center operations, where we want one side to never be promoted if not +# in the case of a total DC failure. +# +# cluster-replica-no-failover no + +# This option, when set to yes, allows nodes to serve read traffic while the +# the cluster is in a down state, as long as it believes it owns the slots. +# +# This is useful for two cases. The first case is for when an application +# doesn't require consistency of data during node failures or network partitions. +# One example of this is a cache, where as long as the node has the data it +# should be able to serve it. +# +# The second use case is for configurations that don't meet the recommended +# three shards but want to enable cluster mode and scale later. A +# master outage in a 1 or 2 shard configuration causes a read/write outage to the +# entire cluster without this option set, with it set there is only a write outage. +# Without a quorum of masters, slot ownership will not change automatically. +# +# cluster-allow-reads-when-down no + +# In order to setup your cluster make sure to read the documentation +# available at http://redis.io web site. + +########################## CLUSTER DOCKER/NAT support ######################## + +# In certain deployments, Redis Cluster nodes address discovery fails, because +# addresses are NAT-ted or because ports are forwarded (the typical case is +# Docker and other containers). +# +# In order to make Redis Cluster working in such environments, a static +# configuration where each node knows its public address is needed. The +# following two options are used for this scope, and are: +# +# * cluster-announce-ip +# * cluster-announce-port +# * cluster-announce-bus-port +# +# Each instructs the node about its address, client port, and cluster message +# bus port. The information is then published in the header of the bus packets +# so that other nodes will be able to correctly map the address of the node +# publishing the information. +# +# If the above options are not used, the normal Redis Cluster auto-detection +# will be used instead. +# +# Note that when remapped, the bus port may not be at the fixed offset of +# clients port + 10000, so you can specify any port and bus-port depending +# on how they get remapped. If the bus-port is not set, a fixed offset of +# 10000 will be used as usual. +# +# Example: +# +# cluster-announce-ip 10.1.1.5 +# cluster-announce-port 6379 +# cluster-announce-bus-port 6380 + +################################## SLOW LOG ################################### + +# The Redis Slow Log is a system to log queries that exceeded a specified +# execution time. The execution time does not include the I/O operations +# like talking with the client, sending the reply and so forth, +# but just the time needed to actually execute the command (this is the only +# stage of command execution where the thread is blocked and can not serve +# other requests in the meantime). +# +# You can configure the slow log with two parameters: one tells Redis +# what is the execution time, in microseconds, to exceed in order for the +# command to get logged, and the other parameter is the length of the +# slow log. When a new command is logged the oldest one is removed from the +# queue of logged commands. + +# The following time is expressed in microseconds, so 1000000 is equivalent +# to one second. Note that a negative number disables the slow log, while +# a value of zero forces the logging of every command. +slowlog-log-slower-than 10000 + +# There is no limit to this length. Just be aware that it will consume memory. +# You can reclaim memory used by the slow log with SLOWLOG RESET. +slowlog-max-len 128 + +################################ LATENCY MONITOR ############################## + +# The Redis latency monitoring subsystem samples different operations +# at runtime in order to collect data related to possible sources of +# latency of a Redis instance. +# +# Via the LATENCY command this information is available to the user that can +# print graphs and obtain reports. +# +# The system only logs operations that were performed in a time equal or +# greater than the amount of milliseconds specified via the +# latency-monitor-threshold configuration directive. When its value is set +# to zero, the latency monitor is turned off. +# +# By default latency monitoring is disabled since it is mostly not needed +# if you don't have latency issues, and collecting data has a performance +# impact, that while very small, can be measured under big load. Latency +# monitoring can easily be enabled at runtime using the command +# "CONFIG SET latency-monitor-threshold " if needed. +latency-monitor-threshold 0 + +############################# EVENT NOTIFICATION ############################## + +# Redis can notify Pub/Sub clients about events happening in the key space. +# This feature is documented at http://redis.io/topics/notifications +# +# For instance if keyspace events notification is enabled, and a client +# performs a DEL operation on key "foo" stored in the Database 0, two +# messages will be published via Pub/Sub: +# +# PUBLISH __keyspace@0__:foo del +# PUBLISH __keyevent@0__:del foo +# +# It is possible to select the events that Redis will notify among a set +# of classes. Every class is identified by a single character: +# +# K Keyspace events, published with __keyspace@__ prefix. +# E Keyevent events, published with __keyevent@__ prefix. +# g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ... +# $ String commands +# l List commands +# s Set commands +# h Hash commands +# z Sorted set commands +# x Expired events (events generated every time a key expires) +# e Evicted events (events generated when a key is evicted for maxmemory) +# t Stream commands +# m Key-miss events (Note: It is not included in the 'A' class) +# A Alias for g$lshzxet, so that the "AKE" string means all the events +# (Except key-miss events which are excluded from 'A' due to their +# unique nature). +# +# The "notify-keyspace-events" takes as argument a string that is composed +# of zero or multiple characters. The empty string means that notifications +# are disabled. +# +# Example: to enable list and generic events, from the point of view of the +# event name, use: +# +# notify-keyspace-events Elg +# +# Example 2: to get the stream of the expired keys subscribing to channel +# name __keyevent@0__:expired use: +# +# notify-keyspace-events Ex +# +# By default all notifications are disabled because most users don't need +# this feature and the feature has some overhead. Note that if you don't +# specify at least one of K or E, no events will be delivered. +notify-keyspace-events "" + +############################### GOPHER SERVER ################################# + +# Redis contains an implementation of the Gopher protocol, as specified in +# the RFC 1436 (https://www.ietf.org/rfc/rfc1436.txt). +# +# The Gopher protocol was very popular in the late '90s. It is an alternative +# to the web, and the implementation both server and client side is so simple +# that the Redis server has just 100 lines of code in order to implement this +# support. +# +# What do you do with Gopher nowadays? Well Gopher never *really* died, and +# lately there is a movement in order for the Gopher more hierarchical content +# composed of just plain text documents to be resurrected. Some want a simpler +# internet, others believe that the mainstream internet became too much +# controlled, and it's cool to create an alternative space for people that +# want a bit of fresh air. +# +# Anyway for the 10nth birthday of the Redis, we gave it the Gopher protocol +# as a gift. +# +# --- HOW IT WORKS? --- +# +# The Redis Gopher support uses the inline protocol of Redis, and specifically +# two kind of inline requests that were anyway illegal: an empty request +# or any request that starts with "/" (there are no Redis commands starting +# with such a slash). Normal RESP2/RESP3 requests are completely out of the +# path of the Gopher protocol implementation and are served as usual as well. +# +# If you open a connection to Redis when Gopher is enabled and send it +# a string like "/foo", if there is a key named "/foo" it is served via the +# Gopher protocol. +# +# In order to create a real Gopher "hole" (the name of a Gopher site in Gopher +# talking), you likely need a script like the following: +# +# https://github.com/antirez/gopher2redis +# +# --- SECURITY WARNING --- +# +# If you plan to put Redis on the internet in a publicly accessible address +# to server Gopher pages MAKE SURE TO SET A PASSWORD to the instance. +# Once a password is set: +# +# 1. The Gopher server (when enabled, not by default) will still serve +# content via Gopher. +# 2. However other commands cannot be called before the client will +# authenticate. +# +# So use the 'requirepass' option to protect your instance. +# +# Note that Gopher is not currently supported when 'io-threads-do-reads' +# is enabled. +# +# To enable Gopher support, uncomment the following line and set the option +# from no (the default) to yes. +# +# gopher-enabled no + +############################### ADVANCED CONFIG ############################### + +# Hashes are encoded using a memory efficient data structure when they have a +# small number of entries, and the biggest entry does not exceed a given +# threshold. These thresholds can be configured using the following directives. +hash-max-ziplist-entries 512 +hash-max-ziplist-value 64 + +# Lists are also encoded in a special way to save a lot of space. +# The number of entries allowed per internal list node can be specified +# as a fixed maximum size or a maximum number of elements. +# For a fixed maximum size, use -5 through -1, meaning: +# -5: max size: 64 Kb <-- not recommended for normal workloads +# -4: max size: 32 Kb <-- not recommended +# -3: max size: 16 Kb <-- probably not recommended +# -2: max size: 8 Kb <-- good +# -1: max size: 4 Kb <-- good +# Positive numbers mean store up to _exactly_ that number of elements +# per list node. +# The highest performing option is usually -2 (8 Kb size) or -1 (4 Kb size), +# but if your use case is unique, adjust the settings as necessary. +list-max-ziplist-size -2 + +# Lists may also be compressed. +# Compress depth is the number of quicklist ziplist nodes from *each* side of +# the list to *exclude* from compression. The head and tail of the list +# are always uncompressed for fast push/pop operations. Settings are: +# 0: disable all list compression +# 1: depth 1 means "don't start compressing until after 1 node into the list, +# going from either the head or tail" +# So: [head]->node->node->...->node->[tail] +# [head], [tail] will always be uncompressed; inner nodes will compress. +# 2: [head]->[next]->node->node->...->node->[prev]->[tail] +# 2 here means: don't compress head or head->next or tail->prev or tail, +# but compress all nodes between them. +# 3: [head]->[next]->[next]->node->node->...->node->[prev]->[prev]->[tail] +# etc. +list-compress-depth 0 + +# Sets have a special encoding in just one case: when a set is composed +# of just strings that happen to be integers in radix 10 in the range +# of 64 bit signed integers. +# The following configuration setting sets the limit in the size of the +# set in order to use this special memory saving encoding. +set-max-intset-entries 512 + +# Similarly to hashes and lists, sorted sets are also specially encoded in +# order to save a lot of space. This encoding is only used when the length and +# elements of a sorted set are below the following limits: +zset-max-ziplist-entries 128 +zset-max-ziplist-value 64 + +# HyperLogLog sparse representation bytes limit. The limit includes the +# 16 bytes header. When an HyperLogLog using the sparse representation crosses +# this limit, it is converted into the dense representation. +# +# A value greater than 16000 is totally useless, since at that point the +# dense representation is more memory efficient. +# +# The suggested value is ~ 3000 in order to have the benefits of +# the space efficient encoding without slowing down too much PFADD, +# which is O(N) with the sparse encoding. The value can be raised to +# ~ 10000 when CPU is not a concern, but space is, and the data set is +# composed of many HyperLogLogs with cardinality in the 0 - 15000 range. +hll-sparse-max-bytes 3000 + +# Streams macro node max size / items. The stream data structure is a radix +# tree of big nodes that encode multiple items inside. Using this configuration +# it is possible to configure how big a single node can be in bytes, and the +# maximum number of items it may contain before switching to a new node when +# appending new stream entries. If any of the following settings are set to +# zero, the limit is ignored, so for instance it is possible to set just a +# max entires limit by setting max-bytes to 0 and max-entries to the desired +# value. +stream-node-max-bytes 4096 +stream-node-max-entries 100 + +# Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in +# order to help rehashing the main Redis hash table (the one mapping top-level +# keys to values). The hash table implementation Redis uses (see dict.c) +# performs a lazy rehashing: the more operation you run into a hash table +# that is rehashing, the more rehashing "steps" are performed, so if the +# server is idle the rehashing is never complete and some more memory is used +# by the hash table. +# +# The default is to use this millisecond 10 times every second in order to +# actively rehash the main dictionaries, freeing memory when possible. +# +# If unsure: +# use "activerehashing no" if you have hard latency requirements and it is +# not a good thing in your environment that Redis can reply from time to time +# to queries with 2 milliseconds delay. +# +# use "activerehashing yes" if you don't have such hard requirements but +# want to free memory asap when possible. +activerehashing yes + +# The client output buffer limits can be used to force disconnection of clients +# that are not reading data from the server fast enough for some reason (a +# common reason is that a Pub/Sub client can't consume messages as fast as the +# publisher can produce them). +# +# The limit can be set differently for the three different classes of clients: +# +# normal -> normal clients including MONITOR clients +# replica -> replica clients +# pubsub -> clients subscribed to at least one pubsub channel or pattern +# +# The syntax of every client-output-buffer-limit directive is the following: +# +# client-output-buffer-limit +# +# A client is immediately disconnected once the hard limit is reached, or if +# the soft limit is reached and remains reached for the specified number of +# seconds (continuously). +# So for instance if the hard limit is 32 megabytes and the soft limit is +# 16 megabytes / 10 seconds, the client will get disconnected immediately +# if the size of the output buffers reach 32 megabytes, but will also get +# disconnected if the client reaches 16 megabytes and continuously overcomes +# the limit for 10 seconds. +# +# By default normal clients are not limited because they don't receive data +# without asking (in a push way), but just after a request, so only +# asynchronous clients may create a scenario where data is requested faster +# than it can read. +# +# Instead there is a default limit for pubsub and replica clients, since +# subscribers and replicas receive data in a push fashion. +# +# Both the hard or the soft limit can be disabled by setting them to zero. +client-output-buffer-limit normal 0 0 0 +client-output-buffer-limit replica 256mb 64mb 60 +client-output-buffer-limit pubsub 32mb 8mb 60 + +# Client query buffers accumulate new commands. They are limited to a fixed +# amount by default in order to avoid that a protocol desynchronization (for +# instance due to a bug in the client) will lead to unbound memory usage in +# the query buffer. However you can configure it here if you have very special +# needs, such us huge multi/exec requests or alike. +# +# client-query-buffer-limit 1gb + +# In the Redis protocol, bulk requests, that are, elements representing single +# strings, are normally limited to 512 mb. However you can change this limit +# here, but must be 1mb or greater +# +# proto-max-bulk-len 512mb + +# Redis calls an internal function to perform many background tasks, like +# closing connections of clients in timeout, purging expired keys that are +# never requested, and so forth. +# +# Not all tasks are performed with the same frequency, but Redis checks for +# tasks to perform according to the specified "hz" value. +# +# By default "hz" is set to 10. Raising the value will use more CPU when +# Redis is idle, but at the same time will make Redis more responsive when +# there are many keys expiring at the same time, and timeouts may be +# handled with more precision. +# +# The range is between 1 and 500, however a value over 100 is usually not +# a good idea. Most users should use the default of 10 and raise this up to +# 100 only in environments where very low latency is required. +hz 10 + +# Normally it is useful to have an HZ value which is proportional to the +# number of clients connected. This is useful in order, for instance, to +# avoid too many clients are processed for each background task invocation +# in order to avoid latency spikes. +# +# Since the default HZ value by default is conservatively set to 10, Redis +# offers, and enables by default, the ability to use an adaptive HZ value +# which will temporarily raise when there are many connected clients. +# +# When dynamic HZ is enabled, the actual configured HZ will be used +# as a baseline, but multiples of the configured HZ value will be actually +# used as needed once more clients are connected. In this way an idle +# instance will use very little CPU time while a busy instance will be +# more responsive. +dynamic-hz yes + +# When a child rewrites the AOF file, if the following option is enabled +# the file will be fsync-ed every 32 MB of data generated. This is useful +# in order to commit the file to the disk more incrementally and avoid +# big latency spikes. +aof-rewrite-incremental-fsync yes + +# When redis saves RDB file, if the following option is enabled +# the file will be fsync-ed every 32 MB of data generated. This is useful +# in order to commit the file to the disk more incrementally and avoid +# big latency spikes. +rdb-save-incremental-fsync yes + +# Redis LFU eviction (see maxmemory setting) can be tuned. However it is a good +# idea to start with the default settings and only change them after investigating +# how to improve the performances and how the keys LFU change over time, which +# is possible to inspect via the OBJECT FREQ command. +# +# There are two tunable parameters in the Redis LFU implementation: the +# counter logarithm factor and the counter decay time. It is important to +# understand what the two parameters mean before changing them. +# +# The LFU counter is just 8 bits per key, it's maximum value is 255, so Redis +# uses a probabilistic increment with logarithmic behavior. Given the value +# of the old counter, when a key is accessed, the counter is incremented in +# this way: +# +# 1. A random number R between 0 and 1 is extracted. +# 2. A probability P is calculated as 1/(old_value*lfu_log_factor+1). +# 3. The counter is incremented only if R < P. +# +# The default lfu-log-factor is 10. This is a table of how the frequency +# counter changes with a different number of accesses with different +# logarithmic factors: +# +# +--------+------------+------------+------------+------------+------------+ +# | factor | 100 hits | 1000 hits | 100K hits | 1M hits | 10M hits | +# +--------+------------+------------+------------+------------+------------+ +# | 0 | 104 | 255 | 255 | 255 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# | 1 | 18 | 49 | 255 | 255 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# | 10 | 10 | 18 | 142 | 255 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# | 100 | 8 | 11 | 49 | 143 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# +# NOTE: The above table was obtained by running the following commands: +# +# redis-benchmark -n 1000000 incr foo +# redis-cli object freq foo +# +# NOTE 2: The counter initial value is 5 in order to give new objects a chance +# to accumulate hits. +# +# The counter decay time is the time, in minutes, that must elapse in order +# for the key counter to be divided by two (or decremented if it has a value +# less <= 10). +# +# The default value for the lfu-decay-time is 1. A special value of 0 means to +# decay the counter every time it happens to be scanned. +# +# lfu-log-factor 10 +# lfu-decay-time 1 + +########################### ACTIVE DEFRAGMENTATION ####################### +# +# What is active defragmentation? +# ------------------------------- +# +# Active (online) defragmentation allows a Redis server to compact the +# spaces left between small allocations and deallocations of data in memory, +# thus allowing to reclaim back memory. +# +# Fragmentation is a natural process that happens with every allocator (but +# less so with Jemalloc, fortunately) and certain workloads. Normally a server +# restart is needed in order to lower the fragmentation, or at least to flush +# away all the data and create it again. However thanks to this feature +# implemented by Oran Agra for Redis 4.0 this process can happen at runtime +# in a "hot" way, while the server is running. +# +# Basically when the fragmentation is over a certain level (see the +# configuration options below) Redis will start to create new copies of the +# values in contiguous memory regions by exploiting certain specific Jemalloc +# features (in order to understand if an allocation is causing fragmentation +# and to allocate it in a better place), and at the same time, will release the +# old copies of the data. This process, repeated incrementally for all the keys +# will cause the fragmentation to drop back to normal values. +# +# Important things to understand: +# +# 1. This feature is disabled by default, and only works if you compiled Redis +# to use the copy of Jemalloc we ship with the source code of Redis. +# This is the default with Linux builds. +# +# 2. You never need to enable this feature if you don't have fragmentation +# issues. +# +# 3. Once you experience fragmentation, you can enable this feature when +# needed with the command "CONFIG SET activedefrag yes". +# +# The configuration parameters are able to fine tune the behavior of the +# defragmentation process. If you are not sure about what they mean it is +# a good idea to leave the defaults untouched. + +# Enabled active defragmentation +# activedefrag no + +# Minimum amount of fragmentation waste to start active defrag +# active-defrag-ignore-bytes 100mb + +# Minimum percentage of fragmentation to start active defrag +# active-defrag-threshold-lower 10 + +# Maximum percentage of fragmentation at which we use maximum effort +# active-defrag-threshold-upper 100 + +# Minimal effort for defrag in CPU percentage, to be used when the lower +# threshold is reached +# active-defrag-cycle-min 1 + +# Maximal effort for defrag in CPU percentage, to be used when the upper +# threshold is reached +# active-defrag-cycle-max 25 + +# Maximum number of set/hash/zset/list fields that will be processed from +# the main dictionary scan +# active-defrag-max-scan-fields 1000 + +# Jemalloc background thread for purging will be enabled by default +jemalloc-bg-thread yes + +# It is possible to pin different threads and processes of Redis to specific +# CPUs in your system, in order to maximize the performances of the server. +# This is useful both in order to pin different Redis threads in different +# CPUs, but also in order to make sure that multiple Redis instances running +# in the same host will be pinned to different CPUs. +# +# Normally you can do this using the "taskset" command, however it is also +# possible to this via Redis configuration directly, both in Linux and FreeBSD. +# +# You can pin the server/IO threads, bio threads, aof rewrite child process, and +# the bgsave child process. The syntax to specify the cpu list is the same as +# the taskset command: +# +# Set redis server/io threads to cpu affinity 0,2,4,6: +# server_cpulist 0-7:2 +# +# Set bio threads to cpu affinity 1,3: +# bio_cpulist 1,3 +# +# Set aof rewrite child process to cpu affinity 8,9,10,11: +# aof_rewrite_cpulist 8-11 +# +# Set bgsave child process to cpu affinity 1,10,11 +# bgsave_cpulist 1,10-11 + +# In some cases redis will emit warnings and even refuse to start if it detects +# that the system is in bad state, it is possible to suppress these warnings +# by setting the following config which takes a space delimited list of warnings +# to suppress +# +# ignore-warnings ARM64-COW-BUG diff --git a/appstore/redis/6.2.16/data.yml b/appstore/redis/6.2.16/data.yml new file mode 100644 index 00000000..fcf9b51d --- /dev/null +++ b/appstore/redis/6.2.16/data.yml @@ -0,0 +1,23 @@ +additionalProperties: + formFields: + - default: "/home/redis" + envKey: REDIS_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 6379 + envKey: PANEL_APP_PORT_HTTP + labelZh: 端口 + labelEn: Port + required: true + rule: paramPort + type: number + - default: "" + envKey: REDIS_ROOT_PASSWORD + labelZh: 密码 + labelEn: Password + random: true + required: false + rule: paramComplexity + type: password diff --git a/appstore/redis/6.2.16/docker-compose.yml b/appstore/redis/6.2.16/docker-compose.yml new file mode 100644 index 00000000..95805faa --- /dev/null +++ b/appstore/redis/6.2.16/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + 1panel-network: + external: true +services: + redis: + command: "sh -c ' if [ -z \"${REDIS_ROOT_PASSWORD}\" ]; then\n redis-server /etc/redis/redis.conf\n\ + else\n redis-server /etc/redis/redis.conf --requirepass ${REDIS_ROOT_PASSWORD}\n\ + fi'\n" + container_name: redis + image: redis:6.2.16-alpine + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:6379 + restart: always + volumes: + - ${REDIS_ROOT_PATH}/data:/data + - ${REDIS_ROOT_PATH}/config/redis.conf:/etc/redis/redis.conf + - ${REDIS_ROOT_PATH}/logs:/logs diff --git a/appstore/redis/6.2.16/envs/default.env b/appstore/redis/6.2.16/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/redis/6.2.16/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/redis/6.2.16/envs/global.env b/appstore/redis/6.2.16/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/redis/6.2.16/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/redis/6.2.16/scripts/init.sh b/appstore/redis/6.2.16/scripts/init.sh new file mode 100644 index 00000000..d10108b1 --- /dev/null +++ b/appstore/redis/6.2.16/scripts/init.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + mkdir -p "$REDIS_ROOT_PATH" + + mkdir -p "$REDIS_ROOT_PATH/data" + mkdir -p "$REDIS_ROOT_PATH/config" + mkdir -p "$REDIS_ROOT_PATH/logs" + + cp ./config/redis.conf "$REDIS_ROOT_PATH/config/redis.conf" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/redis/6.2.16/scripts/uninstall.sh b/appstore/redis/6.2.16/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/redis/6.2.16/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/redis/6.2.16/scripts/upgrade.sh b/appstore/redis/6.2.16/scripts/upgrade.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/redis/6.2.16/scripts/upgrade.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/redis/7.4.1/.env b/appstore/redis/7.4.1/.env new file mode 100644 index 00000000..969809e6 --- /dev/null +++ b/appstore/redis/7.4.1/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +REDIS_ROOT_PATH=/home/redis + +# 端口 [必填] +PANEL_APP_PORT_HTTP=6379 + +# 密码 +REDIS_ROOT_PASSWORD= + diff --git a/appstore/redis/7.4.1/config/redis.conf b/appstore/redis/7.4.1/config/redis.conf new file mode 100644 index 00000000..8795ae29 --- /dev/null +++ b/appstore/redis/7.4.1/config/redis.conf @@ -0,0 +1,2276 @@ +# Redis configuration file example. +# +# Note that in order to read the configuration file, Redis must be +# started with the file path as first argument: +# +# ./redis-server /path/to/redis.conf + +# Note on units: when memory size is needed, it is possible to specify +# it in the usual form of 1k 5GB 4M and so forth: +# +# 1k => 1000 bytes +# 1kb => 1024 bytes +# 1m => 1000000 bytes +# 1mb => 1024*1024 bytes +# 1g => 1000000000 bytes +# 1gb => 1024*1024*1024 bytes +# +# units are case insensitive so 1GB 1Gb 1gB are all the same. + +################################## INCLUDES ################################### + +# Include one or more other config files here. This is useful if you +# have a standard template that goes to all Redis servers but also need +# to customize a few per-server settings. Include files can include +# other files, so use this wisely. +# +# Note that option "include" won't be rewritten by command "CONFIG REWRITE" +# from admin or Redis Sentinel. Since Redis always uses the last processed +# line as value of a configuration directive, you'd better put includes +# at the beginning of this file to avoid overwriting config change at runtime. +# +# If instead you are interested in using includes to override configuration +# options, it is better to use include as the last line. +# +# Included paths may contain wildcards. All files matching the wildcards will +# be included in alphabetical order. +# Note that if an include path contains a wildcards but no files match it when +# the server is started, the include statement will be ignored and no error will +# be emitted. It is safe, therefore, to include wildcard files from empty +# directories. +# +# include /path/to/local.conf +# include /path/to/other.conf +# include /path/to/fragments/*.conf +# + +################################## MODULES ##################################### + +# Load modules at startup. If the server is not able to load modules +# it will abort. It is possible to use multiple loadmodule directives. +# +# loadmodule /path/to/my_module.so +# loadmodule /path/to/other_module.so + +################################## NETWORK ##################################### + +# By default, if no "bind" configuration directive is specified, Redis listens +# for connections from all available network interfaces on the host machine. +# It is possible to listen to just one or multiple selected interfaces using +# the "bind" configuration directive, followed by one or more IP addresses. +# Each address can be prefixed by "-", which means that redis will not fail to +# start if the address is not available. Being not available only refers to +# addresses that does not correspond to any network interface. Addresses that +# are already in use will always fail, and unsupported protocols will always BE +# silently skipped. +# +# Examples: +# +# bind 192.168.1.100 10.0.0.1 # listens on two specific IPv4 addresses +# bind 127.0.0.1 ::1 # listens on loopback IPv4 and IPv6 +# bind * -::* # like the default, all available interfaces +# +# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the +# internet, binding to all the interfaces is dangerous and will expose the +# instance to everybody on the internet. So by default we uncomment the +# following bind directive, that will force Redis to listen only on the +# IPv4 and IPv6 (if available) loopback interface addresses (this means Redis +# will only be able to accept client connections from the same host that it is +# running on). +# +# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES +# COMMENT OUT THE FOLLOWING LINE. +# +# You will also need to set a password unless you explicitly disable protected +# mode. +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +bind 0.0.0.0 + +# By default, outgoing connections (from replica to master, from Sentinel to +# instances, cluster bus, etc.) are not bound to a specific local address. In +# most cases, this means the operating system will handle that based on routing +# and the interface through which the connection goes out. +# +# Using bind-source-addr it is possible to configure a specific address to bind +# to, which may also affect how the connection gets routed. +# +# Example: +# +# bind-source-addr 10.0.0.1 + +# Protected mode is a layer of security protection, in order to avoid that +# Redis instances left open on the internet are accessed and exploited. +# +# When protected mode is on and the default user has no password, the server +# only accepts local connections from the IPv4 address (127.0.0.1), IPv6 address +# (::1) or Unix domain sockets. +# +# By default protected mode is enabled. You should disable it only if +# you are sure you want clients from other hosts to connect to Redis +# even if no authentication is configured. +protected-mode yes + +# Redis uses default hardened security configuration directives to reduce the +# attack surface on innocent users. Therefore, several sensitive configuration +# directives are immutable, and some potentially-dangerous commands are blocked. +# +# Configuration directives that control files that Redis writes to (e.g., 'dir' +# and 'dbfilename') and that aren't usually modified during runtime +# are protected by making them immutable. +# +# Commands that can increase the attack surface of Redis and that aren't usually +# called by users are blocked by default. +# +# These can be exposed to either all connections or just local ones by setting +# each of the configs listed below to either of these values: +# +# no - Block for any connection (remain immutable) +# yes - Allow for any connection (no protection) +# local - Allow only for local connections. Ones originating from the +# IPv4 address (127.0.0.1), IPv6 address (::1) or Unix domain sockets. +# +# enable-protected-configs no +# enable-debug-command no +# enable-module-command no + +# Accept connections on the specified port, default is 6379 (IANA #815344). +# If port 0 is specified Redis will not listen on a TCP socket. +port 6379 + +# TCP listen() backlog. +# +# In high requests-per-second environments you need a high backlog in order +# to avoid slow clients connection issues. Note that the Linux kernel +# will silently truncate it to the value of /proc/sys/net/core/somaxconn so +# make sure to raise both the value of somaxconn and tcp_max_syn_backlog +# in order to get the desired effect. +tcp-backlog 511 + +# Unix socket. +# +# Specify the path for the Unix socket that will be used to listen for +# incoming connections. There is no default, so Redis will not listen +# on a unix socket when not specified. +# +# unixsocket /run/redis.sock +# unixsocketperm 700 + +# Close the connection after a client is idle for N seconds (0 to disable) +timeout 0 + +# TCP keepalive. +# +# If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence +# of communication. This is useful for two reasons: +# +# 1) Detect dead peers. +# 2) Force network equipment in the middle to consider the connection to be +# alive. +# +# On Linux, the specified value (in seconds) is the period used to send ACKs. +# Note that to close the connection the double of the time is needed. +# On other kernels the period depends on the kernel configuration. +# +# A reasonable value for this option is 300 seconds, which is the new +# Redis default starting with Redis 3.2.1. +tcp-keepalive 300 + +# Apply OS-specific mechanism to mark the listening socket with the specified +# ID, to support advanced routing and filtering capabilities. +# +# On Linux, the ID represents a connection mark. +# On FreeBSD, the ID represents a socket cookie ID. +# On OpenBSD, the ID represents a route table ID. +# +# The default value is 0, which implies no marking is required. +# socket-mark-id 0 + +################################# TLS/SSL ##################################### + +# By default, TLS/SSL is disabled. To enable it, the "tls-port" configuration +# directive can be used to define TLS-listening ports. To enable TLS on the +# default port, use: +# +# port 0 +# tls-port 6379 + +# Configure a X.509 certificate and private key to use for authenticating the +# server to connected clients, masters or cluster peers. These files should be +# PEM formatted. +# +# tls-cert-file redis.crt +# tls-key-file redis.key +# +# If the key file is encrypted using a passphrase, it can be included here +# as well. +# +# tls-key-file-pass secret + +# Normally Redis uses the same certificate for both server functions (accepting +# connections) and client functions (replicating from a master, establishing +# cluster bus connections, etc.). +# +# Sometimes certificates are issued with attributes that designate them as +# client-only or server-only certificates. In that case it may be desired to use +# different certificates for incoming (server) and outgoing (client) +# connections. To do that, use the following directives: +# +# tls-client-cert-file client.crt +# tls-client-key-file client.key +# +# If the key file is encrypted using a passphrase, it can be included here +# as well. +# +# tls-client-key-file-pass secret + +# Configure a DH parameters file to enable Diffie-Hellman (DH) key exchange, +# required by older versions of OpenSSL (<3.0). Newer versions do not require +# this configuration and recommend against it. +# +# tls-dh-params-file redis.dh + +# Configure a CA certificate(s) bundle or directory to authenticate TLS/SSL +# clients and peers. Redis requires an explicit configuration of at least one +# of these, and will not implicitly use the system wide configuration. +# +# tls-ca-cert-file ca.crt +# tls-ca-cert-dir /etc/ssl/certs + +# By default, clients (including replica servers) on a TLS port are required +# to authenticate using valid client side certificates. +# +# If "no" is specified, client certificates are not required and not accepted. +# If "optional" is specified, client certificates are accepted and must be +# valid if provided, but are not required. +# +# tls-auth-clients no +# tls-auth-clients optional + +# By default, a Redis replica does not attempt to establish a TLS connection +# with its master. +# +# Use the following directive to enable TLS on replication links. +# +# tls-replication yes + +# By default, the Redis Cluster bus uses a plain TCP connection. To enable +# TLS for the bus protocol, use the following directive: +# +# tls-cluster yes + +# By default, only TLSv1.2 and TLSv1.3 are enabled and it is highly recommended +# that older formally deprecated versions are kept disabled to reduce the attack surface. +# You can explicitly specify TLS versions to support. +# Allowed values are case insensitive and include "TLSv1", "TLSv1.1", "TLSv1.2", +# "TLSv1.3" (OpenSSL >= 1.1.1) or any combination. +# To enable only TLSv1.2 and TLSv1.3, use: +# +# tls-protocols "TLSv1.2 TLSv1.3" + +# Configure allowed ciphers. See the ciphers(1ssl) manpage for more information +# about the syntax of this string. +# +# Note: this configuration applies only to <= TLSv1.2. +# +# tls-ciphers DEFAULT:!MEDIUM + +# Configure allowed TLSv1.3 ciphersuites. See the ciphers(1ssl) manpage for more +# information about the syntax of this string, and specifically for TLSv1.3 +# ciphersuites. +# +# tls-ciphersuites TLS_CHACHA20_POLY1305_SHA256 + +# When choosing a cipher, use the server's preference instead of the client +# preference. By default, the server follows the client's preference. +# +# tls-prefer-server-ciphers yes + +# By default, TLS session caching is enabled to allow faster and less expensive +# reconnections by clients that support it. Use the following directive to disable +# caching. +# +# tls-session-caching no + +# Change the default number of TLS sessions cached. A zero value sets the cache +# to unlimited size. The default size is 20480. +# +# tls-session-cache-size 5000 + +# Change the default timeout of cached TLS sessions. The default timeout is 300 +# seconds. +# +# tls-session-cache-timeout 60 + +################################# GENERAL ##################################### + +# By default Redis does not run as a daemon. Use 'yes' if you need it. +# Note that Redis will write a pid file in /var/run/redis.pid when daemonized. +# When Redis is supervised by upstart or systemd, this parameter has no impact. +daemonize no + +# If you run Redis from upstart or systemd, Redis can interact with your +# supervision tree. Options: +# supervised no - no supervision interaction +# supervised upstart - signal upstart by putting Redis into SIGSTOP mode +# requires "expect stop" in your upstart job config +# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET +# on startup, and updating Redis status on a regular +# basis. +# supervised auto - detect upstart or systemd method based on +# UPSTART_JOB or NOTIFY_SOCKET environment variables +# Note: these supervision methods only signal "process is ready." +# They do not enable continuous pings back to your supervisor. +# +# The default is "no". To run under upstart/systemd, you can simply uncomment +# the line below: +# +# supervised auto + +# If a pid file is specified, Redis writes it where specified at startup +# and removes it at exit. +# +# When the server runs non daemonized, no pid file is created if none is +# specified in the configuration. When the server is daemonized, the pid file +# is used even if not specified, defaulting to "/var/run/redis.pid". +# +# Creating a pid file is best effort: if Redis is not able to create it +# nothing bad happens, the server will start and run normally. +# +# Note that on modern Linux systems "/run/redis.pid" is more conforming +# and should be used instead. +pidfile /var/run/redis_6379.pid + +# Specify the server verbosity level. +# This can be one of: +# debug (a lot of information, useful for development/testing) +# verbose (many rarely useful info, but not a mess like the debug level) +# notice (moderately verbose, what you want in production probably) +# warning (only very important / critical messages are logged) +loglevel notice + +# Specify the log file name. Also the empty string can be used to force +# Redis to log on the standard output. Note that if you use standard +# output for logging but daemonize, logs will be sent to /dev/null +logfile "" + +# To enable logging to the system logger, just set 'syslog-enabled' to yes, +# and optionally update the other syslog parameters to suit your needs. +# syslog-enabled no + +# Specify the syslog identity. +# syslog-ident redis + +# Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7. +# syslog-facility local0 + +# To disable the built in crash log, which will possibly produce cleaner core +# dumps when they are needed, uncomment the following: +# +# crash-log-enabled no + +# To disable the fast memory check that's run as part of the crash log, which +# will possibly let redis terminate sooner, uncomment the following: +# +# crash-memcheck-enabled no + +# Set the number of databases. The default database is DB 0, you can select +# a different one on a per-connection basis using SELECT where +# dbid is a number between 0 and 'databases'-1 +databases 16 + +# By default Redis shows an ASCII art logo only when started to log to the +# standard output and if the standard output is a TTY and syslog logging is +# disabled. Basically this means that normally a logo is displayed only in +# interactive sessions. +# +# However it is possible to force the pre-4.0 behavior and always show a +# ASCII art logo in startup logs by setting the following option to yes. +always-show-logo no + +# By default, Redis modifies the process title (as seen in 'top' and 'ps') to +# provide some runtime information. It is possible to disable this and leave +# the process name as executed by setting the following to no. +set-proc-title yes + +# When changing the process title, Redis uses the following template to construct +# the modified title. +# +# Template variables are specified in curly brackets. The following variables are +# supported: +# +# {title} Name of process as executed if parent, or type of child process. +# {listen-addr} Bind address or '*' followed by TCP or TLS port listening on, or +# Unix socket if only that's available. +# {server-mode} Special mode, i.e. "[sentinel]" or "[cluster]". +# {port} TCP port listening on, or 0. +# {tls-port} TLS port listening on, or 0. +# {unixsocket} Unix domain socket listening on, or "". +# {config-file} Name of configuration file used. +# +proc-title-template "{title} {listen-addr} {server-mode}" + +################################ SNAPSHOTTING ################################ + +# Save the DB to disk. +# +# save [ ...] +# +# Redis will save the DB if the given number of seconds elapsed and it +# surpassed the given number of write operations against the DB. +# +# Snapshotting can be completely disabled with a single empty string argument +# as in following example: +# +# save "" +# +# Unless specified otherwise, by default Redis will save the DB: +# * After 3600 seconds (an hour) if at least 1 change was performed +# * After 300 seconds (5 minutes) if at least 100 changes were performed +# * After 60 seconds if at least 10000 changes were performed +# +# You can set these explicitly by uncommenting the following line. +# +# save 3600 1 300 100 60 10000 + +# By default Redis will stop accepting writes if RDB snapshots are enabled +# (at least one save point) and the latest background save failed. +# This will make the user aware (in a hard way) that data is not persisting +# on disk properly, otherwise chances are that no one will notice and some +# disaster will happen. +# +# If the background saving process will start working again Redis will +# automatically allow writes again. +# +# However if you have setup your proper monitoring of the Redis server +# and persistence, you may want to disable this feature so that Redis will +# continue to work as usual even if there are problems with disk, +# permissions, and so forth. +stop-writes-on-bgsave-error yes + +# Compress string objects using LZF when dump .rdb databases? +# By default compression is enabled as it's almost always a win. +# If you want to save some CPU in the saving child set it to 'no' but +# the dataset will likely be bigger if you have compressible values or keys. +rdbcompression yes + +# Since version 5 of RDB a CRC64 checksum is placed at the end of the file. +# This makes the format more resistant to corruption but there is a performance +# hit to pay (around 10%) when saving and loading RDB files, so you can disable it +# for maximum performances. +# +# RDB files created with checksum disabled have a checksum of zero that will +# tell the loading code to skip the check. +rdbchecksum yes + +# Enables or disables full sanitization checks for ziplist and listpack etc when +# loading an RDB or RESTORE payload. This reduces the chances of a assertion or +# crash later on while processing commands. +# Options: +# no - Never perform full sanitization +# yes - Always perform full sanitization +# clients - Perform full sanitization only for user connections. +# Excludes: RDB files, RESTORE commands received from the master +# connection, and client connections which have the +# skip-sanitize-payload ACL flag. +# The default should be 'clients' but since it currently affects cluster +# resharding via MIGRATE, it is temporarily set to 'no' by default. +# +# sanitize-dump-payload no + +# The filename where to dump the DB +dbfilename dump.rdb + +# Remove RDB files used by replication in instances without persistence +# enabled. By default this option is disabled, however there are environments +# where for regulations or other security concerns, RDB files persisted on +# disk by masters in order to feed replicas, or stored on disk by replicas +# in order to load them for the initial synchronization, should be deleted +# ASAP. Note that this option ONLY WORKS in instances that have both AOF +# and RDB persistence disabled, otherwise is completely ignored. +# +# An alternative (and sometimes better) way to obtain the same effect is +# to use diskless replication on both master and replicas instances. However +# in the case of replicas, diskless is not always an option. +rdb-del-sync-files no + +# The working directory. +# +# The DB will be written inside this directory, with the filename specified +# above using the 'dbfilename' configuration directive. +# +# The Append Only File will also be created inside this directory. +# +# Note that you must specify a directory here, not a file name. +dir ./ + +################################# REPLICATION ################################# + +# Master-Replica replication. Use replicaof to make a Redis instance a copy of +# another Redis server. A few things to understand ASAP about Redis replication. +# +# +------------------+ +---------------+ +# | Master | ---> | Replica | +# | (receive writes) | | (exact copy) | +# +------------------+ +---------------+ +# +# 1) Redis replication is asynchronous, but you can configure a master to +# stop accepting writes if it appears to be not connected with at least +# a given number of replicas. +# 2) Redis replicas are able to perform a partial resynchronization with the +# master if the replication link is lost for a relatively small amount of +# time. You may want to configure the replication backlog size (see the next +# sections of this file) with a sensible value depending on your needs. +# 3) Replication is automatic and does not need user intervention. After a +# network partition replicas automatically try to reconnect to masters +# and resynchronize with them. +# +# replicaof + +# If the master is password protected (using the "requirepass" configuration +# directive below) it is possible to tell the replica to authenticate before +# starting the replication synchronization process, otherwise the master will +# refuse the replica request. +# +# masterauth +# +# However this is not enough if you are using Redis ACLs (for Redis version +# 6 or greater), and the default user is not capable of running the PSYNC +# command and/or other commands needed for replication. In this case it's +# better to configure a special user to use with replication, and specify the +# masteruser configuration as such: +# +# masteruser +# +# When masteruser is specified, the replica will authenticate against its +# master using the new AUTH form: AUTH . + +# When a replica loses its connection with the master, or when the replication +# is still in progress, the replica can act in two different ways: +# +# 1) if replica-serve-stale-data is set to 'yes' (the default) the replica will +# still reply to client requests, possibly with out of date data, or the +# data set may just be empty if this is the first synchronization. +# +# 2) If replica-serve-stale-data is set to 'no' the replica will reply with error +# "MASTERDOWN Link with MASTER is down and replica-serve-stale-data is set to 'no'" +# to all data access commands, excluding commands such as: +# INFO, REPLICAOF, AUTH, SHUTDOWN, REPLCONF, ROLE, CONFIG, SUBSCRIBE, +# UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB, COMMAND, POST, +# HOST and LATENCY. +# +replica-serve-stale-data yes + +# You can configure a replica instance to accept writes or not. Writing against +# a replica instance may be useful to store some ephemeral data (because data +# written on a replica will be easily deleted after resync with the master) but +# may also cause problems if clients are writing to it because of a +# misconfiguration. +# +# Since Redis 2.6 by default replicas are read-only. +# +# Note: read only replicas are not designed to be exposed to untrusted clients +# on the internet. It's just a protection layer against misuse of the instance. +# Still a read only replica exports by default all the administrative commands +# such as CONFIG, DEBUG, and so forth. To a limited extent you can improve +# security of read only replicas using 'rename-command' to shadow all the +# administrative / dangerous commands. +replica-read-only yes + +# Replication SYNC strategy: disk or socket. +# +# New replicas and reconnecting replicas that are not able to continue the +# replication process just receiving differences, need to do what is called a +# "full synchronization". An RDB file is transmitted from the master to the +# replicas. +# +# The transmission can happen in two different ways: +# +# 1) Disk-backed: The Redis master creates a new process that writes the RDB +# file on disk. Later the file is transferred by the parent +# process to the replicas incrementally. +# 2) Diskless: The Redis master creates a new process that directly writes the +# RDB file to replica sockets, without touching the disk at all. +# +# With disk-backed replication, while the RDB file is generated, more replicas +# can be queued and served with the RDB file as soon as the current child +# producing the RDB file finishes its work. With diskless replication instead +# once the transfer starts, new replicas arriving will be queued and a new +# transfer will start when the current one terminates. +# +# When diskless replication is used, the master waits a configurable amount of +# time (in seconds) before starting the transfer in the hope that multiple +# replicas will arrive and the transfer can be parallelized. +# +# With slow disks and fast (large bandwidth) networks, diskless replication +# works better. +repl-diskless-sync yes + +# When diskless replication is enabled, it is possible to configure the delay +# the server waits in order to spawn the child that transfers the RDB via socket +# to the replicas. +# +# This is important since once the transfer starts, it is not possible to serve +# new replicas arriving, that will be queued for the next RDB transfer, so the +# server waits a delay in order to let more replicas arrive. +# +# The delay is specified in seconds, and by default is 5 seconds. To disable +# it entirely just set it to 0 seconds and the transfer will start ASAP. +repl-diskless-sync-delay 5 + +# When diskless replication is enabled with a delay, it is possible to let +# the replication start before the maximum delay is reached if the maximum +# number of replicas expected have connected. Default of 0 means that the +# maximum is not defined and Redis will wait the full delay. +repl-diskless-sync-max-replicas 0 + +# ----------------------------------------------------------------------------- +# WARNING: RDB diskless load is experimental. Since in this setup the replica +# does not immediately store an RDB on disk, it may cause data loss during +# failovers. RDB diskless load + Redis modules not handling I/O reads may also +# cause Redis to abort in case of I/O errors during the initial synchronization +# stage with the master. Use only if you know what you are doing. +# ----------------------------------------------------------------------------- +# +# Replica can load the RDB it reads from the replication link directly from the +# socket, or store the RDB to a file and read that file after it was completely +# received from the master. +# +# In many cases the disk is slower than the network, and storing and loading +# the RDB file may increase replication time (and even increase the master's +# Copy on Write memory and replica buffers). +# However, parsing the RDB file directly from the socket may mean that we have +# to flush the contents of the current database before the full rdb was +# received. For this reason we have the following options: +# +# "disabled" - Don't use diskless load (store the rdb file to the disk first) +# "on-empty-db" - Use diskless load only when it is completely safe. +# "swapdb" - Keep current db contents in RAM while parsing the data directly +# from the socket. Replicas in this mode can keep serving current +# data set while replication is in progress, except for cases where +# they can't recognize master as having a data set from same +# replication history. +# Note that this requires sufficient memory, if you don't have it, +# you risk an OOM kill. +repl-diskless-load disabled + +# Master send PINGs to its replicas in a predefined interval. It's possible to +# change this interval with the repl_ping_replica_period option. The default +# value is 10 seconds. +# +# repl-ping-replica-period 10 + +# The following option sets the replication timeout for: +# +# 1) Bulk transfer I/O during SYNC, from the point of view of replica. +# 2) Master timeout from the point of view of replicas (data, pings). +# 3) Replica timeout from the point of view of masters (REPLCONF ACK pings). +# +# It is important to make sure that this value is greater than the value +# specified for repl-ping-replica-period otherwise a timeout will be detected +# every time there is low traffic between the master and the replica. The default +# value is 60 seconds. +# +# repl-timeout 60 + +# Disable TCP_NODELAY on the replica socket after SYNC? +# +# If you select "yes" Redis will use a smaller number of TCP packets and +# less bandwidth to send data to replicas. But this can add a delay for +# the data to appear on the replica side, up to 40 milliseconds with +# Linux kernels using a default configuration. +# +# If you select "no" the delay for data to appear on the replica side will +# be reduced but more bandwidth will be used for replication. +# +# By default we optimize for low latency, but in very high traffic conditions +# or when the master and replicas are many hops away, turning this to "yes" may +# be a good idea. +repl-disable-tcp-nodelay no + +# Set the replication backlog size. The backlog is a buffer that accumulates +# replica data when replicas are disconnected for some time, so that when a +# replica wants to reconnect again, often a full resync is not needed, but a +# partial resync is enough, just passing the portion of data the replica +# missed while disconnected. +# +# The bigger the replication backlog, the longer the replica can endure the +# disconnect and later be able to perform a partial resynchronization. +# +# The backlog is only allocated if there is at least one replica connected. +# +# repl-backlog-size 1mb + +# After a master has no connected replicas for some time, the backlog will be +# freed. The following option configures the amount of seconds that need to +# elapse, starting from the time the last replica disconnected, for the backlog +# buffer to be freed. +# +# Note that replicas never free the backlog for timeout, since they may be +# promoted to masters later, and should be able to correctly "partially +# resynchronize" with other replicas: hence they should always accumulate backlog. +# +# A value of 0 means to never release the backlog. +# +# repl-backlog-ttl 3600 + +# The replica priority is an integer number published by Redis in the INFO +# output. It is used by Redis Sentinel in order to select a replica to promote +# into a master if the master is no longer working correctly. +# +# A replica with a low priority number is considered better for promotion, so +# for instance if there are three replicas with priority 10, 100, 25 Sentinel +# will pick the one with priority 10, that is the lowest. +# +# However a special priority of 0 marks the replica as not able to perform the +# role of master, so a replica with priority of 0 will never be selected by +# Redis Sentinel for promotion. +# +# By default the priority is 100. +replica-priority 100 + +# The propagation error behavior controls how Redis will behave when it is +# unable to handle a command being processed in the replication stream from a master +# or processed while reading from an AOF file. Errors that occur during propagation +# are unexpected, and can cause data inconsistency. However, there are edge cases +# in earlier versions of Redis where it was possible for the server to replicate or persist +# commands that would fail on future versions. For this reason the default behavior +# is to ignore such errors and continue processing commands. +# +# If an application wants to ensure there is no data divergence, this configuration +# should be set to 'panic' instead. The value can also be set to 'panic-on-replicas' +# to only panic when a replica encounters an error on the replication stream. One of +# these two panic values will become the default value in the future once there are +# sufficient safety mechanisms in place to prevent false positive crashes. +# +# propagation-error-behavior ignore + +# Replica ignore disk write errors controls the behavior of a replica when it is +# unable to persist a write command received from its master to disk. By default, +# this configuration is set to 'no' and will crash the replica in this condition. +# It is not recommended to change this default, however in order to be compatible +# with older versions of Redis this config can be toggled to 'yes' which will just +# log a warning and execute the write command it got from the master. +# +# replica-ignore-disk-write-errors no + +# ----------------------------------------------------------------------------- +# By default, Redis Sentinel includes all replicas in its reports. A replica +# can be excluded from Redis Sentinel's announcements. An unannounced replica +# will be ignored by the 'sentinel replicas ' command and won't be +# exposed to Redis Sentinel's clients. +# +# This option does not change the behavior of replica-priority. Even with +# replica-announced set to 'no', the replica can be promoted to master. To +# prevent this behavior, set replica-priority to 0. +# +# replica-announced yes + +# It is possible for a master to stop accepting writes if there are less than +# N replicas connected, having a lag less or equal than M seconds. +# +# The N replicas need to be in "online" state. +# +# The lag in seconds, that must be <= the specified value, is calculated from +# the last ping received from the replica, that is usually sent every second. +# +# This option does not GUARANTEE that N replicas will accept the write, but +# will limit the window of exposure for lost writes in case not enough replicas +# are available, to the specified number of seconds. +# +# For example to require at least 3 replicas with a lag <= 10 seconds use: +# +# min-replicas-to-write 3 +# min-replicas-max-lag 10 +# +# Setting one or the other to 0 disables the feature. +# +# By default min-replicas-to-write is set to 0 (feature disabled) and +# min-replicas-max-lag is set to 10. + +# A Redis master is able to list the address and port of the attached +# replicas in different ways. For example the "INFO replication" section +# offers this information, which is used, among other tools, by +# Redis Sentinel in order to discover replica instances. +# Another place where this info is available is in the output of the +# "ROLE" command of a master. +# +# The listed IP address and port normally reported by a replica is +# obtained in the following way: +# +# IP: The address is auto detected by checking the peer address +# of the socket used by the replica to connect with the master. +# +# Port: The port is communicated by the replica during the replication +# handshake, and is normally the port that the replica is using to +# listen for connections. +# +# However when port forwarding or Network Address Translation (NAT) is +# used, the replica may actually be reachable via different IP and port +# pairs. The following two options can be used by a replica in order to +# report to its master a specific set of IP and port, so that both INFO +# and ROLE will report those values. +# +# There is no need to use both the options if you need to override just +# the port or the IP address. +# +# replica-announce-ip 5.5.5.5 +# replica-announce-port 1234 + +############################### KEYS TRACKING ################################# + +# Redis implements server assisted support for client side caching of values. +# This is implemented using an invalidation table that remembers, using +# a radix key indexed by key name, what clients have which keys. In turn +# this is used in order to send invalidation messages to clients. Please +# check this page to understand more about the feature: +# +# https://redis.io/topics/client-side-caching +# +# When tracking is enabled for a client, all the read only queries are assumed +# to be cached: this will force Redis to store information in the invalidation +# table. When keys are modified, such information is flushed away, and +# invalidation messages are sent to the clients. However if the workload is +# heavily dominated by reads, Redis could use more and more memory in order +# to track the keys fetched by many clients. +# +# For this reason it is possible to configure a maximum fill value for the +# invalidation table. By default it is set to 1M of keys, and once this limit +# is reached, Redis will start to evict keys in the invalidation table +# even if they were not modified, just to reclaim memory: this will in turn +# force the clients to invalidate the cached values. Basically the table +# maximum size is a trade off between the memory you want to spend server +# side to track information about who cached what, and the ability of clients +# to retain cached objects in memory. +# +# If you set the value to 0, it means there are no limits, and Redis will +# retain as many keys as needed in the invalidation table. +# In the "stats" INFO section, you can find information about the number of +# keys in the invalidation table at every given moment. +# +# Note: when key tracking is used in broadcasting mode, no memory is used +# in the server side so this setting is useless. +# +# tracking-table-max-keys 1000000 + +################################## SECURITY ################################### + +# Warning: since Redis is pretty fast, an outside user can try up to +# 1 million passwords per second against a modern box. This means that you +# should use very strong passwords, otherwise they will be very easy to break. +# Note that because the password is really a shared secret between the client +# and the server, and should not be memorized by any human, the password +# can be easily a long string from /dev/urandom or whatever, so by using a +# long and unguessable password no brute force attack will be possible. + +# Redis ACL users are defined in the following format: +# +# user ... acl rules ... +# +# For example: +# +# user worker +@list +@connection ~jobs:* on >ffa9203c493aa99 +# +# The special username "default" is used for new connections. If this user +# has the "nopass" rule, then new connections will be immediately authenticated +# as the "default" user without the need of any password provided via the +# AUTH command. Otherwise if the "default" user is not flagged with "nopass" +# the connections will start in not authenticated state, and will require +# AUTH (or the HELLO command AUTH option) in order to be authenticated and +# start to work. +# +# The ACL rules that describe what a user can do are the following: +# +# on Enable the user: it is possible to authenticate as this user. +# off Disable the user: it's no longer possible to authenticate +# with this user, however the already authenticated connections +# will still work. +# skip-sanitize-payload RESTORE dump-payload sanitization is skipped. +# sanitize-payload RESTORE dump-payload is sanitized (default). +# + Allow the execution of that command. +# May be used with `|` for allowing subcommands (e.g "+config|get") +# - Disallow the execution of that command. +# May be used with `|` for blocking subcommands (e.g "-config|set") +# +@ Allow the execution of all the commands in such category +# with valid categories are like @admin, @set, @sortedset, ... +# and so forth, see the full list in the server.c file where +# the Redis command table is described and defined. +# The special category @all means all the commands, but currently +# present in the server, and that will be loaded in the future +# via modules. +# +|first-arg Allow a specific first argument of an otherwise +# disabled command. It is only supported on commands with +# no sub-commands, and is not allowed as negative form +# like -SELECT|1, only additive starting with "+". This +# feature is deprecated and may be removed in the future. +# allcommands Alias for +@all. Note that it implies the ability to execute +# all the future commands loaded via the modules system. +# nocommands Alias for -@all. +# ~ Add a pattern of keys that can be mentioned as part of +# commands. For instance ~* allows all the keys. The pattern +# is a glob-style pattern like the one of KEYS. +# It is possible to specify multiple patterns. +# %R~ Add key read pattern that specifies which keys can be read +# from. +# %W~ Add key write pattern that specifies which keys can be +# written to. +# allkeys Alias for ~* +# resetkeys Flush the list of allowed keys patterns. +# & Add a glob-style pattern of Pub/Sub channels that can be +# accessed by the user. It is possible to specify multiple channel +# patterns. +# allchannels Alias for &* +# resetchannels Flush the list of allowed channel patterns. +# > Add this password to the list of valid password for the user. +# For example >mypass will add "mypass" to the list. +# This directive clears the "nopass" flag (see later). +# < Remove this password from the list of valid passwords. +# nopass All the set passwords of the user are removed, and the user +# is flagged as requiring no password: it means that every +# password will work against this user. If this directive is +# used for the default user, every new connection will be +# immediately authenticated with the default user without +# any explicit AUTH command required. Note that the "resetpass" +# directive will clear this condition. +# resetpass Flush the list of allowed passwords. Moreover removes the +# "nopass" status. After "resetpass" the user has no associated +# passwords and there is no way to authenticate without adding +# some password (or setting it as "nopass" later). +# reset Performs the following actions: resetpass, resetkeys, off, +# -@all. The user returns to the same state it has immediately +# after its creation. +# () Create a new selector with the options specified within the +# parentheses and attach it to the user. Each option should be +# space separated. The first character must be ( and the last +# character must be ). +# clearselectors Remove all of the currently attached selectors. +# Note this does not change the "root" user permissions, +# which are the permissions directly applied onto the +# user (outside the parentheses). +# +# ACL rules can be specified in any order: for instance you can start with +# passwords, then flags, or key patterns. However note that the additive +# and subtractive rules will CHANGE MEANING depending on the ordering. +# For instance see the following example: +# +# user alice on +@all -DEBUG ~* >somepassword +# +# This will allow "alice" to use all the commands with the exception of the +# DEBUG command, since +@all added all the commands to the set of the commands +# alice can use, and later DEBUG was removed. However if we invert the order +# of two ACL rules the result will be different: +# +# user alice on -DEBUG +@all ~* >somepassword +# +# Now DEBUG was removed when alice had yet no commands in the set of allowed +# commands, later all the commands are added, so the user will be able to +# execute everything. +# +# Basically ACL rules are processed left-to-right. +# +# The following is a list of command categories and their meanings: +# * keyspace - Writing or reading from keys, databases, or their metadata +# in a type agnostic way. Includes DEL, RESTORE, DUMP, RENAME, EXISTS, DBSIZE, +# KEYS, EXPIRE, TTL, FLUSHALL, etc. Commands that may modify the keyspace, +# key or metadata will also have `write` category. Commands that only read +# the keyspace, key or metadata will have the `read` category. +# * read - Reading from keys (values or metadata). Note that commands that don't +# interact with keys, will not have either `read` or `write`. +# * write - Writing to keys (values or metadata) +# * admin - Administrative commands. Normal applications will never need to use +# these. Includes REPLICAOF, CONFIG, DEBUG, SAVE, MONITOR, ACL, SHUTDOWN, etc. +# * dangerous - Potentially dangerous (each should be considered with care for +# various reasons). This includes FLUSHALL, MIGRATE, RESTORE, SORT, KEYS, +# CLIENT, DEBUG, INFO, CONFIG, SAVE, REPLICAOF, etc. +# * connection - Commands affecting the connection or other connections. +# This includes AUTH, SELECT, COMMAND, CLIENT, ECHO, PING, etc. +# * blocking - Potentially blocking the connection until released by another +# command. +# * fast - Fast O(1) commands. May loop on the number of arguments, but not the +# number of elements in the key. +# * slow - All commands that are not Fast. +# * pubsub - PUBLISH / SUBSCRIBE related +# * transaction - WATCH / MULTI / EXEC related commands. +# * scripting - Scripting related. +# * set - Data type: sets related. +# * sortedset - Data type: zsets related. +# * list - Data type: lists related. +# * hash - Data type: hashes related. +# * string - Data type: strings related. +# * bitmap - Data type: bitmaps related. +# * hyperloglog - Data type: hyperloglog related. +# * geo - Data type: geo related. +# * stream - Data type: streams related. +# +# For more information about ACL configuration please refer to +# the Redis web site at https://redis.io/topics/acl + +# ACL LOG +# +# The ACL Log tracks failed commands and authentication events associated +# with ACLs. The ACL Log is useful to troubleshoot failed commands blocked +# by ACLs. The ACL Log is stored in memory. You can reclaim memory with +# ACL LOG RESET. Define the maximum entry length of the ACL Log below. +acllog-max-len 128 + +# Using an external ACL file +# +# Instead of configuring users here in this file, it is possible to use +# a stand-alone file just listing users. The two methods cannot be mixed: +# if you configure users here and at the same time you activate the external +# ACL file, the server will refuse to start. +# +# The format of the external ACL user file is exactly the same as the +# format that is used inside redis.conf to describe users. +# +# aclfile /etc/redis/users.acl + +# IMPORTANT NOTE: starting with Redis 6 "requirepass" is just a compatibility +# layer on top of the new ACL system. The option effect will be just setting +# the password for the default user. Clients will still authenticate using +# AUTH as usually, or more explicitly with AUTH default +# if they follow the new protocol: both will work. +# +# The requirepass is not compatible with aclfile option and the ACL LOAD +# command, these will cause requirepass to be ignored. +# +# requirepass foobared + +# New users are initialized with restrictive permissions by default, via the +# equivalent of this ACL rule 'off resetkeys -@all'. Starting with Redis 6.2, it +# is possible to manage access to Pub/Sub channels with ACL rules as well. The +# default Pub/Sub channels permission if new users is controlled by the +# acl-pubsub-default configuration directive, which accepts one of these values: +# +# allchannels: grants access to all Pub/Sub channels +# resetchannels: revokes access to all Pub/Sub channels +# +# From Redis 7.0, acl-pubsub-default defaults to 'resetchannels' permission. +# +# acl-pubsub-default resetchannels + +# Command renaming (DEPRECATED). +# +# ------------------------------------------------------------------------ +# WARNING: avoid using this option if possible. Instead use ACLs to remove +# commands from the default user, and put them only in some admin user you +# create for administrative purposes. +# ------------------------------------------------------------------------ +# +# It is possible to change the name of dangerous commands in a shared +# environment. For instance the CONFIG command may be renamed into something +# hard to guess so that it will still be available for internal-use tools +# but not available for general clients. +# +# Example: +# +# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 +# +# It is also possible to completely kill a command by renaming it into +# an empty string: +# +# rename-command CONFIG "" +# +# Please note that changing the name of commands that are logged into the +# AOF file or transmitted to replicas may cause problems. + +################################### CLIENTS #################################### + +# Set the max number of connected clients at the same time. By default +# this limit is set to 10000 clients, however if the Redis server is not +# able to configure the process file limit to allow for the specified limit +# the max number of allowed clients is set to the current file limit +# minus 32 (as Redis reserves a few file descriptors for internal uses). +# +# Once the limit is reached Redis will close all the new connections sending +# an error 'max number of clients reached'. +# +# IMPORTANT: When Redis Cluster is used, the max number of connections is also +# shared with the cluster bus: every node in the cluster will use two +# connections, one incoming and another outgoing. It is important to size the +# limit accordingly in case of very large clusters. +# +# maxclients 10000 + +############################## MEMORY MANAGEMENT ################################ + +# Set a memory usage limit to the specified amount of bytes. +# When the memory limit is reached Redis will try to remove keys +# according to the eviction policy selected (see maxmemory-policy). +# +# If Redis can't remove keys according to the policy, or if the policy is +# set to 'noeviction', Redis will start to reply with errors to commands +# that would use more memory, like SET, LPUSH, and so on, and will continue +# to reply to read-only commands like GET. +# +# This option is usually useful when using Redis as an LRU or LFU cache, or to +# set a hard memory limit for an instance (using the 'noeviction' policy). +# +# WARNING: If you have replicas attached to an instance with maxmemory on, +# the size of the output buffers needed to feed the replicas are subtracted +# from the used memory count, so that network problems / resyncs will +# not trigger a loop where keys are evicted, and in turn the output +# buffer of replicas is full with DELs of keys evicted triggering the deletion +# of more keys, and so forth until the database is completely emptied. +# +# In short... if you have replicas attached it is suggested that you set a lower +# limit for maxmemory so that there is some free RAM on the system for replica +# output buffers (but this is not needed if the policy is 'noeviction'). +# +# maxmemory + +# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory +# is reached. You can select one from the following behaviors: +# +# volatile-lru -> Evict using approximated LRU, only keys with an expire set. +# allkeys-lru -> Evict any key using approximated LRU. +# volatile-lfu -> Evict using approximated LFU, only keys with an expire set. +# allkeys-lfu -> Evict any key using approximated LFU. +# volatile-random -> Remove a random key having an expire set. +# allkeys-random -> Remove a random key, any key. +# volatile-ttl -> Remove the key with the nearest expire time (minor TTL) +# noeviction -> Don't evict anything, just return an error on write operations. +# +# LRU means Least Recently Used +# LFU means Least Frequently Used +# +# Both LRU, LFU and volatile-ttl are implemented using approximated +# randomized algorithms. +# +# Note: with any of the above policies, when there are no suitable keys for +# eviction, Redis will return an error on write operations that require +# more memory. These are usually commands that create new keys, add data or +# modify existing keys. A few examples are: SET, INCR, HSET, LPUSH, SUNIONSTORE, +# SORT (due to the STORE argument), and EXEC (if the transaction includes any +# command that requires memory). +# +# The default is: +# +# maxmemory-policy noeviction + +# LRU, LFU and minimal TTL algorithms are not precise algorithms but approximated +# algorithms (in order to save memory), so you can tune it for speed or +# accuracy. By default Redis will check five keys and pick the one that was +# used least recently, you can change the sample size using the following +# configuration directive. +# +# The default of 5 produces good enough results. 10 Approximates very closely +# true LRU but costs more CPU. 3 is faster but not very accurate. +# +# maxmemory-samples 5 + +# Eviction processing is designed to function well with the default setting. +# If there is an unusually large amount of write traffic, this value may need to +# be increased. Decreasing this value may reduce latency at the risk of +# eviction processing effectiveness +# 0 = minimum latency, 10 = default, 100 = process without regard to latency +# +# maxmemory-eviction-tenacity 10 + +# Starting from Redis 5, by default a replica will ignore its maxmemory setting +# (unless it is promoted to master after a failover or manually). It means +# that the eviction of keys will be just handled by the master, sending the +# DEL commands to the replica as keys evict in the master side. +# +# This behavior ensures that masters and replicas stay consistent, and is usually +# what you want, however if your replica is writable, or you want the replica +# to have a different memory setting, and you are sure all the writes performed +# to the replica are idempotent, then you may change this default (but be sure +# to understand what you are doing). +# +# Note that since the replica by default does not evict, it may end using more +# memory than the one set via maxmemory (there are certain buffers that may +# be larger on the replica, or data structures may sometimes take more memory +# and so forth). So make sure you monitor your replicas and make sure they +# have enough memory to never hit a real out-of-memory condition before the +# master hits the configured maxmemory setting. +# +# replica-ignore-maxmemory yes + +# Redis reclaims expired keys in two ways: upon access when those keys are +# found to be expired, and also in background, in what is called the +# "active expire key". The key space is slowly and interactively scanned +# looking for expired keys to reclaim, so that it is possible to free memory +# of keys that are expired and will never be accessed again in a short time. +# +# The default effort of the expire cycle will try to avoid having more than +# ten percent of expired keys still in memory, and will try to avoid consuming +# more than 25% of total memory and to add latency to the system. However +# it is possible to increase the expire "effort" that is normally set to +# "1", to a greater value, up to the value "10". At its maximum value the +# system will use more CPU, longer cycles (and technically may introduce +# more latency), and will tolerate less already expired keys still present +# in the system. It's a tradeoff between memory, CPU and latency. +# +# active-expire-effort 1 + +############################# LAZY FREEING #################################### + +# Redis has two primitives to delete keys. One is called DEL and is a blocking +# deletion of the object. It means that the server stops processing new commands +# in order to reclaim all the memory associated with an object in a synchronous +# way. If the key deleted is associated with a small object, the time needed +# in order to execute the DEL command is very small and comparable to most other +# O(1) or O(log_N) commands in Redis. However if the key is associated with an +# aggregated value containing millions of elements, the server can block for +# a long time (even seconds) in order to complete the operation. +# +# For the above reasons Redis also offers non blocking deletion primitives +# such as UNLINK (non blocking DEL) and the ASYNC option of FLUSHALL and +# FLUSHDB commands, in order to reclaim memory in background. Those commands +# are executed in constant time. Another thread will incrementally free the +# object in the background as fast as possible. +# +# DEL, UNLINK and ASYNC option of FLUSHALL and FLUSHDB are user-controlled. +# It's up to the design of the application to understand when it is a good +# idea to use one or the other. However the Redis server sometimes has to +# delete keys or flush the whole database as a side effect of other operations. +# Specifically Redis deletes objects independently of a user call in the +# following scenarios: +# +# 1) On eviction, because of the maxmemory and maxmemory policy configurations, +# in order to make room for new data, without going over the specified +# memory limit. +# 2) Because of expire: when a key with an associated time to live (see the +# EXPIRE command) must be deleted from memory. +# 3) Because of a side effect of a command that stores data on a key that may +# already exist. For example the RENAME command may delete the old key +# content when it is replaced with another one. Similarly SUNIONSTORE +# or SORT with STORE option may delete existing keys. The SET command +# itself removes any old content of the specified key in order to replace +# it with the specified string. +# 4) During replication, when a replica performs a full resynchronization with +# its master, the content of the whole database is removed in order to +# load the RDB file just transferred. +# +# In all the above cases the default is to delete objects in a blocking way, +# like if DEL was called. However you can configure each case specifically +# in order to instead release memory in a non-blocking way like if UNLINK +# was called, using the following configuration directives. + +lazyfree-lazy-eviction no +lazyfree-lazy-expire no +lazyfree-lazy-server-del no +replica-lazy-flush no + +# It is also possible, for the case when to replace the user code DEL calls +# with UNLINK calls is not easy, to modify the default behavior of the DEL +# command to act exactly like UNLINK, using the following configuration +# directive: + +lazyfree-lazy-user-del no + +# FLUSHDB, FLUSHALL, SCRIPT FLUSH and FUNCTION FLUSH support both asynchronous and synchronous +# deletion, which can be controlled by passing the [SYNC|ASYNC] flags into the +# commands. When neither flag is passed, this directive will be used to determine +# if the data should be deleted asynchronously. + +lazyfree-lazy-user-flush no + +################################ THREADED I/O ################################# + +# Redis is mostly single threaded, however there are certain threaded +# operations such as UNLINK, slow I/O accesses and other things that are +# performed on side threads. +# +# Now it is also possible to handle Redis clients socket reads and writes +# in different I/O threads. Since especially writing is so slow, normally +# Redis users use pipelining in order to speed up the Redis performances per +# core, and spawn multiple instances in order to scale more. Using I/O +# threads it is possible to easily speedup two times Redis without resorting +# to pipelining nor sharding of the instance. +# +# By default threading is disabled, we suggest enabling it only in machines +# that have at least 4 or more cores, leaving at least one spare core. +# Using more than 8 threads is unlikely to help much. We also recommend using +# threaded I/O only if you actually have performance problems, with Redis +# instances being able to use a quite big percentage of CPU time, otherwise +# there is no point in using this feature. +# +# So for instance if you have a four cores boxes, try to use 2 or 3 I/O +# threads, if you have a 8 cores, try to use 6 threads. In order to +# enable I/O threads use the following configuration directive: +# +# io-threads 4 +# +# Setting io-threads to 1 will just use the main thread as usual. +# When I/O threads are enabled, we only use threads for writes, that is +# to thread the write(2) syscall and transfer the client buffers to the +# socket. However it is also possible to enable threading of reads and +# protocol parsing using the following configuration directive, by setting +# it to yes: +# +# io-threads-do-reads no +# +# Usually threading reads doesn't help much. +# +# NOTE 1: This configuration directive cannot be changed at runtime via +# CONFIG SET. Also, this feature currently does not work when SSL is +# enabled. +# +# NOTE 2: If you want to test the Redis speedup using redis-benchmark, make +# sure you also run the benchmark itself in threaded mode, using the +# --threads option to match the number of Redis threads, otherwise you'll not +# be able to notice the improvements. + +############################ KERNEL OOM CONTROL ############################## + +# On Linux, it is possible to hint the kernel OOM killer on what processes +# should be killed first when out of memory. +# +# Enabling this feature makes Redis actively control the oom_score_adj value +# for all its processes, depending on their role. The default scores will +# attempt to have background child processes killed before all others, and +# replicas killed before masters. +# +# Redis supports these options: +# +# no: Don't make changes to oom-score-adj (default). +# yes: Alias to "relative" see below. +# absolute: Values in oom-score-adj-values are written as is to the kernel. +# relative: Values are used relative to the initial value of oom_score_adj when +# the server starts and are then clamped to a range of -1000 to 1000. +# Because typically the initial value is 0, they will often match the +# absolute values. +oom-score-adj no + +# When oom-score-adj is used, this directive controls the specific values used +# for master, replica and background child processes. Values range -2000 to +# 2000 (higher means more likely to be killed). +# +# Unprivileged processes (not root, and without CAP_SYS_RESOURCE capabilities) +# can freely increase their value, but not decrease it below its initial +# settings. This means that setting oom-score-adj to "relative" and setting the +# oom-score-adj-values to positive values will always succeed. +oom-score-adj-values 0 200 800 + + +#################### KERNEL transparent hugepage CONTROL ###################### + +# Usually the kernel Transparent Huge Pages control is set to "madvise" or +# or "never" by default (/sys/kernel/mm/transparent_hugepage/enabled), in which +# case this config has no effect. On systems in which it is set to "always", +# redis will attempt to disable it specifically for the redis process in order +# to avoid latency problems specifically with fork(2) and CoW. +# If for some reason you prefer to keep it enabled, you can set this config to +# "no" and the kernel global to "always". + +disable-thp yes + +############################## APPEND ONLY MODE ############################### + +# By default Redis asynchronously dumps the dataset on disk. This mode is +# good enough in many applications, but an issue with the Redis process or +# a power outage may result into a few minutes of writes lost (depending on +# the configured save points). +# +# The Append Only File is an alternative persistence mode that provides +# much better durability. For instance using the default data fsync policy +# (see later in the config file) Redis can lose just one second of writes in a +# dramatic event like a server power outage, or a single write if something +# wrong with the Redis process itself happens, but the operating system is +# still running correctly. +# +# AOF and RDB persistence can be enabled at the same time without problems. +# If the AOF is enabled on startup Redis will load the AOF, that is the file +# with the better durability guarantees. +# +# Please check https://redis.io/topics/persistence for more information. + +appendonly no + +# The base name of the append only file. +# +# Redis 7 and newer use a set of append-only files to persist the dataset +# and changes applied to it. There are two basic types of files in use: +# +# - Base files, which are a snapshot representing the complete state of the +# dataset at the time the file was created. Base files can be either in +# the form of RDB (binary serialized) or AOF (textual commands). +# - Incremental files, which contain additional commands that were applied +# to the dataset following the previous file. +# +# In addition, manifest files are used to track the files and the order in +# which they were created and should be applied. +# +# Append-only file names are created by Redis following a specific pattern. +# The file name's prefix is based on the 'appendfilename' configuration +# parameter, followed by additional information about the sequence and type. +# +# For example, if appendfilename is set to appendonly.aof, the following file +# names could be derived: +# +# - appendonly.aof.1.base.rdb as a base file. +# - appendonly.aof.1.incr.aof, appendonly.aof.2.incr.aof as incremental files. +# - appendonly.aof.manifest as a manifest file. + +appendfilename "appendonly.aof" + +# For convenience, Redis stores all persistent append-only files in a dedicated +# directory. The name of the directory is determined by the appenddirname +# configuration parameter. + +appenddirname "appendonlydir" + +# The fsync() call tells the Operating System to actually write data on disk +# instead of waiting for more data in the output buffer. Some OS will really flush +# data on disk, some other OS will just try to do it ASAP. +# +# Redis supports three different modes: +# +# no: don't fsync, just let the OS flush the data when it wants. Faster. +# always: fsync after every write to the append only log. Slow, Safest. +# everysec: fsync only one time every second. Compromise. +# +# The default is "everysec", as that's usually the right compromise between +# speed and data safety. It's up to you to understand if you can relax this to +# "no" that will let the operating system flush the output buffer when +# it wants, for better performances (but if you can live with the idea of +# some data loss consider the default persistence mode that's snapshotting), +# or on the contrary, use "always" that's very slow but a bit safer than +# everysec. +# +# More details please check the following article: +# http://antirez.com/post/redis-persistence-demystified.html +# +# If unsure, use "everysec". + +# appendfsync always +appendfsync everysec +# appendfsync no + +# When the AOF fsync policy is set to always or everysec, and a background +# saving process (a background save or AOF log background rewriting) is +# performing a lot of I/O against the disk, in some Linux configurations +# Redis may block too long on the fsync() call. Note that there is no fix for +# this currently, as even performing fsync in a different thread will block +# our synchronous write(2) call. +# +# In order to mitigate this problem it's possible to use the following option +# that will prevent fsync() from being called in the main process while a +# BGSAVE or BGREWRITEAOF is in progress. +# +# This means that while another child is saving, the durability of Redis is +# the same as "appendfsync no". In practical terms, this means that it is +# possible to lose up to 30 seconds of log in the worst scenario (with the +# default Linux settings). +# +# If you have latency problems turn this to "yes". Otherwise leave it as +# "no" that is the safest pick from the point of view of durability. + +no-appendfsync-on-rewrite no + +# Automatic rewrite of the append only file. +# Redis is able to automatically rewrite the log file implicitly calling +# BGREWRITEAOF when the AOF log size grows by the specified percentage. +# +# This is how it works: Redis remembers the size of the AOF file after the +# latest rewrite (if no rewrite has happened since the restart, the size of +# the AOF at startup is used). +# +# This base size is compared to the current size. If the current size is +# bigger than the specified percentage, the rewrite is triggered. Also +# you need to specify a minimal size for the AOF file to be rewritten, this +# is useful to avoid rewriting the AOF file even if the percentage increase +# is reached but it is still pretty small. +# +# Specify a percentage of zero in order to disable the automatic AOF +# rewrite feature. + +auto-aof-rewrite-percentage 100 +auto-aof-rewrite-min-size 64mb + +# An AOF file may be found to be truncated at the end during the Redis +# startup process, when the AOF data gets loaded back into memory. +# This may happen when the system where Redis is running +# crashes, especially when an ext4 filesystem is mounted without the +# data=ordered option (however this can't happen when Redis itself +# crashes or aborts but the operating system still works correctly). +# +# Redis can either exit with an error when this happens, or load as much +# data as possible (the default now) and start if the AOF file is found +# to be truncated at the end. The following option controls this behavior. +# +# If aof-load-truncated is set to yes, a truncated AOF file is loaded and +# the Redis server starts emitting a log to inform the user of the event. +# Otherwise if the option is set to no, the server aborts with an error +# and refuses to start. When the option is set to no, the user requires +# to fix the AOF file using the "redis-check-aof" utility before to restart +# the server. +# +# Note that if the AOF file will be found to be corrupted in the middle +# the server will still exit with an error. This option only applies when +# Redis will try to read more data from the AOF file but not enough bytes +# will be found. +aof-load-truncated yes + +# Redis can create append-only base files in either RDB or AOF formats. Using +# the RDB format is always faster and more efficient, and disabling it is only +# supported for backward compatibility purposes. +aof-use-rdb-preamble yes + +# Redis supports recording timestamp annotations in the AOF to support restoring +# the data from a specific point-in-time. However, using this capability changes +# the AOF format in a way that may not be compatible with existing AOF parsers. +aof-timestamp-enabled no + +################################ SHUTDOWN ##################################### + +# Maximum time to wait for replicas when shutting down, in seconds. +# +# During shut down, a grace period allows any lagging replicas to catch up with +# the latest replication offset before the master exists. This period can +# prevent data loss, especially for deployments without configured disk backups. +# +# The 'shutdown-timeout' value is the grace period's duration in seconds. It is +# only applicable when the instance has replicas. To disable the feature, set +# the value to 0. +# +# shutdown-timeout 10 + +# When Redis receives a SIGINT or SIGTERM, shutdown is initiated and by default +# an RDB snapshot is written to disk in a blocking operation if save points are configured. +# The options used on signaled shutdown can include the following values: +# default: Saves RDB snapshot only if save points are configured. +# Waits for lagging replicas to catch up. +# save: Forces a DB saving operation even if no save points are configured. +# nosave: Prevents DB saving operation even if one or more save points are configured. +# now: Skips waiting for lagging replicas. +# force: Ignores any errors that would normally prevent the server from exiting. +# +# Any combination of values is allowed as long as "save" and "nosave" are not set simultaneously. +# Example: "nosave force now" +# +# shutdown-on-sigint default +# shutdown-on-sigterm default + +################ NON-DETERMINISTIC LONG BLOCKING COMMANDS ##################### + +# Maximum time in milliseconds for EVAL scripts, functions and in some cases +# modules' commands before Redis can start processing or rejecting other clients. +# +# If the maximum execution time is reached Redis will start to reply to most +# commands with a BUSY error. +# +# In this state Redis will only allow a handful of commands to be executed. +# For instance, SCRIPT KILL, FUNCTION KILL, SHUTDOWN NOSAVE and possibly some +# module specific 'allow-busy' commands. +# +# SCRIPT KILL and FUNCTION KILL will only be able to stop a script that did not +# yet call any write commands, so SHUTDOWN NOSAVE may be the only way to stop +# the server in the case a write command was already issued by the script when +# the user doesn't want to wait for the natural termination of the script. +# +# The default is 5 seconds. It is possible to set it to 0 or a negative value +# to disable this mechanism (uninterrupted execution). Note that in the past +# this config had a different name, which is now an alias, so both of these do +# the same: +# lua-time-limit 5000 +# busy-reply-threshold 5000 + +################################ REDIS CLUSTER ############################### + +# Normal Redis instances can't be part of a Redis Cluster; only nodes that are +# started as cluster nodes can. In order to start a Redis instance as a +# cluster node enable the cluster support uncommenting the following: +# +# cluster-enabled yes + +# Every cluster node has a cluster configuration file. This file is not +# intended to be edited by hand. It is created and updated by Redis nodes. +# Every Redis Cluster node requires a different cluster configuration file. +# Make sure that instances running in the same system do not have +# overlapping cluster configuration file names. +# +# cluster-config-file nodes-6379.conf + +# Cluster node timeout is the amount of milliseconds a node must be unreachable +# for it to be considered in failure state. +# Most other internal time limits are a multiple of the node timeout. +# +# cluster-node-timeout 15000 + +# The cluster port is the port that the cluster bus will listen for inbound connections on. When set +# to the default value, 0, it will be bound to the command port + 10000. Setting this value requires +# you to specify the cluster bus port when executing cluster meet. +# cluster-port 0 + +# A replica of a failing master will avoid to start a failover if its data +# looks too old. +# +# There is no simple way for a replica to actually have an exact measure of +# its "data age", so the following two checks are performed: +# +# 1) If there are multiple replicas able to failover, they exchange messages +# in order to try to give an advantage to the replica with the best +# replication offset (more data from the master processed). +# Replicas will try to get their rank by offset, and apply to the start +# of the failover a delay proportional to their rank. +# +# 2) Every single replica computes the time of the last interaction with +# its master. This can be the last ping or command received (if the master +# is still in the "connected" state), or the time that elapsed since the +# disconnection with the master (if the replication link is currently down). +# If the last interaction is too old, the replica will not try to failover +# at all. +# +# The point "2" can be tuned by user. Specifically a replica will not perform +# the failover if, since the last interaction with the master, the time +# elapsed is greater than: +# +# (node-timeout * cluster-replica-validity-factor) + repl-ping-replica-period +# +# So for example if node-timeout is 30 seconds, and the cluster-replica-validity-factor +# is 10, and assuming a default repl-ping-replica-period of 10 seconds, the +# replica will not try to failover if it was not able to talk with the master +# for longer than 310 seconds. +# +# A large cluster-replica-validity-factor may allow replicas with too old data to failover +# a master, while a too small value may prevent the cluster from being able to +# elect a replica at all. +# +# For maximum availability, it is possible to set the cluster-replica-validity-factor +# to a value of 0, which means, that replicas will always try to failover the +# master regardless of the last time they interacted with the master. +# (However they'll always try to apply a delay proportional to their +# offset rank). +# +# Zero is the only value able to guarantee that when all the partitions heal +# the cluster will always be able to continue. +# +# cluster-replica-validity-factor 10 + +# Cluster replicas are able to migrate to orphaned masters, that are masters +# that are left without working replicas. This improves the cluster ability +# to resist to failures as otherwise an orphaned master can't be failed over +# in case of failure if it has no working replicas. +# +# Replicas migrate to orphaned masters only if there are still at least a +# given number of other working replicas for their old master. This number +# is the "migration barrier". A migration barrier of 1 means that a replica +# will migrate only if there is at least 1 other working replica for its master +# and so forth. It usually reflects the number of replicas you want for every +# master in your cluster. +# +# Default is 1 (replicas migrate only if their masters remain with at least +# one replica). To disable migration just set it to a very large value or +# set cluster-allow-replica-migration to 'no'. +# A value of 0 can be set but is useful only for debugging and dangerous +# in production. +# +# cluster-migration-barrier 1 + +# Turning off this option allows to use less automatic cluster configuration. +# It both disables migration to orphaned masters and migration from masters +# that became empty. +# +# Default is 'yes' (allow automatic migrations). +# +# cluster-allow-replica-migration yes + +# By default Redis Cluster nodes stop accepting queries if they detect there +# is at least a hash slot uncovered (no available node is serving it). +# This way if the cluster is partially down (for example a range of hash slots +# are no longer covered) all the cluster becomes, eventually, unavailable. +# It automatically returns available as soon as all the slots are covered again. +# +# However sometimes you want the subset of the cluster which is working, +# to continue to accept queries for the part of the key space that is still +# covered. In order to do so, just set the cluster-require-full-coverage +# option to no. +# +# cluster-require-full-coverage yes + +# This option, when set to yes, prevents replicas from trying to failover its +# master during master failures. However the replica can still perform a +# manual failover, if forced to do so. +# +# This is useful in different scenarios, especially in the case of multiple +# data center operations, where we want one side to never be promoted if not +# in the case of a total DC failure. +# +# cluster-replica-no-failover no + +# This option, when set to yes, allows nodes to serve read traffic while the +# cluster is in a down state, as long as it believes it owns the slots. +# +# This is useful for two cases. The first case is for when an application +# doesn't require consistency of data during node failures or network partitions. +# One example of this is a cache, where as long as the node has the data it +# should be able to serve it. +# +# The second use case is for configurations that don't meet the recommended +# three shards but want to enable cluster mode and scale later. A +# master outage in a 1 or 2 shard configuration causes a read/write outage to the +# entire cluster without this option set, with it set there is only a write outage. +# Without a quorum of masters, slot ownership will not change automatically. +# +# cluster-allow-reads-when-down no + +# This option, when set to yes, allows nodes to serve pubsub shard traffic while +# the cluster is in a down state, as long as it believes it owns the slots. +# +# This is useful if the application would like to use the pubsub feature even when +# the cluster global stable state is not OK. If the application wants to make sure only +# one shard is serving a given channel, this feature should be kept as yes. +# +# cluster-allow-pubsubshard-when-down yes + +# Cluster link send buffer limit is the limit on the memory usage of an individual +# cluster bus link's send buffer in bytes. Cluster links would be freed if they exceed +# this limit. This is to primarily prevent send buffers from growing unbounded on links +# toward slow peers (E.g. PubSub messages being piled up). +# This limit is disabled by default. Enable this limit when 'mem_cluster_links' INFO field +# and/or 'send-buffer-allocated' entries in the 'CLUSTER LINKS` command output continuously increase. +# Minimum limit of 1gb is recommended so that cluster link buffer can fit in at least a single +# PubSub message by default. (client-query-buffer-limit default value is 1gb) +# +# cluster-link-sendbuf-limit 0 + +# Clusters can configure their announced hostname using this config. This is a common use case for +# applications that need to use TLS Server Name Indication (SNI) or dealing with DNS based +# routing. By default this value is only shown as additional metadata in the CLUSTER SLOTS +# command, but can be changed using 'cluster-preferred-endpoint-type' config. This value is +# communicated along the clusterbus to all nodes, setting it to an empty string will remove +# the hostname and also propagate the removal. +# +# cluster-announce-hostname "" + +# Clusters can advertise how clients should connect to them using either their IP address, +# a user defined hostname, or by declaring they have no endpoint. Which endpoint is +# shown as the preferred endpoint is set by using the cluster-preferred-endpoint-type +# config with values 'ip', 'hostname', or 'unknown-endpoint'. This value controls how +# the endpoint returned for MOVED/ASKING requests as well as the first field of CLUSTER SLOTS. +# If the preferred endpoint type is set to hostname, but no announced hostname is set, a '?' +# will be returned instead. +# +# When a cluster advertises itself as having an unknown endpoint, it's indicating that +# the server doesn't know how clients can reach the cluster. This can happen in certain +# networking situations where there are multiple possible routes to the node, and the +# server doesn't know which one the client took. In this case, the server is expecting +# the client to reach out on the same endpoint it used for making the last request, but use +# the port provided in the response. +# +# cluster-preferred-endpoint-type ip + +# In order to setup your cluster make sure to read the documentation +# available at https://redis.io web site. + +########################## CLUSTER DOCKER/NAT support ######################## + +# In certain deployments, Redis Cluster nodes address discovery fails, because +# addresses are NAT-ted or because ports are forwarded (the typical case is +# Docker and other containers). +# +# In order to make Redis Cluster working in such environments, a static +# configuration where each node knows its public address is needed. The +# following four options are used for this scope, and are: +# +# * cluster-announce-ip +# * cluster-announce-port +# * cluster-announce-tls-port +# * cluster-announce-bus-port +# +# Each instructs the node about its address, client ports (for connections +# without and with TLS) and cluster message bus port. The information is then +# published in the header of the bus packets so that other nodes will be able to +# correctly map the address of the node publishing the information. +# +# If cluster-tls is set to yes and cluster-announce-tls-port is omitted or set +# to zero, then cluster-announce-port refers to the TLS port. Note also that +# cluster-announce-tls-port has no effect if cluster-tls is set to no. +# +# If the above options are not used, the normal Redis Cluster auto-detection +# will be used instead. +# +# Note that when remapped, the bus port may not be at the fixed offset of +# clients port + 10000, so you can specify any port and bus-port depending +# on how they get remapped. If the bus-port is not set, a fixed offset of +# 10000 will be used as usual. +# +# Example: +# +# cluster-announce-ip 10.1.1.5 +# cluster-announce-tls-port 6379 +# cluster-announce-port 0 +# cluster-announce-bus-port 6380 + +################################## SLOW LOG ################################### + +# The Redis Slow Log is a system to log queries that exceeded a specified +# execution time. The execution time does not include the I/O operations +# like talking with the client, sending the reply and so forth, +# but just the time needed to actually execute the command (this is the only +# stage of command execution where the thread is blocked and can not serve +# other requests in the meantime). +# +# You can configure the slow log with two parameters: one tells Redis +# what is the execution time, in microseconds, to exceed in order for the +# command to get logged, and the other parameter is the length of the +# slow log. When a new command is logged the oldest one is removed from the +# queue of logged commands. + +# The following time is expressed in microseconds, so 1000000 is equivalent +# to one second. Note that a negative number disables the slow log, while +# a value of zero forces the logging of every command. +slowlog-log-slower-than 10000 + +# There is no limit to this length. Just be aware that it will consume memory. +# You can reclaim memory used by the slow log with SLOWLOG RESET. +slowlog-max-len 128 + +################################ LATENCY MONITOR ############################## + +# The Redis latency monitoring subsystem samples different operations +# at runtime in order to collect data related to possible sources of +# latency of a Redis instance. +# +# Via the LATENCY command this information is available to the user that can +# print graphs and obtain reports. +# +# The system only logs operations that were performed in a time equal or +# greater than the amount of milliseconds specified via the +# latency-monitor-threshold configuration directive. When its value is set +# to zero, the latency monitor is turned off. +# +# By default latency monitoring is disabled since it is mostly not needed +# if you don't have latency issues, and collecting data has a performance +# impact, that while very small, can be measured under big load. Latency +# monitoring can easily be enabled at runtime using the command +# "CONFIG SET latency-monitor-threshold " if needed. +latency-monitor-threshold 0 + +################################ LATENCY TRACKING ############################## + +# The Redis extended latency monitoring tracks the per command latencies and enables +# exporting the percentile distribution via the INFO latencystats command, +# and cumulative latency distributions (histograms) via the LATENCY command. +# +# By default, the extended latency monitoring is enabled since the overhead +# of keeping track of the command latency is very small. +# latency-tracking yes + +# By default the exported latency percentiles via the INFO latencystats command +# are the p50, p99, and p999. +# latency-tracking-info-percentiles 50 99 99.9 + +############################# EVENT NOTIFICATION ############################## + +# Redis can notify Pub/Sub clients about events happening in the key space. +# This feature is documented at https://redis.io/topics/notifications +# +# For instance if keyspace events notification is enabled, and a client +# performs a DEL operation on key "foo" stored in the Database 0, two +# messages will be published via Pub/Sub: +# +# PUBLISH __keyspace@0__:foo del +# PUBLISH __keyevent@0__:del foo +# +# It is possible to select the events that Redis will notify among a set +# of classes. Every class is identified by a single character: +# +# K Keyspace events, published with __keyspace@__ prefix. +# E Keyevent events, published with __keyevent@__ prefix. +# g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ... +# $ String commands +# l List commands +# s Set commands +# h Hash commands +# z Sorted set commands +# x Expired events (events generated every time a key expires) +# e Evicted events (events generated when a key is evicted for maxmemory) +# n New key events (Note: not included in the 'A' class) +# t Stream commands +# d Module key type events +# m Key-miss events (Note: It is not included in the 'A' class) +# A Alias for g$lshzxetd, so that the "AKE" string means all the events +# (Except key-miss events which are excluded from 'A' due to their +# unique nature). +# +# The "notify-keyspace-events" takes as argument a string that is composed +# of zero or multiple characters. The empty string means that notifications +# are disabled. +# +# Example: to enable list and generic events, from the point of view of the +# event name, use: +# +# notify-keyspace-events Elg +# +# Example 2: to get the stream of the expired keys subscribing to channel +# name __keyevent@0__:expired use: +# +# notify-keyspace-events Ex +# +# By default all notifications are disabled because most users don't need +# this feature and the feature has some overhead. Note that if you don't +# specify at least one of K or E, no events will be delivered. +notify-keyspace-events "" + +############################### ADVANCED CONFIG ############################### + +# Hashes are encoded using a memory efficient data structure when they have a +# small number of entries, and the biggest entry does not exceed a given +# threshold. These thresholds can be configured using the following directives. +hash-max-listpack-entries 512 +hash-max-listpack-value 64 + +# Lists are also encoded in a special way to save a lot of space. +# The number of entries allowed per internal list node can be specified +# as a fixed maximum size or a maximum number of elements. +# For a fixed maximum size, use -5 through -1, meaning: +# -5: max size: 64 Kb <-- not recommended for normal workloads +# -4: max size: 32 Kb <-- not recommended +# -3: max size: 16 Kb <-- probably not recommended +# -2: max size: 8 Kb <-- good +# -1: max size: 4 Kb <-- good +# Positive numbers mean store up to _exactly_ that number of elements +# per list node. +# The highest performing option is usually -2 (8 Kb size) or -1 (4 Kb size), +# but if your use case is unique, adjust the settings as necessary. +list-max-listpack-size -2 + +# Lists may also be compressed. +# Compress depth is the number of quicklist ziplist nodes from *each* side of +# the list to *exclude* from compression. The head and tail of the list +# are always uncompressed for fast push/pop operations. Settings are: +# 0: disable all list compression +# 1: depth 1 means "don't start compressing until after 1 node into the list, +# going from either the head or tail" +# So: [head]->node->node->...->node->[tail] +# [head], [tail] will always be uncompressed; inner nodes will compress. +# 2: [head]->[next]->node->node->...->node->[prev]->[tail] +# 2 here means: don't compress head or head->next or tail->prev or tail, +# but compress all nodes between them. +# 3: [head]->[next]->[next]->node->node->...->node->[prev]->[prev]->[tail] +# etc. +list-compress-depth 0 + +# Sets have a special encoding in just one case: when a set is composed +# of just strings that happen to be integers in radix 10 in the range +# of 64 bit signed integers. +# The following configuration setting sets the limit in the size of the +# set in order to use this special memory saving encoding. +set-max-intset-entries 512 + +# Similarly to hashes and lists, sorted sets are also specially encoded in +# order to save a lot of space. This encoding is only used when the length and +# elements of a sorted set are below the following limits: +zset-max-listpack-entries 128 +zset-max-listpack-value 64 + +# HyperLogLog sparse representation bytes limit. The limit includes the +# 16 bytes header. When an HyperLogLog using the sparse representation crosses +# this limit, it is converted into the dense representation. +# +# A value greater than 16000 is totally useless, since at that point the +# dense representation is more memory efficient. +# +# The suggested value is ~ 3000 in order to have the benefits of +# the space efficient encoding without slowing down too much PFADD, +# which is O(N) with the sparse encoding. The value can be raised to +# ~ 10000 when CPU is not a concern, but space is, and the data set is +# composed of many HyperLogLogs with cardinality in the 0 - 15000 range. +hll-sparse-max-bytes 3000 + +# Streams macro node max size / items. The stream data structure is a radix +# tree of big nodes that encode multiple items inside. Using this configuration +# it is possible to configure how big a single node can be in bytes, and the +# maximum number of items it may contain before switching to a new node when +# appending new stream entries. If any of the following settings are set to +# zero, the limit is ignored, so for instance it is possible to set just a +# max entries limit by setting max-bytes to 0 and max-entries to the desired +# value. +stream-node-max-bytes 4096 +stream-node-max-entries 100 + +# Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in +# order to help rehashing the main Redis hash table (the one mapping top-level +# keys to values). The hash table implementation Redis uses (see dict.c) +# performs a lazy rehashing: the more operation you run into a hash table +# that is rehashing, the more rehashing "steps" are performed, so if the +# server is idle the rehashing is never complete and some more memory is used +# by the hash table. +# +# The default is to use this millisecond 10 times every second in order to +# actively rehash the main dictionaries, freeing memory when possible. +# +# If unsure: +# use "activerehashing no" if you have hard latency requirements and it is +# not a good thing in your environment that Redis can reply from time to time +# to queries with 2 milliseconds delay. +# +# use "activerehashing yes" if you don't have such hard requirements but +# want to free memory asap when possible. +activerehashing yes + +# The client output buffer limits can be used to force disconnection of clients +# that are not reading data from the server fast enough for some reason (a +# common reason is that a Pub/Sub client can't consume messages as fast as the +# publisher can produce them). +# +# The limit can be set differently for the three different classes of clients: +# +# normal -> normal clients including MONITOR clients +# replica -> replica clients +# pubsub -> clients subscribed to at least one pubsub channel or pattern +# +# The syntax of every client-output-buffer-limit directive is the following: +# +# client-output-buffer-limit +# +# A client is immediately disconnected once the hard limit is reached, or if +# the soft limit is reached and remains reached for the specified number of +# seconds (continuously). +# So for instance if the hard limit is 32 megabytes and the soft limit is +# 16 megabytes / 10 seconds, the client will get disconnected immediately +# if the size of the output buffers reach 32 megabytes, but will also get +# disconnected if the client reaches 16 megabytes and continuously overcomes +# the limit for 10 seconds. +# +# By default normal clients are not limited because they don't receive data +# without asking (in a push way), but just after a request, so only +# asynchronous clients may create a scenario where data is requested faster +# than it can read. +# +# Instead there is a default limit for pubsub and replica clients, since +# subscribers and replicas receive data in a push fashion. +# +# Note that it doesn't make sense to set the replica clients output buffer +# limit lower than the repl-backlog-size config (partial sync will succeed +# and then replica will get disconnected). +# Such a configuration is ignored (the size of repl-backlog-size will be used). +# This doesn't have memory consumption implications since the replica client +# will share the backlog buffers memory. +# +# Both the hard or the soft limit can be disabled by setting them to zero. +client-output-buffer-limit normal 0 0 0 +client-output-buffer-limit replica 256mb 64mb 60 +client-output-buffer-limit pubsub 32mb 8mb 60 + +# Client query buffers accumulate new commands. They are limited to a fixed +# amount by default in order to avoid that a protocol desynchronization (for +# instance due to a bug in the client) will lead to unbound memory usage in +# the query buffer. However you can configure it here if you have very special +# needs, such us huge multi/exec requests or alike. +# +# client-query-buffer-limit 1gb + +# In some scenarios client connections can hog up memory leading to OOM +# errors or data eviction. To avoid this we can cap the accumulated memory +# used by all client connections (all pubsub and normal clients). Once we +# reach that limit connections will be dropped by the server freeing up +# memory. The server will attempt to drop the connections using the most +# memory first. We call this mechanism "client eviction". +# +# Client eviction is configured using the maxmemory-clients setting as follows: +# 0 - client eviction is disabled (default) +# +# A memory value can be used for the client eviction threshold, +# for example: +# maxmemory-clients 1g +# +# A percentage value (between 1% and 100%) means the client eviction threshold +# is based on a percentage of the maxmemory setting. For example to set client +# eviction at 5% of maxmemory: +# maxmemory-clients 5% + +# In the Redis protocol, bulk requests, that are, elements representing single +# strings, are normally limited to 512 mb. However you can change this limit +# here, but must be 1mb or greater +# +# proto-max-bulk-len 512mb + +# Redis calls an internal function to perform many background tasks, like +# closing connections of clients in timeout, purging expired keys that are +# never requested, and so forth. +# +# Not all tasks are performed with the same frequency, but Redis checks for +# tasks to perform according to the specified "hz" value. +# +# By default "hz" is set to 10. Raising the value will use more CPU when +# Redis is idle, but at the same time will make Redis more responsive when +# there are many keys expiring at the same time, and timeouts may be +# handled with more precision. +# +# The range is between 1 and 500, however a value over 100 is usually not +# a good idea. Most users should use the default of 10 and raise this up to +# 100 only in environments where very low latency is required. +hz 10 + +# Normally it is useful to have an HZ value which is proportional to the +# number of clients connected. This is useful in order, for instance, to +# avoid too many clients are processed for each background task invocation +# in order to avoid latency spikes. +# +# Since the default HZ value by default is conservatively set to 10, Redis +# offers, and enables by default, the ability to use an adaptive HZ value +# which will temporarily raise when there are many connected clients. +# +# When dynamic HZ is enabled, the actual configured HZ will be used +# as a baseline, but multiples of the configured HZ value will be actually +# used as needed once more clients are connected. In this way an idle +# instance will use very little CPU time while a busy instance will be +# more responsive. +dynamic-hz yes + +# When a child rewrites the AOF file, if the following option is enabled +# the file will be fsync-ed every 4 MB of data generated. This is useful +# in order to commit the file to the disk more incrementally and avoid +# big latency spikes. +aof-rewrite-incremental-fsync yes + +# When redis saves RDB file, if the following option is enabled +# the file will be fsync-ed every 4 MB of data generated. This is useful +# in order to commit the file to the disk more incrementally and avoid +# big latency spikes. +rdb-save-incremental-fsync yes + +# Redis LFU eviction (see maxmemory setting) can be tuned. However it is a good +# idea to start with the default settings and only change them after investigating +# how to improve the performances and how the keys LFU change over time, which +# is possible to inspect via the OBJECT FREQ command. +# +# There are two tunable parameters in the Redis LFU implementation: the +# counter logarithm factor and the counter decay time. It is important to +# understand what the two parameters mean before changing them. +# +# The LFU counter is just 8 bits per key, it's maximum value is 255, so Redis +# uses a probabilistic increment with logarithmic behavior. Given the value +# of the old counter, when a key is accessed, the counter is incremented in +# this way: +# +# 1. A random number R between 0 and 1 is extracted. +# 2. A probability P is calculated as 1/(old_value*lfu_log_factor+1). +# 3. The counter is incremented only if R < P. +# +# The default lfu-log-factor is 10. This is a table of how the frequency +# counter changes with a different number of accesses with different +# logarithmic factors: +# +# +--------+------------+------------+------------+------------+------------+ +# | factor | 100 hits | 1000 hits | 100K hits | 1M hits | 10M hits | +# +--------+------------+------------+------------+------------+------------+ +# | 0 | 104 | 255 | 255 | 255 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# | 1 | 18 | 49 | 255 | 255 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# | 10 | 10 | 18 | 142 | 255 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# | 100 | 8 | 11 | 49 | 143 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# +# NOTE: The above table was obtained by running the following commands: +# +# redis-benchmark -n 1000000 incr foo +# redis-cli object freq foo +# +# NOTE 2: The counter initial value is 5 in order to give new objects a chance +# to accumulate hits. +# +# The counter decay time is the time, in minutes, that must elapse in order +# for the key counter to be divided by two (or decremented if it has a value +# less <= 10). +# +# The default value for the lfu-decay-time is 1. A special value of 0 means to +# decay the counter every time it happens to be scanned. +# +# lfu-log-factor 10 +# lfu-decay-time 1 + +########################### ACTIVE DEFRAGMENTATION ####################### +# +# What is active defragmentation? +# ------------------------------- +# +# Active (online) defragmentation allows a Redis server to compact the +# spaces left between small allocations and deallocations of data in memory, +# thus allowing to reclaim back memory. +# +# Fragmentation is a natural process that happens with every allocator (but +# less so with Jemalloc, fortunately) and certain workloads. Normally a server +# restart is needed in order to lower the fragmentation, or at least to flush +# away all the data and create it again. However thanks to this feature +# implemented by Oran Agra for Redis 4.0 this process can happen at runtime +# in a "hot" way, while the server is running. +# +# Basically when the fragmentation is over a certain level (see the +# configuration options below) Redis will start to create new copies of the +# values in contiguous memory regions by exploiting certain specific Jemalloc +# features (in order to understand if an allocation is causing fragmentation +# and to allocate it in a better place), and at the same time, will release the +# old copies of the data. This process, repeated incrementally for all the keys +# will cause the fragmentation to drop back to normal values. +# +# Important things to understand: +# +# 1. This feature is disabled by default, and only works if you compiled Redis +# to use the copy of Jemalloc we ship with the source code of Redis. +# This is the default with Linux builds. +# +# 2. You never need to enable this feature if you don't have fragmentation +# issues. +# +# 3. Once you experience fragmentation, you can enable this feature when +# needed with the command "CONFIG SET activedefrag yes". +# +# The configuration parameters are able to fine tune the behavior of the +# defragmentation process. If you are not sure about what they mean it is +# a good idea to leave the defaults untouched. + +# Active defragmentation is disabled by default +# activedefrag no + +# Minimum amount of fragmentation waste to start active defrag +# active-defrag-ignore-bytes 100mb + +# Minimum percentage of fragmentation to start active defrag +# active-defrag-threshold-lower 10 + +# Maximum percentage of fragmentation at which we use maximum effort +# active-defrag-threshold-upper 100 + +# Minimal effort for defrag in CPU percentage, to be used when the lower +# threshold is reached +# active-defrag-cycle-min 1 + +# Maximal effort for defrag in CPU percentage, to be used when the upper +# threshold is reached +# active-defrag-cycle-max 25 + +# Maximum number of set/hash/zset/list fields that will be processed from +# the main dictionary scan +# active-defrag-max-scan-fields 1000 + +# Jemalloc background thread for purging will be enabled by default +jemalloc-bg-thread yes + +# It is possible to pin different threads and processes of Redis to specific +# CPUs in your system, in order to maximize the performances of the server. +# This is useful both in order to pin different Redis threads in different +# CPUs, but also in order to make sure that multiple Redis instances running +# in the same host will be pinned to different CPUs. +# +# Normally you can do this using the "taskset" command, however it is also +# possible to this via Redis configuration directly, both in Linux and FreeBSD. +# +# You can pin the server/IO threads, bio threads, aof rewrite child process, and +# the bgsave child process. The syntax to specify the cpu list is the same as +# the taskset command: +# +# Set redis server/io threads to cpu affinity 0,2,4,6: +# server_cpulist 0-7:2 +# +# Set bio threads to cpu affinity 1,3: +# bio_cpulist 1,3 +# +# Set aof rewrite child process to cpu affinity 8,9,10,11: +# aof_rewrite_cpulist 8-11 +# +# Set bgsave child process to cpu affinity 1,10,11 +# bgsave_cpulist 1,10-11 + +# In some cases redis will emit warnings and even refuse to start if it detects +# that the system is in bad state, it is possible to suppress these warnings +# by setting the following config which takes a space delimited list of warnings +# to suppress +# +# ignore-warnings ARM64-COW-BUG diff --git a/appstore/redis/7.4.1/data.yml b/appstore/redis/7.4.1/data.yml new file mode 100644 index 00000000..fcf9b51d --- /dev/null +++ b/appstore/redis/7.4.1/data.yml @@ -0,0 +1,23 @@ +additionalProperties: + formFields: + - default: "/home/redis" + envKey: REDIS_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 6379 + envKey: PANEL_APP_PORT_HTTP + labelZh: 端口 + labelEn: Port + required: true + rule: paramPort + type: number + - default: "" + envKey: REDIS_ROOT_PASSWORD + labelZh: 密码 + labelEn: Password + random: true + required: false + rule: paramComplexity + type: password diff --git a/appstore/redis/7.4.1/docker-compose.yml b/appstore/redis/7.4.1/docker-compose.yml new file mode 100644 index 00000000..ea836be9 --- /dev/null +++ b/appstore/redis/7.4.1/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + 1panel-network: + external: true +services: + redis: + command: "sh -c ' if [ -z \"${REDIS_ROOT_PASSWORD}\" ]; then\n redis-server /etc/redis/redis.conf\n\ + else\n redis-server /etc/redis/redis.conf --requirepass ${REDIS_ROOT_PASSWORD}\n\ + fi'\n" + container_name: redis + image: redis:7.4.1-alpine + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:6379 + restart: always + volumes: + - ${REDIS_ROOT_PATH}/data:/data + - ${REDIS_ROOT_PATH}/config/redis.conf:/etc/redis/redis.conf + - ${REDIS_ROOT_PATH}/logs:/logs diff --git a/appstore/redis/7.4.1/envs/default.env b/appstore/redis/7.4.1/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/redis/7.4.1/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/redis/7.4.1/envs/global.env b/appstore/redis/7.4.1/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/redis/7.4.1/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/redis/7.4.1/scripts/init.sh b/appstore/redis/7.4.1/scripts/init.sh new file mode 100644 index 00000000..d10108b1 --- /dev/null +++ b/appstore/redis/7.4.1/scripts/init.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + mkdir -p "$REDIS_ROOT_PATH" + + mkdir -p "$REDIS_ROOT_PATH/data" + mkdir -p "$REDIS_ROOT_PATH/config" + mkdir -p "$REDIS_ROOT_PATH/logs" + + cp ./config/redis.conf "$REDIS_ROOT_PATH/config/redis.conf" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/redis/7.4.1/scripts/uninstall.sh b/appstore/redis/7.4.1/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/redis/7.4.1/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/redis/7.4.1/scripts/upgrade.sh b/appstore/redis/7.4.1/scripts/upgrade.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/redis/7.4.1/scripts/upgrade.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/redis/README.md b/appstore/redis/README.md new file mode 100644 index 00000000..ed8cd80c --- /dev/null +++ b/appstore/redis/README.md @@ -0,0 +1,23 @@ +# Redis + +Redis(Remote Dictionary Server)是一种开源的内存数据库,通常用作缓存系统或键值存储数据库。 + +![Redis](https://raw.githubusercontent.com/docker-library/docs/0e42ee108b46e1ba6333e9eb44201b8f26c4032d/redis/logo.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Redis 通常被称为数据结构服务器。这意味着,Redis 可通过一系列命令访问可变数据结构,这些命令通过 TCP +套接字和简单协议以服务器-客户端模式发送。因此,不同进程可以通过共享方式查询和修改相同的数据结构。 + +Redis 中的数据结构具有一些特殊属性: + ++ Redis 会将它们存储在磁盘上,即使它们总是在服务器内存中提供和修改。这意味着 Redis 不仅速度快,而且不易挥发。 ++ 数据结构的实现强调内存效率,因此与使用高级编程语言建模的相同数据结构相比,Redis 中的数据结构使用的内存可能更少。 ++ Redis 提供了许多在数据库中自然能找到的功能,如复制、可调整的耐用性级别、集群和高可用性。 + 另一个很好的例子是,将 Redis 视为更复杂版本的 memcached,其中的操作不仅仅是 SET 和 GET,而是处理复杂数据类型(如列表、集合、有序数据结构等)的操作。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/redis/data.yml b/appstore/redis/data.yml new file mode 100644 index 00000000..e85e551a --- /dev/null +++ b/appstore/redis/data.yml @@ -0,0 +1,16 @@ +additionalProperties: + key: redis + name: Redis + tags: + - Database + - Runtime + - Storage + - Local + shortDescZh: 高性能的开源键值数据库 + shortDescEn: High-performance key-value database + type: runtime + crossVersionUpdate: true + limit: 0 + website: https://redis.io/ + github: https://github.com/redis/redis/ + document: https://redis.io/docs/ diff --git a/appstore/redis/logo.png b/appstore/redis/logo.png new file mode 100644 index 00000000..f8b930e9 Binary files /dev/null and b/appstore/redis/logo.png differ diff --git a/appstore/rsshub/2024-11-28/.env b/appstore/rsshub/2024-11-28/.env new file mode 100644 index 00000000..172f9b1e --- /dev/null +++ b/appstore/rsshub/2024-11-28/.env @@ -0,0 +1,30 @@ +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=1200 + +# 访问密钥 +ACCESS_KEY= + +# 缓存类型 [必填] +CACHE_TYPE=memory + +# Redis URL 地址 (仅当缓存类型为 Redis 时) +REDIS_URL=redis://127.0.0.1:6379/ + +# 最大缓存数量 (仅当缓存类型为内存时) +MEMORY_MAX=256 + +# 路由缓存过期时间 (秒) [必填] +CACHE_EXPIRE=300 + +# 内容缓存过期时间 (秒) [必填] +CACHE_CONTENT_EXPIRE=300 + +# 代理 URL 地址 +PROXY_URI= + +# 代理认证 (仅支持 Basic 认证) +PROXY_AUTH= + +# 代理 URL 正则表达式 +PROXY_URL_REGEX=.* + diff --git a/appstore/rsshub/2024-11-28/data.yml b/appstore/rsshub/2024-11-28/data.yml new file mode 100644 index 00000000..3d0b87f9 --- /dev/null +++ b/appstore/rsshub/2024-11-28/data.yml @@ -0,0 +1,78 @@ +additionalProperties: + formFields: + - default: 1200 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: ACCESS_KEY + labelZh: 访问密钥 + labelEn: Access key + required: false + type: password + - default: "memory" + edit: true + envKey: CACHE_TYPE + labelZh: 缓存类型 + labelEn: Cache type + required: true + type: select + values: + - label: 内存 + value: "memory" + - label: Redis + value: "redis" + - default: "redis://127.0.0.1:6379/" + edit: true + envKey: REDIS_URL + labelZh: Redis URL 地址 (仅当缓存类型为 Redis 时) + labelEn: Redis URL address (only when the cache type is Redis) + required: false + type: text + - default: 256 + edit: true + envKey: MEMORY_MAX + labelZh: 最大缓存数量 (仅当缓存类型为内存时) + labelEn: Maximum number of caches (only when the cache type is memory) + required: false + type: number + - default: 300 + edit: true + envKey: CACHE_EXPIRE + labelZh: 路由缓存过期时间 (秒) + labelEn: Route cache expiration time (seconds) + required: true + type: number + - default: 300 + edit: true + envKey: CACHE_CONTENT_EXPIRE + labelZh: 内容缓存过期时间 (秒) + labelEn: Content cache expiration time (seconds) + required: true + type: number + - default: "" + edit: true + envKey: PROXY_URI + labelZh: 代理 URL 地址 + labelEn: Proxy URL address + required: false + type: text + - default: "" + edit: true + envKey: PROXY_AUTH + labelZh: 代理认证 (仅支持 Basic 认证) + labelEn: Proxy authentication (only supports Basic authentication) + required: false + type: text + - default: ".*" + edit: true + envKey: PROXY_URL_REGEX + labelZh: 代理 URL 正则表达式 + labelEn: Proxy URL regular expression + required: false + type: text diff --git a/appstore/rsshub/2024-11-28/docker-compose.yml b/appstore/rsshub/2024-11-28/docker-compose.yml new file mode 100644 index 00000000..4793aedb --- /dev/null +++ b/appstore/rsshub/2024-11-28/docker-compose.yml @@ -0,0 +1,67 @@ +networks: + 1panel-network: + external: true +services: + browserless: + container_name: browserless-rsshub + expose: + - 3000 + healthcheck: + interval: 30s + retries: 3 + test: + - CMD + - curl + - -f + - http://localhost:3000/pressure + timeout: 10s + image: browserless/chrome + labels: + createdBy: Apps + networks: + - 1panel-network + restart: always + ulimits: + core: + hard: 0 + soft: 0 + rsshub: + container_name: rsshub-rsshub + depends_on: + - browserless + env_file: + - ./envs/global.env + - .env + environment: + - NODE_ENV=production + - PUPPETEER_WS_ENDPOINT=ws://browserless:3000 + - PORT=1200 + - LISTEN_INADDR_ANY=1 + - REQUEST_RETRY=2 + - REQUEST_TIMEOUT=3000 + - ALLOW_ORIGIN=* + - CACHE_CONTENT_EXPIRE=360 + - CACHE_EXPIRE=300 + - MEMORY_MAX=256 + - LOGGER_LEVEL=info + - NO_LOGFILES=false + - DISALLOW_ROBOT=true + - ENABLE_CLUSTER=false + - NODE_NAME=rsshub + healthcheck: + interval: 30s + retries: 3 + test: + - CMD + - curl + - -f + - http://localhost:1200/healthz?key=${ACCESS_KEY} + timeout: 10s + image: diygod/rsshub:2024-11-28 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:1200 + restart: always diff --git a/appstore/rsshub/2024-11-28/envs/default.env b/appstore/rsshub/2024-11-28/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/rsshub/2024-11-28/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/rsshub/2024-11-28/envs/global.env b/appstore/rsshub/2024-11-28/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/rsshub/2024-11-28/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/rsshub/2024-11-28/scripts/init.sh b/appstore/rsshub/2024-11-28/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/rsshub/2024-11-28/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/rsshub/2024-11-28/scripts/uninstall.sh b/appstore/rsshub/2024-11-28/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/rsshub/2024-11-28/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/rsshub/2024-11-28/scripts/upgrade.sh b/appstore/rsshub/2024-11-28/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/rsshub/2024-11-28/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/rsshub/README.md b/appstore/rsshub/README.md new file mode 100644 index 00000000..d99b6a8b --- /dev/null +++ b/appstore/rsshub/README.md @@ -0,0 +1,63 @@ +# RssHub + +万物皆可 RSS + +![RssHub](https://file.lifebus.top/imgs/rsshub_cover.png) + +从任何内容生成 RSS/Atom/JSON 订阅源 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 安装说明 + +我们建议您使用 Redis 作为缓存数据库,以提高性能。 + +> `Redis 缓存地址` 配置 + +如果您想要使用 Redis 作为缓存,请填写对应配置。 + +格式:`redis://username:password@host:port/cache_index` + +示例: + +``` +# 用户名 + 密码模式 +redis://username:password@localhost:6379/0 + +# 密码模式 +redis://:password@localhost:6379/0 + +# 无密码模式 +redis://localhost:6379/0 +``` + +## 使用说明 + +请参考官方文档:[RssHub 使用说明](https://docs.rsshub.app/zh/guide/) + +## 配置说明 + +一些站点的RSS Feed需要登录后才能访问,这时候就需要配置一些鉴权配置 + +具体配置方法请参考官方文档:[RssHub 配置说明](https://docs.rsshub.app/zh/deploy/config/) + +## 注意事项 + +1. 请勿滥用本软件,否则后果自负 +2. 请遵守各网站的使用规定 +3. 请勿将本软件用于商业用途 +4. 请勿将本软件用于违法用途 +5. 请勿将本软件用于违反道德用途 +6. 请勿将本软件用于违反社会公德用途 +7. 请勿将本软件用于违反国家法律用途 +8. 请勿将本软件用于违反国家政策用途 +9. 请勿将本软件用于违反国家战略用途 +10. 请勿将本软件用于违反国家安全用途 +11. 请勿将本软件用于违反国家利益用途 +12. 请勿将本软件用于违反国家尊严用途 +13. 请勿将本软件用于违反国家权益用途 +14. 总而言之,请遵守法律法规,文明上网 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/rsshub/data.yml b/appstore/rsshub/data.yml new file mode 100644 index 00000000..9999ca6c --- /dev/null +++ b/appstore/rsshub/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: rsshub + name: RssHub + tags: + - WebSite + - Middleware + - Tool + - Local + shortDescZh: 从任何内容生成 RSS/Atom/JSON 订阅源 + shortDescEn: Generate RSS/Atom/JSON feeds from any content + type: website + crossVersionUpdate: true + website: https://rsshub.app/ + github: https://github.com/DIYgod/RSSHub/ + document: https://docs.rsshub.app/ diff --git a/appstore/rsshub/logo.png b/appstore/rsshub/logo.png new file mode 100644 index 00000000..3ca374f0 Binary files /dev/null and b/appstore/rsshub/logo.png differ diff --git a/appstore/sentinel/1.8.8/.env b/appstore/sentinel/1.8.8/.env new file mode 100644 index 00000000..e1ac1ba7 --- /dev/null +++ b/appstore/sentinel/1.8.8/.env @@ -0,0 +1,18 @@ +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8858 + +# API 端口 [必填] +PANEL_APP_PORT_API=8719 + +# 控制台 用户名 [必填] +SENTINEL_DASHBOARD_AUTH_USERNAME=sentinel + +# 控制台 密码 [必填] +SENTINEL_DASHBOARD_AUTH_PASSWORD=sentinel + +# 网络模式 [必填] +NETWORK_MODE=host + +# 启用 Feign +SENTINEL_DASHBOARD_FEIGN_ENABLED=false + diff --git a/appstore/sentinel/1.8.8/data.yml b/appstore/sentinel/1.8.8/data.yml new file mode 100644 index 00000000..4580418a --- /dev/null +++ b/appstore/sentinel/1.8.8/data.yml @@ -0,0 +1,60 @@ +additionalProperties: + formFields: + - default: 8858 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI Port + required: true + rule: paramPort + type: number + - default: 8719 + edit: true + envKey: PANEL_APP_PORT_API + labelZh: API 端口 + labelEn: API Port + required: true + rule: paramPort + type: number + - default: "sentinel" + edit: true + envKey: SENTINEL_DASHBOARD_AUTH_USERNAME + labelEn: Dashboard username + labelZh: 控制台 用户名 + required: true + type: text + - default: "sentinel" + edit: true + envKey: SENTINEL_DASHBOARD_AUTH_PASSWORD + labelEn: Dashboard password + labelZh: 控制台 密码 + required: true + type: text + - default: "host" + edit: true + envKey: NETWORK_MODE + labelEn: Drive path + labelZh: 网络模式 + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: "false" + edit: true + envKey: SENTINEL_DASHBOARD_FEIGN_ENABLED + labelZh: 启用 Feign + labelEn: Enable Feign + required: false + type: select + values: + - label: 启用 + value: "true" + - label: 禁用 + value: "false" diff --git a/appstore/sentinel/1.8.8/docker-compose.yml b/appstore/sentinel/1.8.8/docker-compose.yml new file mode 100644 index 00000000..9013ef18 --- /dev/null +++ b/appstore/sentinel/1.8.8/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + sentinel-dashboard: + container_name: sentinel + entrypoint: + - java + - -Djava.security.egd=file:/dev/./urandom + - -Dserver.port=8858 + - -Dcsp.sentinel.api.port=8719 + - -Dcsp.sentinel.dashboard.server=localhost:8858 + - -Dproject.name=sentinel-dashboard + - -Dsentinel.dashboard.auth.username=${SENTINEL_DASHBOARD_AUTH_USERNAME} + - -Dsentinel.dashboard.auth.password=${SENTINEL_DASHBOARD_AUTH_PASSWORD} + - -Dfeign.sentinel.enabled=${SENTINEL_DASHBOARD_FEIGN_ENABLED} + - -jar + - app.jar + image: bladex/sentinel-dashboard:1.8.8 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8858 + - ${COMMUNICATION_PORT}:8719 + restart: always diff --git a/appstore/sentinel/1.8.8/envs/default.env b/appstore/sentinel/1.8.8/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/sentinel/1.8.8/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/sentinel/1.8.8/envs/global.env b/appstore/sentinel/1.8.8/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/sentinel/1.8.8/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/sentinel/1.8.8/scripts/init.sh b/appstore/sentinel/1.8.8/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/sentinel/1.8.8/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/sentinel/1.8.8/scripts/uninstall.sh b/appstore/sentinel/1.8.8/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/sentinel/1.8.8/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/sentinel/1.8.8/scripts/upgrade.sh b/appstore/sentinel/1.8.8/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/sentinel/1.8.8/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/sentinel/README.md b/appstore/sentinel/README.md new file mode 100644 index 00000000..2f12f8a0 --- /dev/null +++ b/appstore/sentinel/README.md @@ -0,0 +1,53 @@ +# Sentinel Dashboard + +随着微服务的流行,服务和服务之间的稳定性变得越来越重要。Sentinel是面向分布式、多语言异构化服务架构的流量治理组件,主要以流量为切入点,从流量路由、流量控制、流量整形、熔断降级、系统自适应过载保护、热点流量防护等多个维度来帮助开发者保障微服务的稳定性。 + +![Sentinel Dashboard](https://file.lifebus.top/imgs/sentinel_dashboard_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 快速启动 + +访问地址 +`http://IP:8858/sentinel` + +> 用户名:`sentinel` +> +> 密码:`sentinel` + +## Sentinel 的历史 + ++ 2012 年,Sentinel 诞生,主要功能为入口流量控制。 ++ 2013-2017 年,Sentinel 在阿里巴巴集团内部迅速发展,成为基础技术模块,覆盖了所有的核心场景。Sentinel 也因此积累了大量的流量归整场景以及生产实践。 ++ 2018 年,Sentinel 开源,并持续演进。 ++ 2019 年,Sentinel 朝着多语言扩展的方向不断探索,推出 C++ 原生版本,同时针对 Service Mesh 场景也推出了 Envoy 集群流量控制支持,以解决 + Service Mesh 架构下多语言限流的问题。 ++ 2020 年,推出 Sentinel Go 版本,继续朝着云原生方向演进。 ++ 2021 年,Sentinel 正在朝着 2.0 云原生高可用决策中心组件进行演进;同时推出了 Sentinel Rust 原生版本。同时我们也在 Rust + 社区进行了 Envoy WASM extension 及 eBPF extension 等场景探索。 ++ 2022 年,Sentinel 品牌升级为流量治理,领域涵盖流量路由/调度、流量染色、流控降级、过载保护/实例摘除等;同时社区将流量治理相关标准抽出到 + OpenSergo 标准中,Sentinel 作为流量治理标准实现。 + +## Sentinel 基本概念 + +### 资源 + +资源是 Sentinel 的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在接下来的文档中,我们都会用资源来描述代码块。 + +只要通过 Sentinel API 定义的代码,就是资源,能够被 Sentinel 保护起来。大部分情况下,可以使用方法签名,URL,甚至服务名称作为资源名来标示资源。 + +### 规则 + +围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。 + +## Sentinel 是如何工作的 + +Sentinel 的主要工作机制如下: + ++ 对主流框架提供适配或者显示的 API,来定义需要保护的资源,并提供设施对资源进行实时统计和调用链路分析。 ++ 根据预设的规则,结合对资源的实时统计信息,对流量进行控制。同时,Sentinel 提供开放的接口,方便您定义及改变规则。 ++ Sentinel 提供实时的监控系统,方便您快速了解目前系统的状态。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/sentinel/data.yml b/appstore/sentinel/data.yml new file mode 100644 index 00000000..58903459 --- /dev/null +++ b/appstore/sentinel/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: sentinel + name: Sentinel Dashboard + tags: + - Runtime + - Middleware + - Local + shortDescZh: 阿里巴巴流量卫兵 + shortDescEn: Alibaba Traffic Guard + type: runtime + crossVersionUpdate: true + limit: 0 + website: https://sentinelguard.io/ + github: https://github.com/alibaba/Sentinel + document: https://sentinelguard.io/ diff --git a/appstore/sentinel/logo.png b/appstore/sentinel/logo.png new file mode 100644 index 00000000..3f493afc Binary files /dev/null and b/appstore/sentinel/logo.png differ diff --git a/appstore/shiori/1.7.1/.env b/appstore/shiori/1.7.1/.env new file mode 100644 index 00000000..ca21d40a --- /dev/null +++ b/appstore/shiori/1.7.1/.env @@ -0,0 +1,18 @@ +# 数据库服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化路径 [必填] +SHIORI_ROOT_PATH=/home/shiori + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 服务模式 [必填] +SHIORI_HTTP_SERVE_WEB_UI=True + +# Web UI 密钥 [必填] +SHIORI_HTTP_SECRET_KEY= + +# 数据库链接 URL [必填] +SHIORI_DATABASE_URL= + diff --git a/appstore/shiori/1.7.1/data.yml b/appstore/shiori/1.7.1/data.yml new file mode 100644 index 00000000..0de408e8 --- /dev/null +++ b/appstore/shiori/1.7.1/data.yml @@ -0,0 +1,63 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: postgresql + envKey: PANEL_DB_TYPE + labelZh: 数据库服务 (前置检查) + labelEn: Database Service + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/shiori" + edit: true + envKey: SHIORI_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number + - default: "True" + edit: true + envKey: SHIORI_HTTP_SERVE_WEB_UI + labelZh: 服务模式 + labelEn: Serve Mode + required: true + type: select + values: + - label: Web UI 模式 + value: "True" + - label: 仅限 API 模式 + value: "False" + - default: "" + edit: true + envKey: SHIORI_HTTP_SECRET_KEY + labelZh: Web UI 密钥 + labelEn: Web UI Secret Key + required: true + type: text + - default: "" + edit: true + envKey: SHIORI_DATABASE_URL + labelZh: 数据库链接 URL + labelEn: Database URL + required: true + type: text diff --git a/appstore/shiori/1.7.1/docker-compose.yml b/appstore/shiori/1.7.1/docker-compose.yml new file mode 100644 index 00000000..d300340b --- /dev/null +++ b/appstore/shiori/1.7.1/docker-compose.yml @@ -0,0 +1,33 @@ +networks: + 1panel-network: + external: true +services: + shiori: + container_name: shiori + env_file: + - ./envs/global.env + - .env + environment: + - SHIORI_DIR=/srv/shiori + - SHIORI_DEVELOPMENT=False + - SHIORI_HTTP_ENABLED=True + - SHIORI_HTTP_PORT=8080 + - SHIORI_HTTP_ROOT_PATH=/ + - SHIORI_HTTP_ACCESS_LOG=True + - SHIORI_HTTP_BODY_LIMIT=1024 + - SHIORI_HTTP_READ_TIMEOUT=10s + - SHIORI_HTTP_WRITE_TIMEOUT=10s + - SHIORI_HTTP_IDLE_TIMEOUT=10s + - SHIORI_HTTP_DISABLE_KEEP_ALIVE=true + - SHIORI_HTTP_DISABLE_PARSE_MULTIPART_FORM=true + image: ghcr.io/go-shiori/shiori:v1.7.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${SHIORI_ROOT_PATH}/dev-data:/srv/shiori + - ${SHIORI_ROOT_PATH}/data:/src/shiori diff --git a/appstore/shiori/1.7.1/envs/default.env b/appstore/shiori/1.7.1/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/shiori/1.7.1/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/shiori/1.7.1/envs/global.env b/appstore/shiori/1.7.1/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/shiori/1.7.1/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/shiori/1.7.1/scripts/init.sh b/appstore/shiori/1.7.1/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/shiori/1.7.1/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/shiori/1.7.1/scripts/uninstall.sh b/appstore/shiori/1.7.1/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/shiori/1.7.1/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/shiori/1.7.1/scripts/upgrade.sh b/appstore/shiori/1.7.1/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/shiori/1.7.1/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/shiori/README.md b/appstore/shiori/README.md new file mode 100644 index 00000000..dcbb50fe --- /dev/null +++ b/appstore/shiori/README.md @@ -0,0 +1,64 @@ +# Shiori + +Shiori 是一款用 Go 语言编写的简单书签管理器,旨在作为 Pocket 的简单克隆。 + +![Shiori](https://file.lifebus.top/imgs/shiori_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 基础书签管理,即添加、编辑、删除和搜索。 ++ 从 Netscape 书签文件导入和导出书签。 ++ 从 Pocket 导入书签。 ++ 简洁明了的命令行界面。 ++ 简洁美观的网页界面,专为那些不想使用命令行应用程序的用户设计。 ++ 轻便便携,得益于其单一的二进制格式。 ++ 数据库支持 sqlite3、PostgreSQL 和 MySQL。 ++ 默认情况下,尽可能的, shiori 将解析可读内容并创建网页的离线存档。 ++ [测试版] 支持 Firefox 和 Chrome 浏览器的 Web 扩展程序。 + +## 安装说明 + +> 默认用户名: `shiori` +> 默认密码: `gopher` + +### `数据库链接 URL` 配置 + +> 名词解释 +> +> `username` 数据库用户名 +> +> `password` 数据库密码 +> +> `localhost` 数据库地址 +> +> `port` 数据库端口 +> +> `database` 数据库名称 + ++ `mysql` 数据库链接 URL 配置 + +模板:`mysql://username:password@tcp(localhost:port)/database?charset=utf8mb4` +示例:`mysql://shiori:shiori@(mariadb)/shiori?charset=utf8mb4` + ++ `postgresql` 数据库链接 URL 配置 + +模板:`postgres://username:password@localhost:port/database?sslmode=disable` +示例:`postgres://shiori:shiori@postgres/shiori?sslmode=disable` + +## 反向代理 + +> Nginx + +```nginx +location / { + proxy_pass http://localhost:8080/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; +} +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/shiori/data.yml b/appstore/shiori/data.yml new file mode 100644 index 00000000..55c67406 --- /dev/null +++ b/appstore/shiori/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: shiori + name: Shiori + tags: + - WebSite + - Local + shortDescZh: 简单书签管理器,旨在作为 Pocket 的简单克隆 + shortDescEn: Simple bookmark manager, aiming to be a simple clone of Pocket + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.kimai.org/ + github: https://github.com/kimai/kimai/ + document: https://www.kimai.org/documentation/ diff --git a/appstore/shiori/logo.png b/appstore/shiori/logo.png new file mode 100644 index 00000000..cc713a70 Binary files /dev/null and b/appstore/shiori/logo.png differ diff --git a/appstore/siyuan/3.1.13/.env b/appstore/siyuan/3.1.13/.env new file mode 100644 index 00000000..ba92d378 --- /dev/null +++ b/appstore/siyuan/3.1.13/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +SIYUAN_ROOT_PATH=/home/siyuan + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=6806 + +# 授权码 [必填] +AuthCode= + diff --git a/appstore/siyuan/3.1.13/data.yml b/appstore/siyuan/3.1.13/data.yml new file mode 100644 index 00000000..c3abcfb6 --- /dev/null +++ b/appstore/siyuan/3.1.13/data.yml @@ -0,0 +1,25 @@ +additionalProperties: + formFields: + - default: "/home/siyuan" + edit: true + envKey: SIYUAN_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 6806 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: AuthCode + labelZh: 授权码 + labelEn: Access Auth Code + required: true + rule: paramComplexity + type: password diff --git a/appstore/siyuan/3.1.13/docker-compose.yml b/appstore/siyuan/3.1.13/docker-compose.yml new file mode 100644 index 00000000..2aece297 --- /dev/null +++ b/appstore/siyuan/3.1.13/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + siyuan: + command: + - --workspace=/siyuan/workspace/ + - --accessAuthCode=${AuthCode} + container_name: siyuan + env_file: + - ./envs/global.env + environment: + - RUN_IN_CONTAINER=true + image: b3log/siyuan:v3.1.13 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:6806 + restart: always + user: 1000:1000 + volumes: + - ${SIYUAN_ROOT_PATH}/workspace:/siyuan/workspace diff --git a/appstore/siyuan/3.1.13/envs/default.env b/appstore/siyuan/3.1.13/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/siyuan/3.1.13/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/siyuan/3.1.13/envs/global.env b/appstore/siyuan/3.1.13/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/siyuan/3.1.13/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/siyuan/3.1.13/scripts/init.sh b/appstore/siyuan/3.1.13/scripts/init.sh new file mode 100644 index 00000000..801a7489 --- /dev/null +++ b/appstore/siyuan/3.1.13/scripts/init.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + if [ ! -d $SIYUAN_ROOT_PATH ]; then + mkdir -p $SIYUAN_ROOT_PATH + fi + + if [ ! -d $SIYUAN_ROOT_PATH/workspace ]; then + mkdir -p $SIYUAN_ROOT_PATH/workspace + fi + + chown -R 1000:1000 $SIYUAN_ROOT_PATH + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/siyuan/3.1.13/scripts/uninstall.sh b/appstore/siyuan/3.1.13/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/siyuan/3.1.13/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/siyuan/3.1.13/scripts/upgrade.sh b/appstore/siyuan/3.1.13/scripts/upgrade.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/siyuan/3.1.13/scripts/upgrade.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/siyuan/README.md b/appstore/siyuan/README.md new file mode 100644 index 00000000..dfb59f1f --- /dev/null +++ b/appstore/siyuan/README.md @@ -0,0 +1,54 @@ +# 思源笔记 + +![思源笔记](https://file.lifebus.top/imgs/siyuan_b3log_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +重构你的思维 + +**所见所得 双链块引** + +**加密同步 隐私优先** + +思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。 + +融合块、大纲和双向链接,重构你的思维。 + +## 反向代理 + +Nginx 配置 WebSocket 反向代理: + +```shell +location /ws { + proxy_pass http://localhost:6806; + proxy_read_timeout 60s; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection 'Upgrade'; +} +``` + +## 常见问题 + +### 数据存储 + +数据保存在工作空间文件夹下,在工作空间 data 文件夹下: + +| 文件夹 | 说明 | +|-----------|-------------------| +| assets | 保存所有插入的资源文件 | +| emojis | 用于保存自定义图标表情图片 | +| snippets | 用于保存代码片段 | +| storage | 用于保存查询条件、布局和闪卡数据等 | +| templates | 用于保存模板片段 | +| widgets | 用于保存挂件 | +| plugins | 用于保存插件 | +| public | 用于保存公开的数据 | + +> 其余文件夹就是用户自己创建的笔记本文件夹,笔记本文件夹下 .sy 后缀的文件用于保存文档数据,数据格式为 JSON + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/siyuan/data.yml b/appstore/siyuan/data.yml new file mode 100644 index 00000000..1d266cfc --- /dev/null +++ b/appstore/siyuan/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: siyuan + name: 思源笔记 + tags: + - WebSite + - Storage + - Local + shortDescZh: 隐私优先的个人知识管理系统 + shortDescEn: A privacy-first personal knowledge management system + type: website + crossVersionUpdate: true + limit: 0 + website: https://b3log.org/ + github: https://github.com/siyuan-note/siyuan/ + document: https://b3log.org/siyuan/ diff --git a/appstore/siyuan/logo.png b/appstore/siyuan/logo.png new file mode 100644 index 00000000..91330759 Binary files /dev/null and b/appstore/siyuan/logo.png differ diff --git a/appstore/slink/1.2.1/.env b/appstore/slink/1.2.1/.env new file mode 100644 index 00000000..1d6c2e5d --- /dev/null +++ b/appstore/slink/1.2.1/.env @@ -0,0 +1,42 @@ +# 数据持久化路径 [必填] +SLINK_ROOT_PATH=/home/slink + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# 主机域名 [必填] +ORIGIN=http://127.0.0.1:3000 + +# 用户上传图片是否需要批准 [必填] +USER_APPROVAL_REQUIRED=true + +# 允许未认证用户访问公共路由 [必填] +USER_ALLOW_UNAUTHENTICATED_ACCESS=true + +# 是否移除图片的 EXIF 元数据 [必填] +IMAGE_STRIP_EXIF_METADATA=true + +# 图片上传最大限制 (最大 50M) [必填] +IMAGE_MAX_SIZE=15M + +# 用户密码最小长度 [必填] +USER_PASSWORD_MIN_LENGTH=8 + +# 用户密码要求 [必填] +USER_PASSWORD_REQUIREMENTS=15 + +# 存储策略 [必填] +STORAGE_PROVIDER=local + +# SMB 服务器地址 +SMB_HOST= + +# SMB 用户名 +SMB_USERNAME= + +# SMB 密码 +SMB_PASSWORD= + +# SMB 共享路径 +SMB_SHARE= + diff --git a/appstore/slink/1.2.1/data.yml b/appstore/slink/1.2.1/data.yml new file mode 100644 index 00000000..fe07f61c --- /dev/null +++ b/appstore/slink/1.2.1/data.yml @@ -0,0 +1,148 @@ +additionalProperties: + formFields: + - default: "/home/slink" + edit: true + envKey: SLINK_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number + - default: "http://127.0.0.1:3000" + edit: true + envKey: ORIGIN + labelZh: 主机域名 + labelEn: Host domain + required: true + type: text + - default: "true" + edit: true + envKey: USER_APPROVAL_REQUIRED + labelZh: 用户上传图片是否需要批准 + labelEn: Do users need approval to upload images + required: true + type: select + values: + - label: 启用用户批准策略 + value: "true" + - label: 禁用用户批准策略 + value: "false" + - default: "true" + edit: true + envKey: USER_ALLOW_UNAUTHENTICATED_ACCESS + labelZh: 允许未认证用户访问公共路由 + labelEn: Allow unauthenticated users to access public routes + required: true + type: select + values: + - label: 允许访问 + value: "true" + - label: 禁止访问 + value: "false" + - default: "true" + edit: true + envKey: IMAGE_STRIP_EXIF_METADATA + labelZh: 是否移除图片的 EXIF 元数据 + labelEn: Remove EXIF metadata from images + required: true + type: select + values: + - label: 移除 + value: "true" + - label: 保留 + value: "false" + - default: "15M" + edit: true + envKey: IMAGE_MAX_SIZE + labelZh: 图片上传最大限制 (最大 50M) + labelEn: Maximum image upload limit (max 50M) + required: true + type: text + - default: 8 + edit: true + envKey: USER_PASSWORD_MIN_LENGTH + labelZh: 用户密码最小长度 + labelEn: Minimum user password length + required: true + type: number + - default: "15" + edit: true + envKey: USER_PASSWORD_REQUIREMENTS + labelZh: 用户密码要求 + labelEn: User password requirements + required: true + type: select + values: + - label: 数字 + 大小写字母 + 特殊字符 + value: "15" + - label: 数字 + 大小写字母 + value: "7" + - label: 数字 + 特殊字符 + value: "9" + - label: 大小写字母 + 特殊字符 + value: "14" + - label: 大写字母 + 数字 + value: "5" + - label: 小写字母 + 数字 + value: "3" + - label: 大写字母 + 特殊字符 + value: "12" + - label: 小写字母 + 特殊字符 + value: "10" + - label: 纯数字 + value: "1" + - label: 大小写字母 + value: "6" + - label: 纯大写字母 + value: "4" + - label: 纯小写字母 + value: "2" + - label: 纯特殊字符 + value: "8" + - default: "local" + edit: true + envKey: STORAGE_PROVIDER + labelZh: 存储策略 + labelEn: Storage strategy + required: true + type: select + values: + - label: 本地存储 + value: "local" + - label: SMB 存储 + value: "smb" + - default: "" + edit: true + envKey: SMB_HOST + labelZh: SMB 服务器地址 + labelEn: SMB server address + required: false + type: text + - default: "" + edit: true + envKey: SMB_USERNAME + labelZh: SMB 用户名 + labelEn: SMB username + required: false + type: text + - default: "" + edit: true + envKey: SMB_PASSWORD + labelZh: SMB 密码 + labelEn: SMB password + required: false + type: password + - default: "" + edit: true + envKey: SMB_SHARE + labelZh: SMB 共享路径 + labelEn: SMB share path + required: false + type: text diff --git a/appstore/slink/1.2.1/docker-compose.yml b/appstore/slink/1.2.1/docker-compose.yml new file mode 100644 index 00000000..b3b0c97e --- /dev/null +++ b/appstore/slink/1.2.1/docker-compose.yml @@ -0,0 +1,25 @@ +networks: + 1panel-network: + external: true +services: + slink: + container_name: slink + env_file: + - ./envs/global.env + - .env + environment: + - USER_PASSWORD_MIN_LENGTH=8 + - USER_PASSWORD_REQUIREMENTS=15 + - IMAGE_MAX_SIZE=15M + - STORAGE_PROVIDER=local + image: anirdev/slink:v1.2.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + restart: always + volumes: + - ${SLINK_ROOT_PATH}/data:/app/var/data + - ${SLINK_ROOT_PATH}/images:/app/slink/images diff --git a/appstore/slink/1.2.1/envs/default.env b/appstore/slink/1.2.1/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/slink/1.2.1/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/slink/1.2.1/envs/global.env b/appstore/slink/1.2.1/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/slink/1.2.1/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/slink/1.2.1/scripts/init.sh b/appstore/slink/1.2.1/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/slink/1.2.1/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/slink/1.2.1/scripts/uninstall.sh b/appstore/slink/1.2.1/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/slink/1.2.1/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/slink/1.2.1/scripts/upgrade.sh b/appstore/slink/1.2.1/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/slink/1.2.1/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/slink/README.md b/appstore/slink/README.md new file mode 100644 index 00000000..26005525 --- /dev/null +++ b/appstore/slink/README.md @@ -0,0 +1,65 @@ +# Slink + +Slink 是一个使用 Symfony 和 SvelteKit 构建的自托管图片分享平台。 + +![Slink](https://file.lifebus.top/imgs/slink_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +解决了与朋友、家人和同事分享图片而不依赖第三方服务的问题。它还为艺术家提供了一个平台,让他们可以与社区分享自己的作品。 +此外,开发人员可能会发现将其用于托管个人项目屏幕截图很有用,然后可以在 GitHub、个人网站、博客等地方使用。 + +## 特性 + ++ 认证:用户可以注册并登录平台。 ++ 用户批准:在用户可以上传图片之前需要获得他们的批准。 ++ 图片上传:可以上传 SVG、PNG、JPG、WEBP、BMP、ICO 或 GIF 格式的图片。 ++ 分享链接:用户可以分享上传的图片链接,并自定义图片大小。 ++ 上传历史:提供了用户上传的所有图片的概览。 ++ 存储提供商:支持本地和 SMB 存储提供商。 ++ 探索图片:展示由其他用户上传的公共图片的列表页面。 ++ 暗色模式:应用程序支持暗色和亮色模式。 + +## 安装说明 + +### 公共列表 + +> 只有标记为公共的图像才会在这里显示。 + +应用包含一个可选的图片列表页面,用户可以在该页面上浏览其他用户上传的图片。 + +### 存储提供商 + +应用支持两种存储提供者:本地和 SMB。本地存储提供者将图像存储在本地文件系统中,而 SMB 存储提供者将图像存储在远程 SMB +服务器上。默认情况下,应用使用本地存储提供者。 + +### 用户批准 + +默认情况下,应用程序在用户上传图片前需要获得批准。 + +您需要使用 CLI 命令手动激活用户 + +> 邮箱激活 + +```shell +docker exec -it slink slink user:activate --email= +``` + +> 用户ID 激活 + +```shell +docker exec -it slink slink user:activate --uuid= +``` + +### 安全 + +Slink 支持用户认证和用户审批以防止未经授权访问应用。然而,建议使用反向代理如 Nginx 或 Traefik 添加额外的安全功能,如 +SSL、速率限制等。 + +如果不想将整个应用公开,仅可以通过反向代理公开 /image 路由。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/slink/data.yml b/appstore/slink/data.yml new file mode 100644 index 00000000..fc29eb03 --- /dev/null +++ b/appstore/slink/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: slink + name: Slink + tags: + - WebSite + - Middleware + - Local + shortDescZh: 图片分享平台 + shortDescEn: Image sharing platform + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/andrii-kryvoviaz/slink/ + github: https://github.com/andrii-kryvoviaz/slink/ + document: https://github.com/andrii-kryvoviaz/slink/ diff --git a/appstore/slink/logo.png b/appstore/slink/logo.png new file mode 100644 index 00000000..cb7f0f3a Binary files /dev/null and b/appstore/slink/logo.png differ diff --git a/appstore/sonarr/4.0.11/.env b/appstore/sonarr/4.0.11/.env new file mode 100644 index 00000000..44600fad --- /dev/null +++ b/appstore/sonarr/4.0.11/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +SONARR_ROOT_PATH=/home/sonarr + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8989 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/sonarr/4.0.11/data.yml b/appstore/sonarr/4.0.11/data.yml new file mode 100644 index 00000000..594ff5ed --- /dev/null +++ b/appstore/sonarr/4.0.11/data.yml @@ -0,0 +1,37 @@ +additionalProperties: + formFields: + - default: "/home/sonarr" + edit: true + envKey: SONARR_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8989 + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/sonarr/4.0.11/docker-compose.yml b/appstore/sonarr/4.0.11/docker-compose.yml new file mode 100644 index 00000000..d12f582e --- /dev/null +++ b/appstore/sonarr/4.0.11/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + sonarr: + container_name: sonarr + env_file: + - ./envs/global.env + - .env + environment: + - PUID=1000 + - PGID=1000 + - UMASK=022 + - TZ=Asia/Shanghai + image: linuxserver/sonarr:4.0.11 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8989 + restart: always + volumes: + - ${SONARR_ROOT_PATH}/config:/config + - ${SONARR_ROOT_PATH}/tv:/tv + - ${SONARR_ROOT_PATH}/downloads:/downloads + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/sonarr/4.0.11/envs/default.env b/appstore/sonarr/4.0.11/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/sonarr/4.0.11/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/sonarr/4.0.11/envs/global.env b/appstore/sonarr/4.0.11/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/sonarr/4.0.11/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/sonarr/4.0.11/scripts/init.sh b/appstore/sonarr/4.0.11/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/sonarr/4.0.11/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/sonarr/4.0.11/scripts/uninstall.sh b/appstore/sonarr/4.0.11/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/sonarr/4.0.11/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/sonarr/4.0.11/scripts/upgrade.sh b/appstore/sonarr/4.0.11/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/sonarr/4.0.11/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/sonarr/README.md b/appstore/sonarr/README.md new file mode 100644 index 00000000..16a7c5f4 --- /dev/null +++ b/appstore/sonarr/README.md @@ -0,0 +1,72 @@ +# Sonarr + +智能 PVR 适用于新闻组和 BT 用户。 + +![Sonarr](https://file.lifebus.top/imgs/sonarr_cover.png) + +Sonarr 是为 Usenet 和 BitTorrent 用户设计的 PVR。它能够监控多个 RSS 订阅,寻找你喜爱的节目的新集,并抓取、整理和重命名它们。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 主要平台支持:Windows,Linux,macOS,Raspberry Pi 等。 ++ 自动检测新集 ++ 可以扫描您的现有库并下载任何缺失的剧集 ++ 可以观看你已有的剧集的更高质量版本,并自动进行升级。例如,从 DVD 升级到蓝光。 ++ 自动失败下载处理将在一个失败时尝试另一个版本 ++ 手动搜索,以便您可以选择任何版本或查看未自动下载版本的原因 ++ 完全可配置的集名重命名 ++ 与 SABnzbd 和 NZBGet 的全面整合 ++ 与 Kodi、Plex(通知、库更新、元数据)的全面整合 ++ 全面支持特别节目和多集发布 ++ 美观的 UI + +## 反向代理 + +> Nginx +> +> BaseUrl 为 `/sonarr` 时的反向代理配置如下: + +```nginx + location ^~ /sonarr { + proxy_pass http://127.0.0.1:8989; + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_redirect off; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + } + # Allow the API External Access via NGINX + location ^~ /sonarr/api { + auth_basic off; + proxy_pass http://127.0.0.1:8989; + } +``` + +> Nginx +> +> BaseUrl 为 `/` 时的反向代理配置如下: + +```nginx + location / { + proxy_set_header Host $host; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Host $host; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $http_connection; + + proxy_redirect off; + proxy_http_version 1.1; + + proxy_pass http://127.0.0.1:8989; + } +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/sonarr/data.yml b/appstore/sonarr/data.yml new file mode 100644 index 00000000..62ae1b02 --- /dev/null +++ b/appstore/sonarr/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: sonarr + name: Sonarr + tags: + - WebSite + - Storage + - Local + shortDescZh: 智能 PVR 适用于新闻组和 BT 用户。 + shortDescEn: Smart PVR for newsgroup and bittorrent users. + type: website + crossVersionUpdate: true + limit: 0 + website: https://sonarr.tv/ + github: https://github.com/Sonarr/Sonarr/ + document: https://wiki.sonarr.tv/ diff --git a/appstore/sonarr/logo.png b/appstore/sonarr/logo.png new file mode 100644 index 00000000..b76f154e Binary files /dev/null and b/appstore/sonarr/logo.png differ diff --git a/appstore/speedtest-tracker-sqlite/0.24.3/.env b/appstore/speedtest-tracker-sqlite/0.24.3/.env new file mode 100644 index 00000000..bfc89fb2 --- /dev/null +++ b/appstore/speedtest-tracker-sqlite/0.24.3/.env @@ -0,0 +1,57 @@ +# 数据持久化 根路径 [必填] +SPEEDTEST_TRACKER_ROOT_PATH=/home/speedtest-tracker + +# 网络模式 [必填] +NETWORK_MODE=host + +# Web 服务端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 应用密钥 (官网获取) [必填] +APP_KEY=base64:f0Ivk1nHd3QwXtR55WKC4fcc7QjrxxTnkiB02ipdl60= + +# 应用名称 [必填] +APP_NAME=SpeedTest Tracker + +# 应用访问地址 [必填] +APP_URL=http://127.0.0.1:8080 + +# 测试结果保留天数 [必填] +PRUNE_RESULTS_OLDER_THAN=0 + +# 测试计划任务 +SPEEDTEST_SCHEDULE=0 */6 * * * + +# 指定测试服务器 +SPEEDTEST_SERVERS= + +# 邮件 协议 [必填] +MAIL_MAILER=smtp + +# 邮件 主机地址 [必填] +MAIL_HOST=smtp.gmail.com + +# 邮件 主机端口 [必填] +MAIL_PORT=465 + +# 邮件 鉴权用户名 +MAIL_USERNAME= + +# 邮件 鉴权密码 +MAIL_PASSWORD= + +# 邮件 发件地址 +MAIL_FROM_ADDRESS= + +# 邮件 发件名称 [必填] +MAIL_FROM_NAME=Speedtest Tracker + +# 邮件 加密方式 [必填] +MAIL_ENCRYPTION=tls + +# Telegram 机器人令牌 +TELEGRAM_BOT_TOKEN= + +# 缓存 驱动 [必填] +CACHE_DRIVER=file + diff --git a/appstore/speedtest-tracker-sqlite/0.24.3/data.yml b/appstore/speedtest-tracker-sqlite/0.24.3/data.yml new file mode 100644 index 00000000..7670657e --- /dev/null +++ b/appstore/speedtest-tracker-sqlite/0.24.3/data.yml @@ -0,0 +1,150 @@ +additionalProperties: + formFields: + - default: "/home/speedtest-tracker" + edit: true + envKey: SPEEDTEST_TRACKER_ROOT_PATH + labelEn: Data persistence root path + labelZh: 数据持久化 根路径 + required: true + type: text + - default: "host" + edit: true + envKey: NETWORK_MODE + labelEn: Drive path + labelZh: 网络模式 + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Server port + labelZh: Web 服务端口 + required: true + rule: paramPort + type: number + - default: "base64:f0Ivk1nHd3QwXtR55WKC4fcc7QjrxxTnkiB02ipdl60=" + edit: true + envKey: APP_KEY + labelZh: 应用密钥 (官网获取) + labelEn: App key (Get from official website) + required: true + type: text + - default: "SpeedTest Tracker" + edit: true + envKey: APP_NAME + labelZh: 应用名称 + labelEn: App Name + required: true + type: text + - default: "http://127.0.0.1:8080" + edit: true + envKey: APP_URL + labelZh: 应用访问地址 + labelEn: App URL + required: true + type: text + - default: 0 + edit: true + envKey: PRUNE_RESULTS_OLDER_THAN + labelZh: 测试结果保留天数 + labelEn: Prune results older than + required: true + type: text + - default: "0 */6 * * *" + edit: true + envKey: SPEEDTEST_SCHEDULE + labelZh: 测试计划任务 + labelEn: Speedtest schedule + required: false + type: text + - default: "" + edit: true + envKey: SPEEDTEST_SERVERS + labelZh: 指定测试服务器 + labelEn: Specify servers + required: false + type: text + - default: "smtp" + edit: true + envKey: MAIL_MAILER + labelZh: 邮件 协议 + labelEn: Mail mailer + required: true + type: text + - default: "smtp.gmail.com" + edit: true + envKey: MAIL_HOST + labelZh: 邮件 主机地址 + labelEn: Mail host + required: true + type: text + - default: 465 + edit: true + envKey: MAIL_PORT + labelZh: 邮件 主机端口 + labelEn: Mail port + required: true + type: number + - default: "" + edit: true + envKey: MAIL_USERNAME + labelZh: 邮件 鉴权用户名 + labelEn: Mail username + required: false + type: text + - default: "" + edit: true + envKey: MAIL_PASSWORD + labelZh: 邮件 鉴权密码 + labelEn: Mail password + required: false + type: text + - default: "" + edit: true + envKey: MAIL_FROM_ADDRESS + labelZh: 邮件 发件地址 + labelEn: Mail from address + required: false + type: text + - default: "Speedtest Tracker" + edit: true + envKey: MAIL_FROM_NAME + labelZh: 邮件 发件名称 + labelEn: Mail from name + required: true + type: text + - default: "tls" + edit: true + envKey: MAIL_ENCRYPTION + labelZh: 邮件 加密方式 + labelEn: Mail encryption + required: true + type: text + - default: "" + edit: true + envKey: TELEGRAM_BOT_TOKEN + labelZh: Telegram 机器人令牌 + labelEn: Telegram bot token + required: false + type: text + - default: "file" + edit: true + envKey: CACHE_DRIVER + labelZh: 缓存 驱动 + labelEn: Cache driver + required: true + type: select + values: + - label: 文件缓存 + value: "file" + - label: 数据库缓存 + value: "database" diff --git a/appstore/speedtest-tracker-sqlite/0.24.3/docker-compose.yml b/appstore/speedtest-tracker-sqlite/0.24.3/docker-compose.yml new file mode 100644 index 00000000..c3d0f52d --- /dev/null +++ b/appstore/speedtest-tracker-sqlite/0.24.3/docker-compose.yml @@ -0,0 +1,25 @@ +networks: + 1panel-network: + external: true +services: + speedtest-tracker: + container_name: speedtest-tracker-sqlite + env_file: + - ./envs/global.env + - .env + environment: + - PUID=1000 + - PGID=1000 + - TZ=Asia/Shanghai + - DISPLAY_TIMEZONE=Asia/Shanghai + - DB_CONNECTION=sqlite + - MAIL_MAILER=sqlite + image: linuxserver/speedtest-tracker:0.24.3 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${SPEEDTEST_TRACKER_ROOT_PATH}/config:/config diff --git a/appstore/speedtest-tracker-sqlite/0.24.3/envs/default.env b/appstore/speedtest-tracker-sqlite/0.24.3/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/speedtest-tracker-sqlite/0.24.3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/speedtest-tracker-sqlite/0.24.3/envs/global.env b/appstore/speedtest-tracker-sqlite/0.24.3/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/speedtest-tracker-sqlite/0.24.3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/speedtest-tracker-sqlite/0.24.3/scripts/init.sh b/appstore/speedtest-tracker-sqlite/0.24.3/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/speedtest-tracker-sqlite/0.24.3/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/speedtest-tracker-sqlite/0.24.3/scripts/uninstall.sh b/appstore/speedtest-tracker-sqlite/0.24.3/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/speedtest-tracker-sqlite/0.24.3/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/speedtest-tracker-sqlite/0.24.3/scripts/upgrade.sh b/appstore/speedtest-tracker-sqlite/0.24.3/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/speedtest-tracker-sqlite/0.24.3/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/speedtest-tracker-sqlite/README.md b/appstore/speedtest-tracker-sqlite/README.md new file mode 100644 index 00000000..81d5712d --- /dev/null +++ b/appstore/speedtest-tracker-sqlite/README.md @@ -0,0 +1,25 @@ +# Speedtest Tracker SQLite版 + +Speedtest Tracker 的主要用例是建立互联网性能的历史记录,以便您在未收到 ISP 公布的费率时收到通知。 + +![Speedtest Tracker](https://file.lifebus.top/imgs/speedtest_tracker_cover.png) + +Speedtest Tracker 是一款自托管互联网性能跟踪应用程序,可针对 Ookla 的 Speedtest 服务运行速度测试检查。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 应用说明 + +Speedtest Tracker 是一个自托管的互联网性能跟踪应用程序,可针对 Ookla 的 Speedtest 服务运行速度测试检查。 + +由于 Speedtest 服务主要节点位于国外,所以在国内使用时可能会有一些问题,但是在国外使用时,Speedtest Tracker 是一个非常好的选择。 + +## 安装说明 + +> admin@example.com +> +> password + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/speedtest-tracker-sqlite/data.yml b/appstore/speedtest-tracker-sqlite/data.yml new file mode 100644 index 00000000..722b9cf2 --- /dev/null +++ b/appstore/speedtest-tracker-sqlite/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: speedtest-tracker-sqlite + name: SpeedTest Tracker SQLite版 + tags: + - WebSite + - Middleware + - Local + shortDescZh: 托管互联网性能跟踪应用程序 + shortDescEn: Hosted internet performance tracking application + type: website + crossVersionUpdate: true + limit: 0 + website: https://docs.speedtest-tracker.dev/ + github: https://github.com/alexjustesen/speedtest-tracker + document: https://docs.speedtest-tracker.dev/ diff --git a/appstore/speedtest-tracker-sqlite/logo.png b/appstore/speedtest-tracker-sqlite/logo.png new file mode 100644 index 00000000..568581de Binary files /dev/null and b/appstore/speedtest-tracker-sqlite/logo.png differ diff --git a/appstore/speedtest-tracker/0.24.3/.env b/appstore/speedtest-tracker/0.24.3/.env new file mode 100644 index 00000000..b20e1f15 --- /dev/null +++ b/appstore/speedtest-tracker/0.24.3/.env @@ -0,0 +1,78 @@ +# 数据库 服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化 根路径 [必填] +SPEEDTEST_TRACKER_ROOT_PATH=/home/speedtest-tracker + +# 网络模式 [必填] +NETWORK_MODE=host + +# Web 服务端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 应用密钥 (官网获取) [必填] +APP_KEY=base64:f0Ivk1nHd3QwXtR55WKC4fcc7QjrxxTnkiB02ipdl60= + +# 应用名称 [必填] +APP_NAME=SpeedTest Tracker + +# 应用访问地址 [必填] +APP_URL=http://127.0.0.1:8080 + +# 数据库 类型 [必填] +DB_CONNECTION=postgres + +# 数据库 主机地址 [必填] +DB_HOST=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 用户名 [必填] +DB_USERNAME=speedtest-tracker + +# 数据库 密码 [必填] +DB_PASSWORD= + +# 数据库 名称 [必填] +DB_DATABASE=speedtest-tracker + +# 测试结果保留天数 [必填] +PRUNE_RESULTS_OLDER_THAN=0 + +# 测试计划任务 +SPEEDTEST_SCHEDULE=0 */6 * * * + +# 指定测试服务器 +SPEEDTEST_SERVERS= + +# 邮件 协议 [必填] +MAIL_MAILER=smtp + +# 邮件 主机地址 [必填] +MAIL_HOST=smtp.gmail.com + +# 邮件 主机端口 [必填] +MAIL_PORT=465 + +# 邮件 鉴权用户名 +MAIL_USERNAME= + +# 邮件 鉴权密码 +MAIL_PASSWORD= + +# 邮件 发件地址 +MAIL_FROM_ADDRESS= + +# 邮件 发件名称 [必填] +MAIL_FROM_NAME=Speedtest Tracker + +# 邮件 加密方式 [必填] +MAIL_ENCRYPTION=tls + +# Telegram 机器人令牌 +TELEGRAM_BOT_TOKEN= + +# 缓存 驱动 [必填] +CACHE_DRIVER=file + diff --git a/appstore/speedtest-tracker/0.24.3/data.yml b/appstore/speedtest-tracker/0.24.3/data.yml new file mode 100644 index 00000000..d2a06f24 --- /dev/null +++ b/appstore/speedtest-tracker/0.24.3/data.yml @@ -0,0 +1,221 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: postgresql + edit: true + envKey: PANEL_DB_TYPE + labelZh: 数据库 服务 (前置检查) + labelEn: Database Service (Pre-check) + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/speedtest-tracker" + edit: true + envKey: SPEEDTEST_TRACKER_ROOT_PATH + labelEn: Data persistence root path + labelZh: 数据持久化 根路径 + required: true + type: text + - default: "host" + edit: true + envKey: NETWORK_MODE + labelEn: Drive path + labelZh: 网络模式 + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Server port + labelZh: Web 服务端口 + required: true + rule: paramPort + type: number + - default: "base64:f0Ivk1nHd3QwXtR55WKC4fcc7QjrxxTnkiB02ipdl60=" + edit: true + envKey: APP_KEY + labelZh: 应用密钥 (官网获取) + labelEn: App key (Get from official website) + required: true + type: text + - default: "SpeedTest Tracker" + edit: true + envKey: APP_NAME + labelZh: 应用名称 + labelEn: App Name + required: true + type: text + - default: "http://127.0.0.1:8080" + edit: true + envKey: APP_URL + labelZh: 应用访问地址 + labelEn: App URL + required: true + type: text + - default: postgres + edit: true + envKey: DB_CONNECTION + labelZh: 数据库 类型 + labelEn: Database Type + required: true + type: select + values: + - label: PostgreSQL + value: postgres + - label: MySQL (MariaDB, Percona) + value: mysql + - default: "127.0.0.1" + edit: true + envKey: DB_HOST + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "speedtest-tracker" + edit: true + envKey: DB_USERNAME + labelZh: 数据库 用户名 + labelEn: Database User + required: true + type: text + - default: "" + edit: true + envKey: DB_PASSWORD + labelEn: Database Password + labelZh: 数据库 密码 + random: true + required: true + rule: paramComplexity + type: password + - default: "speedtest-tracker" + edit: true + envKey: DB_DATABASE + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text + - default: 0 + edit: true + envKey: PRUNE_RESULTS_OLDER_THAN + labelZh: 测试结果保留天数 + labelEn: Prune results older than + required: true + type: text + - default: "0 */6 * * *" + edit: true + envKey: SPEEDTEST_SCHEDULE + labelZh: 测试计划任务 + labelEn: Speedtest schedule + required: false + type: text + - default: "" + edit: true + envKey: SPEEDTEST_SERVERS + labelZh: 指定测试服务器 + labelEn: Specify servers + required: false + type: text + - default: "smtp" + edit: true + envKey: MAIL_MAILER + labelZh: 邮件 协议 + labelEn: Mail mailer + required: true + type: text + - default: "smtp.gmail.com" + edit: true + envKey: MAIL_HOST + labelZh: 邮件 主机地址 + labelEn: Mail host + required: true + type: text + - default: 465 + edit: true + envKey: MAIL_PORT + labelZh: 邮件 主机端口 + labelEn: Mail port + required: true + type: number + - default: "" + edit: true + envKey: MAIL_USERNAME + labelZh: 邮件 鉴权用户名 + labelEn: Mail username + required: false + type: text + - default: "" + edit: true + envKey: MAIL_PASSWORD + labelZh: 邮件 鉴权密码 + labelEn: Mail password + required: false + type: text + - default: "" + edit: true + envKey: MAIL_FROM_ADDRESS + labelZh: 邮件 发件地址 + labelEn: Mail from address + required: false + type: text + - default: "Speedtest Tracker" + edit: true + envKey: MAIL_FROM_NAME + labelZh: 邮件 发件名称 + labelEn: Mail from name + required: true + type: text + - default: "tls" + edit: true + envKey: MAIL_ENCRYPTION + labelZh: 邮件 加密方式 + labelEn: Mail encryption + required: true + type: text + - default: "" + edit: true + envKey: TELEGRAM_BOT_TOKEN + labelZh: Telegram 机器人令牌 + labelEn: Telegram bot token + required: false + type: text + - default: "file" + edit: true + envKey: CACHE_DRIVER + labelZh: 缓存 驱动 + labelEn: Cache driver + required: true + type: select + values: + - label: 文件缓存 + value: "file" + - label: 数据库缓存 + value: "database" diff --git a/appstore/speedtest-tracker/0.24.3/docker-compose.yml b/appstore/speedtest-tracker/0.24.3/docker-compose.yml new file mode 100644 index 00000000..8b5283b7 --- /dev/null +++ b/appstore/speedtest-tracker/0.24.3/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true +services: + speedtest-tracker: + container_name: speedtest-tracker + env_file: + - ./envs/global.env + - .env + environment: + - PUID=1000 + - PGID=1000 + - TZ=Asia/Shanghai + - DISPLAY_TIMEZONE=Asia/Shanghai + image: linuxserver/speedtest-tracker:0.24.3 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${SPEEDTEST_TRACKER_ROOT_PATH}/config:/config diff --git a/appstore/speedtest-tracker/0.24.3/envs/default.env b/appstore/speedtest-tracker/0.24.3/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/speedtest-tracker/0.24.3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/speedtest-tracker/0.24.3/envs/global.env b/appstore/speedtest-tracker/0.24.3/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/speedtest-tracker/0.24.3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/speedtest-tracker/0.24.3/scripts/init.sh b/appstore/speedtest-tracker/0.24.3/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/speedtest-tracker/0.24.3/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/speedtest-tracker/0.24.3/scripts/uninstall.sh b/appstore/speedtest-tracker/0.24.3/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/speedtest-tracker/0.24.3/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/speedtest-tracker/0.24.3/scripts/upgrade.sh b/appstore/speedtest-tracker/0.24.3/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/speedtest-tracker/0.24.3/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/speedtest-tracker/README.md b/appstore/speedtest-tracker/README.md new file mode 100644 index 00000000..c41c5250 --- /dev/null +++ b/appstore/speedtest-tracker/README.md @@ -0,0 +1,25 @@ +# Speedtest Tracker + +Speedtest Tracker 的主要用例是建立互联网性能的历史记录,以便您在未收到 ISP 公布的费率时收到通知。 + +![Speedtest Tracker](https://file.lifebus.top/imgs/speedtest_tracker_cover.png) + +Speedtest Tracker 是一款自托管互联网性能跟踪应用程序,可针对 Ookla 的 Speedtest 服务运行速度测试检查。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 应用说明 + +Speedtest Tracker 是一个自托管的互联网性能跟踪应用程序,可针对 Ookla 的 Speedtest 服务运行速度测试检查。 + +由于 Speedtest 服务主要节点位于国外,所以在国内使用时可能会有一些问题,但是在国外使用时,Speedtest Tracker 是一个非常好的选择。 + +## 安装说明 + +> admin@example.com +> +> password + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/speedtest-tracker/data.yml b/appstore/speedtest-tracker/data.yml new file mode 100644 index 00000000..4930f4a3 --- /dev/null +++ b/appstore/speedtest-tracker/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: speedtest-tracker + name: SpeedTest Tracker + tags: + - WebSite + - Middleware + - Local + shortDescZh: 托管互联网性能跟踪应用程序 + shortDescEn: Hosted internet performance tracking application + type: website + crossVersionUpdate: true + limit: 0 + website: https://docs.speedtest-tracker.dev/ + github: https://github.com/alexjustesen/speedtest-tracker + document: https://docs.speedtest-tracker.dev/ diff --git a/appstore/speedtest-tracker/logo.png b/appstore/speedtest-tracker/logo.png new file mode 100644 index 00000000..568581de Binary files /dev/null and b/appstore/speedtest-tracker/logo.png differ diff --git a/appstore/speedtest/5.4.1/.env b/appstore/speedtest/5.4.1/.env new file mode 100644 index 00000000..450c3948 --- /dev/null +++ b/appstore/speedtest/5.4.1/.env @@ -0,0 +1,33 @@ +# 数据持久化路径 [必填] +SPEED_TEST_ROOT_PATH=/home/speedtest + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2283 + +# 网页标题 [必填] +TITLE=LibreSpeed + +# 启用遥测 [必填] +TELEMETRY=false + +# 访问密码 (开启遥测) [必填] +PASSWORD= + +# ID 混淆 (开启遥测) [必填] +ENABLE_ID_OBFUSCATION=false + +# 隐藏 IP 地址 (开启遥测) [必填] +REDACT_IP_ADDRESSES=false + +# 邮箱地址 (开启遥测) +EMAIL= + +# ipinfo.io 的 API 密钥 (开启遥测) +IPINFO_APIKEY= + +# 禁用 ipinfo.io (开启遥测) [必填] +DISABLE_IPINFO=false + +# 距离单位 (km/mi) +DISTANCE=km + diff --git a/appstore/speedtest/5.4.1/data.yml b/appstore/speedtest/5.4.1/data.yml new file mode 100644 index 00000000..666fc367 --- /dev/null +++ b/appstore/speedtest/5.4.1/data.yml @@ -0,0 +1,100 @@ +additionalProperties: + formFields: + - default: "/home/speedtest" + edit: true + envKey: SPEED_TEST_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 2283 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "LibreSpeed" + edit: true + envKey: TITLE + labelZh: 网页标题 + labelEn: Web title + required: true + type: text + - default: "false" + edit: true + envKey: TELEMETRY + labelZh: 启用遥测 + labelEn: Enable telemetry + required: true + type: select + values: + - label: "启用" + value: "true" + - label: "禁用" + value: "false" + - default: "" + edit: true + envKey: PASSWORD + labelZh: 访问密码 (开启遥测) + labelEn: Access password (Enable telemetry) + required: true + type: text + - default: "false" + edit: true + envKey: ENABLE_ID_OBFUSCATION + labelZh: ID 混淆 (开启遥测) + labelEn: ID obfuscation (Enable telemetry) + required: true + type: select + values: + - label: "启用" + value: "true" + - label: "禁用" + value: "false" + - default: "false" + edit: true + envKey: REDACT_IP_ADDRESSES + labelZh: 隐藏 IP 地址 (开启遥测) + labelEn: Hide IP addresses (Enable telemetry) + required: true + type: select + values: + - label: "启用" + value: "true" + - label: "禁用" + value: "false" + - default: "" + edit: true + envKey: EMAIL + labelZh: 邮箱地址 (开启遥测) + labelEn: Email address (Enable telemetry) + required: false + type: text + - default: "" + edit: true + envKey: IPINFO_APIKEY + labelZh: ipinfo.io 的 API 密钥 (开启遥测) + labelEn: ipinfo.io API key (Enable telemetry) + required: false + type: text + - default: "false" + edit: true + envKey: DISABLE_IPINFO + labelZh: 禁用 ipinfo.io (开启遥测) + labelEn: Disable ipinfo.io (Enable telemetry) + required: true + type: select + values: + - label: "启用" + value: "true" + - label: "禁用" + value: "false" + - default: "km" + edit: true + envKey: DISTANCE + labelZh: 距离单位 (km/mi) + labelEn: Distance unit (km/mi) + required: false + type: text diff --git a/appstore/speedtest/5.4.1/docker-compose.yml b/appstore/speedtest/5.4.1/docker-compose.yml new file mode 100644 index 00000000..a0272b64 --- /dev/null +++ b/appstore/speedtest/5.4.1/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + speedtest: + container_name: speedtest + env_file: + - ./envs/global.env + - .env + environment: + - MODE=standalone + - WEBPORT=80 + image: ghcr.io/librespeed/speedtest:5.4.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${SPEED_TEST_ROOT_PATH}/database:/database diff --git a/appstore/speedtest/5.4.1/envs/default.env b/appstore/speedtest/5.4.1/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/speedtest/5.4.1/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/speedtest/5.4.1/envs/global.env b/appstore/speedtest/5.4.1/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/speedtest/5.4.1/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/speedtest/5.4.1/scripts/init.sh b/appstore/speedtest/5.4.1/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/speedtest/5.4.1/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/speedtest/5.4.1/scripts/uninstall.sh b/appstore/speedtest/5.4.1/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/speedtest/5.4.1/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/speedtest/5.4.1/scripts/upgrade.sh b/appstore/speedtest/5.4.1/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/speedtest/5.4.1/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/speedtest/README.md b/appstore/speedtest/README.md new file mode 100644 index 00000000..4fd26a64 --- /dev/null +++ b/appstore/speedtest/README.md @@ -0,0 +1,56 @@ +# SpeedTest + +没有 Flash,没有 Java,没有 Websocket,没有废话。 + +这是一个用 Javascript 实现的非常轻量级的速度测试,使用 XMLHttpRequest 和 Web Workers。 + +![SpeedTest](https://github.com/librespeed/speedtest/blob/master/.logo/logo3.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 下载 ++ 上传 ++ Ping ++ 抖动 ++ IP 地址、ISP、距服务器的距离(可选) ++ 遥测(可选) ++ 结果共享(可选) ++ 多点测试(可选) + +## 安装说明 + ++ `访问密码` + +前提:`开启遥测` + +访问统计页面的密码。如果未设置,统计页面将不允许访问。 + +开启遥测后: `http://127.0.0.1/results/stats.php` 处将提供统计页面 + ++ `隐藏 IP 地址 (开启遥测)` + +启用遥测时,将从收集的遥测中编辑 IP 地址和主机名,以实现更好的隐私。 + ++ `邮箱地址 (开启遥测)` + +GDPR 请求的电子邮件地址。启用遥测时必须指定。 + ++ `ipinfo.io 的 API 密钥 (开启遥测)` + +如果您希望提供大量测试,则为必需。否则,ipinfo.io 将限制您的访问。 + ++ `禁用 ipinfo.io (开启遥测)` + +禁用后,则不会从 ipinfo.io 获取 ISP 信息和距离。 + ++ `距离单位 (km/mi)` + +如果禁用 `禁用 ipinfo.io (开启遥测)`,此项决定如何测量距服务器的距离。 + +`km` 代表公里, `mi` 代表英里,也可以是空字符串以禁用距离测量。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/speedtest/data.yml b/appstore/speedtest/data.yml new file mode 100644 index 00000000..8ee3e541 --- /dev/null +++ b/appstore/speedtest/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: speedtest + name: SpeedTest + tags: + - WebSite + - Tool + - Local + shortDescZh: 轻量级的速度测试 + shortDescEn: Lightweight speed test + type: website + crossVersionUpdate: true + limit: 0 + website: https://librespeed.org/ + github: https://github.com/librespeed/speedtest/ + document: https://github.com/librespeed/speedtest/ diff --git a/appstore/speedtest/logo.png b/appstore/speedtest/logo.png new file mode 100644 index 00000000..33a1bde6 Binary files /dev/null and b/appstore/speedtest/logo.png differ diff --git a/appstore/stream-rec-backend/0.7.2/.env b/appstore/stream-rec-backend/0.7.2/.env new file mode 100644 index 00000000..0362943f --- /dev/null +++ b/appstore/stream-rec-backend/0.7.2/.env @@ -0,0 +1,12 @@ +# 数据持久化路径 [必填] +STREAM_REC_ROOT_PATH=/home/stream-rec + +# API 端口 [必填] +PANEL_APP_PORT_HTTP=12555 + +# 登录密码 (初始化) [必填] +LOGIN_SECRET=stream-rec + +# 网络代理 +HTTP_PROXY= + diff --git a/appstore/stream-rec-backend/0.7.2/data.yml b/appstore/stream-rec-backend/0.7.2/data.yml new file mode 100644 index 00000000..08ef890a --- /dev/null +++ b/appstore/stream-rec-backend/0.7.2/data.yml @@ -0,0 +1,32 @@ +additionalProperties: + formFields: + - default: "/home/stream-rec" + edit: true + envKey: STREAM_REC_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 12555 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: API 端口 + labelEn: API port + required: true + rule: paramPort + type: number + - default: "stream-rec" + edit: false + envKey: LOGIN_SECRET + labelZh: 登录密码 (初始化) + labelEn: Login Password (Initialization) + required: true + random: true + type: text + - default: "" + edit: true + envKey: HTTP_PROXY + labelZh: 网络代理 + labelEn: Network Proxy + required: false + type: text diff --git a/appstore/stream-rec-backend/0.7.2/docker-compose.yml b/appstore/stream-rec-backend/0.7.2/docker-compose.yml new file mode 100644 index 00000000..0d6d2566 --- /dev/null +++ b/appstore/stream-rec-backend/0.7.2/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + stream-rec-backend: + container_name: stream-rec-backend + env_file: + - ./envs/global.env + - .env + environment: + - LOG_LEVEL=INFO + - DB_PATH=/opt/records + - DOWNLOAD_PATH=/download + image: streamrec/stream-rec:v0.7.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:12555 + restart: always + volumes: + - ${STREAM_REC_ROOT_PATH}/records:/opt/records + - ${STREAM_REC_ROOT_PATH}/download:/download diff --git a/appstore/stream-rec-backend/0.7.2/envs/default.env b/appstore/stream-rec-backend/0.7.2/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/stream-rec-backend/0.7.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/stream-rec-backend/0.7.2/envs/global.env b/appstore/stream-rec-backend/0.7.2/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/stream-rec-backend/0.7.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/stream-rec-backend/0.7.2/scripts/init.sh b/appstore/stream-rec-backend/0.7.2/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/stream-rec-backend/0.7.2/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/stream-rec-backend/0.7.2/scripts/uninstall.sh b/appstore/stream-rec-backend/0.7.2/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/stream-rec-backend/0.7.2/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/stream-rec-backend/0.7.2/scripts/upgrade.sh b/appstore/stream-rec-backend/0.7.2/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/stream-rec-backend/0.7.2/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/stream-rec-backend/README.md b/appstore/stream-rec-backend/README.md new file mode 100644 index 00000000..fdee4b89 --- /dev/null +++ b/appstore/stream-rec-backend/README.md @@ -0,0 +1,72 @@ +# Stream-Rec + +Stream-rec 是一个自动录制各种直播平台的工具。 + +![Stream-Rec](https://file.lifebus.top/imgs/stream_rec_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + +基于 Kotlin, Ktor, 和 ffmpeg。 + ++ 自动录播,可配置录制质量,路径,格式,并发量,分段录制(时间或文件大小),分段上传,根据直播标题和开始时间自动命名文件。 ++ 自动弹幕录制(XML格式),可使用 DanmakuFactory 进行弹幕转换,或配合AList来实现弹幕自动挂载。 ++ 使用 SQLite 持久化存储录播和上传信息 ++ 支持 Rclone 上传到云存储 ++ 使用 Web 界面进行配置 ++ 支持 Docker + +## 直播平台支持列表 + +| 平台 | 录制 | 弹幕 | 链接格式 | +|---------|----|----|-----------------------------------------------| +| 抖音 | ✅ | ✅ | `https://www.live.douyin.com/{抖音id}` | +| 斗鱼 | ✅ | ✅ | `https://www.douyu.com/{直播间}` | +| 虎牙 | ✅ | ✅ | `https://www.huya.com/{直播间}` | +| PandaTV | ✅ | ✅ | `https://www.pandalive.co.kr/live/play/{直播间}` | +| Twitch | ✅ | ✅ | `https://www.twitch.tv/{直播间}` | + +## 安装说明 + +> 默认账户 +> +> 用户名:stream-rec +> +> 密码:stream-rec 或 `登录密码 (初始化)` 配置 + +### 必须修改配置 + ++ `WebSocket API 地址` + +默认值:`ws://stream-rec-backend:12555/live/update` + +需要获取: + ++ 宿主机 IP 地址 ++ 配置项 `API 端口`, 默认值:`12555` + +填写格式:`ws://{宿主机 IP 地址}:{API 端口}/live/update` + +### 可修改配置 + ++ `NextAuth 服务器地址` + +默认值:`http://localhost:15275/` + +需要获取: + ++ 宿主机 IP 地址 ++ 配置项 `WebUI 端口`, 默认值:`15275` + +填写格式:`http://{宿主机 IP 地址}:{WebUI 端口}/` + +### 无法修改项目 + ++ `API 地址` + +当前部署方式为 前后端合并部署,请勿强制修改参数值。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/stream-rec-backend/data.yml b/appstore/stream-rec-backend/data.yml new file mode 100644 index 00000000..2117cfae --- /dev/null +++ b/appstore/stream-rec-backend/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: stream-rec-backend + name: Stream Rec 后端服务 + tags: + - Tool + - Local + shortDescZh: 自动流媒体录制工具 + shortDescEn: Automatic streaming media recording tool + type: tool + crossVersionUpdate: true + limit: 0 + website: https://github.com/hua0512/stream-rec/ + github: https://github.com/hua0512/stream-rec/ + document: https://github.com/hua0512/stream-rec/ diff --git a/appstore/stream-rec-backend/logo.png b/appstore/stream-rec-backend/logo.png new file mode 100644 index 00000000..9bc4578a Binary files /dev/null and b/appstore/stream-rec-backend/logo.png differ diff --git a/appstore/stream-rec-frontend/0.7.2/.env b/appstore/stream-rec-frontend/0.7.2/.env new file mode 100644 index 00000000..30b031d3 --- /dev/null +++ b/appstore/stream-rec-frontend/0.7.2/.env @@ -0,0 +1,18 @@ +# 数据持久化路径 [必填] +STREAM_REC_ROOT_PATH=/home/stream-rec + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=15275 + +# NextAuth 加密密钥 [必填] +NEXTAUTH_SECRET= + +# API 地址 [必填] +API_URL=http://stream-rec-backend:12555/api + +# WebSocket API 地址 [必填] +WS_API_URL=ws://stream-rec-backend:12555/live/update + +# NextAuth 服务器地址 [必填] +NEXTAUTH_URL=http://localhost:15275/ + diff --git a/appstore/stream-rec-frontend/0.7.2/data.yml b/appstore/stream-rec-frontend/0.7.2/data.yml new file mode 100644 index 00000000..c90bf428 --- /dev/null +++ b/appstore/stream-rec-frontend/0.7.2/data.yml @@ -0,0 +1,46 @@ +additionalProperties: + formFields: + - default: "/home/stream-rec" + edit: true + envKey: STREAM_REC_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 15275 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: NEXTAUTH_SECRET + labelZh: NextAuth 加密密钥 + labelEn: NextAuth Secret + required: true + random: true + type: text + - default: "http://stream-rec-backend:12555/api" + edit: true + envKey: API_URL + labelZh: API 地址 + labelEn: API URL + required: true + type: text + - default: "ws://stream-rec-backend:12555/live/update" + edit: true + envKey: WS_API_URL + labelZh: WebSocket API 地址 + labelEn: WebSocket API URL + required: true + type: text + - default: "http://localhost:15275/" + edit: true + envKey: NEXTAUTH_URL + labelZh: NextAuth 服务器地址 + labelEn: NextAuth Server URL + required: true + type: text diff --git a/appstore/stream-rec-frontend/0.7.2/docker-compose.yml b/appstore/stream-rec-frontend/0.7.2/docker-compose.yml new file mode 100644 index 00000000..1f4d4028 --- /dev/null +++ b/appstore/stream-rec-frontend/0.7.2/docker-compose.yml @@ -0,0 +1,17 @@ +networks: + 1panel-network: + external: true +services: + stream-rec-frontend: + container_name: stream-rec-frontend + env_file: + - ./envs/global.env + - .env + image: streamrec/stream-rec-front:v0.7.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:15275 + restart: always diff --git a/appstore/stream-rec-frontend/0.7.2/envs/default.env b/appstore/stream-rec-frontend/0.7.2/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/stream-rec-frontend/0.7.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/stream-rec-frontend/0.7.2/envs/global.env b/appstore/stream-rec-frontend/0.7.2/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/stream-rec-frontend/0.7.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/stream-rec-frontend/0.7.2/scripts/init.sh b/appstore/stream-rec-frontend/0.7.2/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/stream-rec-frontend/0.7.2/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/stream-rec-frontend/0.7.2/scripts/uninstall.sh b/appstore/stream-rec-frontend/0.7.2/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/stream-rec-frontend/0.7.2/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/stream-rec-frontend/0.7.2/scripts/upgrade.sh b/appstore/stream-rec-frontend/0.7.2/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/stream-rec-frontend/0.7.2/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/stream-rec-frontend/README.md b/appstore/stream-rec-frontend/README.md new file mode 100644 index 00000000..fdee4b89 --- /dev/null +++ b/appstore/stream-rec-frontend/README.md @@ -0,0 +1,72 @@ +# Stream-Rec + +Stream-rec 是一个自动录制各种直播平台的工具。 + +![Stream-Rec](https://file.lifebus.top/imgs/stream_rec_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + +基于 Kotlin, Ktor, 和 ffmpeg。 + ++ 自动录播,可配置录制质量,路径,格式,并发量,分段录制(时间或文件大小),分段上传,根据直播标题和开始时间自动命名文件。 ++ 自动弹幕录制(XML格式),可使用 DanmakuFactory 进行弹幕转换,或配合AList来实现弹幕自动挂载。 ++ 使用 SQLite 持久化存储录播和上传信息 ++ 支持 Rclone 上传到云存储 ++ 使用 Web 界面进行配置 ++ 支持 Docker + +## 直播平台支持列表 + +| 平台 | 录制 | 弹幕 | 链接格式 | +|---------|----|----|-----------------------------------------------| +| 抖音 | ✅ | ✅ | `https://www.live.douyin.com/{抖音id}` | +| 斗鱼 | ✅ | ✅ | `https://www.douyu.com/{直播间}` | +| 虎牙 | ✅ | ✅ | `https://www.huya.com/{直播间}` | +| PandaTV | ✅ | ✅ | `https://www.pandalive.co.kr/live/play/{直播间}` | +| Twitch | ✅ | ✅ | `https://www.twitch.tv/{直播间}` | + +## 安装说明 + +> 默认账户 +> +> 用户名:stream-rec +> +> 密码:stream-rec 或 `登录密码 (初始化)` 配置 + +### 必须修改配置 + ++ `WebSocket API 地址` + +默认值:`ws://stream-rec-backend:12555/live/update` + +需要获取: + ++ 宿主机 IP 地址 ++ 配置项 `API 端口`, 默认值:`12555` + +填写格式:`ws://{宿主机 IP 地址}:{API 端口}/live/update` + +### 可修改配置 + ++ `NextAuth 服务器地址` + +默认值:`http://localhost:15275/` + +需要获取: + ++ 宿主机 IP 地址 ++ 配置项 `WebUI 端口`, 默认值:`15275` + +填写格式:`http://{宿主机 IP 地址}:{WebUI 端口}/` + +### 无法修改项目 + ++ `API 地址` + +当前部署方式为 前后端合并部署,请勿强制修改参数值。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/stream-rec-frontend/data.yml b/appstore/stream-rec-frontend/data.yml new file mode 100644 index 00000000..c827fdbf --- /dev/null +++ b/appstore/stream-rec-frontend/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: stream-rec-frontend + name: Stream Rec WebUI + tags: + - WebSite + - Tool + - Local + shortDescZh: 自动流媒体录制工具 + shortDescEn: Automatic streaming media recording tool + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/hua0512/stream-rec/ + github: https://github.com/hua0512/stream-rec/ + document: https://github.com/hua0512/stream-rec/ diff --git a/appstore/stream-rec-frontend/logo.png b/appstore/stream-rec-frontend/logo.png new file mode 100644 index 00000000..9bc4578a Binary files /dev/null and b/appstore/stream-rec-frontend/logo.png differ diff --git a/appstore/stream-rec/0.7.2/.env b/appstore/stream-rec/0.7.2/.env new file mode 100644 index 00000000..0a67f96c --- /dev/null +++ b/appstore/stream-rec/0.7.2/.env @@ -0,0 +1,27 @@ +# 数据持久化路径 [必填] +STREAM_REC_ROOT_PATH=/home/stream-rec + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=15275 + +# API 端口 [必填] +PANEL_APP_PORT_API=12555 + +# 登录密码 (初始化) [必填] +LOGIN_SECRET=stream-rec + +# NextAuth 加密密钥 [必填] +NEXTAUTH_SECRET= + +# NextAuth 服务器地址 [必填] +NEXTAUTH_URL=http://localhost:15275/ + +# API 地址 [必填] +API_URL=http://stream-rec-backend:12555/api + +# WebSocket API 地址 [必填] +WS_API_URL=ws://stream-rec-backend:12555/live/update + +# 网络代理 +HTTP_PROXY= + diff --git a/appstore/stream-rec/0.7.2/data.yml b/appstore/stream-rec/0.7.2/data.yml new file mode 100644 index 00000000..18ef3bb3 --- /dev/null +++ b/appstore/stream-rec/0.7.2/data.yml @@ -0,0 +1,69 @@ +additionalProperties: + formFields: + - default: "/home/stream-rec" + edit: true + envKey: STREAM_REC_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 15275 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 12555 + edit: true + envKey: PANEL_APP_PORT_API + labelZh: API 端口 + labelEn: API port + required: true + rule: paramPort + type: number + - default: "stream-rec" + edit: false + envKey: LOGIN_SECRET + labelZh: 登录密码 (初始化) + labelEn: Login Password (Initialization) + required: true + random: true + type: text + - default: "" + edit: true + envKey: NEXTAUTH_SECRET + labelZh: NextAuth 加密密钥 + labelEn: NextAuth Secret + required: true + random: true + type: text + - default: "http://localhost:15275/" + edit: true + envKey: NEXTAUTH_URL + labelZh: NextAuth 服务器地址 + labelEn: NextAuth Server URL + required: true + type: text + - default: "http://stream-rec-backend:12555/api" + disabled: true + envKey: API_URL + labelZh: API 地址 + labelEn: API URL + required: true + type: text + - default: "ws://stream-rec-backend:12555/live/update" + edit: true + envKey: WS_API_URL + labelZh: WebSocket API 地址 + labelEn: WebSocket API URL + required: true + type: text + - default: "" + edit: true + envKey: HTTP_PROXY + labelZh: 网络代理 + labelEn: Network Proxy + required: false + type: text diff --git a/appstore/stream-rec/0.7.2/docker-compose.yml b/appstore/stream-rec/0.7.2/docker-compose.yml new file mode 100644 index 00000000..44a2db86 --- /dev/null +++ b/appstore/stream-rec/0.7.2/docker-compose.yml @@ -0,0 +1,39 @@ +networks: + 1panel-network: + external: true +services: + stream-rec-backend: + container_name: stream-rec-backend + env_file: + - ./envs/global.env + - .env + environment: + - LOG_LEVEL=INFO + - DB_PATH=/opt/records + - DOWNLOAD_PATH=/download + image: streamrec/stream-rec:v0.7.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_API}:12555 + restart: always + volumes: + - ${STREAM_REC_ROOT_PATH}/records:/opt/records + - ${STREAM_REC_ROOT_PATH}/download:/download + stream-rec-frontend: + container_name: stream-rec + depends_on: + - stream-rec-backend + env_file: + - ./envs/global.env + - .env + image: streamrec/stream-rec-front:v0.7.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:15275 + restart: always diff --git a/appstore/stream-rec/0.7.2/envs/default.env b/appstore/stream-rec/0.7.2/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/stream-rec/0.7.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/stream-rec/0.7.2/envs/global.env b/appstore/stream-rec/0.7.2/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/stream-rec/0.7.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/stream-rec/0.7.2/scripts/init.sh b/appstore/stream-rec/0.7.2/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/stream-rec/0.7.2/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/stream-rec/0.7.2/scripts/uninstall.sh b/appstore/stream-rec/0.7.2/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/stream-rec/0.7.2/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/stream-rec/0.7.2/scripts/upgrade.sh b/appstore/stream-rec/0.7.2/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/stream-rec/0.7.2/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/stream-rec/README.md b/appstore/stream-rec/README.md new file mode 100644 index 00000000..fdee4b89 --- /dev/null +++ b/appstore/stream-rec/README.md @@ -0,0 +1,72 @@ +# Stream-Rec + +Stream-rec 是一个自动录制各种直播平台的工具。 + +![Stream-Rec](https://file.lifebus.top/imgs/stream_rec_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + +基于 Kotlin, Ktor, 和 ffmpeg。 + ++ 自动录播,可配置录制质量,路径,格式,并发量,分段录制(时间或文件大小),分段上传,根据直播标题和开始时间自动命名文件。 ++ 自动弹幕录制(XML格式),可使用 DanmakuFactory 进行弹幕转换,或配合AList来实现弹幕自动挂载。 ++ 使用 SQLite 持久化存储录播和上传信息 ++ 支持 Rclone 上传到云存储 ++ 使用 Web 界面进行配置 ++ 支持 Docker + +## 直播平台支持列表 + +| 平台 | 录制 | 弹幕 | 链接格式 | +|---------|----|----|-----------------------------------------------| +| 抖音 | ✅ | ✅ | `https://www.live.douyin.com/{抖音id}` | +| 斗鱼 | ✅ | ✅ | `https://www.douyu.com/{直播间}` | +| 虎牙 | ✅ | ✅ | `https://www.huya.com/{直播间}` | +| PandaTV | ✅ | ✅ | `https://www.pandalive.co.kr/live/play/{直播间}` | +| Twitch | ✅ | ✅ | `https://www.twitch.tv/{直播间}` | + +## 安装说明 + +> 默认账户 +> +> 用户名:stream-rec +> +> 密码:stream-rec 或 `登录密码 (初始化)` 配置 + +### 必须修改配置 + ++ `WebSocket API 地址` + +默认值:`ws://stream-rec-backend:12555/live/update` + +需要获取: + ++ 宿主机 IP 地址 ++ 配置项 `API 端口`, 默认值:`12555` + +填写格式:`ws://{宿主机 IP 地址}:{API 端口}/live/update` + +### 可修改配置 + ++ `NextAuth 服务器地址` + +默认值:`http://localhost:15275/` + +需要获取: + ++ 宿主机 IP 地址 ++ 配置项 `WebUI 端口`, 默认值:`15275` + +填写格式:`http://{宿主机 IP 地址}:{WebUI 端口}/` + +### 无法修改项目 + ++ `API 地址` + +当前部署方式为 前后端合并部署,请勿强制修改参数值。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/stream-rec/data.yml b/appstore/stream-rec/data.yml new file mode 100644 index 00000000..64bb01d6 --- /dev/null +++ b/appstore/stream-rec/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: stream-rec + name: Stream Rec + tags: + - WebSite + - Tool + - Local + shortDescZh: 自动流媒体录制工具 + shortDescEn: Automatic streaming media recording tool + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/hua0512/stream-rec/ + github: https://github.com/hua0512/stream-rec/ + document: https://github.com/hua0512/stream-rec/ diff --git a/appstore/stream-rec/logo.png b/appstore/stream-rec/logo.png new file mode 100644 index 00000000..9bc4578a Binary files /dev/null and b/appstore/stream-rec/logo.png differ diff --git a/appstore/sun-panel/1.6.0/.env b/appstore/sun-panel/1.6.0/.env new file mode 100644 index 00000000..206987bc --- /dev/null +++ b/appstore/sun-panel/1.6.0/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +SUN_PANEL_ROOT_PATH=/home/sun-panel + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=3002 + diff --git a/appstore/sun-panel/1.6.0/data.yml b/appstore/sun-panel/1.6.0/data.yml new file mode 100644 index 00000000..64432c98 --- /dev/null +++ b/appstore/sun-panel/1.6.0/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: "/home/sun-panel" + edit: true + envKey: SUN_PANEL_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3002 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number diff --git a/appstore/sun-panel/1.6.0/docker-compose.yml b/appstore/sun-panel/1.6.0/docker-compose.yml new file mode 100644 index 00000000..85604478 --- /dev/null +++ b/appstore/sun-panel/1.6.0/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + sun-panel: + container_name: sun-panel + env_file: + - ./envs/global.env + - .env + image: hslr/sun-panel:1.6.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3002 + restart: always + volumes: + - ${SUN_PANEL_ROOT_PATH}/conf:/app/conf + - ${SUN_PANEL_ROOT_PATH}/database:/app/database + - ${SUN_PANEL_ROOT_PATH}/uploads:/app/uploads + - /var/run/docker.sock:/var/run/docker.sock diff --git a/appstore/sun-panel/1.6.0/envs/default.env b/appstore/sun-panel/1.6.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/sun-panel/1.6.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/sun-panel/1.6.0/envs/global.env b/appstore/sun-panel/1.6.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/sun-panel/1.6.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/sun-panel/1.6.0/scripts/init.sh b/appstore/sun-panel/1.6.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/sun-panel/1.6.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/sun-panel/1.6.0/scripts/uninstall.sh b/appstore/sun-panel/1.6.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/sun-panel/1.6.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/sun-panel/1.6.0/scripts/upgrade.sh b/appstore/sun-panel/1.6.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/sun-panel/1.6.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/sun-panel/README.md b/appstore/sun-panel/README.md new file mode 100644 index 00000000..15048783 --- /dev/null +++ b/appstore/sun-panel/README.md @@ -0,0 +1,30 @@ +# Sun Panel + +一个服务器、NAS导航面板、Homepage、浏览器首页 + +![Sun Panel](https://file.lifebus.top/imgs/sun_panel_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 清爽界面,强大功能,低资源消耗 ++ 🍊 易用,可视化操作,零代码使用 ++ 一键切换内外网模式 ++ 支持 Docker 部署(兼容 Arm 系统) ++ 🎪 支持多账户隔离 ++ 🎏 支持查看系统状态 ++ 🫙 支持自定义 JS、CSS ++ 🍻 无需连接外部数据库的简单用法 ++ 🍾 免费组合丰富图标样式,支持 Iconify 图标库 ++ 支持在网页中打开小窗口(某些第三方网站可能阻止此功能) + +## 安装说明 + +> 默认 用户名:`admin@sun.cc` +> +> 默认 密码:`12345678` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/sun-panel/data.yml b/appstore/sun-panel/data.yml new file mode 100644 index 00000000..310a1cc5 --- /dev/null +++ b/appstore/sun-panel/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: sun-panel + name: Sun Panel + tags: + - WebSite + - Local + shortDescZh: 一个服务器、NAS导航面板、Homepage、浏览器首页 + shortDescEn: A server, NAS navigation panel, Homepage, Browser homepage + type: website + crossVersionUpdate: true + limit: 0 + website: https://doc.sun-panel.top/ + github: https://github.com/hslr-s/sun-panel/ + document: https://doc.sun-panel.top/ diff --git a/appstore/sun-panel/logo.png b/appstore/sun-panel/logo.png new file mode 100644 index 00000000..a3aac61d Binary files /dev/null and b/appstore/sun-panel/logo.png differ diff --git a/appstore/synapse-admin/0.10.3/.env b/appstore/synapse-admin/0.10.3/.env new file mode 100644 index 00000000..3f99c497 --- /dev/null +++ b/appstore/synapse-admin/0.10.3/.env @@ -0,0 +1,3 @@ +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8080 + diff --git a/appstore/synapse-admin/0.10.3/data.yml b/appstore/synapse-admin/0.10.3/data.yml new file mode 100644 index 00000000..97169324 --- /dev/null +++ b/appstore/synapse-admin/0.10.3/data.yml @@ -0,0 +1,10 @@ +additionalProperties: + formFields: + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number diff --git a/appstore/synapse-admin/0.10.3/docker-compose.yml b/appstore/synapse-admin/0.10.3/docker-compose.yml new file mode 100644 index 00000000..e074f2e9 --- /dev/null +++ b/appstore/synapse-admin/0.10.3/docker-compose.yml @@ -0,0 +1,17 @@ +networks: + 1panel-network: + external: true +services: + synapse-admin: + container_name: synapse-admin + env_file: + - ./envs/global.env + - .env + image: awesometechnologies/synapse-admin:0.10.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always diff --git a/appstore/synapse-admin/0.10.3/envs/default.env b/appstore/synapse-admin/0.10.3/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/synapse-admin/0.10.3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/synapse-admin/0.10.3/envs/global.env b/appstore/synapse-admin/0.10.3/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/synapse-admin/0.10.3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/synapse-admin/0.10.3/scripts/init.sh b/appstore/synapse-admin/0.10.3/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/synapse-admin/0.10.3/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/synapse-admin/0.10.3/scripts/uninstall.sh b/appstore/synapse-admin/0.10.3/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/synapse-admin/0.10.3/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/synapse-admin/0.10.3/scripts/upgrade.sh b/appstore/synapse-admin/0.10.3/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/synapse-admin/0.10.3/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/synapse-admin/README.md b/appstore/synapse-admin/README.md new file mode 100644 index 00000000..3c92a000 --- /dev/null +++ b/appstore/synapse-admin/README.md @@ -0,0 +1,19 @@ +# Synapse Admin + +Synapse 是一个开源的 Matrix 家庭服务器实现,由 Element 开发和维护。Matrix 是安全且可互操作实时通信的开放标准。 + +![Synapse](https://file.lifebus.top/imgs/synapse_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 安装说明 + +本应用为 Synapse 服务器的管理工具,用于管理 Synapse 服务器的配置文件,用户,房间等信息。 + +### 移动客户端 + +[![Download on the App Store](http://www.tananaev.com/badges/app-store.svg)](https://apps.apple.com/us/app/element-messenger/id1083446067) [![Get it on Google Play](http://www.tananaev.com/badges/google-play.svg)](https://play.google.com/store/apps/details?id=im.vector.app) [![Get it on F-Droid](http://www.tananaev.com/badges/f-droid.svg)](https://f-droid.org/packages/im.vector.app/) + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/synapse-admin/data.yml b/appstore/synapse-admin/data.yml new file mode 100644 index 00000000..76ce5dd4 --- /dev/null +++ b/appstore/synapse-admin/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: synapse-admin + name: Synapse Admin + tags: + - WebSite + - Middleware + - Local + shortDescZh: 用于安全、分散通信的开放网络 + shortDescEn: An open network for secure, decentralised communication + type: website + crossVersionUpdate: true + limit: 0 + website: https://matrix.org/ + github: https://github.com/Awesome-Technologies/synapse-admin/ + document: https://matrix.org/ diff --git a/appstore/synapse-admin/logo.png b/appstore/synapse-admin/logo.png new file mode 100644 index 00000000..8a92cb42 Binary files /dev/null and b/appstore/synapse-admin/logo.png differ diff --git a/appstore/synapse/1.120.0/.env b/appstore/synapse/1.120.0/.env new file mode 100644 index 00000000..1b19bb63 --- /dev/null +++ b/appstore/synapse/1.120.0/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +SYNAPSE_ROOT_PATH=/home/synapse + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8008 + +# 服务域名 [必填] +SYNAPSE_SERVER_NAME=matrix.example.com + diff --git a/appstore/synapse/1.120.0/data.yml b/appstore/synapse/1.120.0/data.yml new file mode 100644 index 00000000..2de9091a --- /dev/null +++ b/appstore/synapse/1.120.0/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: "/home/synapse" + edit: true + envKey: SYNAPSE_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8008 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number + - default: "matrix.example.com" + edit: true + envKey: SYNAPSE_SERVER_NAME + labelZh: 服务域名 + labelEn: Domain Name + required: true + type: text diff --git a/appstore/synapse/1.120.0/docker-compose.yml b/appstore/synapse/1.120.0/docker-compose.yml new file mode 100644 index 00000000..80bee0a7 --- /dev/null +++ b/appstore/synapse/1.120.0/docker-compose.yml @@ -0,0 +1,39 @@ +networks: + 1panel-network: + external: true +services: + synapse: + container_name: synapse + depends_on: + - synapse-init + env_file: + - ./envs/global.env + - .env + image: matrixdotorg/synapse:v1.120.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8008 + restart: always + volumes: + - ${SYNAPSE_ROOT_PATH}/data:/data + synapse-init: + container_name: init-synapse + entrypoint: + - /start.py + - generate + env_file: + - ./envs/global.env + - .env + environment: + - SYNAPSE_REPORT_STATS=no + - SYNAPSE_NO_TLS=true + - SYNAPSE_HTTP_PORT=8008 + image: matrixdotorg/synapse:v1.120.0 + networks: + - 1panel-network + restart: false + volumes: + - ${SYNAPSE_ROOT_PATH}/data:/data diff --git a/appstore/synapse/1.120.0/envs/default.env b/appstore/synapse/1.120.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/synapse/1.120.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/synapse/1.120.0/envs/global.env b/appstore/synapse/1.120.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/synapse/1.120.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/synapse/1.120.0/scripts/init.sh b/appstore/synapse/1.120.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/synapse/1.120.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/synapse/1.120.0/scripts/uninstall.sh b/appstore/synapse/1.120.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/synapse/1.120.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/synapse/1.120.0/scripts/upgrade.sh b/appstore/synapse/1.120.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/synapse/1.120.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/synapse/README.md b/appstore/synapse/README.md new file mode 100644 index 00000000..a74a6fe9 --- /dev/null +++ b/appstore/synapse/README.md @@ -0,0 +1,82 @@ +# Synapse + +Synapse 是一个开源的 Matrix 家庭服务器实现,由 Element 开发和维护。Matrix 是安全且可互操作实时通信的开放标准。 + +![Synapse](https://file.lifebus.top/imgs/synapse_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 安装说明 + +
+
+ ⚠️ +
+ 配置初始化
+ 该应用需要生成前置配置文件,如果首次生成失败,请删除持久化目录重试 +
+
+
+ +### 快捷命令 + +#### 查看帮助 + +```sh +register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml --help +``` + +#### 生成管理员用户 + +> 请替换以下参数 +> +> adminName: 管理员用户名 +> +> password: 管理员密码 + +```sh +register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml -u adminName -p password -a +``` + +#### 生成普通用户 + +> 请替换以下参数 +> +> userName: 用户名 +> +> password: 密码 + +```sh +register_new_matrix_user http://localhost:8008 -c /data/homeserver.yaml -u userName -p password +``` + +## 反向代理 + +> Nginx + +```nginx + location ~ ^(/_matrix|/_synapse/client) { + # note: do not add a path (even a single /) after the port in `proxy_pass`, + # otherwise nginx will canonicalise the URI and cause signature verification + # errors. + proxy_pass http://localhost:8008; + proxy_set_header X-Forwarded-For $remote_addr; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $host; + + # Nginx by default only allows file uploads up to 1M in size + # Increase client_max_body_size to match max_upload_size defined in homeserver.yaml + client_max_body_size 50M; + + # Synapse responses may be chunked, which is an HTTP/1.1 feature. + proxy_http_version 1.1; + } +``` + +### 移动客户端 + +[![Download on the App Store](http://www.tananaev.com/badges/app-store.svg)](https://apps.apple.com/us/app/element-messenger/id1083446067) [![Get it on Google Play](http://www.tananaev.com/badges/google-play.svg)](https://play.google.com/store/apps/details?id=im.vector.app) [![Get it on F-Droid](http://www.tananaev.com/badges/f-droid.svg)](https://f-droid.org/packages/im.vector.app/) + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/synapse/data.yml b/appstore/synapse/data.yml new file mode 100644 index 00000000..33254f55 --- /dev/null +++ b/appstore/synapse/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: synapse + name: Synapse + tags: + - WebSite + - Middleware + - Local + shortDescZh: 用于安全、分散通信的开放网络 + shortDescEn: An open network for secure, decentralised communication + type: website + crossVersionUpdate: true + limit: 0 + website: https://matrix.org/ + github: https://github.com/matrix-org/synapse/ + document: https://matrix.org/ diff --git a/appstore/synapse/logo.png b/appstore/synapse/logo.png new file mode 100644 index 00000000..8a92cb42 Binary files /dev/null and b/appstore/synapse/logo.png differ diff --git a/appstore/tangsengdaodao/1.5/.env b/appstore/tangsengdaodao/1.5/.env new file mode 100644 index 00000000..f23fb55b --- /dev/null +++ b/appstore/tangsengdaodao/1.5/.env @@ -0,0 +1,81 @@ +# MySQL 服务 (前置检查) [必填] +PANEL_DB_TYPE=mysql + +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# 数据持久化路径 [必填] +TANGSENGDAODAO_ROOT_PATH=/home/tangsengdaodao + +# TCP 通讯端口 [必填] +PANEL_APP_PORT_WK_TCP=5100 + +# WebSocket 通讯端口 [必填] +PANEL_APP_PORT_WK_WS=5200 + +# 悟空IM 后台监控端口 [必填] +PANEL_APP_PORT_WK_WEB_SERVER=5300 + +# 唐僧叨叨 API 端口 [必填] +PANEL_APP_PORT_TS_APP_HTTP=8090 + +# 唐僧叨叨 WEB端口 [必填] +PANEL_APP_PORT_TS_APP_WEB=80 + +# 唐僧叨叨 后台管理端口 [必填] +PANEL_APP_PORT_HTTP=80 + +# 外部访问IP [必填] +WK_EXTERNAL_IP= + +# 超级管理员 账户 [必填] +TS_ADMIN=admin + +# 超级管理员 密码 [必填] +TS_ADMINPWD=tsdd@123456 + +# 默认注册验证码 [必填] +TS_SMSCODE=123456 + +# 数据库 主机 [必填] +DB_HOST=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=3306 + +# 数据库 用户名 [必填] +DB_USERNAME=tsdd + +# 数据库 密码 [必填] +DB_PASSWORD=tsdd + +# 数据库 名称 [必填] +DB_NAME=tsdd + +# Redis 主机 [必填] +REDIS_HOST=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 连接密码 +REDIS_PASSWORD= + +# 默认头像提供地址 [必填] +TS_AVATAR_DEFAULTBASEURL=https://api.multiavatar.com/{avatar}.png + +# 应用名称 [必填] +TS_APPNAME=唐僧叨叨 + +# 欢迎消息 [必填] +TS_WELCOMEMESSAGE=欢迎使用{{appName}} + +# 手机号搜索功能 [必填] +TS_PHONESEARCHOFF=true + +# 在线状态功能 [必填] +TS_ONLINESTATUSON=true + +# 自动升级超级群组临界值 [必填] +TS_GROUPUPGRADEWHENMEMBERCOUNT=1000 + diff --git a/appstore/tangsengdaodao/1.5/data.yml b/appstore/tangsengdaodao/1.5/data.yml new file mode 100644 index 00000000..c4854270 --- /dev/null +++ b/appstore/tangsengdaodao/1.5/data.yml @@ -0,0 +1,222 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: mysql + edit: true + envKey: PANEL_DB_TYPE + labelZh: MySQL 服务 (前置检查) + labelEn: Database Service (Pre-check) + required: true + type: apps + values: + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - child: + default: "" + envKey: PANEL_REDIS_SERVICE + required: true + type: service + default: redis + envKey: PANEL_REDIS_TYPE + labelZh: Redis 服务 (前置检查) + labelEn: Redis Service (Pre-check) + required: true + type: apps + values: + - label: Redis + value: redis + - default: "/home/tangsengdaodao" + edit: true + envKey: TANGSENGDAODAO_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 5100 + edit: true + envKey: PANEL_APP_PORT_WK_TCP + labelZh: TCP 通讯端口 + labelEn: TCP communication port + required: true + type: number + - default: 5200 + edit: true + envKey: PANEL_APP_PORT_WK_WS + labelZh: WebSocket 通讯端口 + labelEn: WebSocket communication port + required: true + type: number + - default: 5300 + edit: true + envKey: PANEL_APP_PORT_WK_WEB_SERVER + labelZh: 悟空IM 后台监控端口 + labelEn: WuKongIM background monitoring port + required: true + type: number + - default: 8090 + edit: true + envKey: PANEL_APP_PORT_TS_APP_HTTP + labelZh: 唐僧叨叨 API 端口 + labelEn: TangSengDaoDao API port + required: true + type: number + - default: 80 + edit: true + envKey: PANEL_APP_PORT_TS_APP_WEB + labelZh: 唐僧叨叨 WEB端口 + labelEn: TangSengDaoDao WEB port + required: true + type: number + - default: 80 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 唐僧叨叨 后台管理端口 + labelEn: TangSengDaoDao Management background port + required: true + type: number + - default: "" + edit: true + envKey: WK_EXTERNAL_IP + labelEn: External IP + labelZh: 外部访问IP + required: true + type: text + - default: "admin" + edit: true + envKey: TS_ADMIN + labelZh: 超级管理员 账户 + labelEn: Super administrator account + required: true + type: text + - default: "tsdd@123456" + edit: true + envKey: TS_ADMINPWD + labelZh: 超级管理员 密码 + labelEn: Super administrator password + required: true + type: password + - default: "123456" + edit: true + envKey: TS_SMSCODE + labelZh: 默认注册验证码 + labelEn: Default registration verification code + required: true + type: number + - default: "127.0.0.1" + edit: true + envKey: DB_HOST + labelZh: 数据库 主机 + labelEn: Database Host + required: true + type: text + - default: "3306" + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + type: number + - default: "tsdd" + edit: true + envKey: DB_USERNAME + labelZh: 数据库 用户名 + labelEn: Database Username + required: true + type: text + - default: "tsdd" + edit: true + envKey: DB_PASSWORD + labelEn: Password + labelZh: 数据库 密码 + random: true + required: true + rule: paramComplexity + type: password + - default: "tsdd" + edit: true + envKey: DB_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text + - default: "127.0.0.1" + edit: true + envKey: REDIS_HOST + labelZh: Redis 主机 + labelEn: Redis Host + required: true + type: text + - default: 6379 + edit: true + envKey: REDIS_PORT + labelZh: Redis 端口 + labelEn: Redis Port + required: true + type: number + - default: "" + edit: true + envKey: REDIS_PASSWORD + labelZh: Redis 连接密码 + labelEn: Redis Connection Password + required: false + type: password + - default: "https://api.multiavatar.com/{avatar}.png" + edit: true + envKey: TS_AVATAR_DEFAULTBASEURL + labelZh: 默认头像提供地址 + labelEn: Default avatar provider address + required: true + type: text + - default: "唐僧叨叨" + edit: true + envKey: TS_APPNAME + labelZh: 应用名称 + labelEn: Application Name + required: true + type: text + - default: "欢迎使用{{appName}}" + edit: true + envKey: TS_WELCOMEMESSAGE + labelZh: 欢迎消息 + labelEn: Welcome message + required: true + type: text + - default: "true" + edit: true + envKey: TS_PHONESEARCHOFF + labelZh: 手机号搜索功能 + labelEn: Phone number search function + required: true + type: select + values: + - label: 开启 + value: "false" + - label: 关闭 + value: "true" + - default: "true" + edit: true + envKey: TS_ONLINESTATUSON + labelZh: 在线状态功能 + labelEn: Online status function + required: true + type: select + values: + - label: 开启 + value: "true" + - label: 关闭 + value: "false" + - default: 1000 + edit: true + envKey: TS_GROUPUPGRADEWHENMEMBERCOUNT + labelZh: 自动升级超级群组临界值 + labelEn: Automatic upgrade super group critical value + required: true + type: number diff --git a/appstore/tangsengdaodao/1.5/docker-compose.yml b/appstore/tangsengdaodao/1.5/docker-compose.yml new file mode 100644 index 00000000..fea60edb --- /dev/null +++ b/appstore/tangsengdaodao/1.5/docker-compose.yml @@ -0,0 +1,93 @@ +networks: + 1panel-network: + external: true +services: + tsdd-manager: + container_name: tangsengdaodao-manager + env_file: + - ./envs/global.env + - .env + environment: + - API_URL=http://${WK_EXTERNAL_IP}:${PANEL_APP_PORT_TS_APP_HTTP}/ + image: registry.cn-shanghai.aliyuncs.com/wukongim/tangsengdaodaomanager:latest + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + tsdd-server: + command: api + container_name: tangsengdaodao-server + depends_on: + - tsdd-wukongim + env_file: + - ./envs/global.env + - .env + environment: + - TS_MODE=release + - TS_WUKONGIM_APIURL=http://tsdd-wukongim:5001 + - TS_DB_MYSQLADDR=${DB_USERNAME}:${DB_PASSWORD}@tcp(${DB_HOST}:${DB_PORT})/${DB_NAME}?charset=utf8mb4&parseTime=true&loc=Local + - TS_DB_REDISADDR=${REDIS_HOST}:${REDIS_PORT} + - TS_DB_REDISPASS=${REDIS_PASSWORD} + - TS_EXTERNAL_IP=${WK_EXTERNAL_IP} + - TS_FILESERVICE=minio + - TS_MINIO_URL=http://${MINIO_HOST}:${MINIO_PORT} + - TS_MINIO_ACCESSKEYID=${MINIO_USERNAME} + - TS_MINIO_SECRETACCESSKEY=${MINIO_PASSWORD} + healthcheck: + interval: 10s + retries: 3 + test: wget -q -Y off -O /dev/null http://localhost:8090/v1/ping > /dev/null + 2>&1 + timeout: 10s + image: registry.cn-shanghai.aliyuncs.com/wukongim/tangsengdaodaoserver:v1.5 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_TS_APP_HTTP}:8090 + restart: always + volumes: + - ${TANGSENGDAODAO_ROOT_PATH}/tsdd:/home/tsdddata + tsdd-web: + container_name: tangsengdaodao-web + env_file: + - ./envs/global.env + - .env + environment: + - API_URL=http://${WK_EXTERNAL_IP}:${PANEL_APP_PORT_TS_APP_HTTP}/ + image: registry.cn-shanghai.aliyuncs.com/wukongim/tangsengdaodaoweb:latest + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_TS_APP_WEB}:80 + restart: always + tsdd-wukongim: + container_name: tangsengdaodao + env_file: + - ./envs/global.env + - .env + environment: + - WK_MODE=release + - WK_CONVERSATION_ON=true + - WK_WEBHOOK_GRPCADDR=tsdd-server:6979 + - WK_DATASOURCE_ADDR=http://tsdd-server:8090/v1/datasource + - WK_DATASOURCE_CHANNELINFOON=true + - WK_TOKENAUTHON=true + image: registry.cn-shanghai.aliyuncs.com/wukongim/wukongim:v1.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_WK_TCP}:5100 + - ${PANEL_APP_PORT_WK_WS}:5200 + - ${PANEL_APP_PORT_WK_WEB_SERVER}:5300 + restart: always + volumes: + - ${TANGSENGDAODAO_ROOT_PATH}/wukongim:/root/wukongim diff --git a/appstore/tangsengdaodao/1.5/envs/default.env b/appstore/tangsengdaodao/1.5/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/tangsengdaodao/1.5/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/tangsengdaodao/1.5/envs/global.env b/appstore/tangsengdaodao/1.5/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/tangsengdaodao/1.5/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/tangsengdaodao/1.5/scripts/init.sh b/appstore/tangsengdaodao/1.5/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/tangsengdaodao/1.5/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/tangsengdaodao/1.5/scripts/uninstall.sh b/appstore/tangsengdaodao/1.5/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/tangsengdaodao/1.5/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/tangsengdaodao/1.5/scripts/upgrade.sh b/appstore/tangsengdaodao/1.5/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/tangsengdaodao/1.5/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/tangsengdaodao/README.md b/appstore/tangsengdaodao/README.md new file mode 100644 index 00000000..4731f1ce --- /dev/null +++ b/appstore/tangsengdaodao/README.md @@ -0,0 +1,78 @@ +# 唐僧叨叨 + +**唐僧叨叨**是一款`轻量级`,`高性能`,`重安全`专注于`私有化部署`的`开源`即时通讯系统。 + +![唐僧叨叨](https://file.lifebus.top/imgs/tangsengdaodao_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + +🆓 开源免费:服务端源码,APP源码,Web/PC端源码全部开源,Apache2.0开源协议(可商用),没人能拿捏你 + +🔏 私有化部署:所有程序和数据都在自己的服务器上,不用担心数据泄露,不用担心数据被用于其他用途 + +🆚 消息必达:采用 tcp + ack机制,保证消息必达,支持离线消息,支持消息漫游。 + +🔐 内容安全:消息传输采用私有二进制加密协议、DH+流式加密,防止消息内容泄露 + +💽 消息永久存储:消息支持永久存储,得益于WuKongIM的自研消息db,永久存储不影响性能,只浪费点磁盘空间 + +📱 多设备消息同步:支持 1 个移动端、多个 Web/PC 端同时在线时,并且支持多端之间的消息实时同步。 + +📟 全平台支持:iOS,Android,Windows,MAC,Ubuntu,Web + +## 唐僧叨叨 客户端 + +主要是用户端使用 包括: + ++ [iOS](https://github.com/TangSengDaoDao/TangSengDaoDaoiOS) ++ [Android](https://github.com/TangSengDaoDao/TangSengDaoDaoAndroid) ++ [Web](https://github.com/TangSengDaoDao/TangSengDaoDaoWeb) ++ [PC](https://github.com/TangSengDaoDao/TangSengDaoDaoWeb) + +## 唐僧叨叨 服务端 + +给客户端调用的后端系统 包括: + ++ 通讯端([WuKongIM](https://github.com/WuKongIM/WuKongIM)) ++ 业务端([TangSengDaoDaoServer](https://github.com/TangSengDaoDao/TangSengDaoDaoServer)) ++ 管理端([TangSengDaoDaoManager](https://github.com/TangSengDaoDao/TangSengDaoDaoManager)) + +## 安装说明 + +安装服务前,需要准备:`MySQL` `Redis` `Minio` 三大基础服务 + +> ### 悟空IM 监控 +> +> 地址:http://127.0.0.1:5300/web +> +> 端口取值:`悟空IM 后台监控端口` +> +> ### 唐僧叨叨 管理后台 +> +> 地址:http://127.0.0.1:80 +> +> 登录:默认账户:`superAdmin` / `admin` 密码:`tsdd@123456` / 配置为主 +> +> 端口取值:`唐僧叨叨 后台管理端口` +> +> ### 唐僧叨叨 WEB 端口 +> +> 地址:http://127.0.0.1:80 +> +> 登录:先在后台创建账户,然后在WEB端登录 +> +> 隐藏注册功能:登录页面长按 `欢迎登录唐僧叨叨` 这是一个隐藏的注册入口, 无需获取验证码,使用配置的默认验证码为主。 +> +> 端口取值:`唐僧叨叨 WEB端口` + +## 常见问题 + +> `超级管理员 密码` 配置未生效 + +这在官方的修复计划中,现在的默认账户名称为:`superAdmin` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/tangsengdaodao/data.yml b/appstore/tangsengdaodao/data.yml new file mode 100644 index 00000000..d8cf0a17 --- /dev/null +++ b/appstore/tangsengdaodao/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: tangsengdaodao + name: 唐僧叨叨 + tags: + - WebSite + - Tool + - Local + shortDescZh: 让企业轻松拥有自己的即时通讯 + shortDescEn: Make it easy for businesses to have their own instant messaging + type: website + crossVersionUpdate: true + recommend: 0 + website: https://tsdaodao.com/ + github: https://github.com/TangSengDaoDao/TangSengDaoDaoServer/ + document: https://tsdaodao.com/ diff --git a/appstore/tangsengdaodao/logo.png b/appstore/tangsengdaodao/logo.png new file mode 100644 index 00000000..2cfe3682 Binary files /dev/null and b/appstore/tangsengdaodao/logo.png differ diff --git a/appstore/teemii/0.8.2/.env b/appstore/teemii/0.8.2/.env new file mode 100644 index 00000000..9d039f3a --- /dev/null +++ b/appstore/teemii/0.8.2/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +TEEMII_ROOT_PATH=/home/teemii + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 网站标题 [必填] +VITE_APP_TITLE=Teemii + diff --git a/appstore/teemii/0.8.2/data.yml b/appstore/teemii/0.8.2/data.yml new file mode 100644 index 00000000..62a71558 --- /dev/null +++ b/appstore/teemii/0.8.2/data.yml @@ -0,0 +1,24 @@ +additionalProperties: + formFields: + - default: "/home/teemii" + edit: true + envKey: TEEMII_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8080 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number + - default: "Teemii" + edit: true + envKey: VITE_APP_TITLE + labelZh: 网站标题 + labelEn: Website Title + required: true + type: text diff --git a/appstore/teemii/0.8.2/docker-compose.yml b/appstore/teemii/0.8.2/docker-compose.yml new file mode 100644 index 00000000..02a7fcc9 --- /dev/null +++ b/appstore/teemii/0.8.2/docker-compose.yml @@ -0,0 +1,35 @@ +networks: + 1panel-network: + external: true +services: + teemii-backend: + container_name: backend-teemii + env_file: + - ./envs/global.env + - .env + environment: + - EXPRESS_PORT=3000 + - SOCKET_IO_PORT=1555 + image: dokkaner/teemii-backend:0.8.2 + labels: + createdBy: Apps + networks: + - 1panel-network + restart: always + volumes: + - ${TEEMII_ROOT_PATH}/data:/data + teemii-frontend: + container_name: frontend-teemii + env_file: + - ./envs/global.env + - .env + environment: + - VITE_APP_PORT=80 + image: dokkaner/teemii-frontend:0.8.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always diff --git a/appstore/teemii/0.8.2/envs/default.env b/appstore/teemii/0.8.2/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/teemii/0.8.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/teemii/0.8.2/envs/global.env b/appstore/teemii/0.8.2/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/teemii/0.8.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/teemii/0.8.2/scripts/init.sh b/appstore/teemii/0.8.2/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/teemii/0.8.2/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/teemii/0.8.2/scripts/uninstall.sh b/appstore/teemii/0.8.2/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/teemii/0.8.2/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/teemii/0.8.2/scripts/upgrade.sh b/appstore/teemii/0.8.2/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/teemii/0.8.2/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/teemii/README.md b/appstore/teemii/README.md new file mode 100644 index 00000000..89a7f2e7 --- /dev/null +++ b/appstore/teemii/README.md @@ -0,0 +1,28 @@ +# Teemiio + +多功能,自托管的漫画阅读器和管理器,具有可扩展的基于代理的元数据检索 + +![Teemiio](https://file.lifebus.top/imgs/teemii_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Teemii 是为热衷漫画阅读者设计的精简网络应用。它提供了一个简单高效、用于阅读和管理漫画收藏的平台。 +主要功能包括跨平台访问、浏览器内阅读、强大的元数据聚合器以及自动更新您的收藏。 + +## 特性 + ++ 直观用户界面:Teemii 拥有用户友好的界面,使导航和互动变得轻松,从而提升整体用户体验。 ++ 原始漫画存档存储:自行托管漫画。 ++ 跨平台兼容性:无论您想在哪里部署,都可以在各种设备上访问。 ++ 可定制的浏览器内漫画阅读:直接在网页浏览器中阅读漫画,无需额外软件。 ++ CBZ 和 CBR 格式支持:导入和管理流行的漫画格式。 ++ 自动阅读进度跟踪:无缝追踪阅读进度。 ++ 全面元数据聚合:每部漫画的详细信息 ++ 个性化漫画推荐:根据阅读习惯建议新标题。 ++ 多用途章节获取:从多个在线资源获取漫画章节。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/teemii/data.yml b/appstore/teemii/data.yml new file mode 100644 index 00000000..b6120e3e --- /dev/null +++ b/appstore/teemii/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: teemii + name: Teemii + tags: + - WebSite + - Local + shortDescZh: 漫画阅读器和管理器 + shortDescEn: Comic reader and manager + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.teemii.io/ + github: https://github.com/dokkaner/teemii/ + document: https://docs.teemii.io/ diff --git a/appstore/teemii/logo.png b/appstore/teemii/logo.png new file mode 100644 index 00000000..734c634d Binary files /dev/null and b/appstore/teemii/logo.png differ diff --git a/appstore/telegram-bot-api/8.0/.env b/appstore/telegram-bot-api/8.0/.env new file mode 100644 index 00000000..6b9745e3 --- /dev/null +++ b/appstore/telegram-bot-api/8.0/.env @@ -0,0 +1,18 @@ +# 数据持久化路径 [必填] +TELEGRAM_BOT_API_ROOT_PATH=/home/telegram-bot-api + +# API 端口 [必填] +PANEL_APP_PORT_HTTP=8082 + +# API 端口 (HTTPS) [必填] +PANEL_APP_PORT_HTTPS=8081 + +# Telegram Bot 应用 ID [必填] +TELEGRAM_API_ID= + +# Telegram Bot 应用 Hash [必填] +TELEGRAM_API_HASH= + +# 网络代理 +TELEGRAM_PROXY= + diff --git a/appstore/telegram-bot-api/8.0/data.yml b/appstore/telegram-bot-api/8.0/data.yml new file mode 100644 index 00000000..9facd808 --- /dev/null +++ b/appstore/telegram-bot-api/8.0/data.yml @@ -0,0 +1,46 @@ +additionalProperties: + formFields: + - default: "/home/telegram-bot-api" + edit: true + envKey: TELEGRAM_BOT_API_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8082 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: API 端口 + labelEn: API port + required: true + rule: paramPort + type: number + - default: 8081 + edit: true + envKey: PANEL_APP_PORT_HTTPS + labelZh: API 端口 (HTTPS) + labelEn: API port (HTTPS) + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: TELEGRAM_API_ID + labelZh: Telegram Bot 应用 ID + labelEn: Telegram Bot Application ID + required: true + type: text + - default: "" + edit: true + envKey: TELEGRAM_API_HASH + labelZh: Telegram Bot 应用 Hash + labelEn: Telegram Bot Application Hash + required: true + type: password + - default: "" + edit: true + envKey: TELEGRAM_PROXY + labelZh: 网络代理 + labelEn: Network proxy + required: false + type: text diff --git a/appstore/telegram-bot-api/8.0/docker-compose.yml b/appstore/telegram-bot-api/8.0/docker-compose.yml new file mode 100644 index 00000000..2b69c1ec --- /dev/null +++ b/appstore/telegram-bot-api/8.0/docker-compose.yml @@ -0,0 +1,28 @@ +networks: + 1panel-network: + external: true +services: + telegram-bot-api: + container_name: telegram-bot-api + env_file: + - ./envs/global.env + - .env + environment: + - TELEGRAM_STAT=1 + - TELEGRAM_LOCAL=1 + - TELEGRAM_VERBOSITY=1 + - TELEGRAM_MAX_WEBHOOK_CONNECTIONS=100000 + - TELEGRAM_LOG_FILE=/var/log/telegram-bot-api/telegram-bot-api.log + - TELEGRAM_MAX_CONNECTIONS=1024 + image: aiogram/telegram-bot-api:8.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTPS}:8081 + - ${PANEL_APP_PORT_HTTP}:8082 + restart: always + volumes: + - ${TELEGRAM_BOT_API_ROOT_PATH}/data:/var/lib/telegram-bot-api + - ${TELEGRAM_BOT_API_ROOT_PATH}/logs:/var/log/telegram-bot-api diff --git a/appstore/telegram-bot-api/8.0/envs/default.env b/appstore/telegram-bot-api/8.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/telegram-bot-api/8.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/telegram-bot-api/8.0/envs/global.env b/appstore/telegram-bot-api/8.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/telegram-bot-api/8.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/telegram-bot-api/8.0/scripts/init.sh b/appstore/telegram-bot-api/8.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/telegram-bot-api/8.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/telegram-bot-api/8.0/scripts/uninstall.sh b/appstore/telegram-bot-api/8.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/telegram-bot-api/8.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/telegram-bot-api/8.0/scripts/upgrade.sh b/appstore/telegram-bot-api/8.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/telegram-bot-api/8.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/telegram-bot-api/README.md b/appstore/telegram-bot-api/README.md new file mode 100644 index 00000000..da77529a --- /dev/null +++ b/appstore/telegram-bot-api/README.md @@ -0,0 +1,46 @@ +# Telegram Bot API 服务器 + +Telegram Bot API 提供了一个 HTTP API 用于创建电报机器人。 + +机器人是小应用程序完全在 Telegram 应用程序中运行。用户通过以下方式与机器人交互灵活的接口可以支持任何类型的任务或服务。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 下载文件没有大小限制。 ++ 上传最多 2000 MB 的文件。 ++ 使用本地路径上传文件并文件 URI 方案。 ++ 使用 Webhook 的 HTTP URL。 ++ 使用 Webhook 的任何本地 IP 地址。 ++ 使用 Webhook 的任何端口。 ++ 放最大网络钩子连接数最多 100000。 ++ 接收绝对本地路径作为值文件路径字段,无需下载文件后获取文件要求。 + +Telegram Bot API 服务器仅接受 HTTP 请求,因此需要使用 TLS 终止代理来处理远程 HTTPS 请求。 + +## 使用说明 + +### 获取 `api_id` + +为了获得API ID并使用 Telegram API 开发您自己的应用程序,您需要执行以下操作: + ++ 使用任何应用程序注册 Telegram。 ++ 登录您的 Telegram 核心: [https://my.telegram.org](https://my.telegram.org) 。 ++ 去《API开发工具》并填写表格。 ++ 您将获得基本地址以及 `api_id` 和 `api_hash` 用户授权所需的参数。 ++ 目前每个号码只能有一个 `api_id` 连接到它。 + +我们将向您在此过程中使用的电话号码发送重要的开发者通知,因此请使用连接到您的活跃 Telegram 帐户的最新号码。 + +### 使用 `api_id` + +在使用 MTProto Telegram API 之前,请注意,所有 API 客户端库都受到严格监控,以防止滥用。 + +如果您使用 Telegram API 进行洪泛、垃圾邮件、伪造订阅者和查看频道计数器,您将被 `永久禁止`。 + +由于过度滥用 Telegram API,所有帐户使用非官方 Telegram API 客户端注册或登录的用户会自动放入在监视下以避免违反规定服务条款。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/telegram-bot-api/data.yml b/appstore/telegram-bot-api/data.yml new file mode 100644 index 00000000..70c85303 --- /dev/null +++ b/appstore/telegram-bot-api/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: telegram-bot-api + name: Telegram Bot Api + tags: + - Middleware + - Tool + - Local + shortDescZh: Telegram Bot API 服务器 + shortDescEn: Telegram Bot API Server + type: tool + crossVersionUpdate: true + limit: 0 + website: https://telegram.org/ + github: https://github.com/tdlib/telegram-bot-api/ + document: https://core.telegram.org/bots/ diff --git a/appstore/telegram-bot-api/logo.png b/appstore/telegram-bot-api/logo.png new file mode 100644 index 00000000..53f07ffe Binary files /dev/null and b/appstore/telegram-bot-api/logo.png differ diff --git a/appstore/traccar/6.5/.env b/appstore/traccar/6.5/.env new file mode 100644 index 00000000..e95cbeff --- /dev/null +++ b/appstore/traccar/6.5/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +TRACCAR_ROOT_PATH=/home/traccar + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8082 + diff --git a/appstore/traccar/6.5/conf/traccar.xml b/appstore/traccar/6.5/conf/traccar.xml new file mode 100644 index 00000000..2b451830 --- /dev/null +++ b/appstore/traccar/6.5/conf/traccar.xml @@ -0,0 +1,12 @@ + + + + + + + org.h2.Driver + jdbc:h2:./data/database + sa + + + diff --git a/appstore/traccar/6.5/data.yml b/appstore/traccar/6.5/data.yml new file mode 100644 index 00000000..593618f3 --- /dev/null +++ b/appstore/traccar/6.5/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: "/home/traccar" + edit: true + envKey: TRACCAR_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8082 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number diff --git a/appstore/traccar/6.5/docker-compose.yml b/appstore/traccar/6.5/docker-compose.yml new file mode 100644 index 00000000..2d26b9f0 --- /dev/null +++ b/appstore/traccar/6.5/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + traccar-network: + driver: bridge +services: + traccar: + container_name: traccar + env_file: + - ./envs/global.env + - .env + hostname: traccar + image: traccar/traccar:6.5 + labels: + createdBy: Apps + networks: + - traccar-network + ports: + - ${PANEL_APP_PORT_HTTP}:8082 + restart: always + volumes: + - ${TRACCAR_ROOT_PATH}/logs:/opt/traccar/logs:rw + - ${TRACCAR_ROOT_PATH}/traccar.xml:/opt/traccar/conf/traccar.xml:ro diff --git a/appstore/traccar/6.5/envs/default.env b/appstore/traccar/6.5/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/traccar/6.5/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/traccar/6.5/envs/global.env b/appstore/traccar/6.5/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/traccar/6.5/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/traccar/6.5/scripts/init.sh b/appstore/traccar/6.5/scripts/init.sh new file mode 100644 index 00000000..7f45cbee --- /dev/null +++ b/appstore/traccar/6.5/scripts/init.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + cp conf/traccar.xml "${TRACCAR_ROOT_PATH}/traccar.xml" + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/traccar/6.5/scripts/uninstall.sh b/appstore/traccar/6.5/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/traccar/6.5/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/traccar/6.5/scripts/upgrade.sh b/appstore/traccar/6.5/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/traccar/6.5/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/traccar/README.md b/appstore/traccar/README.md new file mode 100644 index 00000000..f2bdccfa --- /dev/null +++ b/appstore/traccar/README.md @@ -0,0 +1,136 @@ +# Traccar 轨迹 + +Traccar GPS 追踪系统 + +![Traccar 轨迹](https://file.lifebus.top/imgs/traccar_cover.png) + +Traccar 是一个开源的 GPS 跟踪系统。此仓库包含基于 Java 的后端服务。它支持超过 200 种 GPS 协议和超过 2000 种 GPS +跟踪设备型号。Traccar 可以与任何主要的 SQL 数据库系统一起使用。它还提供易于使用的 REST API。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + +🚀 服务器 + +Traccar 软件在 Windows、Linux 或其他任何平台上都提供了卓越的性能和稳定性。服务器可以部署在本地或云端,我们提供各种托管选项,并提供专业支持。 + +🚀 设备 + +Traccar 在市场上众多的 GPS 跟踪系统中脱颖而出,因为它支持广泛的各种协议和设备型号。无论您更喜欢低成本、无名的 GPS +跟踪器,还是高品质、有质量保证的品牌,Traccar 都能让您从众多供应商中进行选择。 + +🚀 界面 + +Traccar 提供了一个现代且全面的网络界面,适用于桌面和移动设备。 +此外,我们还提供针对 Android 和 iOS 平台的本地移动应用程序。此外,我们还提供一系列应用程序,可以将移动设备转变为 GPS 追踪器。 + +🚀 实时跟踪 + +Traccar 允许您实时查看 GPS 设备的位置,没有任何延迟。 +多种地图选项可供选择,包括道路地图和卫星图像,您可以选择最符合您需求的一个。此外,Traccar 可以高效管理由 GPS 单元提供的大量传感器和数据。 + +🚀 警报 + +Traccar 软件提供即时通知,包括推送通知、电子邮件和其他方法的支持。 +这些功能使软件能够提醒用户恶劣驾驶行为、燃油下降、维护事件、地理围栏违规以及多种其他类型的警报。 + +🚀 报告 + +Traccar 提供多种报告,包括位置历史、行程、图表和总结报告。这些报告可以直接通过网络或移动应用访问,也可以导出为 Excel 文件。 +此外,Traccar 允许用户在地图上可视化位置历史,以便更直观地理解他们的数据。 + +## 功能 + ++ 实时 GPS 追踪 ++ 驾驶员行为监控 ++ 详细报告和摘要报告 ++ 地理围栏功能 ++ 警报和通知 ++ 账户和设备管理 ++ 电子邮件和短信支持 + +## 平台 + +### 管理平台 + +[![Download on the App Store](http://www.tananaev.com/badges/app-store.svg)](https://itunes.apple.com/app/traccar-manager/id1113966562) [![Get it on Google Play](http://www.tananaev.com/badges/google-play.svg)](https://play.google.com/store/apps/details?id=org.traccar.manager) + +### 服务平台 + +[![Download on the App Store](http://www.tananaev.com/badges/app-store.svg)](https://itunes.apple.com/app/traccar-client/id843156974) [![Get it on Google Play](http://www.tananaev.com/badges/google-play.svg)](https://play.google.com/store/apps/details?id=org.traccar.client) [![Get it on F-Droid](http://www.tananaev.com/badges/f-droid.svg)](https://f-droid.org/repository/browse/?fdid=org.traccar.client) + +## 安装说明 + +> ### 账户说明 +> +> 在较旧版本的 Traccar 中,系统会自动创建默认管理员账户,登录名和密码均为 admin +> +> 在较新版本中,没有默认用户,因此需要进行注册。第一个注册的用户会自动成为管理员。 + +> ### 设备注册 +> +> 您需要填写名称和标识符字段。名称可以是任何内容。标识符必须与您的设备向服务器报告的唯一 ID 相匹配。对于大多数设备,您应该使用 +> IMEI 或序列号作为唯一标识符。 + +### 数据库选择 + +Traccar 支持以下数据库: + ++ MySQL ++ PostgreSQL ++ H2 + +其中,H2 为默认数据库,但不建议在生产环境中使用。因此,我们建议使用 MySQL 或 PostgreSQL。 + +请在持久化目录中,查看配置文件:`traccar.xml` + +#### H2 数据库配置 + +我们不建议您修改 H2 数据库配置。如果您执意要修改,请确保您知道自己在做什么。 +您可以在安装目录 `conf/traccar.xml` 中找到默认的 H2 数据库配置。 + +```xml +org.h2.Driver +jdbc:h2:./data/database +sa + +``` + +#### MySQL 数据库配置 + +修改持久化目录中的 `traccar.xml` 文件,配置 MySQL 数据库。 + +```xml +com.mysql.cj.jdbc.Driver +jdbc:mysql://[HOST]/[DATABASE]?zeroDateTimeBehavior=round&serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false&allowMultiQueries=true&autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8&sessionVariables=sql_mode='' +[USER] +[PASSWORD] +``` + +请将 `[]` 替换为您的实际配置。 + +#### PostgreSQL 数据库配置 + +修改持久化目录中的 `traccar.xml` 文件,配置 PostgreSQL 数据库。 + +```xml +org.postgresql.Driver +jdbc:postgresql://[HOST]/[DATABASE] +[USER] +[PASSWORD] +``` + +请将 `[]` 替换为您的实际配置。 + +### 端口服务 + +Traccar 默认使用 8082 端口作为 Web / 移动端 服务端口。 + +同时,将 `5000-5150` TCP/UDP 端口,用于 GPS 设备与 Traccar 服务器通信。 + +如果使用 GPS硬件设备, 请在安装前确认 `5000-5150` 端口未被占用。并添加端口映射 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/traccar/data.yml b/appstore/traccar/data.yml new file mode 100644 index 00000000..054ebceb --- /dev/null +++ b/appstore/traccar/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: traccar + name: Traccar 轨迹 + tags: + - WebSite + - Middleware + - Local + shortDescZh: 现代 GPS 追踪系统 + shortDescEn: Modern GPS tracking system + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.traccar.org/ + github: https://github.com/traccar/traccar/ + document: https://www.traccar.org/documentation/ diff --git a/appstore/traccar/logo.png b/appstore/traccar/logo.png new file mode 100644 index 00000000..c747aea0 Binary files /dev/null and b/appstore/traccar/logo.png differ diff --git a/appstore/transmission/4.0.6/.env b/appstore/transmission/4.0.6/.env new file mode 100644 index 00000000..6a24d084 --- /dev/null +++ b/appstore/transmission/4.0.6/.env @@ -0,0 +1,36 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=9091 + +# Torrenting 端口 [必填] +PANEL_APP_PORT_TORRENTING=51413 + +# 数据持久化路径 [必填] +TRANSMISSION_ROOT_PATH=/home/transmission + +# 用户名 [必填] +USER=admin + +# 密码 [必填] +PASS= + +# 第三方 UI 文件夹 +TRANSMISSION_WEB_HOME= + +# IP 白名单 +WHITELIST= + +# 主机白名单 +HOST_WHITELIST= + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/appstore/transmission/4.0.6/data.yml b/appstore/transmission/4.0.6/data.yml new file mode 100644 index 00000000..afd22fed --- /dev/null +++ b/appstore/transmission/4.0.6/data.yml @@ -0,0 +1,97 @@ +additionalProperties: + formFields: + - default: "host" + edit: true + envKey: NETWORK_MODE + labelZh: 网络模式 + labelEn: Network Mode + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: 9091 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI Port + required: true + rule: paramPort + type: number + - default: 51413 + edit: true + envKey: PANEL_APP_PORT_TORRENTING + labelZh: Torrenting 端口 + labelEn: Torrenting Port + required: true + rule: paramPort + type: number + - default: "/home/transmission" + edit: true + envKey: TRANSMISSION_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "admin" + edit: true + envKey: USER + labelZh: 用户名 + labelEn: User + required: true + type: text + - default: "" + edit: true + envKey: PASS + labelZh: 密码 + labelEn: Password + required: true + type: text + - default: "" + edit: true + envKey: TRANSMISSION_WEB_HOME + labelZh: 第三方 UI 文件夹 + labelEn: Third-party UI folder + required: false + type: text + - default: "" + edit: true + envKey: WHITELIST + labelZh: IP 白名单 + labelEn: Whitelist + required: false + type: text + - default: "" + edit: true + envKey: HOST_WHITELIST + labelZh: 主机白名单 + labelEn: Host Whitelist + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_1 + labelEn: Custom mount directory 1 + labelZh: 自定义挂载目录 1 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_2 + labelEn: Custom mount directory 2 + labelZh: 自定义挂载目录 2 + required: false + type: text + - default: "" + edit: true + envKey: CUSTOM_MOUNT_DIRECTORY_3 + labelEn: Custom mount directory 3 + labelZh: 自定义挂载目录 3 + required: false + type: text diff --git a/appstore/transmission/4.0.6/docker-compose.yml b/appstore/transmission/4.0.6/docker-compose.yml new file mode 100644 index 00000000..36ab4b7c --- /dev/null +++ b/appstore/transmission/4.0.6/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true +services: + transmission: + container_name: transmission + env_file: + - ./envs/global.env + - .env + environment: + - PUID=0 + - PGID=0 + - UMASK=022 + - PEERPORT= ${PANEL_APP_PORT_TORRENTING} + image: linuxserver/transmission:4.0.6 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:9091 + - ${PANEL_APP_PORT_TORRENTING} + - ${PANEL_APP_PORT_TORRENTING}/udp + restart: always + volumes: + - ${TRANSMISSION_ROOT_PATH}/config:/config + - ${TRANSMISSION_ROOT_PATH}/downloads:/downloads + - ${TRANSMISSION_ROOT_PATH}/watch:/watch + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/appstore/transmission/4.0.6/envs/default.env b/appstore/transmission/4.0.6/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/transmission/4.0.6/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/transmission/4.0.6/envs/global.env b/appstore/transmission/4.0.6/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/transmission/4.0.6/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/transmission/4.0.6/scripts/init.sh b/appstore/transmission/4.0.6/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/transmission/4.0.6/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/transmission/4.0.6/scripts/uninstall.sh b/appstore/transmission/4.0.6/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/transmission/4.0.6/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/transmission/4.0.6/scripts/upgrade.sh b/appstore/transmission/4.0.6/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/transmission/4.0.6/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/transmission/README.md b/appstore/transmission/README.md new file mode 100644 index 00000000..48a1591f --- /dev/null +++ b/appstore/transmission/README.md @@ -0,0 +1,15 @@ +# Transmission + +Transmission是一种BitTorrent客户端,特点是一个跨平台的后端和其上的简洁的用户界面。 + +![Transmission](https://file.lifebus.top/imgs/transmission_logo.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 应用说明 + +Transmission 是一个快速、轻量级的 BitTorrent 客户端,支持多种操作系统。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/transmission/data.yml b/appstore/transmission/data.yml new file mode 100644 index 00000000..81486c46 --- /dev/null +++ b/appstore/transmission/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: transmission + name: Transmission + tags: + - WebSite + - Tool + - Local + shortDescZh: BitTorrent客户端 + shortDescEn: BitTorrent client + type: website + crossVersionUpdate: true + limit: 0 + website: https://transmissionbt.com/ + github: https://github.com/transmission/transmission/ + document: https://github.com/transmission/transmission/ diff --git a/appstore/transmission/logo.png b/appstore/transmission/logo.png new file mode 100644 index 00000000..8b0c3f16 Binary files /dev/null and b/appstore/transmission/logo.png differ diff --git a/appstore/umami-mysql/2.14.0/.env b/appstore/umami-mysql/2.14.0/.env new file mode 100644 index 00000000..eb5cbfa4 --- /dev/null +++ b/appstore/umami-mysql/2.14.0/.env @@ -0,0 +1,36 @@ +# MySQL 服务 (前置检查) [必填] +PANEL_DB_TYPE=mysql + +# 数据持久化路径 [必填] +UMAMI_ROOT_PATH=/home/umami + +# 连接端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# 应用密钥 +APP_SECRET= + +# 基础路径 [必填] +BASE_PATH=/ + +# 允许的 frame 地址 +ALLOWED_FRAME_URLS= + +# 禁用机器人检测 [必填] +DISABLE_BOT_CHECK=0 + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=3306 + +# 数据库 用户名 [必填] +DB_USERNAME=umami + +# 数据库 密码 [必填] +DB_PASSWORD= + +# 数据库 名称 [必填] +DB_DATABASE_NAME=umami + diff --git a/appstore/umami-mysql/2.14.0/data.yml b/appstore/umami-mysql/2.14.0/data.yml new file mode 100644 index 00000000..ec593ab7 --- /dev/null +++ b/appstore/umami-mysql/2.14.0/data.yml @@ -0,0 +1,109 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_DB_HOST + required: true + type: service + default: mysql + edit: true + envKey: PANEL_DB_TYPE + labelZh: MySQL 服务 (前置检查) + labelEn: Database Service (Pre-check) + required: true + type: apps + values: + - label: MySQL + value: mysql + - label: MariaDB + value: mariadb + - label: Percona + value: percona + - default: "/home/umami" + edit: true + envKey: UMAMI_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 连接端口 + labelEn: Connection Port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: APP_SECRET + labelZh: 应用密钥 + labelEn: Application Secret + random: true + required: false + rule: paramComplexity + type: password + - default: "/" + edit: true + envKey: BASE_PATH + labelZh: 基础路径 + labelEn: Base Path + required: true + type: text + - default: "" + edit: true + envKey: ALLOWED_FRAME_URLS + labelZh: 允许的 frame 地址 + labelEn: Allowed frame urls + required: false + type: text + - default: "0" + edit: true + envKey: DISABLE_BOT_CHECK + labelZh: 禁用机器人检测 + labelEn: Disable bot detection + required: true + type: select + values: + - label: 开启 + value: "1" + - label: 关闭 + value: "0" + - default: "127.0.0.1" + edit: true + envKey: DB_HOSTNAME + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 3306 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "umami" + edit: true + envKey: DB_USERNAME + labelZh: 数据库 用户名 + labelEn: Database User + required: true + type: text + - default: "" + edit: true + envKey: DB_PASSWORD + labelEn: Database Password + labelZh: 数据库 密码 + random: true + required: true + rule: paramComplexity + type: password + - default: "umami" + edit: true + envKey: DB_DATABASE_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text diff --git a/appstore/umami-mysql/2.14.0/docker-compose.yml b/appstore/umami-mysql/2.14.0/docker-compose.yml new file mode 100644 index 00000000..2bac4d26 --- /dev/null +++ b/appstore/umami-mysql/2.14.0/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true +services: + umami-mysql: + container_name: umami-mysql + env_file: + - ./envs/global.env + - .env + environment: + - DISABLE_TELEMETRY = 1 + - REMOVE_TRAILING_SLASH = 1 + - DATABASE_TYPE=mysql + - DATABASE_URL=mysql://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOSTNAME}:${DB_PORT}/${DB_DATABASE_NAME} + image: umamisoftware/umami:mysql-v2.14.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + restart: always +version: '3.8' diff --git a/appstore/umami-mysql/2.14.0/envs/default.env b/appstore/umami-mysql/2.14.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/umami-mysql/2.14.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/umami-mysql/2.14.0/envs/global.env b/appstore/umami-mysql/2.14.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/umami-mysql/2.14.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/umami-mysql/2.14.0/scripts/init.sh b/appstore/umami-mysql/2.14.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/umami-mysql/2.14.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/umami-mysql/2.14.0/scripts/uninstall.sh b/appstore/umami-mysql/2.14.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/umami-mysql/2.14.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/umami-mysql/2.14.0/scripts/upgrade.sh b/appstore/umami-mysql/2.14.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/umami-mysql/2.14.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/umami-mysql/README.md b/appstore/umami-mysql/README.md new file mode 100644 index 00000000..75708657 --- /dev/null +++ b/appstore/umami-mysql/README.md @@ -0,0 +1,142 @@ +# Umami MySQL版本 + +为速度和效率而构建的网站分析 + +Umami 网站分析提供您实时做出决策所需的数据。 + +![Umami](https://file.lifebus.top/imgs/umami_cover.jpg) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Umami 让您轻松分析数据 + ++ 便于使用 + +Umami 功能强大而简单,易于使用和理解,不需要复杂的设置或标签配置。 + ++ UTM 和自定义事件 + +Umami 会自动理解带有 UTM 参数的链接,并让您根据 UTM 查看和过滤您的网站数据。此外,您还可以跟踪网站上的任何事件,例如按钮点击、表单提交、购买、新闻通讯注册等。 + ++ 没有 Cookie 横幅 + +所有数据均经过 Umami 匿名处理,并且不会收集您网站用户的任何个人信息。您无需选择加入 Cookie +横幅即可跟踪网站的性能,从而为您的用户提供更好、更值得信赖的体验。 +默认情况下,Umami 符合 GDPRP 和 CCPA。 + +## 环境准备 + ++ 数据库支持 + + `MySQL` 版本:`5.7+` + + `PostgreSQL` 版本:`12.14+` + +## 安装说明 + +> 默认管理员帐户 +> +> 用户名: admin +> +> 密码: umami + +## 反向代理 + +> Nginx + +如果您的请求头中存在自定义字段,请修改: + +```text +add_header Access-Control-Allow-Headers '*' +``` + +以下配置修复 ipv6 地址无法收集的问题: + +```nginx +server { + ... + + add_header Content-Security-Policy 'frame-ancestors *'; + add_header Access-Control-Allow-Origin '*'; + add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; + add_header Access-Control-Allow-Headers 'x-umami-cache,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; + if ($request_method = 'OPTIONS') { + return 204; + } + + location /api/send { + content_by_lua_block { + local cjson = require "cjson" + + local function is_ipv6_address(hostname) + local match = hostname:match("^[%x:]+$") + return match ~= nil + end + + ngx.req.read_body() + local data = ngx.req.get_body_data() + + if data then + local decoded_data = cjson.decode(data) + local hostname = decoded_data.payload.hostname + + if is_ipv6_address(hostname) then + local new_hostname = "127.0.0.1" + decoded_data.payload.hostname = new_hostname + + local modified_data = cjson.encode(decoded_data) + ngx.req.set_body_data(modified_data) + end + end + + ngx.exec("@proxy") + } + } + + location / { + proxy_hide_header 'Access-Control-Allow-Origin'; + proxy_hide_header 'Content-Security-Policy'; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://127.0.0.1:3000; + } + + location @proxy { + proxy_hide_header 'Access-Control-Allow-Origin'; + proxy_hide_header 'Content-Security-Policy'; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://127.0.0.1:3000; + } +} +``` + +极简配置: + +```nginx +add_header Content-Security-Policy 'frame-ancestors *'; +add_header Access-Control-Allow-Origin '*'; +add_header Access-Control-Allow-Methods '*'; +add_header Access-Control-Allow-Headers '*'; +if ($request_method = 'OPTIONS') { + return 204; +} + +location / { + proxy_hide_header 'Access-Control-Allow-Origin'; + proxy_hide_header 'Content-Security-Policy'; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://127.0.0.1:3000; +} +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/umami-mysql/data.yml b/appstore/umami-mysql/data.yml new file mode 100644 index 00000000..66119146 --- /dev/null +++ b/appstore/umami-mysql/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + key: umami-mysql + name: Umami MySQL版 + tags: + - WebSite + - Database + - Middleware + - Runtime + - Local + shortDescZh: 为速度和效率而构建的网站分析 + shortDescEn: A website analytics tool that is built for speed and efficiency + type: website + crossVersionUpdate: true + limit: 0 + website: https://umami.is/ + github: https://github.com/umami-software/umami/ + document: https://umami.is/docs/ diff --git a/appstore/umami-mysql/logo.png b/appstore/umami-mysql/logo.png new file mode 100644 index 00000000..9ede937a Binary files /dev/null and b/appstore/umami-mysql/logo.png differ diff --git a/appstore/umami/2.14.0/.env b/appstore/umami/2.14.0/.env new file mode 100644 index 00000000..4cb51bb1 --- /dev/null +++ b/appstore/umami/2.14.0/.env @@ -0,0 +1,36 @@ +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# 数据持久化路径 [必填] +UMAMI_ROOT_PATH=/home/umami + +# 连接端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# 应用密钥 +APP_SECRET= + +# 基础路径 [必填] +BASE_PATH=/ + +# 允许的 frame 地址 +ALLOWED_FRAME_URLS= + +# 禁用机器人检测 [必填] +DISABLE_BOT_CHECK=0 + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 用户名 [必填] +DB_USERNAME=umami + +# 数据库 密码 [必填] +DB_PASSWORD= + +# 数据库 名称 [必填] +DB_DATABASE_NAME=umami + diff --git a/appstore/umami/2.14.0/data.yml b/appstore/umami/2.14.0/data.yml new file mode 100644 index 00000000..e93c2b18 --- /dev/null +++ b/appstore/umami/2.14.0/data.yml @@ -0,0 +1,104 @@ +additionalProperties: + formFields: + - child: + default: "" + envKey: PANEL_POSTGRES_SERVICE + required: true + type: service + default: postgresql + envKey: PANEL_POSTGRES_TYPE + labelZh: Postgres 服务 (前置检查) + labelEn: Postgres Service (Pre-check) + required: true + type: apps + values: + - label: PostgreSQL + value: postgresql + - default: "/home/umami" + edit: true + envKey: UMAMI_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 连接端口 + labelEn: Connection Port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: APP_SECRET + labelZh: 应用密钥 + labelEn: Application Secret + random: true + required: false + rule: paramComplexity + type: password + - default: "/" + edit: true + envKey: BASE_PATH + labelZh: 基础路径 + labelEn: Base Path + required: true + type: text + - default: "" + edit: true + envKey: ALLOWED_FRAME_URLS + labelZh: 允许的 frame 地址 + labelEn: Allowed frame urls + required: false + type: text + - default: "0" + edit: true + envKey: DISABLE_BOT_CHECK + labelZh: 禁用机器人检测 + labelEn: Disable bot detection + required: true + type: select + values: + - label: 开启 + value: "1" + - label: 关闭 + value: "0" + - default: "127.0.0.1" + edit: true + envKey: DB_HOSTNAME + labelZh: 数据库 主机地址 + labelEn: Database Host + required: true + type: text + - default: 5432 + edit: true + envKey: DB_PORT + labelZh: 数据库 端口 + labelEn: Database Port + required: true + rule: paramPort + type: number + - default: "umami" + edit: true + envKey: DB_USERNAME + labelZh: 数据库 用户名 + labelEn: Database User + required: true + type: text + - default: "" + edit: true + envKey: DB_PASSWORD + labelEn: Database Password + labelZh: 数据库 密码 + random: true + required: true + rule: paramComplexity + type: password + - default: "umami" + edit: true + envKey: DB_DATABASE_NAME + labelZh: 数据库 名称 + labelEn: Database Name + required: true + type: text diff --git a/appstore/umami/2.14.0/docker-compose.yml b/appstore/umami/2.14.0/docker-compose.yml new file mode 100644 index 00000000..1546e29e --- /dev/null +++ b/appstore/umami/2.14.0/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + umami: + container_name: umami + env_file: + - ./envs/global.env + - .env + environment: + - DISABLE_TELEMETRY = 1 + - REMOVE_TRAILING_SLASH = 1 + - DATABASE_TYPE=postgresql + - DATABASE_URL=postgresql://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOSTNAME}:${DB_PORT}/${DB_DATABASE_NAME} + image: umamisoftware/umami:postgresql-v2.14.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + restart: always diff --git a/appstore/umami/2.14.0/envs/default.env b/appstore/umami/2.14.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/umami/2.14.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/umami/2.14.0/envs/global.env b/appstore/umami/2.14.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/umami/2.14.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/umami/2.14.0/scripts/init.sh b/appstore/umami/2.14.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/umami/2.14.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/umami/2.14.0/scripts/uninstall.sh b/appstore/umami/2.14.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/umami/2.14.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/umami/2.14.0/scripts/upgrade.sh b/appstore/umami/2.14.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/umami/2.14.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/umami/README.md b/appstore/umami/README.md new file mode 100644 index 00000000..41302725 --- /dev/null +++ b/appstore/umami/README.md @@ -0,0 +1,148 @@ +# Umami + +为速度和效率而构建的网站分析 + +Umami 网站分析提供您实时做出决策所需的数据。 + +![Umami](https://file.lifebus.top/imgs/umami_cover.jpg) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 声明 + +> 该应用默认使用 `PostgreSQL` 作为基础数据库,原使用 `MySQL` 数据库的用户需要进行卸载重新安装 `MySQL` 版本。 +> +> 卸载重装请注意参数保持一致,持久化目录也必须保持一致。 + +## 简介 + +Umami 让您轻松分析数据 + ++ 便于使用 + +Umami 功能强大而简单,易于使用和理解,不需要复杂的设置或标签配置。 + ++ UTM 和自定义事件 + +Umami 会自动理解带有 UTM 参数的链接,并让您根据 UTM 查看和过滤您的网站数据。此外,您还可以跟踪网站上的任何事件,例如按钮点击、表单提交、购买、新闻通讯注册等。 + ++ 没有 Cookie 横幅 + +所有数据均经过 Umami 匿名处理,并且不会收集您网站用户的任何个人信息。您无需选择加入 Cookie +横幅即可跟踪网站的性能,从而为您的用户提供更好、更值得信赖的体验。 +默认情况下,Umami 符合 GDPRP 和 CCPA。 + +## 环境准备 + ++ 数据库支持 + + `MySQL` 版本:`5.7+` + + `PostgreSQL` 版本:`12.14+` + +## 安装说明 + +> 默认管理员帐户 +> +> 用户名: admin +> +> 密码: umami + +## 反向代理 + +> Nginx + +如果您的请求头中存在自定义字段,请修改: + +```text +add_header Access-Control-Allow-Headers '*' +``` + +以下配置修复 ipv6 地址无法收集的问题: + +```nginx +server { + ... + + add_header Content-Security-Policy 'frame-ancestors *'; + add_header Access-Control-Allow-Origin '*'; + add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; + add_header Access-Control-Allow-Headers 'x-umami-cache,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'; + if ($request_method = 'OPTIONS') { + return 204; + } + + location /api/send { + content_by_lua_block { + local cjson = require "cjson" + + local function is_ipv6_address(hostname) + local match = hostname:match("^[%x:]+$") + return match ~= nil + end + + ngx.req.read_body() + local data = ngx.req.get_body_data() + + if data then + local decoded_data = cjson.decode(data) + local hostname = decoded_data.payload.hostname + + if is_ipv6_address(hostname) then + local new_hostname = "127.0.0.1" + decoded_data.payload.hostname = new_hostname + + local modified_data = cjson.encode(decoded_data) + ngx.req.set_body_data(modified_data) + end + end + + ngx.exec("@proxy") + } + } + + location / { + proxy_hide_header 'Access-Control-Allow-Origin'; + proxy_hide_header 'Content-Security-Policy'; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://127.0.0.1:3000; + } + + location @proxy { + proxy_hide_header 'Access-Control-Allow-Origin'; + proxy_hide_header 'Content-Security-Policy'; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://127.0.0.1:3000; + } +} +``` + +极简配置: + +```nginx +add_header Content-Security-Policy 'frame-ancestors *'; +add_header Access-Control-Allow-Origin '*'; +add_header Access-Control-Allow-Methods '*'; +add_header Access-Control-Allow-Headers '*'; +if ($request_method = 'OPTIONS') { + return 204; +} + +location / { + proxy_hide_header 'Access-Control-Allow-Origin'; + proxy_hide_header 'Content-Security-Policy'; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_pass http://127.0.0.1:3000; +} +``` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/umami/data.yml b/appstore/umami/data.yml new file mode 100644 index 00000000..4493dff0 --- /dev/null +++ b/appstore/umami/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + key: umami + name: Umami + tags: + - WebSite + - Database + - Middleware + - Runtime + - Local + shortDescZh: 为速度和效率而构建的网站分析 + shortDescEn: A website analytics tool that is built for speed and efficiency + type: website + crossVersionUpdate: true + limit: 0 + website: https://umami.is/ + github: https://github.com/umami-software/umami/ + document: https://umami.is/docs/ diff --git a/appstore/umami/logo.png b/appstore/umami/logo.png new file mode 100644 index 00000000..9ede937a Binary files /dev/null and b/appstore/umami/logo.png differ diff --git a/appstore/uptime-kuma/1.23.15/.env b/appstore/uptime-kuma/1.23.15/.env new file mode 100644 index 00000000..5fa74c15 --- /dev/null +++ b/appstore/uptime-kuma/1.23.15/.env @@ -0,0 +1,12 @@ +# 数据持久化路径 [必填] +UPTIME_KUMA_ROOT_PATH=/home/uptime-kuma + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3001 + +# Cloudflared 隧道令牌 +UPTIME_KUMA_CLOUDFLARED_TOKEN= + +# 禁用 Frame SameOrigin [必填] +UPTIME_KUMA_DISABLE_FRAME_SAMEORIGIN=false + diff --git a/appstore/uptime-kuma/1.23.15/data.yml b/appstore/uptime-kuma/1.23.15/data.yml new file mode 100644 index 00000000..26dcfdad --- /dev/null +++ b/appstore/uptime-kuma/1.23.15/data.yml @@ -0,0 +1,36 @@ +additionalProperties: + formFields: + - default: "/home/uptime-kuma" + edit: true + envKey: UPTIME_KUMA_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3001 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: UPTIME_KUMA_CLOUDFLARED_TOKEN + labelZh: Cloudflared 隧道令牌 + labelEn: Cloudflared tunnel token + required: false + type: text + - default: "false" + edit: true + envKey: UPTIME_KUMA_DISABLE_FRAME_SAMEORIGIN + labelZh: 禁用 Frame SameOrigin + labelEn: Disable Frame SameOrigin + required: true + type: select + values: + - label: 是 + value: "true" + - label: 否 + value: "false" diff --git a/appstore/uptime-kuma/1.23.15/docker-compose.yml b/appstore/uptime-kuma/1.23.15/docker-compose.yml new file mode 100644 index 00000000..f425a24b --- /dev/null +++ b/appstore/uptime-kuma/1.23.15/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + uptime-kuma: + container_name: uptime-kuma + env_file: + - ./envs/global.env + - .env + environment: + - PUID=0 + - PGID=0 + - UPTIME_KUMA_PORT=3001 + - UPTIME_KUMA_HOST=0.0.0.0 + - DATA_DIR=/app/data + - NODE_TLS_REJECT_UNAUTHORIZED=0 + - UPTIME_KUMA_ALLOW_ALL_CHROME_EXEC=0 + - UPTIME_KUMA_WS_ORIGIN_CHECK=cors-like + image: louislam/uptime-kuma:1.23.15 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3001 + restart: always + volumes: + - ${UPTIME_KUMA_ROOT_PATH}/data:/app/data + - /var/run/docker.sock:/var/run/docker.sock diff --git a/appstore/uptime-kuma/1.23.15/envs/default.env b/appstore/uptime-kuma/1.23.15/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/uptime-kuma/1.23.15/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/uptime-kuma/1.23.15/envs/global.env b/appstore/uptime-kuma/1.23.15/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/uptime-kuma/1.23.15/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/uptime-kuma/1.23.15/scripts/init.sh b/appstore/uptime-kuma/1.23.15/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/uptime-kuma/1.23.15/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/uptime-kuma/1.23.15/scripts/uninstall.sh b/appstore/uptime-kuma/1.23.15/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/uptime-kuma/1.23.15/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/uptime-kuma/1.23.15/scripts/upgrade.sh b/appstore/uptime-kuma/1.23.15/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/uptime-kuma/1.23.15/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/uptime-kuma/2.0.0/.env b/appstore/uptime-kuma/2.0.0/.env new file mode 100644 index 00000000..32a291fc --- /dev/null +++ b/appstore/uptime-kuma/2.0.0/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +UPTIME_KUMA_ROOT_PATH=/home/uptime-kuma + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3001 + diff --git a/appstore/uptime-kuma/2.0.0/data.yml b/appstore/uptime-kuma/2.0.0/data.yml new file mode 100644 index 00000000..a1f697d3 --- /dev/null +++ b/appstore/uptime-kuma/2.0.0/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: "/home/uptime-kuma" + edit: true + envKey: UPTIME_KUMA_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 3001 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number diff --git a/appstore/uptime-kuma/2.0.0/docker-compose.yml b/appstore/uptime-kuma/2.0.0/docker-compose.yml new file mode 100644 index 00000000..0c3c36f4 --- /dev/null +++ b/appstore/uptime-kuma/2.0.0/docker-compose.yml @@ -0,0 +1,20 @@ +networks: + 1panel-network: + external: true +services: + uptime-kuma: + container_name: uptime-kuma + env_file: + - ./envs/global.env + - .env + image: louislam/uptime-kuma:2.0.0-beta.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3001 + restart: always + volumes: + - ${UPTIME_KUMA_ROOT_PATH}/data:/app/data + - /var/run/docker.sock:/var/run/docker.sock diff --git a/appstore/uptime-kuma/2.0.0/envs/default.env b/appstore/uptime-kuma/2.0.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/uptime-kuma/2.0.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/uptime-kuma/2.0.0/envs/global.env b/appstore/uptime-kuma/2.0.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/uptime-kuma/2.0.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/uptime-kuma/2.0.0/scripts/init.sh b/appstore/uptime-kuma/2.0.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/uptime-kuma/2.0.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/uptime-kuma/2.0.0/scripts/uninstall.sh b/appstore/uptime-kuma/2.0.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/uptime-kuma/2.0.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/uptime-kuma/2.0.0/scripts/upgrade.sh b/appstore/uptime-kuma/2.0.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/uptime-kuma/2.0.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/uptime-kuma/README.md b/appstore/uptime-kuma/README.md new file mode 100644 index 00000000..b2c69a82 --- /dev/null +++ b/appstore/uptime-kuma/README.md @@ -0,0 +1,25 @@ +# Uptime Kuma + +Uptime Kuma 是一款易于使用的自托管监控工具。 + +![Uptime Kuma](https://file.lifebus.top/imgs/uptime_kuma_cover.jpg) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + ++ 监控 HTTP(s) / TCP / HTTP(s) 关键字 / HTTP(s) Json 查询 / Ping / DNS 记录 / 推送 / Steam 游戏服务器 / Docker 容器的正常运行时间 ++ 精美、反应式、快速的 UI/UX ++ 通过 Telegram、Discord、Gotify、Slack、Pushover、电子邮件 (SMTP) 和 90 多种通知服务发送通知,请单击此处查看完整列表 ++ 20 秒间隔 ++ 多种语言 ++ 多个状态页面 ++ 将状态页面映射到特定域 ++ 平图 ++ 证书信息 ++ 代理支持 ++ 2FA 支持 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/uptime-kuma/data.yml b/appstore/uptime-kuma/data.yml new file mode 100644 index 00000000..be79a840 --- /dev/null +++ b/appstore/uptime-kuma/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: uptime-kuma + name: Uptime Kuma + tags: + - WebSite + - Tool + - Local + shortDescZh: 自托管的监控工具 + shortDescEn: Self-hosted monitoring tool + type: website + crossVersionUpdate: false + limit: 0 + website: https://uptime.kuma.pet/ + github: https://github.com/louislam/uptime-kuma/ + document: https://github.com/louislam/uptime-kuma/wiki/ diff --git a/appstore/uptime-kuma/logo.png b/appstore/uptime-kuma/logo.png new file mode 100644 index 00000000..54309bce Binary files /dev/null and b/appstore/uptime-kuma/logo.png differ diff --git a/appstore/watchyourlan/2.0.4/.env b/appstore/watchyourlan/2.0.4/.env new file mode 100644 index 00000000..7049202d --- /dev/null +++ b/appstore/watchyourlan/2.0.4/.env @@ -0,0 +1,33 @@ +# 数据持久化路径 [必填] +WATCHYOURLAN_ROOT_PATH=/home/watchyourlan + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8840 + +# 主题 [必填] +THEME=sand + +# 颜色 [必填] +COLOR=dark + +# 通知地址 +SHOUTRRR_URL= + +# 监听网卡 (多个用逗号分隔) [必填] +IFACES=enp2s0 + +# 超时时间 (秒) [必填] +TIMEOUT=120 + +# 历史记录保留失效 (小时) [必填] +TRIM_HIST=48 + +# 历史记录存储方式 [必填] +HIST_IN_DB=false + +# 数据存储方式 [必填] +USE_DB=sqlite + +# PostgreSQL 连接地址 +PG_CONNECT= + diff --git a/appstore/watchyourlan/2.0.4/data.yml b/appstore/watchyourlan/2.0.4/data.yml new file mode 100644 index 00000000..ab4d657d --- /dev/null +++ b/appstore/watchyourlan/2.0.4/data.yml @@ -0,0 +1,108 @@ +additionalProperties: + formFields: + - default: "/home/watchyourlan" + edit: true + envKey: WATCHYOURLAN_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8840 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: 访问端口 + labelEn: Port + required: true + rule: paramPort + type: number + - default: "sand" + edit: true + envKey: THEME + labelZh: 主题 + labelEn: Theme + required: true + type: select + values: + - label: Sand + value: "sand" + - label: Emerald + value: "emerald" + - label: Grass + value: "grass" + - label: Grayscale + value: "grayscale" + - label: Ocean + value: "ocean" + - label: Wood + value: "wood" + - default: "dark" + edit: true + envKey: COLOR + labelZh: 颜色 + labelEn: Color + required: true + type: select + values: + - label: 浅色 + value: "light" + - label: 深色 + value: "dark" + - default: "" + edit: true + envKey: SHOUTRRR_URL + labelZh: 通知地址 + labelEn: Notification URL + required: false + type: text + - default: "enp2s0" + edit: true + envKey: IFACES + labelZh: 监听网卡 (多个用逗号分隔) + labelEn: Listening network card (separated by commas) + required: true + type: text + - default: 120 + edit: true + envKey: TIMEOUT + labelZh: 超时时间 (秒) + labelEn: Timeout (seconds) + required: true + type: number + - default: 48 + edit: true + envKey: TRIM_HIST + labelZh: 历史记录保留失效 (小时) + labelEn: Historical record retention invalid (hours) + required: true + type: number + - default: "false" + edit: true + envKey: HIST_IN_DB + labelZh: 历史记录存储方式 + labelEn: Historical record storage method + required: true + type: select + values: + - label: 内存存储 + value: "false" + - label: 数据库存储 + value: "true" + - default: "sqlite" + edit: true + envKey: USE_DB + labelZh: 数据存储方式 + labelEn: Data storage method + required: true + type: select + values: + - label: SQLite + value: "sqlite" + - label: PostgreSQL + value: "postgres" + - default: "" + edit: true + envKey: PG_CONNECT + labelZh: PostgreSQL 连接地址 + labelEn: PostgreSQL connection address + required: false + type: text diff --git a/appstore/watchyourlan/2.0.4/docker-compose.yml b/appstore/watchyourlan/2.0.4/docker-compose.yml new file mode 100644 index 00000000..1ca46ab4 --- /dev/null +++ b/appstore/watchyourlan/2.0.4/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + watchyourlan: + container_name: watchyourlan + env_file: + - ./envs/global.env + - .env + environment: + - HOST=0.0.0.0 + - PORT=8840 + - LOG_LEVEL=info + image: aceberg/watchyourlan:2.0.4 + labels: + createdBy: Apps + network_mode: host + ports: + - ${PANEL_APP_PORT_HTTP}:8840 + restart: always + volumes: + - ${WATCHYOURLAN_ROOT_PATH}/data:/data/WatchYourLAN diff --git a/appstore/watchyourlan/2.0.4/envs/default.env b/appstore/watchyourlan/2.0.4/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/watchyourlan/2.0.4/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/watchyourlan/2.0.4/envs/global.env b/appstore/watchyourlan/2.0.4/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/watchyourlan/2.0.4/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/watchyourlan/2.0.4/scripts/init.sh b/appstore/watchyourlan/2.0.4/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/watchyourlan/2.0.4/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/watchyourlan/2.0.4/scripts/uninstall.sh b/appstore/watchyourlan/2.0.4/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/watchyourlan/2.0.4/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/watchyourlan/2.0.4/scripts/upgrade.sh b/appstore/watchyourlan/2.0.4/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/watchyourlan/2.0.4/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/watchyourlan/README.md b/appstore/watchyourlan/README.md new file mode 100644 index 00000000..ffdd7afc --- /dev/null +++ b/appstore/watchyourlan/README.md @@ -0,0 +1,20 @@ +# 路由设备监控 + +轻量级网络 IP 扫描器。可用于通知新主机并监控主机在线/离线历史 + +![路由设备监控](https://file.lifebus.top/imgs/watchyourlan_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +轻量级网络 IP 扫描器,带有 Web GUI。特性: Translation: + ++ 发现新主机时发送通知 ++ 监控主机在线/离线历史 ++ 保持网络中所有主机的列表 ++ 将数据发送到 InfluxDB2 以创建 Grafana 仪表板 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/watchyourlan/data.yml b/appstore/watchyourlan/data.yml new file mode 100644 index 00000000..26a2837a --- /dev/null +++ b/appstore/watchyourlan/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: watchyourlan + name: 路由设备监控 + tags: + - WebSite + - Middleware + - Local + shortDescZh: 轻量级网络 IP 扫描器 + shortDescEn: Lightweight network IP scanner + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/aceberg/WatchYourLAN/ + github: https://github.com/aceberg/WatchYourLAN/ + document: https://github.com/aceberg/WatchYourLAN/ diff --git a/appstore/watchyourlan/logo.png b/appstore/watchyourlan/logo.png new file mode 100644 index 00000000..2f2d5ca0 Binary files /dev/null and b/appstore/watchyourlan/logo.png differ diff --git a/appstore/windows/4.05/.env b/appstore/windows/4.05/.env new file mode 100644 index 00000000..1000ce10 --- /dev/null +++ b/appstore/windows/4.05/.env @@ -0,0 +1,39 @@ +# Windows 存储目录 [必填] +WINDOWS_STORAGE_ROOT_PATH=/home/windows + +# Windows 网上邻居共享目录 [必填] +WINDOWS_SHARE_ROOT_PATH=/home/windows + +# Windows OEM 目录 [必填] +WINDOWS_OEM_ROOT_PATH=/home/windows + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8006 + +# Windows 远程桌面 端口 [必填] +PANEL_APP_PORT_REMOTE=3389 + +# Windows 版本 [必填] +VERSION=win11 + +# 用户名 [必填] +USERNAME=Administrator + +# 密码 [必填] +PASSWORD= + +# 安装模式选择 [必填] +MANUAL=N + +# 内存大小 [必填] +RAM_SIZE=8G + +# 硬盘大小 [必填] +DISK_SIZE=64GB + +# CPU 核心数 [必填] +CPU_CORES=4 + +# Windows 语言 [必填] +LANGUAGE=CN + diff --git a/appstore/windows/4.05/data.yml b/appstore/windows/4.05/data.yml new file mode 100644 index 00000000..6b7c0a4d --- /dev/null +++ b/appstore/windows/4.05/data.yml @@ -0,0 +1,204 @@ +additionalProperties: + formFields: + - default: "/home/windows" + edit: true + envKey: WINDOWS_STORAGE_ROOT_PATH + labelZh: Windows 存储目录 + labelEn: Windows Storage Path + required: true + type: text + - default: "/home/windows" + edit: true + envKey: WINDOWS_SHARE_ROOT_PATH + labelZh: Windows 网上邻居共享目录 + labelEn: Windows Share Path + required: true + type: text + - default: "/home/windows" + edit: true + envKey: WINDOWS_OEM_ROOT_PATH + labelZh: Windows OEM 目录 + labelEn: Windows OEM Path + required: true + type: text + - default: 8006 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 3389 + edit: true + envKey: PANEL_APP_PORT_REMOTE + labelZh: Windows 远程桌面 端口 + labelEn: Windows Remote Desktop Port + required: true + rule: paramPort + type: number + - default: "win11" + edit: true + envKey: VERSION + labelZh: Windows 版本 + labelEn: Windows Version + required: true + type: select + values: + - label: Windows 11 Pro (5.4GB) + value: "win11" + - label: Windows 11 LTSC (4.2GB) + value: "ltsc11" + - label: Windows 11 Enterprise (5.8GB) + value: "win11e" + - label: Windows 10 Pro (5.7GB) + value: "win10" + - label: Windows 10 LTSC (4.6GB) + value: "ltsc10" + - label: Windows 10 Enterprise (5.2GB) + value: "win10e" + - label: Windows 8.1 Pro (4.0GB) + value: "win8" + - label: Windows 8.1 Enterprise (3.7GB) + value: "win8e" + - label: Windows 7 Enterprise (3.0GB) + value: "win7" + - label: Windows Vista Enterprise (3.0GB) + value: "vista" + - label: Windows XP Professional (0.6GB) + value: "winxp" + - label: Windows Server 2025 (5.0GB) + value: "2025" + - label: Windows Server 2022 (4.7GB) + value: "2022" + - label: Windows Server 2019 (5.3GB) + value: "2019" + - label: Windows Server 2016 (6.5GB) + value: "2016" + - label: Windows Server 2012 (4.3GB) + value: "2012" + - label: Windows Server 2008 (3.0GB) + value: "2008" + - label: Windows Server 2003 (0.6GB) + value: "2003" + - default: "Administrator" + edit: true + envKey: USERNAME + labelZh: 用户名 + labelEn: Username + required: true + type: text + - default: "" + edit: true + envKey: PASSWORD + labelZh: 密码 + labelEn: Password + required: true + type: password + - default: "N" + edit: true + envKey: MANUAL + labelZh: 安装模式选择 + labelEn: Manual Mode + required: true + type: select + values: + - label: 自动化安装 + value: "N" + - label: 手动安装 + value: "Y" + - default: "8G" + edit: true + envKey: RAM_SIZE + labelZh: 内存大小 + labelEn: RAM Size + required: true + type: text + - default: "64GB" + edit: true + envKey: DISK_SIZE + labelZh: 硬盘大小 + labelEn: Disk Size + required: true + type: text + - default: 4 + edit: true + envKey: CPU_CORES + labelZh: CPU 核心数 + labelEn: CPU Cores + required: true + type: number + - default: "CN" + edit: true + envKey: LANGUAGE + labelZh: Windows 语言 + labelEn: Windows Language + required: true + type: select + values: + - label: 阿拉伯语 + value: "AE" + - label: 保加利亚语 + value: "BG" + - label: 简体中文 + value: "CN" + - label: 克罗地亚语 + value: "HR" + - label: 捷克语 + value: "CZ" + - label: 丹麦语 + value: "DK" + - label: 荷兰语 + value: "NL" + - label: 英语 + value: "GB" + - label: 爱沙尼亚语 + value: "EE" + - label: 芬兰语 + value: "FI" + - label: 法语 + value: "FR" + - label: 德语 + value: "DE" + - label: 希腊语 + value: "GR" + - label: 希伯来语 + value: "IL" + - label: 匈牙利语 + value: "HU" + - label: 意大利语 + value: "IT" + - label: 日语 + value: "JP" + - label: 韩语 + value: "KR" + - label: 拉脱维亚语 + value: "LV" + - label: 立陶宛语 + value: "LT" + - label: 挪威语 + value: "NO" + - label: 波兰语 + value: "PL" + - label: 葡萄牙语 + value: "PT" + - label: 罗马尼亚语 + value: "RO" + - label: 俄语 + value: "RU" + - label: 塞尔维亚语 + value: "RS" + - label: 斯洛伐克语 + value: "SK" + - label: 斯洛文尼亚语 + value: "SI" + - label: 西班牙语 + value: "ES" + - label: 瑞典语 + value: "SE" + - label: 泰语 + value: "TH" + - label: 土耳其语 + value: "TR" + - label: 乌克兰语 + value: "UA" diff --git a/appstore/windows/4.05/docker-compose.yml b/appstore/windows/4.05/docker-compose.yml new file mode 100644 index 00000000..bc7a5090 --- /dev/null +++ b/appstore/windows/4.05/docker-compose.yml @@ -0,0 +1,33 @@ +networks: + 1panel-network: + external: true +services: + windows: + cap_add: + - NET_ADMIN + container_name: windows + devices: + - /dev/kvm:/dev/kvm + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + environment: + - REGION=en-US + - KEYBOARD=en-US + - VERSION=${VERSION} + image: dockurr/windows:4.05 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8006 + - ${PANEL_APP_PORT_REMOTE}:3389/tcp + - ${PANEL_APP_PORT_REMOTE}:3389/udp + restart: always + stop_grace_period: 2m + volumes: + - ${WINDOWS_STORAGE_ROOT_PATH}/storage:/storage + - ${WINDOWS_SHARE_ROOT_PATH}/share:/data + - ${WINDOWS_OEM_ROOT_PATH}/oem:/oem diff --git a/appstore/windows/4.05/envs/default.env b/appstore/windows/4.05/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/windows/4.05/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/windows/4.05/envs/global.env b/appstore/windows/4.05/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/windows/4.05/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/windows/4.05/scripts/init.sh b/appstore/windows/4.05/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/windows/4.05/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/windows/4.05/scripts/uninstall.sh b/appstore/windows/4.05/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/windows/4.05/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/windows/4.05/scripts/upgrade.sh b/appstore/windows/4.05/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/windows/4.05/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/windows/README.md b/appstore/windows/README.md new file mode 100644 index 00000000..97362bf3 --- /dev/null +++ b/appstore/windows/README.md @@ -0,0 +1,106 @@ +# Windows 系统 + +Docker 容器内的 Windows + +![Windows](https://file.lifebus.top/imgs/windows_cover.jpg) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +Microsoft Windows,或称Windows操作系统,是微软以图形用户界面为主推出的一系列专有商业软件操作系统。 +它于1985年问世,起初为运行于MS-DOS之下的桌面环境,其后续版本逐渐发展成为主要为个人电脑和服务器用户设计的操作系统,并最终获得了世界个人电脑操作系统的垄断地位。 + +## 特性 + ++ 国际标准下载器 ++ KVM 加速 ++ 网络浏览器 + +## 安装说明 + +
+
+ ⚠️ +
+ 警告
+ 该应用申请使用 `网络特权模式`, 将允许应用在容器内部执行网络管理相关特权操作。 +
+
+
+ +由于需要下载系统镜像,安装过程的快慢取决于您的网络,请耐心等待。 + +部分系统不包含部分语言,如果无法安装系统,请尝试跟换系统语言,重建即可。 + +### 挂载自定义ISO + +如果您有自己的 Windows 系统镜像。 +你可以选择将其挂载至镜像并修改 docker-compose.yml 文件。 + ++ 自定义本地镜像地址 + +```yml +environment: + VERSION: "/win.iso" +``` + ++ 自定义远程镜像地址 + +```yml +environment: + VERSION: "https://example.com/win.iso" +``` + +## 常见问题 + +### kvm 模块加载失败 + +请检查是否开启了虚拟化功能,或者在 BIOS 中开启虚拟化功能。 + +### 挂载更多磁盘 + +请修改 docker-compose.yml 参数配置 + +```yml +environment: + DISK2_SIZE: "32G" + DISK3_SIZE: "64G" +volumes: + - /home/example:/storage2 + - /mnt/data/example:/storage3 +``` + +### 如何直通磁盘 + +请修改 docker-compose.yml 参数配置 + +```yml +devices: + - /dev/sdb:/disk1 + - /dev/sdc:/disk2 +``` + +### 如何通过 USB 设备进行数据传输 + +请修改 docker-compose.yml 参数配置 + +```yml +environment: + ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234" +devices: + - /dev/bus/usb +``` + +### 如何使用 RDP 进行连接 + +通过网页访问,一般情况下适用于系统安装过程中使用,因为其画质较低,且没有音频或剪贴板等功能。 + +您可以使用任何 Microsoft 远程桌面客户端连接到容器的 IP 地址,使用用户名 Docker ,并且密码留空。 + +安卓设备可以从应用商店下载 RDP 客户端,iOS 设备则可在苹果商店找到对应的客户端。Linux 用户可以使用 FreeRDP,而 Windows +用户只需在搜索框中输入 mstsc 即可。 + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/windows/data.yml b/appstore/windows/data.yml new file mode 100644 index 00000000..92911127 --- /dev/null +++ b/appstore/windows/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: windows + name: Windows 系统 + tags: + - WebSite + - Local + shortDescZh: Docker 容器内的 Windows + shortDescEn: Windows in Docker container + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.microsoft.com/ + github: https://github.com/dockur/windows/ + document: https://www.microsoft.com/ diff --git a/appstore/windows/logo.png b/appstore/windows/logo.png new file mode 100644 index 00000000..084b2ec3 Binary files /dev/null and b/appstore/windows/logo.png differ diff --git a/appstore/wiseflow/0.3.0/.env b/appstore/wiseflow/0.3.0/.env new file mode 100644 index 00000000..4a32b2ef --- /dev/null +++ b/appstore/wiseflow/0.3.0/.env @@ -0,0 +1,27 @@ +# 数据持久化路径 [必填] +WISEFLOW_ROOT_PATH=/home/wiseflow + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8090 + +# 后端服务端口 [必填] +PANEL_APP_PORT_BACKEND=8077 + +# LLM API 地址 [必填] +LLM_API_BASE=https://api.siliconflow.cn/v1 + +# LLM API 密钥 +LLM_API_KEY= + +# PB数据库 账户密码 +PB_API_AUTH=test@example.com|1234567890 + +# 信息提炼与标签匹配任务模型 [必填] +GET_INFO_MODEL=zhipuai/glm4-9B-chat + +# 近似信息合并改写任务模型 [必填] +REWRITE_MODEL=alibaba/Qwen2-7B-Instruct + +# 网页解析模型 [必填] +HTML_PARSE_MODEL=alibaba/Qwen2-7B-Instruct + diff --git a/appstore/wiseflow/0.3.0/data.yml b/appstore/wiseflow/0.3.0/data.yml new file mode 100644 index 00000000..c87d0e33 --- /dev/null +++ b/appstore/wiseflow/0.3.0/data.yml @@ -0,0 +1,68 @@ +additionalProperties: + formFields: + - default: "/home/wiseflow" + edit: true + envKey: WISEFLOW_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 8090 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 8077 + edit: true + envKey: PANEL_APP_PORT_BACKEND + labelZh: 后端服务端口 + labelEn: Backend service port + required: true + rule: paramPort + type: number + - default: "https://api.siliconflow.cn/v1" + edit: true + envKey: LLM_API_BASE + labelZh: LLM API 地址 + labelEn: LLM API address + required: true + rule: paramExtUrl + type: text + - default: "" + edit: true + envKey: LLM_API_KEY + labelZh: LLM API 密钥 + labelEn: LLM API key + required: false + type: text + - default: "test@example.com|1234567890" + edit: true + envKey: PB_API_AUTH + labelZh: PB数据库 账户密码 + labelEn: PB database account password + required: false + type: text + - default: "zhipuai/glm4-9B-chat" + edit: true + envKey: GET_INFO_MODEL + labelZh: 信息提炼与标签匹配任务模型 + labelEn: Information extraction and label matching task model + required: true + type: text + - default: "alibaba/Qwen2-7B-Instruct" + edit: true + envKey: REWRITE_MODEL + labelZh: 近似信息合并改写任务模型 + labelEn: Approximate information merge rewrite task model + required: true + type: text + - default: "alibaba/Qwen2-7B-Instruct" + edit: true + envKey: HTML_PARSE_MODEL + labelZh: 网页解析模型 + labelEn: Web page parsing model + required: true + type: text diff --git a/appstore/wiseflow/0.3.0/docker-compose.yml b/appstore/wiseflow/0.3.0/docker-compose.yml new file mode 100644 index 00000000..716217a9 --- /dev/null +++ b/appstore/wiseflow/0.3.0/docker-compose.yml @@ -0,0 +1,28 @@ +networks: + 1panel-network: + external: true +services: + wiseflow: + container_name: wiseflow + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + - LANG=zh_CN.UTF-8 + - LC_ALL=zh_CN.UTF-8 + - WS_LOG=verbose + image: qyg2297248353/wiseflow:v0.3.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8090 + - ${PANEL_APP_PORT_BACKEND}:8077 + restart: always + stdin_open: true + tty: true + volumes: + - ${WISEFLOW_ROOT_PATH}/pb_data:/app/pb/pb_data + - ${WISEFLOW_ROOT_PATH}/data:/app/works_data diff --git a/appstore/wiseflow/0.3.0/envs/default.env b/appstore/wiseflow/0.3.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/wiseflow/0.3.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/wiseflow/0.3.0/envs/global.env b/appstore/wiseflow/0.3.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/wiseflow/0.3.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/wiseflow/0.3.0/scripts/init.sh b/appstore/wiseflow/0.3.0/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/wiseflow/0.3.0/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/wiseflow/0.3.0/scripts/uninstall.sh b/appstore/wiseflow/0.3.0/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/wiseflow/0.3.0/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/wiseflow/0.3.0/scripts/upgrade.sh b/appstore/wiseflow/0.3.0/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/wiseflow/0.3.0/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/wiseflow/README.md b/appstore/wiseflow/README.md new file mode 100644 index 00000000..92c18661 --- /dev/null +++ b/appstore/wiseflow/README.md @@ -0,0 +1,72 @@ +# Wiseflow 首席情报官 + +首席情报官(Wiseflow)是一个敏捷的信息挖掘工具,可以从网站、微信公众号、社交平台等各种信息源中按设定的关注点提炼讯息,自动做标签归类并上传数据库。 + +![Bark](https://file.lifebus.top/imgs/wiseflow_cover.png) + +我们缺的其实不是信息,我们需要的是从海量信息中过滤噪音,从而让有价值的信息显露出来! + +看看首席情报官是如何帮您节省时间,过滤无关信息,并整理关注要点的吧! + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + +🚀 原生 LLM 应用 + +我们精心选择了最适合的 7B~9B 开源模型,最大化降低使用成本,且利于数据敏感用户随时完全切换至本地部署。 + +🌱 轻量化设计 + +不用任何向量模型,系统开销很小,无需 GPU,适合任何硬件环境。 + +🗃️ 智能信息提取和分类 + +从各种信息源中自动提取信息,并根据用户关注点进行标签化和分类管理。 + +WiseFlow尤其擅长从微信公众号文章中提取信息,为此我们配置了mp article专属解析器! + +🌍 可以被整合至任意Agent项目 + +可以作为任意 Agent 项目的动态知识库,无需了解wiseflow的代码,只需要与数据库进行读取操作即可! + +📦 流行的 Pocketbase 数据库 + +数据库和界面使用 PocketBase,除了 Web 界面外,目前已有 Go/Javascript/Python 等语言的SDK。 + +## 安装说明 + +> 数据库初始化 +> +> 首次安装需要进入 `http://127.0.0.1:8090/_/` 进行数据库初始化。 +> +> 初始化完成后,回到应用列表,填写 `PB数据库 账户密码` 配置 +> +> 填写格式 `|` +> +> 例如 `test@example.com|1234567890` + +### 配置大模型 + +由于本地部署的原生模型较大,不推荐普通用户自行搭建。 + +推荐使用 `SiliconFlow` 服务,我们提供了完整的模型服务,只需填写 `SiliconFlow` 的 `API` 地址即可。 + +账户申请:[SiliconFlow](https://cloud.siliconflow.cn?referrer=clzusc8v803r712nttz3gbfq5) + +配置:`LLM API 地址` 填写 `SiliconFlow` 的 `API` 地址 `https://api.siliconflow.cn/v1` + +配置密钥:可通过 [API密钥](https://cloud.siliconflow.cn/account/ak) 页面获取 + +## 常见问题 + +### 🔄 wiseflow 与常见的爬虫工具、LLM-Agent类项目有何不同与关联? + +| 特点 | 首席情报官(Wiseflow) | Crawler / Scraper | LLM-Agent | +|-------------|-----------------|---------------------------------------|----------------------| +| **主要解决的问题** | 数据处理(筛选、提炼、贴标签) | 原始数据获取 | 下游应用 | +| **关联** | | 可以集成至WiseFlow,使wiseflow具有更强大的原始数据获取能力 | 可以集成WiseFlow,作为动态知识库 | + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/wiseflow/data.yml b/appstore/wiseflow/data.yml new file mode 100644 index 00000000..4d2ad4ea --- /dev/null +++ b/appstore/wiseflow/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: wiseflow + name: Wiseflow + tags: + - WebSite + - Tool + - Local + shortDescZh: Wiseflow 首席情报官 + shortDescEn: Wiseflow Chief Intelligence Officer + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/TeamWiseFlow/wiseflow/ + github: https://github.com/TeamWiseFlow/wiseflow/ + document: https://github.com/TeamWiseFlow/wiseflow/ diff --git a/appstore/wiseflow/logo.png b/appstore/wiseflow/logo.png new file mode 100644 index 00000000..b1225113 Binary files /dev/null and b/appstore/wiseflow/logo.png differ diff --git a/appstore/wukongim/1.2.6/.env b/appstore/wukongim/1.2.6/.env new file mode 100644 index 00000000..abeb62e9 --- /dev/null +++ b/appstore/wukongim/1.2.6/.env @@ -0,0 +1,21 @@ +# 数据持久化路径 [必填] +WUKONGIM_ROOT_PATH=/home/wukongim + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5300 + +# API 端口 [必填] +PANEL_APP_PORT_WK_API=5001 + +# TCP端口 [必填] +PANEL_APP_PORT_WK_TCP=5100 + +# WebSocket 端口 [必填] +PANEL_APP_PORT_WK_WS=5200 + +# 悟空IM演示端口 [必填] +PANEL_APP_PORT_WK_DEMO_SERVER=5172 + +# 服务器IP [必填] +WK_EXTERNAL_IP=127.0.0.1 + diff --git a/appstore/wukongim/1.2.6/data.yml b/appstore/wukongim/1.2.6/data.yml new file mode 100644 index 00000000..201cda9d --- /dev/null +++ b/appstore/wukongim/1.2.6/data.yml @@ -0,0 +1,47 @@ +additionalProperties: + formFields: + - default: "/home/wukongim" + edit: true + envKey: WUKONGIM_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 5300 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 5001 + envKey: PANEL_APP_PORT_WK_API + labelZh: API 端口 + labelEn: API port + required: true + type: number + - default: 5100 + envKey: PANEL_APP_PORT_WK_TCP + labelZh: TCP端口 + labelEn: Tcp port + required: true + type: number + - default: 5200 + envKey: PANEL_APP_PORT_WK_WS + labelZh: WebSocket 端口 + labelEn: WebSocket port + required: true + type: number + - default: 5172 + envKey: PANEL_APP_PORT_WK_DEMO_SERVER + labelZh: 悟空IM演示端口 + labelEn: WuKongIM demo port + required: true + type: number + - default: "127.0.0.1" + envKey: WK_EXTERNAL_IP + labelZh: 服务器IP + labelEn: Server IP + required: true + type: text diff --git a/appstore/wukongim/1.2.6/docker-compose.yml b/appstore/wukongim/1.2.6/docker-compose.yml new file mode 100644 index 00000000..3f501295 --- /dev/null +++ b/appstore/wukongim/1.2.6/docker-compose.yml @@ -0,0 +1,25 @@ +networks: + 1panel-network: + external: true +services: + wukongim: + container_name: wukongim + env_file: + - ./envs/global.env + - .env + environment: + - WK_MODE=release + image: wukongim/wukongim:v1.2.6 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5300 + - ${PANEL_APP_PORT_WK_API}:5001 + - ${PANEL_APP_PORT_WK_TCP}:5100 + - ${PANEL_APP_PORT_WK_WS}:5200 + - ${PANEL_APP_PORT_WK_DEMO_SERVER}:5172 + restart: always + volumes: + - ${WUKONGIM_ROOT_PATH}/wukongim:/root/wukongim diff --git a/appstore/wukongim/1.2.6/envs/default.env b/appstore/wukongim/1.2.6/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/wukongim/1.2.6/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/wukongim/1.2.6/envs/global.env b/appstore/wukongim/1.2.6/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/wukongim/1.2.6/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/wukongim/1.2.6/scripts/init.sh b/appstore/wukongim/1.2.6/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/wukongim/1.2.6/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/wukongim/1.2.6/scripts/uninstall.sh b/appstore/wukongim/1.2.6/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/wukongim/1.2.6/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/wukongim/1.2.6/scripts/upgrade.sh b/appstore/wukongim/1.2.6/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/wukongim/1.2.6/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/wukongim/README.md b/appstore/wukongim/README.md new file mode 100644 index 00000000..f5320858 --- /dev/null +++ b/appstore/wukongim/README.md @@ -0,0 +1,115 @@ +# WuKongIM 悟空IM + +高性能通用分布式通讯服务,支持聊天应用,消息推送,物联网通讯,音视频信令,直播弹幕,客服系统,AI 通讯,即时社区等场景。 + +![WuKongIM](https://file.lifebus.top/imgs/wukongim_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 特性 + +🎦独特性 + +群成员无上限,轻松支持10万人群聊,消息可永久存储。 + +📚资源消耗低 + +自研二进制协议,心跳包只有1字节,省流量,省电量,传输更迅速。 + +🔐安全性 + +消息通道和消息内容全程加密,防中间人攻击和窜改消息内容,服务端数据实时备份,数据不丢失。 + +🚀 性能 + +基于pebble kv数据库,研发了针对于IM这种服务的特有分布式数据库,省了其他数据库为了通用性而带来的性能损耗, 因为存储快,所以消息快。 + +🔥高可用 + +通过魔改raft分布式协议,实现了自动容灾,一台机器宕机,另一台机器自动接管,对外无感知。 + +去中心化,无单点,无中心节点,每个节点都是独立且平等的,都可以提供服务。 + +扩容方便,只需增加机器,不需要停机,不需要迁移数据,自动按策略分配数据。 + +🕹️ 易用性 + +不依赖任何第三方中间件,部署简单,一条命令即可启动。 + +采用频道订阅发布的设计理念,容易理解,容易上手。 + +与Redis一样简单,Kafka一样高性能,MySQL一样可靠 + +🌲技术支持 + +官方团队提供技术支持,提供技术文档,提供技术交流群,提供issue反馈。 + +## 适用场景 + +### 即时通讯 + ++ 群频道支持 ++ 个人频道支持 ++ 消息永久存储 ++ 离线消息推送支持 ++ 最近会话维护 + +### 消息推送/站内消息 + ++ 群频道支持 ++ 个人频道支持 ++ 离线消息推送支持 + +### 客服系统 + ++ 客服频道支持 + ++ 消息支持投递给第三方服务器 + ++ 第三方服务器可决定分配指定的订阅者成组投递 + +(整体逻辑: 创建频道 -> 发送消息 -> 匹配客服 -> 客服加入频道 -> 开始聊天 ) + +### 游戏聊天室 + ++ 大群频道支持 + +### 音视频信令服务器 + ++ 支持临时指令消息投递 + +### 直播弹幕 + ++ 临时消息投递 + ++ 临时订阅者支持 + +一个直播一个频道,用户进入直播就是用户订阅频道,用户退出直播就是用户取消订阅频道,直播结束就是频道销毁。 + +### 实时 AI 反馈 + ++ 支持客户端发的消息推送给第三方服务器,第三方服务器反馈给 AI 后返回的结果再推送给客户端 + +### 即时社区 + ++ 社区频道支持 ++ 支持 topic 模式的消息投递 + +### 物联网通讯 + ++ mqtt 协议支持(待开发) ++ 支持发布与订阅 + +## 安装说明 + +> 监控地址 http://127.0.0.1:5300/web +> +> 具体参考日志:【MonitorServer】Monitor web address:xxx +> +> 演示地址 http://127.0.0.1:5172/chatdemo +> +> 具体参考日志:【DemoServer】Chat demo address:xxx + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/wukongim/data.yml b/appstore/wukongim/data.yml new file mode 100644 index 00000000..95b5158d --- /dev/null +++ b/appstore/wukongim/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: wukongim + name: 悟空IM + tags: + - WebSite + - Tool + - Local + shortDescZh: 让信息传递更简单 + shortDescEn: Make messaging easier + type: website + crossVersionUpdate: true + recommend: 0 + website: https://githubim.com/ + github: https://github.com/TangSengDaoDao/TangSengDaoDaoServer/ + document: https://githubim.com/ diff --git a/appstore/wukongim/logo.png b/appstore/wukongim/logo.png new file mode 100644 index 00000000..3ee5b050 Binary files /dev/null and b/appstore/wukongim/logo.png differ diff --git a/appstore/xunlei-cnk3x/3.20.2/.env b/appstore/xunlei-cnk3x/3.20.2/.env new file mode 100644 index 00000000..a23098d6 --- /dev/null +++ b/appstore/xunlei-cnk3x/3.20.2/.env @@ -0,0 +1,12 @@ +# 数据持久化路径 [必填] +XUNLEI_ROOT_PATH=/home/xunlei + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2345 + +# Web访问 用户名 [必填] +XL_DASHBOARD_USERNAME=xunlei + +# Web访问 密码 [必填] +XL_DASHBOARD_PASSWORD=xunlei- + diff --git a/appstore/xunlei-cnk3x/3.20.2/data.yml b/appstore/xunlei-cnk3x/3.20.2/data.yml new file mode 100644 index 00000000..2395df4c --- /dev/null +++ b/appstore/xunlei-cnk3x/3.20.2/data.yml @@ -0,0 +1,34 @@ +additionalProperties: + formFields: + - default: "/home/xunlei" + edit: true + envKey: XUNLEI_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: 2345 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: "xunlei" + edit: true + envKey: XL_DASHBOARD_USERNAME + labelZh: Web访问 用户名 + labelEn: Username + required: true + rule: paramCommon + type: text + - default: "xunlei-" + edit: true + envKey: XL_DASHBOARD_PASSWORD + labelZh: Web访问 密码 + labelEn: Password + required: true + rule: paramComplexity + random: true + type: password diff --git a/appstore/xunlei-cnk3x/3.20.2/docker-compose.yml b/appstore/xunlei-cnk3x/3.20.2/docker-compose.yml new file mode 100644 index 00000000..aa97678c --- /dev/null +++ b/appstore/xunlei-cnk3x/3.20.2/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true +services: + xunlei-cnk3x: + container_name: xunlei-cnk3x + env_file: + - ./envs/global.env + - .env + environment: + - XL_UID=0 + - XL_GID=0 + - XL_DASHBOARD_PORT=2345 + - XL_DASHBOARD_IP=0.0.0.0 + - XL_DIR_DOWNLOAD=/xunlei/downloads + - XL_DIR_DATA=/xunlei/data + - XL_PREVENT_UPDATE=true + - XL_DEBUG=false + image: cnk3x/xunlei:v3.20.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2345 + privileged: true + restart: always + volumes: + - ${XUNLEI_ROOT_PATH}/data:/xunlei/data + - ${XUNLEI_ROOT_PATH}/downloads:/xunlei/downloads diff --git a/appstore/xunlei-cnk3x/3.20.2/envs/default.env b/appstore/xunlei-cnk3x/3.20.2/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/xunlei-cnk3x/3.20.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/xunlei-cnk3x/3.20.2/envs/global.env b/appstore/xunlei-cnk3x/3.20.2/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/xunlei-cnk3x/3.20.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/xunlei-cnk3x/3.20.2/scripts/init.sh b/appstore/xunlei-cnk3x/3.20.2/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/xunlei-cnk3x/3.20.2/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/xunlei-cnk3x/3.20.2/scripts/uninstall.sh b/appstore/xunlei-cnk3x/3.20.2/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/xunlei-cnk3x/3.20.2/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/xunlei-cnk3x/3.20.2/scripts/upgrade.sh b/appstore/xunlei-cnk3x/3.20.2/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/xunlei-cnk3x/3.20.2/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/xunlei-cnk3x/README.md b/appstore/xunlei-cnk3x/README.md new file mode 100644 index 00000000..2c8e82c9 --- /dev/null +++ b/appstore/xunlei-cnk3x/README.md @@ -0,0 +1,49 @@ +# 迅雷 NAS版 + +迅雷远程下载服务 NAS移植版 + +![AList](https://file.lifebus.top/imgs/xunlei_cnk3x.png) + +从迅雷群晖套件中提取出来用于其他设备的迅雷远程下载服务程序。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 安装说明 + +需要填写的 `用户名` 与 `密码` 并非迅雷账户。 + +该账户,仅作为远程下载服务的登录凭证。 + +## 使用说明 + +
+
+ ⚠️ +
+ 警告
+ 该应用申请使用 `特权模式`, 将允许应用在容器内部执行特权操作,如挂载宿主机目录、访问宿主机设备等。 +
+
+
+ +下载的数据存储在`downloads`目录下,请查看持久化目录的位置。 + +### 注册与登陆 + +> 官方内测邀请码:`迅雷牛通` + +1. 访问 `http://:` 进入迅雷远程下载服务页面 +2. 首次进出会出现:鉴权验证,输入用户名与密码 +3. 登陆成功后,进入迅雷远程下载服务页面,要求绑定迅雷账号 +4. 输入迅雷账号与密码,完成绑定 +5. 在登录成功后,30s 内会出现 `内测邀请码` 页面。 +6. 填写完成后,即可使用迅雷远程下载服务 + +### 内置服务 + ++ 网速测试 - 用于测试当前网络的下载速度 ++ 网心云-NAS版 (服务异常) + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/xunlei-cnk3x/data.yml b/appstore/xunlei-cnk3x/data.yml new file mode 100644 index 00000000..e30ad97d --- /dev/null +++ b/appstore/xunlei-cnk3x/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: xunlei-cnk3x + name: 迅雷 NAS版 + tags: + - WebSite + - Tool + - Local + shortDescZh: 迅雷远程下载服务 NAS移植版 + shortDescEn: Thunder Remote Download Service NAS Port + type: website + crossVersionUpdate: true + limit: 0 + website: https://github.com/cnk3x/xunlei/ + github: https://github.com/cnk3x/xunlei/ + document: https://github.com/cnk3x/xunlei/ diff --git a/appstore/xunlei-cnk3x/logo.png b/appstore/xunlei-cnk3x/logo.png new file mode 100644 index 00000000..6b5b2455 Binary files /dev/null and b/appstore/xunlei-cnk3x/logo.png differ diff --git a/appstore/yarr/2.4.0/.env b/appstore/yarr/2.4.0/.env new file mode 100644 index 00000000..044cd06f --- /dev/null +++ b/appstore/yarr/2.4.0/.env @@ -0,0 +1,6 @@ +# 端口 [必填] +PANEL_APP_PORT_HTTP=7070 + +# 数据持久化 根路径 [必填] +YARR_ROOT_PATH=/home/yarr + diff --git a/appstore/yarr/2.4.0/data.yml b/appstore/yarr/2.4.0/data.yml new file mode 100644 index 00000000..facc5a5b --- /dev/null +++ b/appstore/yarr/2.4.0/data.yml @@ -0,0 +1,17 @@ +additionalProperties: + formFields: + - default: 7070 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: "/home/yarr" + edit: true + envKey: YARR_ROOT_PATH + labelEn: Root Path + labelZh: 数据持久化 根路径 + required: true + type: text diff --git a/appstore/yarr/2.4.0/docker-compose.yml b/appstore/yarr/2.4.0/docker-compose.yml new file mode 100644 index 00000000..c2f0e639 --- /dev/null +++ b/appstore/yarr/2.4.0/docker-compose.yml @@ -0,0 +1,16 @@ +networks: + 1panel-network: + external: true +services: + bark: + container_name: yarr + image: qyg2297248353/yarr:v2.4.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:7070 + restart: always + volumes: + - ${YARR_ROOT_PATH}/data:/data diff --git a/appstore/yarr/2.4.0/envs/default.env b/appstore/yarr/2.4.0/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/yarr/2.4.0/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/yarr/2.4.0/envs/global.env b/appstore/yarr/2.4.0/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/yarr/2.4.0/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/yarr/2.4.0/scripts/init.sh b/appstore/yarr/2.4.0/scripts/init.sh new file mode 100644 index 00000000..b4e37318 --- /dev/null +++ b/appstore/yarr/2.4.0/scripts/init.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [[ -f .env ]]; then + source .env + + echo "Check Finish." + +else + echo ".env not found." +fi diff --git a/appstore/yarr/2.4.0/scripts/upgrade.sh b/appstore/yarr/2.4.0/scripts/upgrade.sh new file mode 100644 index 00000000..b4e37318 --- /dev/null +++ b/appstore/yarr/2.4.0/scripts/upgrade.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [[ -f .env ]]; then + source .env + + echo "Check Finish." + +else + echo ".env not found." +fi diff --git a/appstore/yarr/README.md b/appstore/yarr/README.md new file mode 100644 index 00000000..c271c505 --- /dev/null +++ b/appstore/yarr/README.md @@ -0,0 +1,16 @@ +# Yarr + +yarr 是一个基于 Web 的提要聚合器,它既可以用作桌面应用程序,也可以用作个人自托管服务器。 + +该应用程序是带有嵌入式数据库(SQLite)的单个二进制文件。 + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 应用说明 + +RSS 订阅 Web 应用程序,用于聚合您的订阅源。 + + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/yarr/data.yml b/appstore/yarr/data.yml new file mode 100644 index 00000000..08459aac --- /dev/null +++ b/appstore/yarr/data.yml @@ -0,0 +1,14 @@ +additionalProperties: + key: yarr + name: Yarr + tags: + - Tool + shortDescZh: Rss 阅读器 + shortDescEn: Rss Reader + type: tool + crossVersionUpdate: true + limit: 0 + recommend: 0 + website: https://github.com/nkanaev/yarr/ + github: https://github.com/nkanaev/yarr + document: https://github.com/nkanaev/yarr/ diff --git a/appstore/yarr/logo.png b/appstore/yarr/logo.png new file mode 100644 index 00000000..e337af24 Binary files /dev/null and b/appstore/yarr/logo.png differ diff --git a/appstore/zerotier-planet/1.14.2/.env b/appstore/zerotier-planet/1.14.2/.env new file mode 100644 index 00000000..622fbac3 --- /dev/null +++ b/appstore/zerotier-planet/1.14.2/.env @@ -0,0 +1,21 @@ +# 数据持久化路径 [必填] +ZEROTIER_PLANET_ROOT_PATH=/home/zerotier-planet + +# 网络模式 [必填] +NETWORK_MODE=host + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3443 + +# API 端口 [必填] +PANEL_APP_PORT_API=9994 + +# 文件传输端口 [必填] +PANEL_APP_PORT_FILE=3000 + +# 公网 IPV4/IPV6 +IP_ADDR4= + +# 公网 IPV4/IPV6 +IP_ADDR6= + diff --git a/appstore/zerotier-planet/1.14.2/data.yml b/appstore/zerotier-planet/1.14.2/data.yml new file mode 100644 index 00000000..c742126a --- /dev/null +++ b/appstore/zerotier-planet/1.14.2/data.yml @@ -0,0 +1,63 @@ +additionalProperties: + formFields: + - default: "/home/zerotier-planet" + edit: true + envKey: ZEROTIER_PLANET_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "host" + edit: true + envKey: NETWORK_MODE + labelEn: Drive path + labelZh: 网络模式 + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: 3443 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 9994 + edit: true + envKey: PANEL_APP_PORT_API + labelZh: API 端口 + labelEn: API Port + required: true + rule: paramPort + type: number + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_FILE + labelZh: 文件传输端口 + labelEn: File transfer port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: IP_ADDR4 + labelZh: 公网 IPV4/IPV6 + labelEn: Public IPV4/IPV6 + required: false + type: text + - default: "" + edit: true + envKey: IP_ADDR6 + labelZh: 公网 IPV4/IPV6 + labelEn: Public IPV6/IPV6 + required: false + type: text diff --git a/appstore/zerotier-planet/1.14.2/docker-compose.yml b/appstore/zerotier-planet/1.14.2/docker-compose.yml new file mode 100644 index 00000000..bd577770 --- /dev/null +++ b/appstore/zerotier-planet/1.14.2/docker-compose.yml @@ -0,0 +1,28 @@ +networks: + 1panel-network: + external: true +services: + zerotier-planet: + container_name: zerotier-planet + env_file: + - ./envs/global.env + - .env + environment: + - ZT_PORT=${PANEL_APP_PORT_ZT} + - API_PORT=${PANEL_APP_PORT_HTTP} + - FILE_SERVER_PORT=${PANEL_APP_PORT_FILE} + image: xubiaolin/zerotier-planet:1.14.2 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_ZT}:${PANEL_APP_PORT_ZT}/tcp + - ${PANEL_APP_PORT_ZT}:${PANEL_APP_PORT_ZT}/udp + - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + - ${PANEL_APP_PORT_FILE}:${PANEL_APP_PORT_FILE} + restart: always + volumes: + - ${ZEROTIER_PLANET_ROOT_PATH}/file:/app/dist + - ${ZEROTIER_PLANET_ROOT_PATH}/ztncui:/app/ztncui + - ${ZEROTIER_PLANET_ROOT_PATH}/zerotier-one:/var/lib/zerotier-one + - ${ZEROTIER_PLANET_ROOT_PATH}/config:/app/config diff --git a/appstore/zerotier-planet/1.14.2/envs/default.env b/appstore/zerotier-planet/1.14.2/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/zerotier-planet/1.14.2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/zerotier-planet/1.14.2/envs/global.env b/appstore/zerotier-planet/1.14.2/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/zerotier-planet/1.14.2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/zerotier-planet/1.14.2/scripts/init.sh b/appstore/zerotier-planet/1.14.2/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/zerotier-planet/1.14.2/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/zerotier-planet/1.14.2/scripts/uninstall.sh b/appstore/zerotier-planet/1.14.2/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/zerotier-planet/1.14.2/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/zerotier-planet/1.14.2/scripts/upgrade.sh b/appstore/zerotier-planet/1.14.2/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/zerotier-planet/1.14.2/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/zerotier-planet/README.md b/appstore/zerotier-planet/README.md new file mode 100644 index 00000000..902bd4e6 --- /dev/null +++ b/appstore/zerotier-planet/README.md @@ -0,0 +1,36 @@ +# Zerotier Planet 服务端 + +包含 ZeroTier One 和 ztncui 的 Docker 映像,用于在容器中设置具有 Web 用户界面的独立 ZeroTier 网络控制器。 + +![Zerotier Planet](https://file.lifebus.top/imgs/ztncui_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +ZeroTier 这一类 P2P VPN 是在互联网的基础上将自己的所有设备组成一个私有的网络,可以理解为互联网连接的局域网。最常见的场景就是在公司可以用手机直接访问家里的 +NAS,而且是点对点直连,数据传输并不经由第三方服务器中转。 + +ZeroTier 在多设备之间建立了一个 Peer to Peer VPN(P2PVPN) 连接,如:在笔记本电脑、台式机、嵌入式设备、云资源和应用。这些设备只需要通过 +ZeroTier One ( ZeroTier 的客户端) 在不同设备之间建立直接连接,即使它们位于 NAT 之后。连接到虚拟 LAN 的任何计算机和设备通常通过 +NAT 或路由器设备与 Internet 连接,ZeroTier One 使用 STUN 和隧道来建立 NAT 后设备之间的 VPN 直连。 + +简单一点说,ZeroTier 就是通过 P2P 等方式实现形如交换机或路由器上 LAN 设备的内网互联。 + +### 专有名词 + +PLANET :行星服务器,Zerotier 根服务器 + +MOON :卫星服务器,用户自建的私有根服务器,起到代理加速的作用 + +LEAF :网络客户端,就是每台连接到网络节点。 + +## 安装说明 + +> 默认用户名:`admin` +> +> 默认密码:`password` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/zerotier-planet/data.yml b/appstore/zerotier-planet/data.yml new file mode 100644 index 00000000..b1ede01f --- /dev/null +++ b/appstore/zerotier-planet/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: zerotier-planet + name: Zerotier Planet + tags: + - WebSite + - Tool + - Local + shortDescZh: 创建和管理虚拟软件定义网络 + shortDescEn: Create and manage virtual software-defined networks + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.zerotier.com/ + github: https://github.com/zerotier/ZeroTierOne/ + document: https://docs.zerotier.com/ diff --git a/appstore/zerotier-planet/logo.png b/appstore/zerotier-planet/logo.png new file mode 100644 index 00000000..33e29b5c Binary files /dev/null and b/appstore/zerotier-planet/logo.png differ diff --git a/appstore/ztncui/1.2.17/.env b/appstore/ztncui/1.2.17/.env new file mode 100644 index 00000000..a0b1f7d2 --- /dev/null +++ b/appstore/ztncui/1.2.17/.env @@ -0,0 +1,21 @@ +# 数据持久化路径 [必填] +ZTNCUI_ROOT_PATH=/home/ztncui + +# 网络模式 [必填] +NETWORK_MODE=host + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# API 端口 [必填] +PANEL_APP_PORT_API=9993 + +# 文件传输端口 [必填] +PANEL_APP_PORT_FILE=3180 + +# 面板管理员 密码 [必填] +ZTNCUI_PASSWD= + +# 服务器域名(IP) [必填] +MYADDR= + diff --git a/appstore/ztncui/1.2.17/data.yml b/appstore/ztncui/1.2.17/data.yml new file mode 100644 index 00000000..94522b06 --- /dev/null +++ b/appstore/ztncui/1.2.17/data.yml @@ -0,0 +1,63 @@ +additionalProperties: + formFields: + - default: "/home/ztncui" + edit: true + envKey: ZTNCUI_ROOT_PATH + labelZh: 数据持久化路径 + labelEn: Data persistence path + required: true + type: text + - default: "host" + edit: true + envKey: NETWORK_MODE + labelEn: Drive path + labelZh: 网络模式 + required: true + type: select + values: + - label: 主机网络模式 + value: "host" + - label: 桥接网络模式 + value: "bridge" + - label: 无网络模式 + value: "none" + - label: 1panel-network + value: "1panel-network" + - default: 3000 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelZh: WebUI 端口 + labelEn: WebUI port + required: true + rule: paramPort + type: number + - default: 9993 + edit: true + envKey: PANEL_APP_PORT_API + labelZh: API 端口 + labelEn: API Port + required: true + rule: paramPort + type: number + - default: 3180 + edit: true + envKey: PANEL_APP_PORT_FILE + labelZh: 文件传输端口 + labelEn: File transfer port + required: true + rule: paramPort + type: number + - default: "" + edit: true + envKey: ZTNCUI_PASSWD + labelZh: 面板管理员 密码 + labelEn: Admin Password + required: true + type: password + - default: "" + edit: true + envKey: MYADDR + labelZh: 服务器域名(IP) + labelEn: Server Domain(IP) + required: true + type: text diff --git a/appstore/ztncui/1.2.17/docker-compose.yml b/appstore/ztncui/1.2.17/docker-compose.yml new file mode 100644 index 00000000..fb2b27f4 --- /dev/null +++ b/appstore/ztncui/1.2.17/docker-compose.yml @@ -0,0 +1,27 @@ +networks: + 1panel-network: + external: true +services: + ztncui: + container_name: ztncui + env_file: + - ./envs/global.env + - .env + environment: + - NODE_ENV=production + - HTTP_PORT=${PANEL_APP_PORT_HTTP} + - ZT_ADDR=localhost:${PANEL_APP_PORT_API} + - HTTP_ALL_INTERFACES=yes + image: keynetworks/ztncui:1.2.17 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + - ${PANEL_APP_PORT_API}:${PANEL_APP_PORT_API}/tcp + - ${PANEL_APP_PORT_API}:${PANEL_APP_PORT_API}/udp + - ${PANEL_APP_PORT_FILE}:3180 + restart: always + volumes: + - ${ZTNCUI_ROOT_PATH}/ztncui:/opt/key-networks/ztncui/etc + - ${ZTNCUI_ROOT_PATH}/zerotier-one:/var/lib/zerotier-one diff --git a/appstore/ztncui/1.2.17/envs/default.env b/appstore/ztncui/1.2.17/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/appstore/ztncui/1.2.17/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/appstore/ztncui/1.2.17/envs/global.env b/appstore/ztncui/1.2.17/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/appstore/ztncui/1.2.17/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/appstore/ztncui/1.2.17/scripts/init.sh b/appstore/ztncui/1.2.17/scripts/init.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/ztncui/1.2.17/scripts/init.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/ztncui/1.2.17/scripts/uninstall.sh b/appstore/ztncui/1.2.17/scripts/uninstall.sh new file mode 100644 index 00000000..c86c4fbc --- /dev/null +++ b/appstore/ztncui/1.2.17/scripts/uninstall.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/ztncui/1.2.17/scripts/upgrade.sh b/appstore/ztncui/1.2.17/scripts/upgrade.sh new file mode 100644 index 00000000..07fb8c3f --- /dev/null +++ b/appstore/ztncui/1.2.17/scripts/upgrade.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +if [ -f .env ]; then + source .env + + # setup-1 add default values + CURRENT_DIR=$(pwd) + sed -i '/^ENV_FILE=/d' .env + sed -i '/^GLOBAL_ENV_FILE=/d' .env + echo "ENV_FILE=${CURRENT_DIR}/.env" >> .env + echo "GLOBAL_ENV_FILE=${CURRENT_DIR}/envs/global.env" >> .env + + echo "Check Finish." + +else + echo "Error: .env file not found." +fi diff --git a/appstore/ztncui/README.md b/appstore/ztncui/README.md new file mode 100644 index 00000000..132dfeff --- /dev/null +++ b/appstore/ztncui/README.md @@ -0,0 +1,36 @@ +# ztncui 服务端 + +包含 ZeroTier One 和 ztncui 的 Docker 映像,用于在容器中设置具有 Web 用户界面的独立 ZeroTier 网络控制器。 + +![ztncui](https://file.lifebus.top/imgs/ztncui_cover.png) + +![](https://img.shields.io/badge/%E6%96%B0%E7%96%86%E8%90%8C%E6%A3%AE%E8%BD%AF%E4%BB%B6%E5%BC%80%E5%8F%91%E5%B7%A5%E4%BD%9C%E5%AE%A4-%E6%8F%90%E4%BE%9B%E6%8A%80%E6%9C%AF%E6%94%AF%E6%8C%81-blue) + +## 简介 + +ZeroTier 这一类 P2P VPN 是在互联网的基础上将自己的所有设备组成一个私有的网络,可以理解为互联网连接的局域网。最常见的场景就是在公司可以用手机直接访问家里的 +NAS,而且是点对点直连,数据传输并不经由第三方服务器中转。 + +ZeroTier 在多设备之间建立了一个 Peer to Peer VPN(P2PVPN) 连接,如:在笔记本电脑、台式机、嵌入式设备、云资源和应用。这些设备只需要通过 +ZeroTier One ( ZeroTier 的客户端) 在不同设备之间建立直接连接,即使它们位于 NAT 之后。连接到虚拟 LAN 的任何计算机和设备通常通过 +NAT 或路由器设备与 Internet 连接,ZeroTier One 使用 STUN 和隧道来建立 NAT 后设备之间的 VPN 直连。 + +简单一点说,ZeroTier 就是通过 P2P 等方式实现形如交换机或路由器上 LAN 设备的内网互联。 + +### 专有名词 + +PLANET :行星服务器,Zerotier 根服务器 + +MOON :卫星服务器,用户自建的私有根服务器,起到代理加速的作用 + +LEAF :网络客户端,就是每台连接到网络节点。 + +## 安装说明 + +> 默认用户名:`admin` +> +> 默认密码:`password` + +--- + +![Ms Studio](https://file.lifebus.top/imgs/ms_blank_001.png) diff --git a/appstore/ztncui/data.yml b/appstore/ztncui/data.yml new file mode 100644 index 00000000..d4f9e86a --- /dev/null +++ b/appstore/ztncui/data.yml @@ -0,0 +1,15 @@ +additionalProperties: + key: ztncui + name: Ztncui + tags: + - WebSite + - Tool + - Local + shortDescZh: 创建和管理虚拟软件定义网络 + shortDescEn: Create and manage virtual software-defined networks + type: website + crossVersionUpdate: true + limit: 0 + website: https://www.zerotier.com/ + github: https://github.com/zerotier/ZeroTierOne/ + document: https://docs.zerotier.com/ diff --git a/appstore/ztncui/logo.png b/appstore/ztncui/logo.png new file mode 100644 index 00000000..33e29b5c Binary files /dev/null and b/appstore/ztncui/logo.png differ diff --git a/dockge/acg-faka/.env b/dockge/acg-faka/.env new file mode 100644 index 00000000..5d6bd942 --- /dev/null +++ b/dockge/acg-faka/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +ACG_FAKA_ROOT_PATH=/home/acg-faka + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + diff --git a/dockge/acg-faka/docker-compose.yml b/dockge/acg-faka/docker-compose.yml new file mode 100644 index 00000000..323cf174 --- /dev/null +++ b/dockge/acg-faka/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + acg-faka: + container_name: acg-faka + env_file: + - ./envs/global.env + - .env + image: qyg2297248353/acg-faka:v1.3.8 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${ACG_FAKA_ROOT_PATH}/data:/var/www/html diff --git a/dockge/acg-faka/envs/default.env b/dockge/acg-faka/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/acg-faka/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/acg-faka/envs/global.env b/dockge/acg-faka/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/acg-faka/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/alist-aria2/.env b/dockge/alist-aria2/.env new file mode 100644 index 00000000..6f75a8f4 --- /dev/null +++ b/dockge/alist-aria2/.env @@ -0,0 +1,30 @@ +# 数据持久化路径 [必填] +ALIST_ROOT_PATH=/home/alist + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5244 + +# 加密密钥 +JWT_SECRET= + +# 站点 URL +SITE_URL= + +# 登录过期时间 (小时) [必填] +TOKEN_EXPIRES_IN=48 + +# 延时启动 (秒) [必填] +DELAYED_START=0 + +# 最大连接数 [必填] +max_connections=0 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/dockge/alist-aria2/docker-compose.yml b/dockge/alist-aria2/docker-compose.yml new file mode 100644 index 00000000..16f4f634 --- /dev/null +++ b/dockge/alist-aria2/docker-compose.yml @@ -0,0 +1,27 @@ +networks: + 1panel-network: + external: true +services: + alist-aria2: + container_name: alist-aria2 + env_file: + - ./envs/global.env + - .env + environment: + - PUID=0 + - PGID=0 + - UMASK=022 + - FORCE=false + image: xhofe/alist-aria2:v3.40.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5244 + restart: always + volumes: + - ${ALIST_ROOT_PATH}/data:/opt/alist/data + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/alist-aria2/envs/default.env b/dockge/alist-aria2/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/alist-aria2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/alist-aria2/envs/global.env b/dockge/alist-aria2/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/alist-aria2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/alist-ffmpeg/.env b/dockge/alist-ffmpeg/.env new file mode 100644 index 00000000..6f75a8f4 --- /dev/null +++ b/dockge/alist-ffmpeg/.env @@ -0,0 +1,30 @@ +# 数据持久化路径 [必填] +ALIST_ROOT_PATH=/home/alist + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5244 + +# 加密密钥 +JWT_SECRET= + +# 站点 URL +SITE_URL= + +# 登录过期时间 (小时) [必填] +TOKEN_EXPIRES_IN=48 + +# 延时启动 (秒) [必填] +DELAYED_START=0 + +# 最大连接数 [必填] +max_connections=0 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/dockge/alist-ffmpeg/docker-compose.yml b/dockge/alist-ffmpeg/docker-compose.yml new file mode 100644 index 00000000..817ce4fd --- /dev/null +++ b/dockge/alist-ffmpeg/docker-compose.yml @@ -0,0 +1,27 @@ +networks: + 1panel-network: + external: true +services: + alist: + container_name: alist-ffmpeg + env_file: + - ./envs/global.env + - .env + environment: + - PUID=0 + - PGID=0 + - UMASK=022 + - FORCE=false + image: xhofe/alist:v3.40.0-ffmpeg + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5244 + restart: always + volumes: + - ${ALIST_ROOT_PATH}/data:/opt/alist/data + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/alist-ffmpeg/envs/default.env b/dockge/alist-ffmpeg/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/alist-ffmpeg/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/alist-ffmpeg/envs/global.env b/dockge/alist-ffmpeg/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/alist-ffmpeg/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/alist/.env b/dockge/alist/.env new file mode 100644 index 00000000..6f75a8f4 --- /dev/null +++ b/dockge/alist/.env @@ -0,0 +1,30 @@ +# 数据持久化路径 [必填] +ALIST_ROOT_PATH=/home/alist + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5244 + +# 加密密钥 +JWT_SECRET= + +# 站点 URL +SITE_URL= + +# 登录过期时间 (小时) [必填] +TOKEN_EXPIRES_IN=48 + +# 延时启动 (秒) [必填] +DELAYED_START=0 + +# 最大连接数 [必填] +max_connections=0 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/dockge/alist/docker-compose.yml b/dockge/alist/docker-compose.yml new file mode 100644 index 00000000..54af2601 --- /dev/null +++ b/dockge/alist/docker-compose.yml @@ -0,0 +1,27 @@ +networks: + 1panel-network: + external: true +services: + alist: + container_name: alist + env_file: + - ./envs/global.env + - .env + environment: + - PUID=0 + - PGID=0 + - UMASK=022 + - FORCE=false + image: xhofe/alist:v3.40.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5244 + restart: always + volumes: + - ${ALIST_ROOT_PATH}/data:/opt/alist/data + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/alist/envs/default.env b/dockge/alist/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/alist/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/alist/envs/global.env b/dockge/alist/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/alist/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/ani-rss/.env b/dockge/ani-rss/.env new file mode 100644 index 00000000..dfdf9854 --- /dev/null +++ b/dockge/ani-rss/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +ANI_RSS_ROOT_PATH=/home/ani-rss + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=7789 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/dockge/ani-rss/docker-compose.yml b/dockge/ani-rss/docker-compose.yml new file mode 100644 index 00000000..daf251e9 --- /dev/null +++ b/dockge/ani-rss/docker-compose.yml @@ -0,0 +1,28 @@ +networks: + 1panel-network: + external: true +services: + ani-rss: + container_name: ani-rss + env_file: + - ./envs/global.env + - .env + environment: + - PORT=7789 + - CONFIG=/config + - TZ=Asia/Shanghai + image: wushuo894/ani-rss:v1.1.202 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:7789 + restart: always + volumes: + - ${ANI_RSS_ROOT_PATH}/config:/config + - ${ANI_RSS_ROOT_PATH}/downloads:/downloads + - ${ANI_RSS_ROOT_PATH}/Media:/Media + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/ani-rss/envs/default.env b/dockge/ani-rss/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/ani-rss/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/ani-rss/envs/global.env b/dockge/ani-rss/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/ani-rss/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/artalk/.env b/dockge/artalk/.env new file mode 100644 index 00000000..849d2479 --- /dev/null +++ b/dockge/artalk/.env @@ -0,0 +1,60 @@ +# 数据库服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化路径 [必填] +ARTALK_ROOT_PATH=/home/artalk + +# API 端口 [必填] +PANEL_APP_PORT_HTTP=23366 + +# 应用密钥 [必填] +ATK_APP_KEY= + +# 管理员用户名 [必填] +ATK_ADMIN_USERS_0_NAME=admin + +# 管理员邮箱 [必填] +ATK_ADMIN_USERS_0_EMAIL=admin@admin.com + +# 管理员密码 [必填] +ATK_ADMIN_USERS_0_PASSWORD=(bcrypt)$2y$10$ti4vZYIrxVN8rLcYXVgXCO.GJND0dyI49r7IoF3xqIx8bBRmIBZRm + +# 管理员徽章名称 [必填] +ATK_ADMIN_USERS_0_BADGE_NAME=管理员 + +# 管理员徽章颜色 [必填] +ATK_ADMIN_USERS_0_BADGE_COLOR=#0083FF + +# 站点名称 [必填] +ATK_SITE_DEFAULT=Artalk 的博客 + +# 受信任的域名 (多个域名用空格分隔) [必填] +ATK_TRUSTED_DOMAINS= + +# 登录超时时间 (秒) [必填] +ATK_LOGIN_TIMEOUT=259200 + +# 站点语言 [必填] +ATK_LOCALE=zh-CN + +# IP 地址精度 [必填] +ATK_IP_REGION_PRECISION=province + +# 数据库 类型 [必填] +ATK_DB_TYPE=pgsql + +# 数据库 主机地址 [必填] +ATK_DB_HOST=127.0.0.1 + +# 数据库 端口 [必填] +ATK_DB_PORT=5432 + +# 数据库 名称 [必填] +ATK_DB_NAME=artalk + +# 数据库 用户名 [必填] +ATK_DB_USER=artalk + +# 数据库 密码 [必填] +ATK_DB_PASSWORD= + diff --git a/dockge/artalk/docker-compose.yml b/dockge/artalk/docker-compose.yml new file mode 100644 index 00000000..44b20e34 --- /dev/null +++ b/dockge/artalk/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + artalk: + container_name: artalk + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + - ATK_DEBUG=false + - ATK_HOST=0.0.0.0 + - ATK_PORT=23366 + - ATK_IP_REGION_ENABLED=true + - ATK_DB_TABLE_PREFIX=atk_ + image: artalk/artalk-go:2.9.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:23366 + restart: always + volumes: + - ${ARTALK_ROOT_PATH}/data:/data diff --git a/dockge/artalk/envs/default.env b/dockge/artalk/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/artalk/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/artalk/envs/global.env b/dockge/artalk/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/artalk/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/auto-lady/.env b/dockge/auto-lady/.env new file mode 100644 index 00000000..a6f1eb1e --- /dev/null +++ b/dockge/auto-lady/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +AUTO_LADY_ROOT_PATH=/home/auto-lady + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/dockge/auto-lady/docker-compose.yml b/dockge/auto-lady/docker-compose.yml new file mode 100644 index 00000000..0b9cb9db --- /dev/null +++ b/dockge/auto-lady/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + auto-lady: + container_name: auto-lady + env_file: + - ./envs/global.env + - .env + image: orekiiiiiiiiiiiii/auto-lady:1.4.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${AUTO_LADY_ROOT_PATH}/config:/data + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/auto-lady/envs/default.env b/dockge/auto-lady/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/auto-lady/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/auto-lady/envs/global.env b/dockge/auto-lady/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/auto-lady/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/baota/.env b/dockge/baota/.env new file mode 100644 index 00000000..9bae1626 --- /dev/null +++ b/dockge/baota/.env @@ -0,0 +1,27 @@ +# 数据持久化路径 [必填] +BAOTA_ROOT_PATH=/home/baota + +# 网络模式 [必填] +NETWORK_MODE=host + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8888 + +# 网站服务 HTTP [必填] +PANEL_APP_PORT_WEB_HTTP=80 + +# 网站服务 HTTPS [必填] +PANEL_APP_PORT_WEB_HTTPS=443 + +# SSH 端口 [必填] +PANEL_APP_PORT_SSH=22 + +# FTP 端口 [必填] +PANEL_APP_PORT_FTP=21 + +# MySQL 端口 [必填] +PANEL_APP_PORT_MYSQL=3306 + +# phpMyAdmin 端口 [必填] +PANEL_APP_PORT_PHPADMIN=888 + diff --git a/dockge/baota/docker-compose.yml b/dockge/baota/docker-compose.yml new file mode 100644 index 00000000..01ec3d41 --- /dev/null +++ b/dockge/baota/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + baota: + container_name: baota + env_file: + - ./envs/global.env + - .env + image: btpanel/baota:9.0_lts_latest + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8888 + - ${PANEL_APP_PORT_WEB_HTTP}:80 + - ${PANEL_APP_PORT_WEB_HTTPS}:443 + - ${PANEL_APP_PORT_FTP}:21 + - ${PANEL_APP_PORT_SSH}:22 + - ${PANEL_APP_PORT_MYSQL}:3306 + - ${PANEL_APP_PORT_PHPADMIN}:888 + restart: always + volumes: + - ${BAOTA_ROOT_PATH}/wwwroot:/www/wwwroot + - ${BAOTA_ROOT_PATH}/data:/www/server/data + - ${BAOTA_ROOT_PATH}/vhost:/www/server/panel/vhost diff --git a/dockge/baota/envs/default.env b/dockge/baota/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/baota/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/baota/envs/global.env b/dockge/baota/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/baota/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/bark/.env b/dockge/bark/.env new file mode 100644 index 00000000..7696b28a --- /dev/null +++ b/dockge/bark/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +BARK_ROOT_PATH=/home/bark + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 数据库链接 +BARK_SERVER_DSN= + +# 用户名 (服务基础验证) +BARK_SERVER_BASIC_AUTH_USER= + +# 密码 (服务基础验证) +BARK_SERVER_BASIC_AUTH_PASSWORD= + diff --git a/dockge/bark/docker-compose.yml b/dockge/bark/docker-compose.yml new file mode 100644 index 00000000..f42b9164 --- /dev/null +++ b/dockge/bark/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + bark: + container_name: bark + env_file: + - ./envs/global.env + - .env + environment: + - BARK_SERVER_ADDRESS=0.0.0.0:8080 + - BARK_SERVER_URL_PREFIX=/ + - BARK_SERVER_DATA_DIR=/data + - BARK_SERVER_SERVERLESS=false + image: finab/bark-server:v2.1.5 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${BARK_ROOT_PATH}/data:/data diff --git a/dockge/bark/envs/default.env b/dockge/bark/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/bark/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/bark/envs/global.env b/dockge/bark/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/bark/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/bitmagnet/.env b/dockge/bitmagnet/.env new file mode 100644 index 00000000..de3bd35e --- /dev/null +++ b/dockge/bitmagnet/.env @@ -0,0 +1,33 @@ +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# 数据持久化路径 [必填] +BITMAGNET_ROOT_PATH=/home/bitmagnet + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3333 + +# BitTorrent 端口 [必填] +PANEL_APP_PORT_BT=3334 + +# 数据库 主机地址 [必填] +POSTGRES_HOST=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 名称 [必填] +POSTGRES_NAME=bitmagnet + +# 数据库 用户名 [必填] +POSTGRES_USER=bitmagnet + +# 数据库 密码 [必填] +POSTGRES_PASSWORD= + +# 获取 TMDB 元数据 [必填] +TMDB_ENABLED=true + +# TMDB API 密钥 +TMDB_API_KEY= + diff --git a/dockge/bitmagnet/docker-compose.yml b/dockge/bitmagnet/docker-compose.yml new file mode 100644 index 00000000..989080b1 --- /dev/null +++ b/dockge/bitmagnet/docker-compose.yml @@ -0,0 +1,36 @@ +networks: + 1panel-network: + external: true +services: + bitmagnet: + command: + - worker + - run + - --all + container_name: bitmagnet + dns: + - 1.1.1.1 + - 114.114.114.114 + env_file: + - ./envs/global.env + - .env + environment: + - LOG_FILE_ROTATOR_ENABLED=true + - LOG_LEVEL=info + - LOG_DEVELOPMENT=false + - LOG_JSON=false + - DHT_CRAWLER_SAVE_FILES_THRESHOLD=100 + - PROCESSOR_CONCURRENCY=1 + image: ghcr.io/bitmagnet-io/bitmagnet:v0.9.5 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3333 + - ${PANEL_APP_PORT_BT}:3334/tcp + - ${PANEL_APP_PORT_BT}:3334/udp + restart: always + volumes: + - ${BITMAGNET_ROOT_PATH}/config:/root/.config/bitmagnet + - ${BITMAGNET_ROOT_PATH}/bitmagnet:/root/.local/share/bitmagnet diff --git a/dockge/bitmagnet/envs/default.env b/dockge/bitmagnet/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/bitmagnet/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/bitmagnet/envs/global.env b/dockge/bitmagnet/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/bitmagnet/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/casdoor/.env b/dockge/casdoor/.env new file mode 100644 index 00000000..e29aa1fc --- /dev/null +++ b/dockge/casdoor/.env @@ -0,0 +1,45 @@ +# 数据库 服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# 数据持久化路径 [必填] +CASDOOR_ROOT_PATH=/home/casdoor + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8000 + +# 数据库 类型 [必填] +DB_TYPE=postgres + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 用户名 [必填] +DB_USER=casdoor + +# 数据库 密码 [必填] +DB_PASSWD= + +# 数据库 名称 [必填] +DB_NAME=casdoor + +# Redis 主机 [必填] +REDIS_HOSTNAME=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 索引 [必填] +REDIS_DBINDEX=0 + +# Redis 密码 +REDIS_PASSWORD= + +# Socks5 代理 (地区网络限制) +socks5Proxy= + diff --git a/dockge/casdoor/config/init_data.json b/dockge/casdoor/config/init_data.json new file mode 100644 index 00000000..a08a677f --- /dev/null +++ b/dockge/casdoor/config/init_data.json @@ -0,0 +1,490 @@ +{ + "organizations": [ + { + "owner": "", + "name": "", + "displayName": "", + "websiteUrl": "", + "favicon": "", + "passwordType": "plain", + "passwordSalt": "", + "passwordOptions": [ + "AtLeast6" + ], + "countryCodes": [ + "US", + "GB", + "ES", + "FR", + "DE", + "CN", + "JP", + "KR", + "VN", + "ID", + "SG", + "IN", + "IT", + "MY", + "TR", + "DZ", + "IL", + "PH", + "NL", + "PL", + "FI", + "SE", + "UA", + "KZ" + ], + "defaultAvatar": "", + "defaultApplication": "", + "tags": [], + "languages": [ + "en", + "zh", + "es", + "fr", + "de", + "id", + "ja", + "ko", + "ru", + "vi", + "it", + "ms", + "tr", + "ar", + "he", + "nl", + "pl", + "fi", + "sv", + "uk", + "kk", + "fa" + ], + "masterPassword": "", + "defaultPassword": "", + "initScore": 2000, + "enableSoftDeletion": false, + "isProfilePublic": true, + "accountItems": [] + } + ], + "applications": [ + { + "owner": "", + "name": "", + "displayName": "", + "logo": "", + "homepageUrl": "", + "organization": "", + "cert": "", + "enablePassword": true, + "enableSignUp": true, + "clientId": "", + "clientSecret": "", + "providers": [ + { + "name": "", + "canSignUp": true, + "canSignIn": true, + "canUnlink": false, + "prompted": false, + "alertType": "None" + } + ], + "signinMethods": [ + { + "name": "Password", + "displayName": "Password", + "rule": "All" + }, + { + "name": "Verification code", + "displayName": "Verification code", + "rule": "All" + }, + { + "name": "WebAuthn", + "displayName": "WebAuthn", + "rule": "None" + }, + { + "name": "Face ID", + "displayName": "Face ID", + "rule": "None" + } + ], + "signupItems": [ + { + "name": "ID", + "visible": false, + "required": true, + "prompted": false, + "rule": "Random" + }, + { + "name": "Username", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Display name", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Password", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Confirm password", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Email", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Phone", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + }, + { + "name": "Agreement", + "visible": true, + "required": true, + "prompted": false, + "rule": "None" + } + ], + "grantTypes": [ + "authorization_code", + "password", + "client_credentials", + "token", + "id_token", + "refresh_token" + ], + "redirectUris": [ + "http://localhost:9000/callback" + ], + "tokenFormat": "JWT", + "tokenFields": [], + "expireInHours": 168, + "failedSigninLimit": 5, + "failedSigninFrozenTime": 15 + } + ], + "users": [ + { + "owner": "", + "name": "", + "type": "normal-user", + "password": "", + "displayName": "", + "avatar": "", + "email": "", + "phone": "", + "countryCode": "", + "address": [], + "affiliation": "", + "tag": "", + "score": 2000, + "ranking": 1, + "isAdmin": true, + "isForbidden": false, + "isDeleted": false, + "signupApplication": "", + "createdIp": "", + "groups": [] + } + ], + "providers": [ + { + "owner": "", + "name": "", + "displayName": "", + "category": "", + "type": "" + } + ], + "certs": [ + { + "owner": "", + "name": "", + "displayName": "", + "scope": "JWT", + "type": "x509", + "cryptoAlgorithm": "RS256", + "bitSize": 4096, + "expireInYears": 20, + "certificate": "", + "privateKey": "" + } + ], + "ldaps": [ + { + "id": "", + "owner": "", + "serverName": "", + "host": "", + "port": 389, + "username": "", + "password": "", + "baseDn": "", + "autoSync": 0, + "lastSync": "" + } + ], + "models": [ + { + "owner": "", + "name": "", + "modelText": "", + "displayName": "" + } + ], + "permissions": [ + { + "actions": [], + "displayName": "", + "effect": "", + "isEnabled": true, + "model": "", + "name": "", + "owner": "", + "resourceType": "", + "resources": [], + "roles": [], + "users": [] + } + ], + "payments": [ + { + "currency": "", + "detail": "", + "displayName": "", + "invoiceRemark": "", + "invoiceTaxId": "", + "invoiceTitle": "", + "invoiceType": "", + "invoiceUrl": "", + "message": "", + "name": "", + "organization": "", + "owner": "", + "payUrl": "", + "personEmail": "", + "personIdCard": "", + "personName": "", + "personPhone": "", + "price": 0, + "productDisplayName": "", + "productName": "", + "provider": "", + "returnUrl": "", + "state": "", + "tag": "", + "type": "", + "user": "" + } + ], + "products": [ + { + "currency": "", + "detail": "", + "displayName": "", + "image": "", + "name": "", + "owner": "", + "price": 0, + "providers": [], + "quantity": 0, + "returnUrl": "", + "sold": 0, + "state": "", + "tag": "" + } + ], + "resources": [ + { + "owner": "", + "name": "", + "user": "", + "provider": "", + "application": "", + "tag": "", + "parent": "", + "fileName": "", + "fileType": "", + "fileFormat": "", + "url": "", + "description": "" + } + ], + "roles": [ + { + "displayName": "", + "isEnabled": true, + "name": "", + "owner": "", + "roles": [], + "users": [] + } + ], + "syncers": [ + { + "affiliationTable": "", + "avatarBaseUrl": "", + "database": "", + "databaseType": "", + "errorText": "", + "host": "", + "isEnabled": false, + "name": "", + "organization": "", + "owner": "", + "password": "", + "port": 0, + "syncInterval": 0, + "table": "", + "tableColumns": [ + { + "casdoorName": "", + "isHashed": true, + "name": "", + "type": "", + "values": [] + } + ], + "tablePrimaryKey": "", + "type": "", + "user": "" + } + ], + "tokens": [ + { + "accessToken": "", + "application": "", + "code": "", + "codeChallenge": "", + "codeExpireIn": 0, + "codeIsUsed": true, + "createdTime": "", + "expiresIn": 0, + "name": "", + "organization": "", + "owner": "", + "refreshToken": "", + "scope": "", + "tokenType": "", + "user": "" + } + ], + "webhooks": [ + { + "contentType": "", + "events": [], + "headers": [ + { + "name": "", + "value": "" + } + ], + "isEnabled": true, + "isUserExtended": true, + "method": "", + "name": "", + "organization": "", + "owner": "", + "url": "" + } + ], + "groups": [ + { + "owner": "", + "name": "", + "displayName": "", + "manager": "", + "contactEmail": "", + "type": "", + "parent_id": "", + "isTopGroup": true, + "title": "", + "key": "", + "children": "", + "isEnabled": true + } + ], + "adapters": [ + { + "owner": "", + "name": "", + "table": "", + "useSameDb": true, + "type": "", + "databaseType": "", + "database": "", + "host": "", + "port": 0, + "user": "", + "password": "" + } + ], + "enforcers": [ + { + "owner": "", + "name": "", + "displayName": "", + "description": "", + "model": "", + "adapter": "", + "enforcer": "" + } + ], + "plans": [ + { + "owner": "", + "name": "", + "displayName": "", + "description": "", + "price": 0, + "currency": "", + "period": "", + "product": "", + "paymentProviders": [], + "isEnabled": true, + "role": "" + } + ], + "pricings": [ + { + "owner": "", + "name": "", + "displayName": "", + "description": "", + "plans": [], + "isEnabled": true, + "trialDuration": 0, + "application": "" + } + ] +} diff --git a/dockge/casdoor/docker-compose.yml b/dockge/casdoor/docker-compose.yml new file mode 100644 index 00000000..ca045ecd --- /dev/null +++ b/dockge/casdoor/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + casdoor: + container_name: casdoor + env_file: + - ./envs/global.env + - ./envs/casdoor.env + - .env + environment: + - driverName=${DB_TYPE} + - dbName=${DB_NAME} + - verificationCodeTimeout=10 + - appname=casdoor + - authState=casdoor + image: casbin/casdoor:v1.758.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8000 + restart: always + volumes: + - ${CASDOOR_ROOT_PATH}/files:/files diff --git a/dockge/casdoor/envs/casdoor.env b/dockge/casdoor/envs/casdoor.env new file mode 100644 index 00000000..cb7db866 --- /dev/null +++ b/dockge/casdoor/envs/casdoor.env @@ -0,0 +1,31 @@ +appname=casdoor +httpport=8000 +runmode=prod +copyrequestbody=true +driverName=mysql +dataSourceName= +dbName=casdoor +tableNamePrefix= +showSql=false +redisEndpoint= +defaultStorageProvider= +isCloudIntranet=false +authState=casdoor +socks5Proxy= +verificationCodeTimeout=10 +initScore=0 +logPostOnly=true +isUsernameLowered=false +origin= +originFrontend= +staticBaseUrl=https://cdn.casbin.org +isDemoMode=false +batchSize=100 +enableGzip=true +ldapServerPort=389 +radiusServerPort=1812 +radiusSecret=secret +quota={"organization": -1, "user": -1, "application": -1, "provider": -1} +logConfig={"filename": "logs/casdoor.log", "maxdays":99999, "perm":"0770"} +initDataFil="./init_data.json" +frontendBaseDi="../casdoor" diff --git a/dockge/casdoor/envs/default.env b/dockge/casdoor/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/casdoor/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/casdoor/envs/global.env b/dockge/casdoor/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/casdoor/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/certimate/.env b/dockge/certimate/.env new file mode 100644 index 00000000..95ab5a0a --- /dev/null +++ b/dockge/certimate/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +CERTIMATE_ROOT_PATH=/home/certimate + +# Web UI 端口 [必填] +PANEL_APP_PORT_HTTP=8090 + diff --git a/dockge/certimate/docker-compose.yml b/dockge/certimate/docker-compose.yml new file mode 100644 index 00000000..c750adda --- /dev/null +++ b/dockge/certimate/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + certimate: + container_name: certimate + env_file: + - ./envs/global.env + - .env + image: usual2970/certimate:v0.2.21 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8090 + restart: always + volumes: + - ${CERTIMATE_ROOT_PATH}/data:/app/pb_data diff --git a/dockge/certimate/envs/default.env b/dockge/certimate/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/certimate/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/certimate/envs/global.env b/dockge/certimate/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/certimate/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/cookie-cloud/.env b/dockge/cookie-cloud/.env new file mode 100644 index 00000000..4b9ff31a --- /dev/null +++ b/dockge/cookie-cloud/.env @@ -0,0 +1,9 @@ +# 端口 [必填] +PANEL_APP_PORT_HTTP=8088 + +# 数据持久化路径 [必填] +COOKIECLOUD_ROOT_PATH=/home/cookie-cloud + +# 网站路径 [必填] +API_ROOT=/ + diff --git a/dockge/cookie-cloud/docker-compose.yml b/dockge/cookie-cloud/docker-compose.yml new file mode 100644 index 00000000..553edc05 --- /dev/null +++ b/dockge/cookie-cloud/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + cookie-cloud: + container_name: cookie-cloud + env_file: + - ./envs/global.env + - .env + image: easychen/cookiecloud:latest + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8088 + restart: always + volumes: + - ${COOKIECLOUD_ROOT_PATH}/data:/data/api/data diff --git a/dockge/cookie-cloud/envs/default.env b/dockge/cookie-cloud/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/cookie-cloud/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/cookie-cloud/envs/global.env b/dockge/cookie-cloud/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/cookie-cloud/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/deeplx/.env b/dockge/deeplx/.env new file mode 100644 index 00000000..481ea76a --- /dev/null +++ b/dockge/deeplx/.env @@ -0,0 +1,15 @@ +# API 端口 [必填] +PANEL_APP_PORT_HTTP=1188 + +# 访问令牌以保护您的 API +TOKEN= + +# DeepL官方提供的API Auth Key +AUTHKEY= + +# DeepL Pro 帐户 dl_session cookie +DL_SESSION= + +# http代理服务器地址 +PROXY= + diff --git a/dockge/deeplx/docker-compose.yml b/dockge/deeplx/docker-compose.yml new file mode 100644 index 00000000..2c1edc52 --- /dev/null +++ b/dockge/deeplx/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + deeplx: + container_name: deeplx + env_file: + - ./envs/global.env + - .env + environment: + - PORT=1188 + image: qyg2297248353/deeplx:v0.9.8.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:1188 + restart: always diff --git a/dockge/deeplx/envs/default.env b/dockge/deeplx/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/deeplx/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/deeplx/envs/global.env b/dockge/deeplx/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/deeplx/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/dockge/.env b/dockge/dockge/.env new file mode 100644 index 00000000..226dbf45 --- /dev/null +++ b/dockge/dockge/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +DOCKGE_ROOT_PATH=/home/dockge + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5001 + diff --git a/dockge/dockge/docker-compose.yml b/dockge/dockge/docker-compose.yml new file mode 100644 index 00000000..7256cb6f --- /dev/null +++ b/dockge/dockge/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true +services: + dockge: + container_name: dockge + env_file: + - ./envs/global.env + - .env + environment: + - DOCKGE_STACKS_DIR=/opt/dockge/stacks + image: louislam/dockge:1.4.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5001 + restart: always + volumes: + - ${DOCKGE_ROOT_PATH}/data:/app/data + - ${DOCKGE_ROOT_PATH}/stacks:/opt/dockge/stacks + - /var/run/docker.sock:/var/run/docker.sock diff --git a/dockge/dockge/envs/default.env b/dockge/dockge/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/dockge/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/dockge/envs/global.env b/dockge/dockge/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/dockge/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/dozzle/.env b/dockge/dozzle/.env new file mode 100644 index 00000000..b4dd4db5 --- /dev/null +++ b/dockge/dozzle/.env @@ -0,0 +1,3 @@ +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + diff --git a/dockge/dozzle/docker-compose.yml b/dockge/dozzle/docker-compose.yml new file mode 100644 index 00000000..bdead699 --- /dev/null +++ b/dockge/dozzle/docker-compose.yml @@ -0,0 +1,32 @@ +networks: + 1panel-network: + external: true +services: + dozzle: + container_name: dozzle + env_file: + - ./envs/global.env + - .env + environment: + - DOZZLE_ADDR=:8080 + - DOZZLE_BASE=/ + - DOZZLE_LEVEL=info + healthcheck: + interval: 3s + retries: 5 + start_period: 30s + test: + - CMD + - /dozzle + - healthcheck + timeout: 30s + image: amir20/dozzle:v8.8.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - /var/run/docker.sock:/var/run/docker.sock diff --git a/dockge/dozzle/envs/default.env b/dockge/dozzle/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/dozzle/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/dozzle/envs/global.env b/dockge/dozzle/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/dozzle/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/dpanel-lite/.env b/dockge/dpanel-lite/.env new file mode 100644 index 00000000..0ea1a574 --- /dev/null +++ b/dockge/dpanel-lite/.env @@ -0,0 +1,12 @@ +# 数据持久化路径 [必填] +DPANEL_ROOT_PATH=/home/dpanel + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 管理员 用户名 [必填] +INSTALL_USERNAME=admin + +# 管理员 密码 [必填] +INSTALL_PASSWORD=admin + diff --git a/dockge/dpanel-lite/docker-compose.yml b/dockge/dpanel-lite/docker-compose.yml new file mode 100644 index 00000000..4465fbb5 --- /dev/null +++ b/dockge/dpanel-lite/docker-compose.yml @@ -0,0 +1,33 @@ +networks: + 1panel-network: + external: true +services: + dpanel: + container_name: dpanel-lite + env_file: + - ./envs/global.env + - .env + environment: + - APP_NAME=${CONTAINER_NAME} + image: dpanel/dpanel:1.3.0-lite + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${DPANEL_ROOT_PATH}/data:/dpanel + - ${DPANEL_ROOT_PATH}/compose:/dpanel/compose + - /var/run/docker.sock:/var/run/docker.sock + dpanel-plugin-explorer: + command: + - sh + - -c + - tail -f /dev/null + container_name: dpanel-plugin-explorer + image: alpine:latest + pid: host + privileged: true + restart: unless-stopped diff --git a/dockge/dpanel-lite/envs/default.env b/dockge/dpanel-lite/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/dpanel-lite/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/dpanel-lite/envs/global.env b/dockge/dpanel-lite/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/dpanel-lite/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/dpanel/.env b/dockge/dpanel/.env new file mode 100644 index 00000000..90204b3c --- /dev/null +++ b/dockge/dpanel/.env @@ -0,0 +1,18 @@ +# 数据持久化路径 [必填] +DPANEL_ROOT_PATH=/home/dpanel + +# WebUI 端口 [必填] +PANEL_APP_PORT_ADMIN=8080 + +# HTTP 服务端口 [必填] +PANEL_APP_PORT_HTTP=80 + +# HTTPS 服务端口 [必填] +PANEL_APP_PORT_HTTPS=443 + +# 管理员 用户名 [必填] +INSTALL_USERNAME=admin + +# 管理员 密码 [必填] +INSTALL_PASSWORD=admin + diff --git a/dockge/dpanel/docker-compose.yml b/dockge/dpanel/docker-compose.yml new file mode 100644 index 00000000..dd03bd36 --- /dev/null +++ b/dockge/dpanel/docker-compose.yml @@ -0,0 +1,35 @@ +networks: + 1panel-network: + external: true +services: + dpanel: + container_name: dpanel + env_file: + - ./envs/global.env + - .env + environment: + - APP_NAME=${CONTAINER_NAME} + image: dpanel/dpanel:1.3.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_ADMIN}:8080 + - ${PANEL_APP_PORT_HTTP}:80 + - ${PANEL_APP_PORT_HTTPS}:443 + restart: always + volumes: + - ${DPANEL_ROOT_PATH}/data:/dpanel + - ${DPANEL_ROOT_PATH}/compose:/dpanel/compose + - /var/run/docker.sock:/var/run/docker.sock + dpanel-plugin-explorer: + command: + - sh + - -c + - tail -f /dev/null + container_name: dpanel-plugin-explorer + image: alpine:latest + pid: host + privileged: true + restart: unless-stopped diff --git a/dockge/dpanel/envs/default.env b/dockge/dpanel/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/dpanel/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/dpanel/envs/global.env b/dockge/dpanel/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/dpanel/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/dujiaoka/.env b/dockge/dujiaoka/.env new file mode 100644 index 00000000..e3922188 --- /dev/null +++ b/dockge/dujiaoka/.env @@ -0,0 +1,30 @@ +# 数据持久化路径 [必填] +DUJIAOKA_ROOT_PATH=/home/dujiaoka + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# API 端口 [必填] +PANEL_APP_PORT_API=9000 + +# 网站名称 [必填] +APP_NAME=独角数卡 + +# 应用密钥 [必填] +APP_KEY=base64:sKDhhXG+bHhlnH8hAVX2MbETkYABNhWNXALo0FU8WH0= + +# 网站域名 [必填] +APP_URL=http://127.0.0.1:8080 + +# 后台路径 [必填] +ADMIN_ROUTE_PREFIX=/admin + +# 异步消息队列模式 [必填] +QUEUE_CONNECTION=redis + +# 缓存驱动 [必填] +CACHE_DRIVER=redis + +# 启用后台 HTTPS [必填] +ADMIN_HTTPS=false + diff --git a/dockge/dujiaoka/docker-compose.yml b/dockge/dujiaoka/docker-compose.yml new file mode 100644 index 00000000..a42b6fe1 --- /dev/null +++ b/dockge/dujiaoka/docker-compose.yml @@ -0,0 +1,31 @@ +networks: + 1panel-network: + external: true +services: + dujiaoka: + container_name: dujiaoka + env_file: + - ./envs/global.env + - .env + environment: + - WEB_DOCUMENT_ROOT=/app/public + - DUJIAO_ADMIN_LANGUAGE=zh_CN + - BROADCAST_DRIVER=log + - SESSION_DRIVER=file + - SESSION_LIFETIME=120 + - LOG_CHANNEL=stack + - APP_DEBUG=false + - APP_ENV=local + - DB_CONNECTION=mysql + image: qyg2297248353/dujiaoka:v2.0.9 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + - ${PANEL_APP_PORT_API}:9000 + restart: always + tty: true + volumes: + - ${DUJIAOKA_ROOT_PATH}/app:/app diff --git a/dockge/dujiaoka/envs/default.env b/dockge/dujiaoka/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/dujiaoka/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/dujiaoka/envs/global.env b/dockge/dujiaoka/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/dujiaoka/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/elastic-elasticsearch/.env b/dockge/elastic-elasticsearch/.env new file mode 100644 index 00000000..f7e98d7e --- /dev/null +++ b/dockge/elastic-elasticsearch/.env @@ -0,0 +1,24 @@ +# 数据持久化路径 [必填] +ELASTICSEARCH_ROOT_PATH=/home/elasticsearch + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTPS=9200 + +# 集群端口 [必填] +PANEL_APP_PORT_CLUSTER=9300 + +# Elasticsearch 密码 (elastic) [必填] +ELASTIC_PASSWORD= + +# Kibana 密码 (kibana_system) +KIBANA_PASSWORD= + +# 集群名称 [必填] +ES_SETTING_CLUSTER_NAME=elasticsearch + +# 节点名称 [必填] +ES_SETTING_NODE_NAME=es-node + +# Java 启动参数 (可选) +ES_JAVA_OPTS=-Xms1g -Xmx1g + diff --git a/dockge/elastic-elasticsearch/docker-compose.yml b/dockge/elastic-elasticsearch/docker-compose.yml new file mode 100644 index 00000000..5c4b46be --- /dev/null +++ b/dockge/elastic-elasticsearch/docker-compose.yml @@ -0,0 +1,34 @@ +networks: + 1panel-network: + external: true +services: + elasticsearch: + container_name: elastic-elasticsearch + env_file: + - ./envs/global.env + - .env + environment: + - LICENSE=basic + - ES_SETTING_BOOTSTRAP_MEMORY__LOCK=true + - ES_SETTING_PATH_REPO=/usr/share/elasticsearch/backup + image: elasticsearch:8.16.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTPS}:9200 + - ${PANEL_APP_PORT_CLUSTER}:9300 + restart: always + tty: true + ulimits: + memlock: + hard: -1 + soft: -1 + nofile: + hard: 65536 + soft: 65536 + volumes: + - ${ELASTICSEARCH_ROOT_PATH}/data:/usr/share/elasticsearch/data + - ${ELASTICSEARCH_ROOT_PATH}/backup:/usr/share/elasticsearch/backup + - ${ELASTICSEARCH_ROOT_PATH}/plugins:/usr/share/elasticsearch/plugins diff --git a/dockge/elastic-elasticsearch/envs/default.env b/dockge/elastic-elasticsearch/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/elastic-elasticsearch/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/elastic-elasticsearch/envs/global.env b/dockge/elastic-elasticsearch/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/elastic-elasticsearch/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/elastic-kibana/.env b/dockge/elastic-kibana/.env new file mode 100644 index 00000000..7436b5df --- /dev/null +++ b/dockge/elastic-kibana/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +KIBANA_ROOT_PATH=/home/kibana + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5601 + +# Elasticsearch 地址 [必填] +elasticsearch_hosts=https://127.0.0.1:9200 + diff --git a/dockge/elastic-kibana/docker-compose.yml b/dockge/elastic-kibana/docker-compose.yml new file mode 100644 index 00000000..33d33d8b --- /dev/null +++ b/dockge/elastic-kibana/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + kibana: + container_name: elastic-kibana + env_file: + - ./envs/global.env + - .env + environment: + - SERVER_NAME="kibana" + - SERVER_HOST="0.0.0.0" + - SERVER_PORT=5601 + - I18N_LOCALE="zh-CN" + - SERVER_SHUTDOWNTIMEOUT="5s" + - MONITORING_UI_CONTAINER_ELASTICSEARCH_ENABLED=true + image: kibana:8.16.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5601 + restart: always + volumes: + - ${KIBANA_ROOT_PATH}/data:/usr/share/kibana/data diff --git a/dockge/elastic-kibana/envs/default.env b/dockge/elastic-kibana/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/elastic-kibana/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/elastic-kibana/envs/global.env b/dockge/elastic-kibana/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/elastic-kibana/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/element-web/.env b/dockge/element-web/.env new file mode 100644 index 00000000..beaf15dd --- /dev/null +++ b/dockge/element-web/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +ELEMENT_WEB_ROOT_PATH=/home/element-web + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 服务域名 +SYNAPSE_SERVER_NAME=riot.example.com + diff --git a/dockge/element-web/conf/config.sample.json b/dockge/element-web/conf/config.sample.json new file mode 100644 index 00000000..af170bfe --- /dev/null +++ b/dockge/element-web/conf/config.sample.json @@ -0,0 +1,53 @@ +{ + "default_server_config": { + "m.homeserver": { + "base_url": "https://matrix-client.matrix.org", + "server_name": "matrix.org" + }, + "m.identity_server": { + "base_url": "https://vector.im" + } + }, + "disable_custom_urls": false, + "disable_guests": false, + "disable_login_language_selector": false, + "disable_3pid_login": false, + "force_verification": false, + "brand": "Element", + "integrations_ui_url": "https://scalar.vector.im/", + "integrations_rest_url": "https://scalar.vector.im/api", + "integrations_widgets_urls": [ + "https://scalar.vector.im/_matrix/integrations/v1", + "https://scalar.vector.im/api", + "https://scalar-staging.vector.im/_matrix/integrations/v1", + "https://scalar-staging.vector.im/api", + "https://scalar-staging.riot.im/scalar/api" + ], + "default_widget_container_height": 280, + "default_country_code": "GB", + "show_labs_settings": false, + "features": {}, + "default_federate": true, + "default_theme": "light", + "room_directory": { + "servers": [ + "matrix.org" + ] + }, + "enable_presence_by_hs_url": { + "https://matrix.org": false, + "https://matrix-client.matrix.org": false + }, + "setting_defaults": { + "breadcrumbs": true + }, + "jitsi": { + "preferred_domain": "meet.element.io" + }, + "element_call": { + "url": "https://call.element.io", + "participant_limit": 8, + "brand": "Element Call" + }, + "map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx" +} diff --git a/dockge/element-web/docker-compose.yml b/dockge/element-web/docker-compose.yml new file mode 100644 index 00000000..875f9035 --- /dev/null +++ b/dockge/element-web/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + element-web: + container_name: element-web + env_file: + - ./envs/global.env + - .env + image: vectorim/element-web:v1.11.86 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${ELEMENT_WEB_ROOT_PATH}/config/config.json:/app/config.json diff --git a/dockge/element-web/envs/default.env b/dockge/element-web/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/element-web/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/element-web/envs/global.env b/dockge/element-web/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/element-web/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/emby-amilys/.env b/dockge/emby-amilys/.env new file mode 100644 index 00000000..10993071 --- /dev/null +++ b/dockge/emby-amilys/.env @@ -0,0 +1,21 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# 网页端口 HTTP [必填] +PANEL_APP_PORT_HTTP=8096 + +# 数据持久化路径 [必填] +EMBY_ROOT_PATH=/home/emby + +# HTTP(s) 网络代理 +HTTP_SSL_PROXY= + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/dockge/emby-amilys/docker-compose.yml b/dockge/emby-amilys/docker-compose.yml new file mode 100644 index 00000000..9b50ecab --- /dev/null +++ b/dockge/emby-amilys/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true +services: + emby: + container_name: emby-amilys + devices: + - /dev/dri:/dev/dri + environment: + - UID=0 + - GID=0 + - GIDLIST=0 + - HTTP_PROXY=${HTTP_PROXY:-} + - HTTPS_PROXY=${HTTP_PROXY:-} + - NO_PROXY=localhost,127.0.0.1,::1 + image: amilys/embyserver:4.8.9.0 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8096 + restart: always + volumes: + - /etc/timezone:/etc/timezone + - /etc/localtime:/etc/localtime + - ${EMBY_ROOT_PATH}/config:/config + - ${EMBY_ROOT_PATH}/mnt:/mnt + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/emby-amilys/envs/default.env b/dockge/emby-amilys/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/emby-amilys/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/emby-amilys/envs/global.env b/dockge/emby-amilys/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/emby-amilys/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/emby-lovechen/.env b/dockge/emby-lovechen/.env new file mode 100644 index 00000000..10993071 --- /dev/null +++ b/dockge/emby-lovechen/.env @@ -0,0 +1,21 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# 网页端口 HTTP [必填] +PANEL_APP_PORT_HTTP=8096 + +# 数据持久化路径 [必填] +EMBY_ROOT_PATH=/home/emby + +# HTTP(s) 网络代理 +HTTP_SSL_PROXY= + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/dockge/emby-lovechen/docker-compose.yml b/dockge/emby-lovechen/docker-compose.yml new file mode 100644 index 00000000..ecadb711 --- /dev/null +++ b/dockge/emby-lovechen/docker-compose.yml @@ -0,0 +1,31 @@ +networks: + 1panel-network: + external: true +services: + emby: + container_name: emby-lovechen + devices: + - /dev/dri:/dev/dri + environment: + - UID=0 + - GID=0 + - GIDLIST=0 + - NVIDIA_VISIBLE_DEVICES=all + - HTTP_PROXY=${HTTP_PROXY:-} + - HTTPS_PROXY=${HTTP_PROXY:-} + - NO_PROXY=localhost,127.0.0.1,::1 + image: lovechen/embyserver:4.8.0.21 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8096 + restart: always + volumes: + - /etc/timezone:/etc/timezone + - /etc/localtime:/etc/localtime + - ${EMBY_ROOT_PATH}/config:/config + - ${EMBY_ROOT_PATH}/mnt:/mnt + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/emby-lovechen/envs/default.env b/dockge/emby-lovechen/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/emby-lovechen/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/emby-lovechen/envs/global.env b/dockge/emby-lovechen/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/emby-lovechen/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/emby/.env b/dockge/emby/.env new file mode 100644 index 00000000..bb021f7f --- /dev/null +++ b/dockge/emby/.env @@ -0,0 +1,21 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# 网页端口 [必填] +PANEL_APP_PORT_HTTP=8096 + +# 数据持久化路径 [必填] +EMBY_ROOT_PATH=/home/emby + +# HTTP(s) 网络代理 +HTTP_SSL_PROXY= + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/dockge/emby/docker-compose.yml b/dockge/emby/docker-compose.yml new file mode 100644 index 00000000..df0705ba --- /dev/null +++ b/dockge/emby/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true +services: + emby: + container_name: emby + devices: + - /dev/dri:/dev/dri + environment: + - UID=0 + - GID=0 + - GIDLIST=0 + - HTTP_PROXY=${HTTP_PROXY:-} + - HTTPS_PROXY=${HTTP_PROXY:-} + - NO_PROXY=localhost,127.0.0.1,::1 + image: emby/embyserver:4.8.10.0 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8096 + restart: always + volumes: + - /etc/timezone:/etc/timezone + - /etc/localtime:/etc/localtime + - ${EMBY_ROOT_PATH}/config:/config + - ${EMBY_ROOT_PATH}/mnt:/mnt + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/emby/envs/default.env b/dockge/emby/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/emby/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/emby/envs/global.env b/dockge/emby/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/emby/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/ghost/.env b/dockge/ghost/.env new file mode 100644 index 00000000..8195cdb8 --- /dev/null +++ b/dockge/ghost/.env @@ -0,0 +1,48 @@ +# MySQL 服务 (前置检查) [必填] +PANEL_DB_TYPE=mysql + +# 数据持久化路径 [必填] +GHOST_ROOT_PATH=/home/ghost + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2368 + +# 域名 [必填] +url=http://127.0.0.1:2368 + +# 域名 (后台) [必填] +admin__url=http://127.0.0.1:2368 + +# 数据库 主机 [必填] +database__connection__host=127.0.0.1 + +# 数据库 端口 [必填] +database__connection__port=3306 + +# 数据库 用户名 [必填] +database__connection__user=ghost + +# 数据库 密码 [必填] +database__connection__password= + +# 数据库 名称 [必填] +database__connection__database=ghost + +# 邮件传输协议 [必填] +mail__transport=SMTP + +# 邮件服务器 [必填] +mail__options__host=smtp.qq.com + +# 邮件服务器 端口 [必填] +mail__options__port=465 + +# 邮件鉴权 用户名 [必填] +mail__options__auth__user= + +# 邮件鉴权 密码 [必填] +mail__options__auth__pass= + +# 邮件发送者 [必填] +mail__from= + diff --git a/dockge/ghost/docker-compose.yml b/dockge/ghost/docker-compose.yml new file mode 100644 index 00000000..7e4eb00f --- /dev/null +++ b/dockge/ghost/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + ghost: + container_name: ghost + env_file: + - ./envs/global.env + - .env + environment: + - NODE_ENV=production + - server__host=0.0.0.0 + - server__port=2368 + - database__client=mysql + - mail__options__service=Email + - mail__options__secure=true + image: ghost:5.101.4 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2368 + restart: always + volumes: + - ${GHOST_ROOT_PATH}/data:/var/lib/ghost/content diff --git a/dockge/ghost/envs/default.env b/dockge/ghost/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/ghost/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/ghost/envs/global.env b/dockge/ghost/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/ghost/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/gitea-runner/.env b/dockge/gitea-runner/.env new file mode 100644 index 00000000..e435b785 --- /dev/null +++ b/dockge/gitea-runner/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +GITEA_RUNNER_ROOT_PATH=/home/gitea + +# Gitea 实例 URL [必填] +GITEA_INSTANCE_URL= + +# 注册令牌 [必填] +GITEA_RUNNER_REGISTRATION_TOKEN= + +# Runner 名称 [必填] +GITEA_RUNNER_NAME= + +# Runner 标签 [必填] +GITEA_RUNNER_LABELS= + diff --git a/dockge/gitea-runner/docker-compose.yml b/dockge/gitea-runner/docker-compose.yml new file mode 100644 index 00000000..cc71e196 --- /dev/null +++ b/dockge/gitea-runner/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + 1panel-network: + external: true +services: + gitea: + container_name: gitea-runner + env_file: + - ./envs/global.env + - .env + image: gitea/act_runner:0.2.11 + labels: + createdBy: Apps + networks: + - 1panel-network + privileged: true + restart: always + volumes: + - ${GITEA_RUNNER_ROOT_PATH}/data:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro + - /var/run/docker.sock:/var/run/docker.sock diff --git a/dockge/gitea-runner/envs/default.env b/dockge/gitea-runner/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/gitea-runner/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/gitea-runner/envs/global.env b/dockge/gitea-runner/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/gitea-runner/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/gitea/.env b/dockge/gitea/.env new file mode 100644 index 00000000..6d36d0ee --- /dev/null +++ b/dockge/gitea/.env @@ -0,0 +1,90 @@ +# 数据库 服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化路径 [必填] +GITEA_ROOT_PATH=/home/gitea + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# SSH 端口 [必填] +PANEL_APP_PORT_SSH=22 + +# 数据库 类型 [必填] +DB_TYPE=postgresql + +# 数据库 主机地址 +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 +DB_PORT=5432 + +# 数据库 用户名 +DB_USER=gitea + +# 数据库 密码 +DB_PASSWD= + +# 数据库 名称 +DB_NAME=gitea + +# 应用名称 [必填] +APP_NAME=Gitea + +# HTTP 克隆域名 [必填] +DOMAIN=localhost + +# SSH 克隆域名 [必填] +SSH_DOMAIN=localhost + +# SSH 克隆显示端口 [必填] +SSH_PORT=22 + +# 公共 URL (覆盖级) +ROOT_URL= + +# 启用 Git LFS 支持 [必填] +LFS_START_SERVER=false + +# 禁用注册 [必填] +DISABLE_REGISTRATION=false + +# 强制登录 [必填] +REQUIRE_SIGNIN_VIEW=false + +# 禁止访问安装页面 [必填] +INSTALL_LOCK=false + +# 全局加密密钥 +SECRET_KEY= + +# 启用代理 (全局 + Webhook) [必填] +PROXY_ENABLED=false + +# 代理服务器地址 (全局 + Webhook) +PROXY_URL= + +# 代理网址 (全局 + Webhook) +PROXY_HOSTS=** + +# 启用邮件服务 [必填] +MAILER_ENABLED=false + +# 邮件服务器地址 +MAILER_SMTP_ADDR= + +# 邮件服务器端口 +MAILER_SMTP_PORT=465 + +# 邮件服务用户名 +MAILER_USER= + +# 邮件服务密码 +MAILER_PASSWD= + +# 邮件服务发件人 +MAILER_FROM= + +# 邮件服务主题前缀 +MAILER_SUBJECT_PREFIX=[Gitea] + diff --git a/dockge/gitea/config/app.example.ini b/dockge/gitea/config/app.example.ini new file mode 100644 index 00000000..c29d2e5b --- /dev/null +++ b/dockge/gitea/config/app.example.ini @@ -0,0 +1,2706 @@ +; This file lists the default values used by Gitea +;; Copy required sections to your own app.ini (default is custom/conf/app.ini) +;; and modify as needed. +;; Do not copy the whole file as-is, as it contains some invalid sections for illustrative purposes. +;; If you don't know what a setting is you should not set it. +;; +;; see https://docs.gitea.com/administration/config-cheat-sheet for additional documentation. + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Default Configuration (non-`app.ini` configuration) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; These values are environment-dependent but form the basis of a lot of values. They will be +;; reported as part of the default configuration when running `gitea help` or on start-up. The order they are emitted there is slightly different but we will list them here in the order they are set-up. +;; +;; - _`AppPath`_: This is the absolute path of the running gitea binary. +;; - _`AppWorkPath`_: This refers to "working path" of the `gitea` binary. It is determined by using the first set thing in the following hierarchy: +;; - The "WORK_PATH" option in "app.ini" file +;; - The `--work-path` flag passed to the binary +;; - The environment variable `$GITEA_WORK_DIR` +;; - A built-in value set at build time (see building from source) +;; - Otherwise it defaults to the directory of the _`AppPath`_ +;; - If any of the above are relative paths then they are made absolute against the directory of the _`AppPath`_ +;; - _`CustomPath`_: This is the base directory for custom templates and other options. It is determined by using the first set thing in the following hierarchy: +;; - The `--custom-path` flag passed to the binary +;; - The environment variable `$GITEA_CUSTOM` +;; - A built-in value set at build time (see building from source) +;; - Otherwise it defaults to _`AppWorkPath`_`/custom` +;; - If any of the above are relative paths then they are made absolute against the directory of the _`AppWorkPath`_ +;; - _`CustomConf`_: This is the path to the `app.ini` file. +;; - The `--config` flag passed to the binary +;; - A built-in value set at build time (see building from source) +;; - Otherwise it defaults to _`CustomPath`_`/conf/app.ini` +;; - If any of the above are relative paths then they are made absolute against the directory of the _`CustomPath`_ +;; +;; In addition there is _`StaticRootPath`_ which can be set as a built-in at build time, but will otherwise default to _`AppWorkPath`_ + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; General Settings +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; App name that shows in every page title +APP_NAME = ; Gitea: Git with a cup of tea +;; +;; RUN_USER will automatically detect the current user - but you can set it here change it if you run locally +RUN_USER = ; git +;; +;; Application run mode, affects performance and debugging: "dev" or "prod", default is "prod" +;; Mode "dev" makes Gitea easier to develop and debug, values other than "dev" are treated as "prod" which is for production use. +;RUN_MODE = prod +;; +;; The working directory, see the comment of AppWorkPath above +;WORK_PATH = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[server] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; The protocol the server listens on. One of 'http', 'https', 'http+unix', 'fcgi' or 'fcgi+unix'. Defaults to 'http' +;; Note: Value must be lowercase. +;PROTOCOL = http +;; +;; Expect PROXY protocol headers on connections +;USE_PROXY_PROTOCOL = false +;; +;; Use PROXY protocol in TLS Bridging mode +;PROXY_PROTOCOL_TLS_BRIDGING = false +;; +; Timeout to wait for PROXY protocol header (set to 0 to have no timeout) +;PROXY_PROTOCOL_HEADER_TIMEOUT=5s +;; +; Accept PROXY protocol headers with UNKNOWN type +;PROXY_PROTOCOL_ACCEPT_UNKNOWN=false +;; +;; Set the domain for the server +;DOMAIN = localhost +;; +;; Overwrite the automatically generated public URL. Necessary for proxies and docker. +;ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/ +;; +;; For development purpose only. It makes Gitea handle sub-path ("/sub-path/owner/repo/...") directly when debugging without a reverse proxy. +;; DO NOT USE IT IN PRODUCTION!!! +;USE_SUB_URL_PATH = false +;; +;; when STATIC_URL_PREFIX is empty it will follow ROOT_URL +;STATIC_URL_PREFIX = +;; +;; The address to listen on. Either a IPv4/IPv6 address or the path to a unix socket. +;; If PROTOCOL is set to `http+unix` or `fcgi+unix`, this should be the name of the Unix socket file to use. +;; Relative paths will be made absolute against the _`AppWorkPath`_. +;HTTP_ADDR = 0.0.0.0 +;; +;; The port to listen on. Leave empty when using a unix socket. +;HTTP_PORT = 3000 +;; +;; If REDIRECT_OTHER_PORT is true, and PROTOCOL is set to https an http server +;; will be started on PORT_TO_REDIRECT and it will redirect plain, non-secure http requests to the main +;; ROOT_URL. Defaults are false for REDIRECT_OTHER_PORT and 80 for +;; PORT_TO_REDIRECT. +;REDIRECT_OTHER_PORT = false +;PORT_TO_REDIRECT = 80 +;; +;; expect PROXY protocol header on connections to https redirector. +;REDIRECTOR_USE_PROXY_PROTOCOL = %(USE_PROXY_PROTOCOL)s +;; Minimum and maximum supported TLS versions +;SSL_MIN_VERSION=TLSv1.2 +;SSL_MAX_VERSION= +;; +;; SSL Curve Preferences +;SSL_CURVE_PREFERENCES=X25519,P256 +;; +;; SSL Cipher Suites +;SSL_CIPHER_SUITES=; Will default to "ecdhe_ecdsa_with_aes_256_gcm_sha384,ecdhe_rsa_with_aes_256_gcm_sha384,ecdhe_ecdsa_with_aes_128_gcm_sha256,ecdhe_rsa_with_aes_128_gcm_sha256,ecdhe_ecdsa_with_chacha20_poly1305,ecdhe_rsa_with_chacha20_poly1305" if aes is supported by hardware, otherwise chacha will be first. +;; +;; Timeout for any write to the connection. (Set to -1 to disable all timeouts.) +;PER_WRITE_TIMEOUT = 30s +;; +;; Timeout per Kb written to connections. +;PER_WRITE_PER_KB_TIMEOUT = 30s +;; +;; Permission for unix socket +;UNIX_SOCKET_PERMISSION = 666 +;; +;; Local (DMZ) URL for Gitea workers (such as SSH update) accessing web service. In +;; most cases you do not need to change the default value. Alter it only if +;; your SSH server node is not the same as HTTP node. For different protocol, the default +;; values are different. If `PROTOCOL` is `http+unix`, the default value is `http://unix/`. +;; If `PROTOCOL` is `fcgi` or `fcgi+unix`, the default value is `%(PROTOCOL)s://%(HTTP_ADDR)s:%(HTTP_PORT)s/`. +;; If listen on `0.0.0.0`, the default value is `%(PROTOCOL)s://localhost:%(HTTP_PORT)s/`, Otherwise the default +;; value is `%(PROTOCOL)s://%(HTTP_ADDR)s:%(HTTP_PORT)s/`. +;LOCAL_ROOT_URL = %(PROTOCOL)s://%(HTTP_ADDR)s:%(HTTP_PORT)s/ +;; +;; When making local connections pass the PROXY protocol header. +;LOCAL_USE_PROXY_PROTOCOL = %(USE_PROXY_PROTOCOL)s +;; +;; Disable SSH feature when not available +;DISABLE_SSH = false +;; +;; Whether to use the builtin SSH server or not. +;START_SSH_SERVER = false +;; +;; Expect PROXY protocol header on connections to the built-in SSH server +;SSH_SERVER_USE_PROXY_PROTOCOL = false +;; +;; Username to use for the builtin SSH server. If blank, then it is the value of RUN_USER. +;BUILTIN_SSH_SERVER_USER = %(RUN_USER)s +;; +;; Domain name to be exposed in clone URL +;SSH_DOMAIN = %(DOMAIN)s +;; +;; SSH username displayed in clone URLs. +;SSH_USER = %(BUILTIN_SSH_SERVER_USER)s +;; +;; The network interface the builtin SSH server should listen on +;SSH_LISTEN_HOST = +;; +;; Port number to be exposed in clone URL +;SSH_PORT = 22 +;; +;; The port number the builtin SSH server should listen on +;SSH_LISTEN_PORT = %(SSH_PORT)s +;; +;; Root path of SSH directory, default is '~/.ssh', but you have to use '/home/git/.ssh'. +;SSH_ROOT_PATH = +;; +;; Gitea will create a authorized_keys file by default when it is not using the internal ssh server +;; If you intend to use the AuthorizedKeysCommand functionality then you should turn this off. +;SSH_CREATE_AUTHORIZED_KEYS_FILE = true +;; +;; Gitea will create a authorized_principals file by default when it is not using the internal ssh server +;; If you intend to use the AuthorizedPrincipalsCommand functionality then you should turn this off. +;SSH_CREATE_AUTHORIZED_PRINCIPALS_FILE = true +;; +;; For the built-in SSH server, choose the ciphers to support for SSH connections, +;; for system SSH this setting has no effect +;SSH_SERVER_CIPHERS = chacha20-poly1305@openssh.com, aes128-ctr, aes192-ctr, aes256-ctr, aes128-gcm@openssh.com, aes256-gcm@openssh.com +;; +;; For the built-in SSH server, choose the key exchange algorithms to support for SSH connections, +;; for system SSH this setting has no effect +;SSH_SERVER_KEY_EXCHANGES = curve25519-sha256, ecdh-sha2-nistp256, ecdh-sha2-nistp384, ecdh-sha2-nistp521, diffie-hellman-group14-sha256, diffie-hellman-group14-sha1 +;; +;; For the built-in SSH server, choose the MACs to support for SSH connections, +;; for system SSH this setting has no effect +;SSH_SERVER_MACS = hmac-sha2-256-etm@openssh.com, hmac-sha2-256, hmac-sha1 +;; +;; For the built-in SSH server, choose the keypair to offer as the host key +;; The private key should be at SSH_SERVER_HOST_KEY and the public SSH_SERVER_HOST_KEY.pub +;; relative paths are made absolute relative to the %(APP_DATA_PATH)s +;SSH_SERVER_HOST_KEYS=ssh/gitea.rsa, ssh/gogs.rsa +;; +;; Directory to create temporary files in when testing public keys using ssh-keygen, +;; default is the system temporary directory. +;SSH_KEY_TEST_PATH = +;; +;; Use `ssh-keygen` to parse public SSH keys. The value is passed to the shell. By default, Gitea does the parsing itself. +;SSH_KEYGEN_PATH = +;; +;; Enable SSH Authorized Key Backup when rewriting all keys, default is false +;SSH_AUTHORIZED_KEYS_BACKUP = false +;; +;; Determines which principals to allow +;; - empty: if SSH_TRUSTED_USER_CA_KEYS is empty this will default to off, otherwise will default to email, username. +;; - off: Do not allow authorized principals +;; - email: the principal must match the user's email +;; - username: the principal must match the user's username +;; - anything: there will be no checking on the content of the principal +;SSH_AUTHORIZED_PRINCIPALS_ALLOW = email, username +;; +;; Enable SSH Authorized Principals Backup when rewriting all keys, default is true +;SSH_AUTHORIZED_PRINCIPALS_BACKUP = true +;; +;; Specifies the public keys of certificate authorities that are trusted to sign user certificates for authentication. +;; Multiple keys should be comma separated. +;; E.g."ssh- ". or "ssh- , ssh- ". +;; For more information see "TrustedUserCAKeys" in the sshd config manpages. +;SSH_TRUSTED_USER_CA_KEYS = +;; Absolute path of the `TrustedUserCaKeys` file gitea will manage. +;; Default this `RUN_USER`/.ssh/gitea-trusted-user-ca-keys.pem +;; If you're running your own ssh server and you want to use the gitea managed file you'll also need to modify your +;; sshd_config to point to this file. The official docker image will automatically work without further configuration. +;SSH_TRUSTED_USER_CA_KEYS_FILENAME = +;; +;; Enable exposure of SSH clone URL to anonymous visitors, default is false +;SSH_EXPOSE_ANONYMOUS = false +;; +;; Timeout for any write to ssh connections. (Set to -1 to disable all timeouts.) +;; Will default to the PER_WRITE_TIMEOUT. +;SSH_PER_WRITE_TIMEOUT = 30s +;; +;; Timeout per Kb written to ssh connections. +;; Will default to the PER_WRITE_PER_KB_TIMEOUT. +;SSH_PER_WRITE_PER_KB_TIMEOUT = 30s +;; +;; Indicate whether to check minimum key size with corresponding type +;MINIMUM_KEY_SIZE_CHECK = false +;; +;; Disable CDN even in "prod" mode +;OFFLINE_MODE = true +;; +;; TLS Settings: Either ACME or manual +;; (Other common TLS configuration are found before) +;ENABLE_ACME = false +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; ACME automatic TLS settings +;; +;; ACME directory URL (e.g. LetsEncrypt's staging/testing URL: https://acme-staging-v02.api.letsencrypt.org/directory) +;; Leave empty to default to LetsEncrypt's (production) URL +;ACME_URL = +;; +;; Explicitly accept the ACME's TOS. The specific TOS cannot be retrieved at the moment. +;ACME_ACCEPTTOS = false +;; +;; If the ACME CA is not in your system's CA trust chain, it can be manually added here +;ACME_CA_ROOT = +;; +;; Email used for the ACME registration service +;; Can be left blank to initialize at first run and use the cached value +;ACME_EMAIL = +;; +;; ACME live directory (not to be confused with ACME directory URL: ACME_URL) +;; (Refer to caddy's ACME manager https://github.com/caddyserver/certmagic) +;ACME_DIRECTORY = https +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Manual TLS settings: (Only applicable if ENABLE_ACME=false) +;; +;; Generate steps: +;; $ ./gitea cert -ca=true -duration=8760h0m0s -host=myhost.example.com +;; +;; Or from a .pfx file exported from the Windows certificate store (do +;; not forget to export the private key): +;; $ openssl pkcs12 -in cert.pfx -out cert.pem -nokeys +;; $ openssl pkcs12 -in cert.pfx -out key.pem -nocerts -nodes +;; Paths are relative to CUSTOM_PATH +;CERT_FILE = https/cert.pem +;KEY_FILE = https/key.pem +;; +;; Root directory containing templates and static files. +;; default is the path where Gitea is executed +;STATIC_ROOT_PATH = ; Will default to the built-in value _`StaticRootPath`_ +;; +;; Default path for App data +;APP_DATA_PATH = data ; relative paths will be made absolute with _`AppWorkPath`_ +;; +;; Enable gzip compression for runtime-generated content, static resources excluded +;ENABLE_GZIP = false +;; +;; Application profiling (memory and cpu) +;; For "web" command it listens on localhost:6060 +;; For "serve" command it dumps to disk at PPROF_DATA_PATH as (cpuprofile|memprofile)__ +;ENABLE_PPROF = false +;; +;; PPROF_DATA_PATH, use an absolute path when you start gitea as service +;PPROF_DATA_PATH = data/tmp/pprof ; Path is relative to _`AppWorkPath`_ +;; +;; Landing page, can be "home", "explore", "organizations", "login", or any URL such as "/org/repo" or even "https://anotherwebsite.com" +;; The "login" choice is not a security measure but just a UI flow change, use REQUIRE_SIGNIN_VIEW to force users to log in. +;LANDING_PAGE = home +;; +;; Enables git-lfs support. true or false, default is false. +;LFS_START_SERVER = false +;; +;; +;; LFS authentication secret, change this yourself +;LFS_JWT_SECRET = +;; +;; Alternative location to specify LFS authentication secret. You cannot specify both this and LFS_JWT_SECRET, and must pick one +;LFS_JWT_SECRET_URI = file:/etc/gitea/lfs_jwt_secret +;; +;; LFS authentication validity period (in time.Duration), pushes taking longer than this may fail. +;LFS_HTTP_AUTH_EXPIRY = 24h +;; +;; Maximum allowed LFS file size in bytes (Set to 0 for no limit). +;LFS_MAX_FILE_SIZE = 0 +;; +;; Maximum number of locks returned per page +;LFS_LOCKS_PAGING_NUM = 50 +;; +;; Allow graceful restarts using SIGHUP to fork +;ALLOW_GRACEFUL_RESTARTS = true +;; +;; After a restart the parent will finish ongoing requests before +;; shutting down. Force shutdown if this process takes longer than this delay. +;; set to a negative value to disable +;GRACEFUL_HAMMER_TIME = 60s +;; +;; Allows the setting of a startup timeout and waithint for Windows as SVC service +;; 0 disables this. +;STARTUP_TIMEOUT = 0 +;; +;; Static resources, includes resources on custom/, public/ and all uploaded avatars web browser cache time. Note that this cache is disabled when RUN_MODE is "dev". Default is 6h +;STATIC_CACHE_TIME = 6h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[database] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Database to use. Either "mysql", "postgres", "mssql" or "sqlite3". +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; MySQL Configuration +;; +DB_TYPE = mysql +HOST = 127.0.0.1:3306 ; can use socket e.g. /var/run/mysqld/mysqld.sock +NAME = gitea +USER = root +;PASSWD = ;Use PASSWD = `your password` for quoting if you use special characters in the password. +;SSL_MODE = false ; either "false" (default), "true", or "skip-verify" +;CHARSET_COLLATION = ; Empty as default, Gitea will try to find a case-sensitive collation. Don't change it unless you clearly know what you need. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Postgres Configuration +;; +;DB_TYPE = postgres +;HOST = 127.0.0.1:5432 ; can use socket e.g. /var/run/postgresql/ +;NAME = gitea +;USER = root +;PASSWD = +;SCHEMA = +;SSL_MODE=disable ;either "disable" (default), "require", or "verify-full" +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; SQLite Configuration +;; +;DB_TYPE = sqlite3 +;PATH= ; defaults to data/gitea.db +;SQLITE_TIMEOUT = ; Query timeout defaults to: 500 +;SQLITE_JOURNAL_MODE = ; defaults to sqlite database default (often DELETE), can be used to enable WAL mode. https://www.sqlite.org/pragma.html#pragma_journal_mode +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; MSSQL Configuration +;; +;DB_TYPE = mssql +;HOST = 172.17.0.2:1433 +;NAME = gitea +;USER = SA +;PASSWD = MwantsaSecurePassword1 +;CHARSET_COLLATION = ; Empty as default, Gitea will try to find a case-sensitive collation. Don't change it unless you clearly know what you need. +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Other settings +;; +;; For iterate buffer, default is 50 +;ITERATE_BUFFER_SIZE = 50 +;; +;; Show the database generated SQL +;LOG_SQL = false +;; +;; Maximum number of DB Connect retries +;DB_RETRIES = 10 +;; +;; Backoff time per DB retry (time.Duration) +;DB_RETRY_BACKOFF = 3s +;; +;; Max idle database connections on connection pool, default is 2 +;MAX_IDLE_CONNS = 2 +;; +;; Database connection max life time, default is 0 or 3s mysql (See #6804 & #7071 for reasoning) +;CONN_MAX_LIFETIME = 3s +;; +;; Database maximum number of open connections, default is 0 meaning no maximum +;MAX_OPEN_CONNS = 0 +;; +;; Whether execute database models migrations automatically +;AUTO_MIGRATION = true +;; +;; Threshold value (in seconds) beyond which query execution time is logged as a warning in the xorm logger +;; +;SLOW_QUERY_THRESHOLD = 5s + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[security] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Whether the installer is disabled (set to true to disable the installer) +INSTALL_LOCK = false +;; +;; Global secret key that will be used +;; This key is VERY IMPORTANT. If you lose it, the data encrypted by it (like 2FA secret) can't be decrypted anymore. +SECRET_KEY = +;; +;; Alternative location to specify secret key, instead of this file; you cannot specify both this and SECRET_KEY, and must pick one +;; This key is VERY IMPORTANT. If you lose it, the data encrypted by it (like 2FA secret) can't be decrypted anymore. +;SECRET_KEY_URI = file:/etc/gitea/secret_key +;; +;; Secret used to validate communication within Gitea binary. +INTERNAL_TOKEN = +;; +;; Alternative location to specify internal token, instead of this file; you cannot specify both this and INTERNAL_TOKEN, and must pick one +;INTERNAL_TOKEN_URI = file:/etc/gitea/internal_token +;; +;; How long to remember that a user is logged in before requiring relogin (in days) +;LOGIN_REMEMBER_DAYS = 31 +;; +;; Name of the cookie used to store the current username. +;COOKIE_USERNAME = gitea_awesome +;; +;; Name of cookie used to store authentication information. +;COOKIE_REMEMBER_NAME = gitea_incredible +;; +;; Reverse proxy authentication header name of user name, email, and full name +;REVERSE_PROXY_AUTHENTICATION_USER = X-WEBAUTH-USER +;REVERSE_PROXY_AUTHENTICATION_EMAIL = X-WEBAUTH-EMAIL +;REVERSE_PROXY_AUTHENTICATION_FULL_NAME = X-WEBAUTH-FULLNAME +;; +;; Interpret X-Forwarded-For header or the X-Real-IP header and set this as the remote IP for the request +;REVERSE_PROXY_LIMIT = 1 +;; +;; List of IP addresses and networks separated by comma of trusted proxy servers. Use `*` to trust all. +;REVERSE_PROXY_TRUSTED_PROXIES = 127.0.0.0/8,::1/128 +;; +;; The minimum password length for new Users +;MIN_PASSWORD_LENGTH = 8 +;; +;; Set to true to allow users to import local server paths +;IMPORT_LOCAL_PATHS = false +;; +;; Set to false to allow users with git hook privileges to create custom git hooks. +;; Custom git hooks can be used to perform arbitrary code execution on the host operating system. +;; This enables the users to access and modify this config file and the Gitea database and interrupt the Gitea service. +;; By modifying the Gitea database, users can gain Gitea administrator privileges. +;; It also enables them to access other resources available to the user on the operating system that is running the Gitea instance and perform arbitrary actions in the name of the Gitea OS user. +;; WARNING: This maybe harmful to you website or your operating system. +;; WARNING: Setting this to true does not change existing hooks in git repos; adjust it before if necessary. +;DISABLE_GIT_HOOKS = true +;; +;; Set to true to disable webhooks feature. +;DISABLE_WEBHOOKS = false +;; +;; Set to false to allow pushes to gitea repositories despite having an incomplete environment - NOT RECOMMENDED +;ONLY_ALLOW_PUSH_IF_GITEA_ENVIRONMENT_SET = true +;; +;;Comma separated list of character classes required to pass minimum complexity. +;;If left empty or no valid values are specified, the default is off (no checking) +;;Classes include "lower,upper,digit,spec" +;PASSWORD_COMPLEXITY = off +;; +;; Password Hash algorithm, either "argon2", "pbkdf2", "scrypt" or "bcrypt" +;PASSWORD_HASH_ALGO = pbkdf2 +;; +;; Set false to allow JavaScript to read CSRF cookie +;CSRF_COOKIE_HTTP_ONLY = true +;; +;; Validate against https://haveibeenpwned.com/Passwords to see if a password has been exposed +;PASSWORD_CHECK_PWN = false +;; +;; Cache successful token hashes. API tokens are stored in the DB as pbkdf2 hashes however, this means that there is a potentially significant hashing load when there are multiple API operations. +;; This cache will store the successfully hashed tokens in a LRU cache as a balance between performance and security. +;SUCCESSFUL_TOKENS_CACHE_SIZE = 20 +;; +;; Reject API tokens sent in URL query string (Accept Header-based API tokens only). This avoids security vulnerabilities +;; stemming from cached/logged plain-text API tokens. +;; In future releases, this will become the default behavior +;DISABLE_QUERY_AUTH_TOKEN = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[camo] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; At the moment we only support images +;; +;; if the camo is enabled +;ENABLED = false +;; url to a camo image proxy, it **is required** if camo is enabled. +;SERVER_URL = +;; HMAC to encode urls with, it **is required** if camo is enabled. +;HMAC_KEY = +;; Set to true to use camo for https too lese only non https urls are proxyed +;ALLWAYS = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[oauth2] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Enables OAuth2 provider +ENABLED = true +;; +;; Algorithm used to sign OAuth2 tokens. Valid values: HS256, HS384, HS512, RS256, RS384, RS512, ES256, ES384, ES512, EdDSA +;JWT_SIGNING_ALGORITHM = RS256 +;; +;; Private key file path used to sign OAuth2 tokens. The path is relative to APP_DATA_PATH. +;; This setting is only needed if JWT_SIGNING_ALGORITHM is set to RS256, RS384, RS512, ES256, ES384 or ES512. +;; The file must contain a RSA or ECDSA private key in the PKCS8 format. If no key exists a 4096 bit key will be created for you. +;JWT_SIGNING_PRIVATE_KEY_FILE = jwt/private.pem +;; +;; OAuth2 authentication secret for access and refresh tokens, change this yourself to a unique string. CLI generate option is helpful in this case. https://docs.gitea.io/en-us/command-line/#generate +;; This setting is only needed if JWT_SIGNING_ALGORITHM is set to HS256, HS384 or HS512. +;JWT_SECRET = +;; +;; Alternative location to specify OAuth2 authentication secret. You cannot specify both this and JWT_SECRET, and must pick one +;JWT_SECRET_URI = file:/etc/gitea/oauth2_jwt_secret +;; +;; Lifetime of an OAuth2 access token in seconds +;ACCESS_TOKEN_EXPIRATION_TIME = 3600 +;; +;; Lifetime of an OAuth2 refresh token in hours +;REFRESH_TOKEN_EXPIRATION_TIME = 730 +;; +;; Check if refresh token got already used +;INVALIDATE_REFRESH_TOKENS = false +;; +;; Maximum length of oauth2 token/cookie stored on server +;MAX_TOKEN_LENGTH = 32767 +;; +;; Pre-register OAuth2 applications for some universally useful services +;; * https://github.com/hickford/git-credential-oauth +;; * https://github.com/git-ecosystem/git-credential-manager +;; * https://gitea.com/gitea/tea +;DEFAULT_APPLICATIONS = git-credential-oauth, git-credential-manager, tea + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[log] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Root path for the log files - defaults to %(GITEA_WORK_DIR)/log +;ROOT_PATH = +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Main Logger +;; +;; Either "console", "file" or "conn", default is "console" +;; Use comma to separate multiple modes, e.g. "console, file" +MODE = console +;; +;; Either "Trace", "Debug", "Info", "Warn", "Error" or "None", default is "Info" +LEVEL = Info +;; +;; Print Stacktrace with logs (rarely helpful, do not set) Either "Trace", "Debug", "Info", "Warn", "Error", default is "None" +;STACKTRACE_LEVEL = None +;; +;; Buffer length of the channel, keep it as it is if you don't know what it is. +;BUFFER_LEN = 10000 +;; +;; Sub logger modes, a single comma means use default MODE above, empty means disable it +;logger.access.MODE= +;logger.router.MODE=, +;logger.xorm.MODE=, +;; +;; Collect SSH logs (Creates log from ssh git request) +;; +;ENABLE_SSH_LOG = false +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Access Logger (Creates log in NCSA common log format) +;; +;; Print request id which parsed from request headers in access log, when access log is enabled. +;; * E.g: +;; * In request Header: X-Request-ID: test-id-123 +;; * Configuration in app.ini: REQUEST_ID_HEADERS = X-Request-ID +;; * Print in log: 127.0.0.1:58384 - - [14/Feb/2023:16:33:51 +0800] "test-id-123" +;; +;; If you configure more than one in the .ini file, it will match in the order of configuration, +;; and the first match will be finally printed in the log. +;; * E.g: +;; * In request Header: X-Trace-ID: trace-id-1q2w3e4r +;; * Configuration in app.ini: REQUEST_ID_HEADERS = X-Request-ID, X-Trace-ID, X-Req-ID +;; * Print in log: 127.0.0.1:58384 - - [14/Feb/2023:16:33:51 +0800] "trace-id-1q2w3e4r" +;; +;REQUEST_ID_HEADERS = +;; +;; Sets the template used to create the access log. +;ACCESS_LOG_TEMPLATE = {{.Ctx.RemoteHost}} - {{.Identity}} {{.Start.Format "[02/Jan/2006:15:04:05 -0700]" }} "{{.Ctx.Req.Method}} {{.Ctx.Req.URL.RequestURI}} {{.Ctx.Req.Proto}}" {{.ResponseWriter.Status}} {{.ResponseWriter.Size}} "{{.Ctx.Req.Referer}}" "{{.Ctx.Req.UserAgent}}" + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Log modes (aka log writers) +;; +;[log.%(WriterMode)] +;MODE=console/file/conn/... +;LEVEL= +;FLAGS = stdflags +;EXPRESSION = +;PREFIX = +;COLORIZE = false +;; +;[log.console] +;STDERR = false +;; +;[log.file] +;; Set the file_name for the logger. If this is a relative path this will be relative to ROOT_PATH +;FILE_NAME = +;; This enables automated log rotate(switch of following options), default is true +;LOG_ROTATE = true +;; Max size shift of a single file, default is 28 means 1 << 28, 256MB +;MAX_SIZE_SHIFT = 28 +;; Segment log daily, default is true +;DAILY_ROTATE = true +;; delete the log file after n days, default is 7 +;MAX_DAYS = 7 +;; compress logs with gzip +;COMPRESS = true +;; compression level see godoc for compress/gzip +;COMPRESSION_LEVEL = -1 +;; +;[log.conn] +;; Reconnect host for every single message, default is false +;RECONNECT_ON_MSG = false +;; Try to reconnect when connection is lost, default is false +;RECONNECT = false +;; Either "tcp", "unix" or "udp", default is "tcp" +;PROTOCOL = tcp +;; Host address +;ADDR = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[git] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; The path of git executable. If empty, Gitea searches through the PATH environment. +;PATH = +;; +;; The HOME directory for Git +;HOME_PATH = %(APP_DATA_PATH)s/home +;; +;; Disables highlight of added and removed changes +;DISABLE_DIFF_HIGHLIGHT = false +;; +;; Max number of lines allowed in a single file in diff view +;MAX_GIT_DIFF_LINES = 1000 +;; +;; Max number of allowed characters in a line in diff view +;MAX_GIT_DIFF_LINE_CHARACTERS = 5000 +;; +;; Max number of files shown in diff view +;MAX_GIT_DIFF_FILES = 100 +;; +;; Set the default commits range size +;COMMITS_RANGE_SIZE = 50 +;; +;; Set the default branches range size +;BRANCHES_RANGE_SIZE = 20 +;; +;; Arguments for command 'git gc', e.g. "--aggressive --auto" +;; see more on http://git-scm.com/docs/git-gc/ +;GC_ARGS = +;; +;; If use git wire protocol version 2 when git version >= 2.18, default is true, set to false when you always want git wire protocol version 1 +;; To enable this for Git over SSH when using a OpenSSH server, add `AcceptEnv GIT_PROTOCOL` to your sshd_config file. +;ENABLE_AUTO_GIT_WIRE_PROTOCOL = true +;; +;; Respond to pushes to a non-default branch with a URL for creating a Pull Request (if the repository has them enabled) +;PULL_REQUEST_PUSH_MESSAGE = true +;; +;; (Go-Git only) Don't cache objects greater than this in memory. (Set to 0 to disable.) +;LARGE_OBJECT_THRESHOLD = 1048576 +;; Set to true to forcibly set core.protectNTFS=false +;DISABLE_CORE_PROTECT_NTFS=false +;; Disable the usage of using partial clones for git. +;DISABLE_PARTIAL_CLONE = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Git Operation timeout in seconds +;[git.timeout] +;DEFAULT = 360 +;MIGRATE = 600 +;MIRROR = 300 +;CLONE = 300 +;PULL = 300 +;GC = 60 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Git config options +;; This section only does "set" config, a removed config key from this section won't be removed from git config automatically. The format is `some.configKey = value`. +;[git.config] +;diff.algorithm = histogram +;core.logAllRefUpdates = true +;gc.reflogExpire = 90 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +[service] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Time limit to confirm account/email registration +;ACTIVE_CODE_LIVE_MINUTES = 180 +;; +;; Time limit to perform the reset of a forgotten password +;RESET_PASSWD_CODE_LIVE_MINUTES = 180 +;; +;; Whether a new user needs to confirm their email when registering. +;REGISTER_EMAIL_CONFIRM = false +;; +;; Whether a new user needs to be confirmed manually after registration. (Requires `REGISTER_EMAIL_CONFIRM` to be disabled.) +;REGISTER_MANUAL_CONFIRM = false +;; +;; List of domain names that are allowed to be used to register on a Gitea instance, wildcard is supported +;; eg: gitea.io,example.com,*.mydomain.com +;EMAIL_DOMAIN_ALLOWLIST = +;; +;; Comma-separated list of domain names that are not allowed to be used to register on a Gitea instance, wildcard is supported +;EMAIL_DOMAIN_BLOCKLIST = +;; +;; Disallow registration, only allow admins to create accounts. +;DISABLE_REGISTRATION = false +;; +;; Allow registration only using gitea itself, it works only when DISABLE_REGISTRATION is false +;ALLOW_ONLY_INTERNAL_REGISTRATION = false +;; +;; Allow registration only using third-party services, it works only when DISABLE_REGISTRATION is false +;ALLOW_ONLY_EXTERNAL_REGISTRATION = false +;; +;; User must sign in to view anything. +;REQUIRE_SIGNIN_VIEW = false +;; +;; Mail notification +;ENABLE_NOTIFY_MAIL = false +;; +;; This setting enables gitea to be signed in with HTTP BASIC Authentication using the user's password +;; If you set this to false you will not be able to access the tokens endpoints on the API with your password +;; Please note that setting this to false will not disable OAuth Basic or Basic authentication using a token +;ENABLE_BASIC_AUTHENTICATION = true +;; +;; More detail: https://github.com/gogits/gogs/issues/165 +;ENABLE_REVERSE_PROXY_AUTHENTICATION = false +; Enable this to allow reverse proxy authentication for API requests, the reverse proxy is responsible for ensuring that no CSRF is possible. +;ENABLE_REVERSE_PROXY_AUTHENTICATION_API = false +;ENABLE_REVERSE_PROXY_AUTO_REGISTRATION = false +;ENABLE_REVERSE_PROXY_EMAIL = false +;ENABLE_REVERSE_PROXY_FULL_NAME = false +;; +;; Enable captcha validation for registration +;ENABLE_CAPTCHA = false +;; +;; Enable this to require captcha validation for login +;REQUIRE_CAPTCHA_FOR_LOGIN = false +;; +;; Type of captcha you want to use. Options: image, recaptcha, hcaptcha, mcaptcha, cfturnstile. +;CAPTCHA_TYPE = image +;; +;; Change this to use recaptcha.net or other recaptcha service +;RECAPTCHA_URL = https://www.google.com/recaptcha/ +;; Enable recaptcha to use Google's recaptcha service +;; Go to https://www.google.com/recaptcha/admin to sign up for a key +;RECAPTCHA_SECRET = +;RECAPTCHA_SITEKEY = +;; +;; For hCaptcha, create an account at https://accounts.hcaptcha.com/login to get your keys +;HCAPTCHA_SECRET = +;HCAPTCHA_SITEKEY = +;; +;; Change this to use demo.mcaptcha.org or your self-hosted mcaptcha.org instance. +;MCAPTCHA_URL = https://demo.mcaptcha.org +;; +;; Go to your configured mCaptcha instance and register a sitekey +;; and use your account's secret. +;MCAPTCHA_SECRET = +;MCAPTCHA_SITEKEY = +;; +;; Go to https://dash.cloudflare.com/?to=/:account/turnstile to sign up for a key +;CF_TURNSTILE_SITEKEY = +;CF_TURNSTILE_SECRET = +;; +;; Default value for KeepEmailPrivate +;; Each new user will get the value of this setting copied into their profile +;DEFAULT_KEEP_EMAIL_PRIVATE = false +;; +;; Default value for AllowCreateOrganization +;; Every new user will have rights set to create organizations depending on this setting +;DEFAULT_ALLOW_CREATE_ORGANIZATION = true +;; Default value for IsRestricted +;; Every new user will have restricted permissions depending on this setting +;DEFAULT_USER_IS_RESTRICTED = false +;; +;; Either "public", "limited" or "private", default is "public" +;; Limited is for users visible only to signed users +;; Private is for users visible only to members of their organizations +;; Public is for users visible for everyone +;DEFAULT_USER_VISIBILITY = public +;; +;; Set which visibility modes a user can have +;ALLOWED_USER_VISIBILITY_MODES = public,limited,private +;; +;; Either "public", "limited" or "private", default is "public" +;; Limited is for organizations visible only to signed users +;; Private is for organizations visible only to members of the organization +;; Public is for organizations visible to everyone +;DEFAULT_ORG_VISIBILITY = public +;; +;; Default value for DefaultOrgMemberVisible +;; True will make the membership of the users visible when added to the organisation +;DEFAULT_ORG_MEMBER_VISIBLE = false +;; +;; Default value for EnableDependencies +;; Repositories will use dependencies by default depending on this setting +;DEFAULT_ENABLE_DEPENDENCIES = true +;; +;; Dependencies can be added from any repository where the user is granted access or only from the current repository depending on this setting. +;ALLOW_CROSS_REPOSITORY_DEPENDENCIES = true +;; +;; Default map service. No external API support has been included. A service has to allow +;; searching using URL parameters, the location will be appended to the URL as escaped query parameter. +;; Disabled by default, some example values are: +;; - OpenStreetMap: https://www.openstreetmap.org/search?query= +;; - Google Maps: https://www.google.com/maps/place/ +;; - MapQuest: https://www.mapquest.com/search/ +;; - Bing Maps: https://www.bing.com/maps?where1= +; USER_LOCATION_MAP_URL = +;; +;; Enable heatmap on users profiles. +;ENABLE_USER_HEATMAP = true +;; +;; Enable Timetracking +;ENABLE_TIMETRACKING = true +;; +;; Default value for EnableTimetracking +;; Repositories will use timetracking by default depending on this setting +;DEFAULT_ENABLE_TIMETRACKING = true +;; +;; Default value for AllowOnlyContributorsToTrackTime +;; Only users with write permissions can track time if this is true +;DEFAULT_ALLOW_ONLY_CONTRIBUTORS_TO_TRACK_TIME = true +;; +;; Value for the domain part of the user's email address in the git log if user +;; has set KeepEmailPrivate to true. The user's email will be replaced with a +;; concatenation of the user name in lower case, "@" and NO_REPLY_ADDRESS. Default +;; value is "noreply." + DOMAIN, where DOMAIN resolves to the value from server.DOMAIN +;; Note: do not use the notation below +;NO_REPLY_ADDRESS = ; noreply. +;; +;; Show Registration button +;SHOW_REGISTRATION_BUTTON = true +;; +;; Show milestones dashboard page - a view of all the user's milestones +;SHOW_MILESTONES_DASHBOARD_PAGE = true +;; +;; Default value for AutoWatchNewRepos +;; When adding a repo to a team or creating a new repo all team members will watch the +;; repo automatically if enabled +;AUTO_WATCH_NEW_REPOS = true +;; +;; Default value for AutoWatchOnChanges +;; Make the user watch a repository When they commit for the first time +;AUTO_WATCH_ON_CHANGES = false +;; +;; Minimum amount of time a user must exist before comments are kept when the user is deleted. +;USER_DELETE_WITH_COMMENTS_MAX_TIME = 0 +;; Valid site url schemes for user profiles +;VALID_SITE_URL_SCHEMES=http,https + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Other Settings +;; +;; Uncomment the [section.header] if you wish to +;; set the below settings. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Root path for storing all repository data. By default, it is set to %(APP_DATA_PATH)s/gitea-repositories. +;; A relative path is interpreted as _`AppWorkPath`_/%(ROOT)s +;ROOT = +;; +;; The script type this server supports. Usually this is `bash`, but some users report that only `sh` is available. +;SCRIPT_TYPE = bash +;; +;; DETECTED_CHARSETS_ORDER tie-break order for detected charsets. +;; If the charsets have equal confidence, tie-breaking will be done by order in this list +;; with charsets earlier in the list chosen in preference to those later. +;; Adding "defaults" will place the unused charsets at that position. +;DETECTED_CHARSETS_ORDER = UTF-8, UTF-16BE, UTF-16LE, UTF-32BE, UTF-32LE, ISO-8859, windows-1252, ISO-8859, windows-1250, ISO-8859, ISO-8859, ISO-8859, windows-1253, ISO-8859, windows-1255, ISO-8859, windows-1251, windows-1256, KOI8-R, ISO-8859, windows-1254, Shift_JIS, GB18030, EUC-JP, EUC-KR, Big5, ISO-2022, ISO-2022, ISO-2022, IBM424_rtl, IBM424_ltr, IBM420_rtl, IBM420_ltr +;; +;; Default ANSI charset to override non-UTF-8 charsets to +;ANSI_CHARSET = +;; +;; Force every new repository to be private +;FORCE_PRIVATE = false +;; +;; Default privacy setting when creating a new repository, allowed values: last, private, public. Default is last which means the last setting used. +;DEFAULT_PRIVATE = last +;; +;; Default private when using push-to-create +;DEFAULT_PUSH_CREATE_PRIVATE = true +;; +;; Global limit of repositories per user, applied at creation time. -1 means no limit +;MAX_CREATION_LIMIT = -1 +;; +;; Preferred Licenses to place at the top of the List +;; The name here must match the filename in options/license or custom/options/license +;PREFERRED_LICENSES = Apache License 2.0,MIT License +;; +;; Disable the ability to interact with repositories using the HTTP protocol +;DISABLE_HTTP_GIT = false +;; +;; Value for Access-Control-Allow-Origin header, default is not to present +;; WARNING: This may be harmful to your website if you do not give it a right value. +;ACCESS_CONTROL_ALLOW_ORIGIN = +;; +;; Force ssh:// clone url instead of scp-style uri when default SSH port is used +;USE_COMPAT_SSH_URI = false +;; +;; Value for the "go get" request returns the repository url as https or ssh, default is https +;GO_GET_CLONE_URL_PROTOCOL = https +;; +;; Close issues as long as a commit on any branch marks it as fixed +;DEFAULT_CLOSE_ISSUES_VIA_COMMITS_IN_ANY_BRANCH = false +;; +;; Allow users to push local repositories to Gitea and have them automatically created for a user or an org +;ENABLE_PUSH_CREATE_USER = false +;ENABLE_PUSH_CREATE_ORG = false +;; +;; Comma separated list of globally disabled repo units. Allowed values: repo.issues, repo.ext_issues, repo.pulls, repo.wiki, repo.ext_wiki, repo.projects, repo.packages, repo.actions. +;DISABLED_REPO_UNITS = +;; +;; Comma separated list of default new repo units. Allowed values: repo.code, repo.releases, repo.issues, repo.pulls, repo.wiki, repo.projects, repo.packages, repo.actions. +;; Note: Code and Releases can currently not be deactivated. If you specify default repo units you should still list them for future compatibility. +;; External wiki and issue tracker can't be enabled by default as it requires additional settings. +;; Disabled repo units will not be added to new repositories regardless if it is in the default list. +;DEFAULT_REPO_UNITS = repo.code,repo.releases,repo.issues,repo.pulls,repo.wiki,repo.projects,repo.packages,repo.actions +;; +;; Comma separated list of default forked repo units. +;; The set of allowed values and rules are the same as DEFAULT_REPO_UNITS. +;DEFAULT_FORK_REPO_UNITS = repo.code,repo.pulls +;; +;; Prefix archive files by placing them in a directory named after the repository +;PREFIX_ARCHIVE_FILES = true +;; +;; Disable migrating feature. +;DISABLE_MIGRATIONS = false +;; +;; Disable stars feature. +;DISABLE_STARS = false +;; +;; The default branch name of new repositories +;DEFAULT_BRANCH = main +;; +;; Allow adoption of unadopted repositories +;ALLOW_ADOPTION_OF_UNADOPTED_REPOSITORIES = false +;; +;; Allow deletion of unadopted repositories +;ALLOW_DELETION_OF_UNADOPTED_REPOSITORIES = false + +;; Don't allow download source archive files from UI +;DISABLE_DOWNLOAD_SOURCE_ARCHIVES = false + +;; Allow fork repositories without maximum number limit +;ALLOW_FORK_WITHOUT_MAXIMUM_LIMIT = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.editor] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; List of file extensions for which lines should be wrapped in the Monaco editor +;; Separate extensions with a comma. To line wrap files without an extension, just put a comma +;LINE_WRAP_EXTENSIONS = .txt,.md,.markdown,.mdown,.mkd,.livemd, + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.local] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Path for local repository copy. Defaults to `tmp/local-repo` (content gets deleted on gitea restart) +;LOCAL_COPY_PATH = tmp/local-repo + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.upload] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Whether repository file uploads are enabled. Defaults to `true` +;ENABLED = true +;; +;; Path for uploads. Defaults to `data/tmp/uploads` (content gets deleted on gitea restart) +;TEMP_PATH = data/tmp/uploads +;; +;; Comma-separated list of allowed file extensions (`.zip`), mime types (`text/plain`) or wildcard type (`image/*`, `audio/*`, `video/*`). Empty value or `*/*` allows all types. +;ALLOWED_TYPES = +;; +;; Max size of each file in megabytes. Defaults to 50MB +;FILE_MAX_SIZE = 50 +;; +;; Max number of files per upload. Defaults to 5 +;MAX_FILES = 5 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.pull-request] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; List of prefixes used in Pull Request title to mark them as Work In Progress (matched in a case-insensitive manner) +;WORK_IN_PROGRESS_PREFIXES = WIP:,[WIP] +;; +;; List of keywords used in Pull Request comments to automatically close a related issue +;CLOSE_KEYWORDS = close,closes,closed,fix,fixes,fixed,resolve,resolves,resolved +;; +;; List of keywords used in Pull Request comments to automatically reopen a related issue +;REOPEN_KEYWORDS = reopen,reopens,reopened +;; +;; Set default merge style for repository creating, valid options: merge, rebase, rebase-merge, squash, fast-forward-only +;DEFAULT_MERGE_STYLE = merge +;; +;; In the default merge message for squash commits include at most this many commits +;DEFAULT_MERGE_MESSAGE_COMMITS_LIMIT = 50 +;; +;; In the default merge message for squash commits limit the size of the commit messages to this +;DEFAULT_MERGE_MESSAGE_SIZE = 5120 +;; +;; In the default merge message for squash commits walk all commits to include all authors in the Co-authored-by otherwise just use those in the limited list +;DEFAULT_MERGE_MESSAGE_ALL_AUTHORS = false +;; +;; In default merge messages limit the number of approvers listed as Reviewed-by: to this many +;DEFAULT_MERGE_MESSAGE_MAX_APPROVERS = 10 +;; +;; In default merge messages only include approvers who are official +;DEFAULT_MERGE_MESSAGE_OFFICIAL_APPROVERS_ONLY = true +;; +;; Add co-authored-by and co-committed-by trailers if committer does not match author +;ADD_CO_COMMITTER_TRAILERS = true +;; +;; In addition to testing patches using the three-way merge method, re-test conflicting patches with git apply +;TEST_CONFLICTING_PATCHES_WITH_GIT_APPLY = false +;; +;; Retarget child pull requests to the parent pull request branch target on merge of parent pull request. It only works on merged PRs where the head and base branch target the same repo. +;RETARGET_CHILDREN_ON_MERGE = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.issue] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; List of reasons why a Pull Request or Issue can be locked +;LOCK_REASONS = Too heated,Off-topic,Resolved,Spam +;; Maximum number of pinned Issues per repo +;; Set to 0 to disable pinning Issues +;MAX_PINNED = 3 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.release] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Comma-separated list of allowed file extensions (`.zip`), mime types (`text/plain`) or wildcard type (`image/*`, `audio/*`, `video/*`). Empty value or `*/*` allows all types. +;ALLOWED_TYPES = +;DEFAULT_PAGING_NUM = 10 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.signing] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; GPG key to use to sign commits, Defaults to the default - that is the value of git config --get user.signingkey +;; run in the context of the RUN_USER +;; Switch to none to stop signing completely +;SIGNING_KEY = default +;; +;; If a SIGNING_KEY ID is provided and is not set to default, use the provided Name and Email address as the signer. +;; These should match a publicized name and email address for the key. (When SIGNING_KEY is default these are set to +;; the results of git config --get user.name and git config --get user.email respectively and can only be overridden +;; by setting the SIGNING_KEY ID to the correct ID.) +;SIGNING_NAME = +;SIGNING_EMAIL = +;; +;; Sets the default trust model for repositories. Options are: collaborator, committer, collaboratorcommitter +;DEFAULT_TRUST_MODEL = collaborator +;; +;; Determines when gitea should sign the initial commit when creating a repository +;; Either: +;; - never +;; - pubkey: only sign if the user has a pubkey +;; - twofa: only sign if the user has logged in with twofa +;; - always +;; options other than none and always can be combined as comma separated list +;INITIAL_COMMIT = always +;; +;; Determines when to sign for CRUD actions +;; - as above +;; - parentsigned: requires that the parent commit is signed. +;CRUD_ACTIONS = pubkey, twofa, parentsigned +;; Determines when to sign Wiki commits +;; - as above +;WIKI = never +;; +;; Determines when to sign on merges +;; - basesigned: require that the parent of commit on the base repo is signed. +;; - commitssigned: require that all the commits in the head branch are signed. +;; - approved: only sign when merging an approved pr to a protected branch +;MERGES = pubkey, twofa, basesigned, commitssigned + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[repository.mimetype_mapping] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Custom MIME type mapping for downloadable files +;.apk=application/vnd.android.package-archive + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[project] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Default templates for project boards +;PROJECT_BOARD_BASIC_KANBAN_TYPE = To Do, In Progress, Done +;PROJECT_BOARD_BUG_TRIAGE_TYPE = Needs Triage, High Priority, Low Priority, Closed + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cors] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; More information about CORS can be found here: https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS#The_HTTP_response_headers +;; enable cors headers (disabled by default) +;ENABLED = false +;; +;; list of requesting origins that are allowed, eg: "https://*.example.com" +;ALLOW_DOMAIN = * +;; +;; list of methods allowed to request +;METHODS = GET,HEAD,POST,PUT,PATCH,DELETE,OPTIONS +;; +;; max time to cache response +;MAX_AGE = 10m +;; +;; allow request with credentials +;ALLOW_CREDENTIALS = false +;; +;; headers to permit +;HEADERS = Content-Type,User-Agent +;; +;; set X-FRAME-OPTIONS header +;X_FRAME_OPTIONS = SAMEORIGIN + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Number of repositories that are displayed on one explore page +;EXPLORE_PAGING_NUM = 20 +;; +;; Number of issues that are displayed on one page +;ISSUE_PAGING_NUM = 20 +;; +;; Number of maximum commits displayed in one activity feed +;FEED_MAX_COMMIT_NUM = 5 +;; +;; Number of items that are displayed in home feed +;FEED_PAGING_NUM = 20 +;; +;; Number of items that are displayed in a single subsitemap +;SITEMAP_PAGING_NUM = 20 +;; +;; Number of maximum commits displayed in commit graph. +;GRAPH_MAX_COMMIT_NUM = 100 +;; +;; Number of line of codes shown for a code comment +;CODE_COMMENT_LINES = 4 +;; +;; Max size of files to be displayed (default is 8MiB) +;MAX_DISPLAY_FILE_SIZE = 8388608 +;; +;; Detect ambiguous unicode characters in file contents and show warnings on the UI +;AMBIGUOUS_UNICODE_DETECTION = true +;; +;; Whether the email of the user should be shown in the Explore Users page +;SHOW_USER_EMAIL = true +;; +;; Set the default theme for the Gitea install +;DEFAULT_THEME = gitea-auto +;; +;; All available themes. Allow users select personalized themes regardless of the value of `DEFAULT_THEME`. +;; Leave it empty to allow users to select any theme from "{CustomPath}/public/assets/css/theme-*.css" +;THEMES = +;; +;; All available reactions users can choose on issues/prs and comments. +;; Values can be emoji alias (:smile:) or a unicode emoji. +;; For custom reactions, add a tightly cropped square image to public/assets/img/emoji/reaction_name.png +;REACTIONS = +1, -1, laugh, hooray, confused, heart, rocket, eyes +;; +;; Change the number of users that are displayed in reactions tooltip (triggered by mouse hover). +;REACTION_MAX_USER_NUM = 10 +;; +;; Additional Emojis not defined in the utf8 standard +;; By default we support gitea (:gitea:), to add more copy them to public/assets/img/emoji/emoji_name.png and add it to this config. +;; Dont mistake it for Reactions. +;CUSTOM_EMOJIS = gitea, codeberg, gitlab, git, github, gogs +;; +;; Whether the full name of the users should be shown where possible. If the full name isn't set, the username will be used. +;DEFAULT_SHOW_FULL_NAME = false +;; +;; Whether to search within description at repository search on explore page. +;SEARCH_REPO_DESCRIPTION = true +;; +;; Whether to only show relevant repos on the explore page when no keyword is specified and default sorting is used. +;; A repo is considered irrelevant if it's a fork or if it has no metadata (no description, no icon, no topic). +;ONLY_SHOW_RELEVANT_REPOS = false +;; +;; Change the sort type of the explore pages. +;; Default is "recentupdate", but you also have "alphabetically", "reverselastlogin", "newest", "oldest". +;EXPLORE_PAGING_DEFAULT_SORT = recentupdate +;; +;; The tense all timestamps should be rendered in. Possible values are `absolute` time (i.e. 1970-01-01, 11:59) and `mixed`. +;; `mixed` means most timestamps are rendered in relative time (i.e. 2 days ago). +;PREFERRED_TIMESTAMP_TENSE = mixed + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.admin] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Number of users that are displayed on one page +;USER_PAGING_NUM = 50 +;; +;; Number of repos that are displayed on one page +;REPO_PAGING_NUM = 50 +;; +;; Number of notices that are displayed on one page +;NOTICE_PAGING_NUM = 25 +;; +;; Number of organizations that are displayed on one page +;ORG_PAGING_NUM = 50 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.user] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Number of repos that are displayed on one page +;REPO_PAGING_NUM = 15 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.meta] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;AUTHOR = Gitea - Git with a cup of tea +;DESCRIPTION = Gitea (Git with a cup of tea) is a painless self-hosted Git service written in Go +;KEYWORDS = go,git,self-hosted,gitea + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.notification] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Control how often the notification endpoint is polled to update the notification +;; The timeout will increase to MAX_TIMEOUT in TIMEOUT_STEPs if the notification count is unchanged +;; Set MIN_TIMEOUT to -1 to turn off +;MIN_TIMEOUT = 10s +;MAX_TIMEOUT = 60s +;TIMEOUT_STEP = 10s +;; +;; This setting determines how often the db is queried to get the latest notification counts. +;; If the browser client supports EventSource and SharedWorker, a SharedWorker will be used in preference to polling notification. Set to -1 to disable the EventSource +;EVENT_SOURCE_UPDATE_TIME = 10s + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.svg] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Whether to render SVG files as images. If SVG rendering is disabled, SVG files are displayed as text and cannot be embedded in markdown files as images. +;ENABLE_RENDER = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ui.csv] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Maximum allowed file size in bytes to render CSV files as table. (Set to 0 for no limit). +;MAX_FILE_SIZE = 524288 +;; +;; Maximum allowed rows to render CSV files. (Set to 0 for no limit) +;MAX_ROWS = 2500 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[markdown] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Render soft line breaks as hard line breaks, which means a single newline character between +;; paragraphs will cause a line break and adding trailing whitespace to paragraphs is not +;; necessary to force a line break. +;; Render soft line breaks as hard line breaks for comments +;ENABLE_HARD_LINE_BREAK_IN_COMMENTS = true +;; +;; Render soft line breaks as hard line breaks for markdown documents +;ENABLE_HARD_LINE_BREAK_IN_DOCUMENTS = false +;; +;; Comma separated list of custom URL-Schemes that are allowed as links when rendering Markdown +;; for example git,magnet,ftp (more at https://en.wikipedia.org/wiki/List_of_URI_schemes) +;; URLs starting with http and https are always displayed, whatever is put in this entry. +;; If this entry is empty, all URL schemes are allowed. +;CUSTOM_URL_SCHEMES = +;; +;; List of file extensions that should be rendered/edited as Markdown +;; Separate the extensions with a comma. To render files without any extension as markdown, just put a comma +;FILE_EXTENSIONS = .md,.markdown,.mdown,.mkd,.livemd +;; +;; Enables math inline and block detection +;ENABLE_MATH = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[ssh.minimum_key_sizes] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Define allowed algorithms and their minimum key length (use -1 to disable a type) +;ED25519 = 256 +;ECDSA = 256 +;RSA = 3071 ; we allow 3071 here because an otherwise valid 3072 bit RSA key can be reported as having 3071 bit length +;DSA = -1 ; set to 1024 to switch on + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[indexer] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Issue Indexer settings +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Issue indexer type, currently support: bleve, db, elasticsearch or meilisearch default is bleve +;ISSUE_INDEXER_TYPE = bleve +;; +;; Issue indexer storage path, available when ISSUE_INDEXER_TYPE is bleve +;ISSUE_INDEXER_PATH = indexers/issues.bleve ; Relative paths will be made absolute against _`AppWorkPath`_. +;; +;; Issue indexer connection string, available when ISSUE_INDEXER_TYPE is elasticsearch (e.g. http://elastic:password@localhost:9200) or meilisearch (e.g. http://:apikey@localhost:7700) +;ISSUE_INDEXER_CONN_STR = +;; +;; Issue indexer name, available when ISSUE_INDEXER_TYPE is elasticsearch or meilisearch. +;ISSUE_INDEXER_NAME = gitea_issues +;; +;; Timeout the indexer if it takes longer than this to start. +;; Set to -1 to disable timeout. +;STARTUP_TIMEOUT = 30s +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Repository Indexer settings +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; repo indexer by default disabled, since it uses a lot of disk space +;REPO_INDEXER_ENABLED = false +;; +;; repo indexer units, the items to index, could be `sources`, `forks`, `mirrors`, `templates` or any combination of them separated by a comma. +;; If empty then it defaults to `sources` only, as if you'd like to disable fully please see REPO_INDEXER_ENABLED. +;REPO_INDEXER_REPO_TYPES = sources,forks,mirrors,templates +;; +;; Code search engine type, could be `bleve` or `elasticsearch`. +;REPO_INDEXER_TYPE = bleve +;; +;; Index file used for code search. available when `REPO_INDEXER_TYPE` is bleve +;REPO_INDEXER_PATH = indexers/repos.bleve +;; +;; Code indexer connection string, available when `REPO_INDEXER_TYPE` is elasticsearch. i.e. http://elastic:changeme@localhost:9200 +;REPO_INDEXER_CONN_STR = +;; +;; Code indexer name, available when `REPO_INDEXER_TYPE` is elasticsearch +;REPO_INDEXER_NAME = gitea_codes +;; +;; A comma separated list of glob patterns (see https://github.com/gobwas/glob) to include +;; in the index; default is empty +;REPO_INDEXER_INCLUDE = +;; +;; A comma separated list of glob patterns to exclude from the index; ; default is empty +;REPO_INDEXER_EXCLUDE = +;; +;MAX_FILE_SIZE = 1048576 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[queue] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Specific queues can be individually configured with [queue.name]. [queue] provides defaults +;; ([queue.issue_indexer] is special due to the old configuration described above) +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; General queue queue type, currently support: persistable-channel, channel, level, redis, dummy +;; default to persistable-channel +;TYPE = persistable-channel +;; +;; data-dir for storing persistable queues and level queues, individual queues will default to `queues/common` meaning the queue is shared. +;DATADIR = queues/ ; Relative paths will be made absolute against `%(APP_DATA_PATH)s`. +;; +;; Default queue length before a channel queue will block +;LENGTH = 100000 +;; +;; Batch size to send for batched queues +;BATCH_LENGTH = 20 +;; +;; Connection string for redis queues this will store the redis (or Redis cluster) connection string. +;; When `TYPE` is `persistable-channel`, this provides a directory for the underlying leveldb +;; or additional options of the form `leveldb://path/to/db?option=value&....`, and will override `DATADIR`. +;CONN_STR = "redis://127.0.0.1:6379/0" +;; +;; Provides the suffix of the default redis/disk queue name - specific queues can be overridden within in their [queue.name] sections. +;QUEUE_NAME = "_queue" +;; +;; Provides the suffix of the default redis/disk unique queue set name - specific queues can be overridden within in their [queue.name] sections. +;SET_NAME = "_unique" +;; +;; Maximum number of worker go-routines for the queue. Default value is "CpuNum/2" clipped to between 1 and 10. +;MAX_WORKERS = ; (dynamic) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[admin] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Disallow regular (non-admin) users from creating organizations. +;DISABLE_REGULAR_ORG_CREATION = false +;; +;; Default configuration for email notifications for users (user configurable). Options: enabled, onmention, disabled +;DEFAULT_EMAIL_NOTIFICATIONS = enabled +;; Disabled features for users could be "deletion", "manage_ssh_keys", "manage_gpg_keys", "manage_mfa", "manage_credentials" more features can be disabled in future +;; - deletion: a user cannot delete their own account +;; - manage_ssh_keys: a user cannot configure ssh keys +;; - manage_gpg_keys: a user cannot configure gpg keys +;; - manage_mfa: a user cannot configure mfa devices +;; - manage_credentials: a user cannot configure emails, passwords, or openid +;USER_DISABLED_FEATURES = +;; Comma separated list of disabled features ONLY if the user has an external login type (eg. LDAP, Oauth, etc.), could be "deletion", "manage_ssh_keys", "manage_gpg_keys", "manage_mfa", "manage_credentials". This setting is independent from `USER_DISABLED_FEATURES` and supplements its behavior. +;; - deletion: a user cannot delete their own account +;; - manage_ssh_keys: a user cannot configure ssh keys +;; - manage_gpg_keys: a user cannot configure gpg keys +;; - manage_mfa: a user cannot configure mfa devices +;; - manage_credentials: a user cannot configure emails, passwords, or openid +;;EXTERNAL_USER_DISABLE_FEATURES = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[openid] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; OpenID is an open, standard and decentralized authentication protocol. +;; Your identity is the address of a webpage you provide, which describes +;; how to prove you are in control of that page. +;; +;; For more info: https://en.wikipedia.org/wiki/OpenID +;; +;; Current implementation supports OpenID-2.0 +;; +;; Tested to work providers at the time of writing: +;; - Any GNUSocial node (your.hostname.tld/username) +;; - Any SimpleID provider (http://simpleid.koinic.net) +;; - http://openid.org.cn/ +;; - openid.stackexchange.com +;; - login.launchpad.net +;; - .livejournal.com +;; +;; Whether to allow signin in via OpenID +;ENABLE_OPENID_SIGNIN = true +;; +;; Whether to allow registering via OpenID +;; Do not include to rely on rhw DISABLE_REGISTRATION setting +;;ENABLE_OPENID_SIGNUP = true +;; +;; Allowed URI patterns (POSIX regexp). +;; Space separated. +;; Only these would be allowed if non-blank. +;; Example value: trusted.domain.org trusted.domain.net +;WHITELISTED_URIS = +;; +;; Forbidden URI patterns (POSIX regexp). +;; Space separated. +;; Only used if WHITELISTED_URIS is blank. +;; Example value: loadaverage.org/badguy stackexchange.com/.*spammer +;BLACKLISTED_URIS = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[oauth2_client] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Whether a new auto registered oauth2 user needs to confirm their email. +;; Do not include to use the REGISTER_EMAIL_CONFIRM setting from the `[service]` section. +;REGISTER_EMAIL_CONFIRM = +;; +;; Scopes for the openid connect oauth2 provider (separated by space, the openid scope is implicitly added). +;; Typical values are profile and email. +;; For more information about the possible values see https://openid.net/specs/openid-connect-core-1_0.html#ScopeClaims +;OPENID_CONNECT_SCOPES = +;; +;; Automatically create user accounts for new oauth2 users. +;ENABLE_AUTO_REGISTRATION = false +;; +;; The source of the username for new oauth2 accounts: +;; userid = use the userid / sub attribute +;; nickname = use the nickname attribute +;; preferred_username = use the preferred_username attribute +;; email = use the username part of the email attribute +;; Note: `nickname`, `preferred_username` and `email` options will normalize input strings using the following criteria: +;; - diacritics are removed +;; - the characters in the set ['´`] are removed +;; - the characters in the set [\s~+] are replaced with "-" +;USERNAME = nickname +;; +;; Update avatar if available from oauth2 provider. +;; Update will be performed on each login. +;UPDATE_AVATAR = false +;; +;; How to handle if an account / email already exists: +;; disabled = show an error +;; login = show an account linking login +;; auto = link directly with the account +;ACCOUNT_LINKING = login + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[webhook] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Hook task queue length, increase if webhook shooting starts hanging +;QUEUE_LENGTH = 1000 +;; +;; Deliver timeout in seconds +;DELIVER_TIMEOUT = 5 +;; +;; Webhook can only call allowed hosts for security reasons. Comma separated list, eg: external, 192.168.1.0/24, *.mydomain.com +;; Built-in: loopback (for localhost), private (for LAN/intranet), external (for public hosts on internet), * (for all hosts) +;; CIDR list: 1.2.3.0/8, 2001:db8::/32 +;; Wildcard hosts: *.mydomain.com, 192.168.100.* +;; Since 1.15.7. Default to * for 1.15.x, external for 1.16 and later +;ALLOWED_HOST_LIST = external +;; +;; Allow insecure certification +;SKIP_TLS_VERIFY = false +;; +;; Number of history information in each page +;PAGING_NUM = 10 +;; +;; Proxy server URL, support http://, https//, socks://, blank will follow environment http_proxy/https_proxy +;PROXY_URL = +;; +;; Comma separated list of host names requiring proxy. Glob patterns (*) are accepted; use ** to match all hosts. +;PROXY_HOSTS = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[mailer] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; NOTICE: this section is for Gitea 1.18 and later. If you are using Gitea 1.17 or older, +;; please refer to +;; https://github.com/go-gitea/gitea/blob/release/v1.17/custom/conf/app.example.ini +;; https://github.com/go-gitea/gitea/blob/release/v1.17/docs/content/doc/advanced/config-cheat-sheet.en-us.md +;; +;ENABLED = false +;; +;; Buffer length of channel, keep it as it is if you don't know what it is. +;SEND_BUFFER_LEN = 100 +;; +;; Prefix displayed before subject in mail +;SUBJECT_PREFIX = +;; +;; Mail server protocol. One of "smtp", "smtps", "smtp+starttls", "smtp+unix", "sendmail", "dummy". +;; - sendmail: use the operating system's `sendmail` command instead of SMTP. This is common on Linux systems. +;; - dummy: send email messages to the log as a testing phase. +;; If your provider does not explicitly say which protocol it uses but does provide a port, +;; you can set SMTP_PORT instead and this will be inferred. +;; (Before 1.18, see the notice, this was controlled via MAILER_TYPE and IS_TLS_ENABLED.) +;PROTOCOL = +;; +;; Mail server address, e.g. smtp.gmail.com. +;; For smtp+unix, this should be a path to a unix socket instead. +;; (Before 1.18, see the notice, this was combined with SMTP_PORT as HOST.) +;SMTP_ADDR = +;; +;; Mail server port. Common ports are: +;; 25: insecure SMTP +;; 465: SMTP Secure +;; 587: StartTLS +;; If no protocol is specified, it will be inferred by this setting. +;; (Before 1.18, this was combined with SMTP_ADDR as HOST.) +;SMTP_PORT = +;; +;; Enable HELO operation. Defaults to true. +;ENABLE_HELO = true +;; +;; Custom hostname for HELO operation. +;; If no value is provided, one is retrieved from system. +;HELO_HOSTNAME = +;; +;; If set to `true`, completely ignores server certificate validation errors. +;; This option is unsafe. Consider adding the certificate to the system trust store instead. +;FORCE_TRUST_SERVER_CERT = false +;; +;; Use client certificate in connection. +;USE_CLIENT_CERT = false +;CLIENT_CERT_FILE = custom/mailer/cert.pem +;CLIENT_KEY_FILE = custom/mailer/key.pem +;; +;; Mail from address, RFC 5322. This can be just an email address, or the `"Name" ` format +;FROM = +;; +;; Sometimes it is helpful to use a different address on the envelope. Set this to use ENVELOPE_FROM as the from on the envelope. Set to `<>` to send an empty address. +;ENVELOPE_FROM = +;; +;; If gitea sends mails on behave of users, it will just use the name also displayed in the WebUI. If you want e.g. `Mister X (by CodeIt) `, +;; set it to `{{ .DisplayName }} (by {{ .AppName }})`. Available Variables: `.DisplayName`, `.AppName` and `.Domain`. +;FROM_DISPLAY_NAME_FORMAT = {{ .DisplayName }} +;; +;; Mailer user name and password, if required by provider. +;USER = +;; +;; Use PASSWD = `your password` for quoting if you use special characters in the password. +;PASSWD = +;; +;; Send mails only in plain text, without HTML alternative +;SEND_AS_PLAIN_TEXT = false +;; +;; Specify an alternative sendmail binary +;SENDMAIL_PATH = sendmail +;; +;; Specify any extra sendmail arguments +;; WARNING: if your sendmail program interprets options you should set this to "--" or terminate these args with "--" +;SENDMAIL_ARGS = +;; +;; Timeout for Sendmail +;SENDMAIL_TIMEOUT = 5m +;; +;; convert \r\n to \n for Sendmail +;SENDMAIL_CONVERT_CRLF = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[mailer.override_header] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; This is empty by default, use it only if you know what you need it for. +;Reply-To = test@example.com, test2@example.com +;Content-Type = text/html; charset=utf-8 +;In-Reply-To = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[email.incoming] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Enable handling of incoming emails. +;ENABLED = false +;; +;; The email address including the %{token} placeholder that will be replaced per user/action. +;; Example: incoming+%{token}@example.com +;; The placeholder must appear in the user part of the address (before the @). +;REPLY_TO_ADDRESS = +;; +;; IMAP server host +;HOST = +;; +;; IMAP server port +;PORT = +;; +;; Username of the receiving account +;USERNAME = +;; +;; Password of the receiving account +;PASSWORD = +;; +;; Whether the IMAP server uses TLS. +;USE_TLS = false +;; +;; If set to true, completely ignores server certificate validation errors. This option is unsafe. +;SKIP_TLS_VERIFY = true +;; +;; The mailbox name where incoming mail will end up. +;MAILBOX = INBOX +;; +;; Whether handled messages should be deleted from the mailbox. +;DELETE_HANDLED_MESSAGE = true +;; +;; Maximum size of a message to handle. Bigger messages are ignored. Set to 0 to allow every size. +;MAXIMUM_MESSAGE_SIZE = 10485760 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cache] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Either "memory", "redis", "memcache", or "twoqueue". default is "memory" +;ADAPTER = memory +;; +;; For "memory" only, GC interval in seconds, default is 60 +;INTERVAL = 60 +;; +;; For "redis" and "memcache", connection host address +;; redis: `redis://127.0.0.1:6379/0?pool_size=100&idle_timeout=180s` (or `redis+cluster://127.0.0.1:6379/0?pool_size=100&idle_timeout=180s` for a Redis cluster) +;; memcache: `127.0.0.1:11211` +;; twoqueue: `{"size":50000,"recent_ratio":0.25,"ghost_ratio":0.5}` or `50000` +;HOST = +;; +;; Time to keep items in cache if not used, default is 16 hours. +;; Setting it to -1 disables caching +;ITEM_TTL = 16h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Last commit cache +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cache.last_commit] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Time to keep items in cache if not used, default is 8760 hours. +;; Setting it to -1 disables caching +;ITEM_TTL = 8760h +;; +;; Only enable the cache when repository's commits count great than +;COMMITS_COUNT = 1000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[session] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Either "memory", "file", "redis", "db", "mysql", "couchbase", "memcache" or "postgres" +;; Default is "memory". "db" will reuse the configuration in [database] +;PROVIDER = memory +;; +;; Provider config options +;; memory: doesn't have any config yet +;; file: session file path, e.g. `data/sessions` +;; redis: `redis://127.0.0.1:6379/0?pool_size=100&idle_timeout=180s` (or `redis+cluster://127.0.0.1:6379/0?pool_size=100&idle_timeout=180s` for a Redis cluster) +;; mysql: go-sql-driver/mysql dsn config string, e.g. `root:password@/session_table` +;PROVIDER_CONFIG = data/sessions ; Relative paths will be made absolute against _`AppWorkPath`_. +;; +;; Session cookie name +;COOKIE_NAME = i_like_gitea +;; +;; If you use session in https only: true or false. If not set, it defaults to `true` if the ROOT_URL is an HTTPS URL. +;COOKIE_SECURE = +;; +;; Session GC time interval in seconds, default is 86400 (1 day) +;GC_INTERVAL_TIME = 86400 +;; +;; Session life time in seconds, default is 86400 (1 day) +;SESSION_LIFE_TIME = 86400 +;; +;; SameSite settings. Either "none", "lax", or "strict" +;SAME_SITE=lax + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[picture] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;AVATAR_UPLOAD_PATH = data/avatars +;REPOSITORY_AVATAR_UPLOAD_PATH = data/repo-avatars +;; +;; How Gitea deals with missing repository avatars +;; none = no avatar will be displayed; random = random avatar will be displayed; image = default image will be used +;REPOSITORY_AVATAR_FALLBACK = none +;REPOSITORY_AVATAR_FALLBACK_IMAGE = /img/repo_default.png +;; +;; Max Width and Height of uploaded avatars. +;; This is to limit the amount of RAM used when resizing the image. +;AVATAR_MAX_WIDTH = 4096 +;AVATAR_MAX_HEIGHT = 4096 +;; +;; The multiplication factor for rendered avatar images. +;; Larger values result in finer rendering on HiDPI devices. +;AVATAR_RENDERED_SIZE_FACTOR = 2 +;; +;; Maximum allowed file size for uploaded avatars. +;; This is to limit the amount of RAM used when resizing the image. +;AVATAR_MAX_FILE_SIZE = 1048576 +;; +;; If the uploaded file is not larger than this byte size, the image will be used as is, without resizing/converting. +;AVATAR_MAX_ORIGIN_SIZE = 262144 +;; +;; Chinese users can choose "duoshuo" +;; or a custom avatar source, like: http://cn.gravatar.com/avatar/ +;GRAVATAR_SOURCE = gravatar +;; +;; This value will always be true in offline mode. +;DISABLE_GRAVATAR = false +;; +;; Federated avatar lookup uses DNS to discover avatar associated +;; with emails, see https://www.libravatar.org +;; This value will always be false in offline mode or when Gravatar is disabled. +;ENABLE_FEDERATED_AVATAR = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[attachment] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Whether issue and pull request attachments are enabled. Defaults to `true` +;ENABLED = true +;; +;; Comma-separated list of allowed file extensions (`.zip`), mime types (`text/plain`) or wildcard type (`image/*`, `audio/*`, `video/*`). Empty value or `*/*` allows all types. +;ALLOWED_TYPES = .csv,.docx,.fodg,.fodp,.fods,.fodt,.gif,.gz,.jpeg,.jpg,.log,.md,.mov,.mp4,.odf,.odg,.odp,.ods,.odt,.patch,.pdf,.png,.pptx,.svg,.tgz,.txt,.webm,.xls,.xlsx,.zip +;; +;; Max size of each file. Defaults to 2048MB +;MAX_SIZE = 2048 +;; +;; Max number of files per upload. Defaults to 5 +;MAX_FILES = 5 +;; +;; Storage type for attachments, `local` for local disk or `minio` for s3 compatible +;; object storage service, default is `local`. +;STORAGE_TYPE = local +;; +;; Allows the storage driver to redirect to authenticated URLs to serve files directly +;; Currently, only `minio` and `azureblob` is supported. +;SERVE_DIRECT = false +;; +;; Path for attachments. Defaults to `attachments`. Only available when STORAGE_TYPE is `local` +;; Relative paths will be resolved to `${AppDataPath}/${attachment.PATH}` +;PATH = attachments +;; +;; Minio endpoint to connect only available when STORAGE_TYPE is `minio` +;MINIO_ENDPOINT = localhost:9000 +;; +;; Minio accessKeyID to connect only available when STORAGE_TYPE is `minio`. +;; If not provided and STORAGE_TYPE is `minio`, will search for credentials in known +;; environment variables (MINIO_ACCESS_KEY_ID, AWS_ACCESS_KEY_ID), credentials files +;; (~/.mc/config.json, ~/.aws/credentials), and EC2 instance metadata. +;MINIO_ACCESS_KEY_ID = +;; +;; Minio secretAccessKey to connect only available when STORAGE_TYPE is `minio` +;MINIO_SECRET_ACCESS_KEY = +;; +;; Minio bucket to store the attachments only available when STORAGE_TYPE is `minio` +;MINIO_BUCKET = gitea +;; +;; Minio location to create bucket only available when STORAGE_TYPE is `minio` +;MINIO_LOCATION = us-east-1 +;; +;; Minio base path on the bucket only available when STORAGE_TYPE is `minio` +;MINIO_BASE_PATH = attachments/ +;; +;; Minio enabled ssl only available when STORAGE_TYPE is `minio` +;MINIO_USE_SSL = false +;; +;; Minio skip SSL verification available when STORAGE_TYPE is `minio` +;MINIO_INSECURE_SKIP_VERIFY = false +;; +;; Minio checksum algorithm: default (for MinIO or AWS S3) or md5 (for Cloudflare or Backblaze) +;MINIO_CHECKSUM_ALGORITHM = default +;; +;; Minio bucket lookup method defaults to auto mode; set it to `dns` for virtual host style or `path` for path style, only available when STORAGE_TYPE is `minio` +;MINIO_BUCKET_LOOKUP_TYPE = auto +;; Azure Blob endpoint to connect only available when STORAGE_TYPE is `azureblob`, +;; e.g. https://accountname.blob.core.windows.net or http://127.0.0.1:10000/devstoreaccount1 +;AZURE_BLOB_ENDPOINT = +;; +;; Azure Blob account name to connect only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_ACCOUNT_NAME = +;; +;; Azure Blob account key to connect only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_ACCOUNT_KEY = +;; +;; Azure Blob container to store the attachments only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_CONTAINER = gitea +;; +;; override the azure blob base path if storage type is azureblob +;AZURE_BLOB_BASE_PATH = attachments/ + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[time] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Location the UI time display i.e. Asia/Shanghai +;; Empty means server's location setting +;DEFAULT_UI_LOCATION = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Common settings +;; +;; Setting this to true will enable all cron tasks periodically with default settings. +;ENABLED = false +;; Setting this to true will run all enabled cron tasks when Gitea starts. +;RUN_AT_START = false +;; +;; Note: ``SCHEDULE`` accept formats +;; - Full crontab specs, e.g. "* * * * * ?" +;; - Descriptors, e.g. "@midnight", "@every 1h30m" +;; See more: https://pkg.go.dev/github.com/gogs/cron@v0.0.0-20171120032916-9f6c956d3e14 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Basic cron tasks - enabled by default +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Clean up old repository archives +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.archive_cleanup] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Whether to enable the job +;ENABLED = true +;; Whether to always run at least once at start up time (if ENABLED) +;RUN_AT_START = true +;; Whether to emit notice on successful execution too +;NOTICE_ON_SUCCESS = false +;; Time interval for job to run +;SCHEDULE = @midnight +;; Archives created more than OLDER_THAN ago are subject to deletion +;OLDER_THAN = 24h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Update mirrors +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.update_mirrors] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;SCHEDULE = @every 10m +;; Enable running Update mirrors task periodically. +;ENABLED = true +;; Run Update mirrors task when Gitea starts. +;RUN_AT_START = false +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;; Limit the number of mirrors added to the queue to this number +;; (negative values mean no limit, 0 will result in no result in no mirrors being queued effectively disabling pull mirror updating.) +;PULL_LIMIT=50 +;; Limit the number of mirrors added to the queue to this number +;; (negative values mean no limit, 0 will result in no mirrors being queued effectively disabling push mirror updating) +;PUSH_LIMIT=50 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Repository health check +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.repo_health_check] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;SCHEDULE = @midnight +;; Enable running Repository health check task periodically. +;ENABLED = true +;; Run Repository health check task when Gitea starts. +;RUN_AT_START = false +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;TIMEOUT = 60s +;; Arguments for command 'git fsck', e.g. "--unreachable --tags" +;; see more on http://git-scm.com/docs/git-fsck +;ARGS = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check repository statistics +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.check_repo_stats] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Enable running check repository statistics task periodically. +;ENABLED = true +;; Run check repository statistics task when Gitea starts. +;RUN_AT_START = true +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @midnight + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.update_migration_poster_id] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Update migrated repositories' issues and comments' posterid, it will always attempt synchronization when the instance starts. +;ENABLED = true +;; Update migrated repositories' issues and comments' posterid when starting server (default true) +;RUN_AT_START = true +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;; Interval as a duration between each synchronization. (default every 24h) +;SCHEDULE = @midnight + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Synchronize external user data (only LDAP user synchronization is supported) +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.sync_external_users] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = true +;; Synchronize external user data when starting server (default false) +;RUN_AT_START = false +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;; Interval as a duration between each synchronization (default every 24h) +;SCHEDULE = @midnight +;; Create new users, update existing user data and disable users that are not in external source anymore (default) +;; or only create new users if UPDATE_EXISTING is set to false +;UPDATE_EXISTING = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Cleanup expired actions assets +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.cleanup_actions] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = true +;RUN_AT_START = true +;SCHEDULE = @midnight + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Clean-up deleted branches +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.deleted_branches_cleanup] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = true +;; Clean-up deleted branches when starting server (default true) +;RUN_AT_START = true +;; Notice if not success +;NOTICE_ON_SUCCESS = false +;; Interval as a duration between each synchronization (default every 24h) +;SCHEDULE = @midnight +;; deleted branches than OLDER_THAN ago are subject to deletion +;OLDER_THAN = 24h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Cleanup hook_task table +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.cleanup_hook_task_table] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Whether to enable the job +;ENABLED = true +;; Whether to always run at start up time (if ENABLED) +;RUN_AT_START = false +;; Time interval for job to run +;SCHEDULE = @midnight +;; OlderThan or PerWebhook. How the records are removed, either by age (i.e. how long ago hook_task record was delivered) or by the number to keep per webhook (i.e. keep most recent x deliveries per webhook). +;CLEANUP_TYPE = OlderThan +;; If CLEANUP_TYPE is set to OlderThan, then any delivered hook_task records older than this expression will be deleted. +;OLDER_THAN = 168h +;; If CLEANUP_TYPE is set to PerWebhook, this is number of hook_task records to keep for a webhook (i.e. keep the most recent x deliveries). +;NUMBER_TO_KEEP = 10 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Cleanup expired packages +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.cleanup_packages] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Whether to enable the job +;ENABLED = true +;; Whether to always run at least once at start up time (if ENABLED) +;RUN_AT_START = true +;; Whether to emit notice on successful execution too +;NOTICE_ON_SUCCESS = false +;; Time interval for job to run +;SCHEDULE = @midnight +;; Unreferenced blobs created more than OLDER_THAN ago are subject to deletion +;OLDER_THAN = 24h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +; Extended cron task - not enabled by default +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete all unactivated accounts +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_inactive_accounts] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @annually +;OLDER_THAN = 168h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete all repository archives +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_repo_archives] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @annually; + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Garbage collect all repositories +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.git_gc_repos] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h +;TIMEOUT = 60s +;; Arguments for command 'git gc' +;; The default value is same with [git] -> GC_ARGS +;ARGS = + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Update the '.ssh/authorized_keys' file with Gitea SSH keys +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.resync_all_sshkeys] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Resynchronize pre-receive, update and post-receive hooks of all repositories. +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.resync_all_hooks] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Reinitialize all missing Git repositories for which records exist +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.reinit_missing_repos] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete all repositories missing their Git files +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_missing_repos] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete generated repository avatars +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_generated_repository_avatars] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 72h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete all old actions from database +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_old_actions] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NOTICE_ON_SUCCESS = false +;SCHEDULE = @every 168h +;OLDER_THAN = 8760h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check for new Gitea versions +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.update_checker] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = true +;RUN_AT_START = false +;ENABLE_SUCCESS_NOTICE = false +;SCHEDULE = @every 168h +;HTTP_ENDPOINT = https://dl.gitea.com/gitea/version.json + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Delete all old system notices from database +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.delete_old_system_notices] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;RUN_AT_START = false +;NO_SUCCESS_NOTICE = false +;SCHEDULE = @every 168h +;OLDER_THAN = 8760h + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Garbage collect LFS pointers in repositories +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[cron.gc_lfs] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;ENABLED = false +;; Garbage collect LFS pointers in repositories (default false) +;RUN_AT_START = false +;; Interval as a duration between each gc run (default every 24h) +;SCHEDULE = @every 24h +;; Only attempt to garbage collect LFSMetaObjects older than this (default 7 days) +;OLDER_THAN = 168h +;; Only attempt to garbage collect LFSMetaObjects that have not been attempted to be garbage collected for this long (default 3 days) +;LAST_UPDATED_MORE_THAN_AGO = 72h +; Minimum number of stale LFSMetaObjects to check per repo. Set to `0` to always check all. +;NUMBER_TO_CHECK_PER_REPO = 100 +;Check at least this proportion of LFSMetaObjects per repo. (This may cause all stale LFSMetaObjects to be checked.) +;PROPORTION_TO_CHECK_PER_REPO = 0.6 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[mirror] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Enables the mirror functionality. Set to **false** to disable all mirrors. Pre-existing mirrors remain valid but won't be updated; may be converted to regular repo. +;ENABLED = true +;; Disable the creation of **new** pull mirrors. Pre-existing mirrors remain valid. Will be ignored if `mirror.ENABLED` is `false`. +;DISABLE_NEW_PULL = false +;; Disable the creation of **new** push mirrors. Pre-existing mirrors remain valid. Will be ignored if `mirror.ENABLED` is `false`. +;DISABLE_NEW_PUSH = false +;; Default interval as a duration between each check +;DEFAULT_INTERVAL = 8h +;; Min interval as a duration must be > 1m +;MIN_INTERVAL = 10m + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[api] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Enables the API documentation endpoints (/api/swagger, /api/v1/swagger, …). True or false. +;ENABLE_SWAGGER = true +;; Max number of items in a page +;MAX_RESPONSE_ITEMS = 50 +;; Default paging number of api +;DEFAULT_PAGING_NUM = 30 +;; Default and maximum number of items per page for git trees api +;DEFAULT_GIT_TREES_PER_PAGE = 1000 +;; Default max size of a blob returned by the blobs API (default is 10MiB) +;DEFAULT_MAX_BLOB_SIZE = 10485760 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[i18n] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; The first locale will be used as the default if user browser's language doesn't match any locale in the list. +;LANGS = en-US,zh-CN,zh-HK,zh-TW,de-DE,fr-FR,nl-NL,lv-LV,ru-RU,uk-UA,ja-JP,es-ES,pt-BR,pt-PT,pl-PL,bg-BG,it-IT,fi-FI,tr-TR,cs-CZ,sv-SE,ko-KR,el-GR,fa-IR,hu-HU,id-ID,ml-IN +;NAMES = English,简体中文,繁體中文(香港),繁體中文(台灣),Deutsch,Français,Nederlands,Latviešu,Русский,Українська,日本語,Español,Português do Brasil,Português de Portugal,Polski,Български,Italiano,Suomi,Türkçe,Čeština,Српски,Svenska,한국어,Ελληνικά,فارسی,Magyar nyelv,Bahasa Indonesia,മലയാളം + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[highlight.mapping] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Extension mapping to highlight class +;; e.g. .toml=ini + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[other] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Show version information about Gitea and Go in the footer +;SHOW_FOOTER_VERSION = true +;; Show template execution time in the footer +;SHOW_FOOTER_TEMPLATE_LOAD_TIME = true +;; Show the "powered by" text in the footer +;SHOW_FOOTER_POWERED_BY = true +;; Generate sitemap. Defaults to `true`. +;ENABLE_SITEMAP = true +;; Enable/Disable RSS/Atom feed +;ENABLE_FEED = true + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[markup] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Set the maximum number of characters in a mermaid source. (Set to -1 to disable limits) +;MERMAID_MAX_SOURCE_CHARACTERS = 5000 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[markup.sanitizer.1] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; The following keys can appear once to define a sanitation policy rule. +;; This section can appear multiple times by adding a unique alphanumeric suffix to define multiple rules. +;; e.g., [markup.sanitizer.1] -> [markup.sanitizer.2] -> [markup.sanitizer.TeX] +;ELEMENT = span +;ALLOW_ATTR = class +;REGEXP = ^(info|warning|error)$ +;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Other markup formats e.g. asciidoc +;; +;; uncomment and enable the below section. +;; (You can add other markup formats by copying the section and adjusting +;; the section name suffix "asciidoc" to something else.) +;[markup.asciidoc] +;ENABLED = false +;; List of file extensions that should be rendered by an external command +;FILE_EXTENSIONS = .adoc,.asciidoc +;; External command to render all matching extensions +;RENDER_COMMAND = "asciidoc --out-file=- -" +;; Don't pass the file on STDIN, pass the filename as argument instead. +;IS_INPUT_FILE = false +;; How the content will be rendered. +;; * sanitized: Sanitize the content and render it inside current page, default to only allow a few HTML tags and attributes. Customized sanitizer rules can be defined in [markup.sanitizer.*] . +;; * no-sanitizer: Disable the sanitizer and render the content inside current page. It's **insecure** and may lead to XSS attack if the content contains malicious code. +;; * iframe: Render the content in a separate standalone page and embed it into current page by iframe. The iframe is in sandbox mode with same-origin disabled, and the JS code are safely isolated from parent page. +;RENDER_CONTENT_MODE=sanitized + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[metrics] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Enables metrics endpoint. True or false; default is false. +;ENABLED = false +;; If you want to add authorization, specify a token here +;TOKEN = +;; Enable issue by label metrics; default is false +;ENABLED_ISSUE_BY_LABEL = false +;; Enable issue by repository metrics; default is false +;ENABLED_ISSUE_BY_REPOSITORY = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[migrations] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Max attempts per http/https request on migrations. +;MAX_ATTEMPTS = 3 +;; +;; Backoff time per http/https request retry (seconds) +;RETRY_BACKOFF = 3 +;; +;; Allowed domains for migrating, default is blank. Blank means everything will be allowed. +;; Multiple domains could be separated by commas. +;; Wildcard is supported: "github.com, *.github.com" +;ALLOWED_DOMAINS = +;; +;; Blocklist for migrating, default is blank. Multiple domains could be separated by commas. +;; When ALLOWED_DOMAINS is not blank, this option has a higher priority to deny domains. +;; Wildcard is supported. +;BLOCKED_DOMAINS = +;; +;; Allow private addresses defined by RFC 1918, RFC 1122, RFC 4632 and RFC 4291 (false by default) +;; If a domain is allowed by ALLOWED_DOMAINS, this option will be ignored. +;ALLOW_LOCALNETWORKS = false + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[federation] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Enable/Disable federation capabilities +;ENABLED = false +;; +;; Enable/Disable user statistics for nodeinfo if federation is enabled +;SHARE_USER_STATISTICS = true +;; +;; Maximum federation request and response size (MB) +;MAX_SIZE = 4 +;; +;; WARNING: Changing the settings below can break federation. +;; +;; HTTP signature algorithms +;ALGORITHMS = rsa-sha256, rsa-sha512, ed25519 +;; +;; HTTP signature digest algorithm +;DIGEST_ALGORITHM = SHA-256 +;; +;; GET headers for federation requests +;GET_HEADERS = (request-target), Date +;; +;; POST headers for federation requests +;POST_HEADERS = (request-target), Date, Digest + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[packages] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Enable/Disable package registry capabilities +;ENABLED = true +;; +;STORAGE_TYPE = local +;; override the minio base path if storage type is minio +;MINIO_BASE_PATH = packages/ +;; override the azure blob base path if storage type is azureblob +;AZURE_BLOB_BASE_PATH = packages/ +;; Allows the storage driver to redirect to authenticated URLs to serve files directly +;; Currently, only `minio` and `azureblob` is supported. +;SERVE_DIRECT = false +;; +;; Path for chunked uploads. Defaults to APP_DATA_PATH + `tmp/package-upload` +;CHUNKED_UPLOAD_PATH = tmp/package-upload +;; +;; Maximum count of package versions a single owner can have (`-1` means no limits) +;LIMIT_TOTAL_OWNER_COUNT = -1 +;; Maximum size of packages a single owner can use (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_TOTAL_OWNER_SIZE = -1 +;; Maximum size of an Alpine upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_ALPINE = -1 +;; Maximum size of a Cargo upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CARGO = -1 +;; Maximum size of a Chef upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CHEF = -1 +;; Maximum size of a Composer upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_COMPOSER = -1 +;; Maximum size of a Conan upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CONAN = -1 +;; Maximum size of a Conda upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CONDA = -1 +;; Maximum size of a Container upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CONTAINER = -1 +;; Maximum size of a CRAN upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_CRAN = -1 +;; Maximum size of a Debian upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_DEBIAN = -1 +;; Maximum size of a Generic upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_GENERIC = -1 +;; Maximum size of a Go upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_GO = -1 +;; Maximum size of a Helm upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_HELM = -1 +;; Maximum size of a Maven upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_MAVEN = -1 +;; Maximum size of a npm upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_NPM = -1 +;; Maximum size of a NuGet upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_NUGET = -1 +;; Maximum size of a Pub upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_PUB = -1 +;; Maximum size of a PyPI upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_PYPI = -1 +;; Maximum size of a RPM upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_RPM = -1 +;; Maximum size of a RubyGems upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_RUBYGEMS = -1 +;; Maximum size of a Swift upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_SWIFT = -1 +;; Maximum size of a Vagrant upload (`-1` means no limits, format `1000`, `1 MB`, `1 GiB`) +;LIMIT_SIZE_VAGRANT = -1 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; default storage for attachments, lfs and avatars +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[storage] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; storage type +;STORAGE_TYPE = local + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; repo-archive storage will override storage +;; +;[repo-archive] +;STORAGE_TYPE = local +;; +;; Where your lfs files reside, default is data/lfs. +;PATH = data/repo-archive +;; +;; override the minio base path if storage type is minio +;MINIO_BASE_PATH = repo-archive/ +;; override the azure blob base path if storage type is azureblob +;AZURE_BLOB_BASE_PATH = repo-archive/ + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; settings for repository archives, will override storage setting +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[storage.repo-archive] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; storage type +;STORAGE_TYPE = local + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; lfs storage will override storage +;; +;[lfs] +;STORAGE_TYPE = local +;; +;; Where your lfs files reside, default is data/lfs. +;PATH = data/lfs +;; +;; Allows the storage driver to redirect to authenticated URLs to serve files directly +;; Currently, only `minio` and `azureblob` is supported. +;SERVE_DIRECT = false +;; +;; override the minio base path if storage type is minio +;MINIO_BASE_PATH = lfs/ +;; +;; override the azure blob base path if storage type is azureblob +;AZURE_BLOB_BASE_PATH = lfs/ + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; settings for packages, will override storage setting +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[storage.packages] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; storage type +;STORAGE_TYPE = local + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; customize storage +;[storage.minio] +;STORAGE_TYPE = minio +;; +;; Minio endpoint to connect only available when STORAGE_TYPE is `minio` +;MINIO_ENDPOINT = localhost:9000 +;; +;; Minio accessKeyID to connect only available when STORAGE_TYPE is `minio`. +;; If not provided and STORAGE_TYPE is `minio`, will search for credentials in known +;; environment variables (MINIO_ACCESS_KEY_ID, AWS_ACCESS_KEY_ID), credentials files +;; (~/.mc/config.json, ~/.aws/credentials), and EC2 instance metadata. +;MINIO_ACCESS_KEY_ID = +;; +;; Minio secretAccessKey to connect only available when STORAGE_TYPE is `minio` +;MINIO_SECRET_ACCESS_KEY = +;; +;; Minio bucket to store the attachments only available when STORAGE_TYPE is `minio` +;MINIO_BUCKET = gitea +;; +;; Minio location to create bucket only available when STORAGE_TYPE is `minio` +;MINIO_LOCATION = us-east-1 +;; +;; Minio enabled ssl only available when STORAGE_TYPE is `minio` +;MINIO_USE_SSL = false +;; +;; Minio skip SSL verification available when STORAGE_TYPE is `minio` +;MINIO_INSECURE_SKIP_VERIFY = false +;; +;; Minio bucket lookup method defaults to auto mode; set it to `dns` for virtual host style or `path` for path style, only available when STORAGE_TYPE is `minio` +;MINIO_BUCKET_LOOKUP_TYPE = auto + +;[storage.azureblob] +;STORAGE_TYPE = azureblob +;; +;; Azure Blob endpoint to connect only available when STORAGE_TYPE is `azureblob`, +;; e.g. https://accountname.blob.core.windows.net or http://127.0.0.1:10000/devstoreaccount1 +;AZURE_BLOB_ENDPOINT = +;; +;; Azure Blob account name to connect only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_ACCOUNT_NAME = +;; +;; Azure Blob account key to connect only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_ACCOUNT_KEY = +;; +;; Azure Blob container to store the attachments only available when STORAGE_TYPE is `azureblob` +;AZURE_BLOB_CONTAINER = gitea + +;[proxy] +;; Enable the proxy, all requests to external via HTTP will be affected +;PROXY_ENABLED = false +;; Proxy server URL, support http://, https//, socks://, blank will follow environment http_proxy/https_proxy/no_proxy +;PROXY_URL = +;; Comma separated list of host names requiring proxy. Glob patterns (*) are accepted; use ** to match all hosts. +;PROXY_HOSTS = + +; [actions] +;; Enable/Disable actions capabilities +;ENABLED = true +;; +;; Default platform to get action plugins, `github` for `https://github.com`, `self` for the current Gitea instance. +;DEFAULT_ACTIONS_URL = github +;; Default artifact retention time in days. Artifacts could have their own retention periods by setting the `retention-days` option in `actions/upload-artifact` step. +;ARTIFACT_RETENTION_DAYS = 90 +;; Timeout to stop the task which have running status, but haven't been updated for a long time +;ZOMBIE_TASK_TIMEOUT = 10m +;; Timeout to stop the tasks which have running status and continuous updates, but don't end for a long time +;ENDLESS_TASK_TIMEOUT = 3h +;; Timeout to cancel the jobs which have waiting status, but haven't been picked by a runner for a long time +;ABANDONED_JOB_TIMEOUT = 24h +;; Strings committers can place inside a commit message or PR title to skip executing the corresponding actions workflow +;SKIP_WORKFLOW_STRINGS = [skip ci],[ci skip],[no ci],[skip actions],[actions skip] + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; settings for action logs, will override storage setting +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;[storage.actions_log] +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; storage type +;STORAGE_TYPE = local diff --git a/dockge/gitea/docker-compose.yml b/dockge/gitea/docker-compose.yml new file mode 100644 index 00000000..c9a73951 --- /dev/null +++ b/dockge/gitea/docker-compose.yml @@ -0,0 +1,43 @@ +networks: + 1panel-network: + external: true +services: + gitea: + container_name: gitea + env_file: + - ./envs/global.env + - ./envs/gitea.env + - .env + environment: + - USER_UID=1000 + - USER_GID=1000 + - DISABLE_SSH=false + - GITEA__api__ENABLE_SWAGGER=false + - DB_HOST=${DB_HOSTNAME}:${DB_PORT} + - GITEA__mailer__ENABLED=${MAILER_ENABLED} + - GITEA__mailer__SMTP_ADDR=${MAILER_SMTP_ADDR} + - GITEA__mailer__SMTP_PORT=${MAILER_SMTP_PORT} + - GITEA__mailer__USER=${MAILER_USER} + - GITEA__mailer__PASSWD=${MAILER_PASSWD} + - GITEA__mailer__FROM=${MAILER_FROM} + - GITEA__mailer__SUBJECT_PREFIX=${MAILER_SUBJECT_PREFIX} + - GITEA__proxy__PROXY_ENABLED=${PROXY_ENABLED} + - GITEA__proxy__PROXY_URL=${PROXY_URL} + - GITEA__proxy__PROXY_HOSTS=${PROXY_HOSTS} + - GITEA__webhook__PROXY_URL=${PROXY_URL} + - GITEA__webhook__PROXY_HOSTS=${PROXY_HOSTS} + - GITEA__git.config__http.proxy=${PROXY_URL} + - GITEA__git.config__https.proxy=${PROXY_URL} + image: gitea/gitea:1.22.4 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + - ${PANEL_APP_PORT_SSH}:22 + restart: always + volumes: + - ${GITEA_ROOT_PATH}/data:/data + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro diff --git a/dockge/gitea/envs/default.env b/dockge/gitea/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/gitea/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/gitea/envs/gitea.env b/dockge/gitea/envs/gitea.env new file mode 100644 index 00000000..1ead1944 --- /dev/null +++ b/dockge/gitea/envs/gitea.env @@ -0,0 +1,36 @@ +USER_UID=1000 +USER_GID=1000 +APP_NAME="Gitea" +RUN_MODE=prod +DOMAIN=localhost +SSH_DOMAIN=localhost +SSH_PORT=22 +SSH_LISTEN_PORT=22 +DISABLE_SSH=false +HTTP_PORT=3000 +ROOT_URL="" +LFS_START_SERVER=true +DB_TYPE=sqlite3 +DB_HOST="" +DB_NAME="" +DB_USER="" +DB_PASSWD="" +INSTALL_LOCK=false +SECRET_KEY="" +DISABLE_REGISTRATION=false +REQUIRE_SIGNIN_VIEW=false +GITEA__time__DEFAULT_UI_LOCATION=Asia/Shanghai +GITEA__migrations__ALLOW_LOCALNETWORKS=true +GITEA__api__ENABLE_SWAGGER=false +GITEA__ui.meta__AUTHOR=新疆萌森软件开发工作室 +GITEA__ui.meta__DESCRIPTION=轻量级代码托管解决方案,支持自建和托管服务。 +GITEA__ui.meta__KEYWORDS=git,gitea,github,gitlab,gitee,code +GITEA__security__LOGIN_REMEMBER_DAYS=3 +GITEA__server__LOCAL_ROOT_URL=http://localhost:3000/ +GITEA__webhook__ALLOWED_HOST_LIST=* +GITEA__picture__REPOSITORY_AVATAR_FALLBACK=random +GITEA__attachment__MAX_SIZE=1024 +GITEA__git__MAX_GIT_DIFF_LINES=10000 +GITEA__git.config__http.postBuffer=2147483648 +GITEA__git.config__core.compression=0 +GITEA__other__SHOW_FOOTER_POWERED_BY=false diff --git a/dockge/gitea/envs/global.env b/dockge/gitea/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/gitea/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/halo/.env b/dockge/halo/.env new file mode 100644 index 00000000..5efbf979 --- /dev/null +++ b/dockge/halo/.env @@ -0,0 +1,33 @@ +# 数据库服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化路径 [必填] +HALO_ROOT_PATH=/home/halo + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8090 + +# 公网访问地址 [必填] +HALO_EXTERNAL_URL=http://127.0.0.1:8090 + +# 保持登录时间 [必填] +HALO_REMEMBER_ME_TOKEN_VALIDITY=14d + +# 数据库 类型 [必填] +DB_TYPE=postgresql + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 名称 [必填] +DB_NAME=halo + +# 数据库 用户名 [必填] +DB_USER=halo + +# 数据库 密码 [必填] +DB_USER_PASSWORD= + diff --git a/dockge/halo/docker-compose.yml b/dockge/halo/docker-compose.yml new file mode 100644 index 00000000..7cb29544 --- /dev/null +++ b/dockge/halo/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true +services: + halo: + command: + - --spring.r2dbc.url=r2dbc:pool:${DB_TYPE}://${DB_HOSTNAME}:${DB_PORT}/${DB_NAME} + - --spring.r2dbc.username=${DB_USER} + - --spring.r2dbc.password=${DB_USER_PASSWORD} + - --spring.sql.init.platform=${DB_TYPE} + - --halo.external-url=${HALO_EXTERNAL_URL} + - --halo.security.remember-me.token-validity=${HALO_REMEMBER_ME_TOKEN_VALIDITY} + container_name: halo + image: halohub/halo:2.20.10 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8090 + restart: always + volumes: + - ${HALO_ROOT_PATH}/data:/root/.halo2 diff --git a/dockge/halo/envs/default.env b/dockge/halo/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/halo/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/halo/envs/global.env b/dockge/halo/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/halo/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/iframely/.env b/dockge/iframely/.env new file mode 100644 index 00000000..7ca4173f --- /dev/null +++ b/dockge/iframely/.env @@ -0,0 +1,9 @@ +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8061 + +# HTTP 代理 +HTTP_PROXY= + +# 最大重定向次数 +MAX_REDIRECTS=4 + diff --git a/dockge/iframely/config/config.local.js b/dockge/iframely/config/config.local.js new file mode 100644 index 00000000..cc3ff0c0 --- /dev/null +++ b/dockge/iframely/config/config.local.js @@ -0,0 +1,231 @@ +import {fileURLToPath} from 'url'; +import {dirname} from 'path'; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +export default { + DEBUG: false, + RICH_LOG_ENABLED: false, + baseAppUrl: process.env.BASE_APP_URL || "http://localhost:8061", + relativeStaticUrl: "/r", + SKIP_IFRAMELY_RENDERS: true, + GROUP_LINKS: true, + MAX_REDIRECTS: parseInt(process.env.MAX_REDIRECTS, 10) || 4, + SKIP_OEMBED_RE_LIST: [ + // /^https?:\/\/yourdomain\.com\//, + ], + + /* + GENERATE_LINK_PARAMS: { + disableSizeWrapper: true + }, + */ + + port: 8061, + host: '0.0.0.0', + + /* + ssl: { + key: ssl_key, + cert: ssl_cert, + port: 443 + }, + */ + + CACHE_ENGINE: 'node-cache', + CACHE_TTL: 0, + + /* + allowedOrigins: [ + "*", + "http://another_domain.com" + ], + */ + + RESPONSE_TIMEOUT: 5 * 1000, + + ADD_OEMBED_PARAMS: [{ + re: [ + /^https:\/\/graph\.facebook\.com\/v[0-9\.]+\/instagram_oembed/i + ], + params: { + // TODO: get your access Insagtam token as described + // use `{app-id}|{app secret}` as access token + // on https://developers.facebook.com/docs/instagram/oembed/ + access_token: '', + hidecaption: true + } + }, { + re: [/^https:\/\/graph\.facebook\.com\/v[0-9\.]+\/oembed_page/i], + params: { + // TODO: get your access token as described + // use `{app-id}|{app secret}` as access token + // on https://developers.facebook.com/docs/plugins/oembed + access_token: '', + show_posts: 0, + show_facepile: 0, + maxwidth: 600 + } + }, { + // match i=user or i=moment or i=timeline to configure these types invidually + // see params spec at https://dev.twitter.com/web/embedded-timelines/oembed + re: [/^https?:\/\/publish\.twitter\.com\/oembed\?i=user/i], + params: { + limit: 1, + maxwidth: 600 + } + }, { + // Facebook https://developers.facebook.com/docs/plugins/oembed/ + re: [/^https:\/\/graph\.facebook\.com\/v[0-9\.]+\/oembed_/i], + params: { + // TODO: get your access token as described + // use `{app-id}|{app secret}` as access token + // on https://developers.facebook.com/docs/plugins/oembed + access_token: '', + // Add any other optional params, like skip script tag and fb-root div + // omitscript: true + } + }], + + /* + PROXY: [{ + re: [/^https?:\/\/www\.domain\.com/], + + // Either `proxy`, or `proxy_url`, or none. + proxy: true, // Will fetch URL via echo service configured as PROXY_URL. See below. + // proxy_url: 'http://1.2.3.4:8080?url={url}', // Will fetch URL via this exact echo service, see below. + + user_agent: 'CHANGE YOUR AGENT', + headers: { + // HTTP headers + // Overrides previous params if overlapped. + }, + cache_ttl: 3600 // in seconds, cache response for 1 hour. + }], + + // Proxy now requires an echo service endpoint. + // See #354 and example code at + // https://gist.github.com/nleush/7916ee89f7b8d6f0cd478d7335702139 + PROXY_URL: 'http://1.2.3.4:8080?url={url}', // Iframely will add `?url=...` to this endpoint + */ + + providerOptions: { + locale: "en_US", + "twitter": { + "max-width": 550, + "min-width": 250, + hide_media: false, + hide_thread: false, + omit_script: false, + center: false, + // dnt: true, + cache_ttl: 100 * 365 * 24 * 3600 + }, + readability: { + enabled: false + // to enable description fallback to first paragraph + // allowPTagDescription: true + }, + images: { + loadSize: false, + checkFavicon: false + }, + tumblr: { + consumer_key: "INSERT YOUR VALUE" + // disables status embeds for images and videos - will return plain media + // media_only: true + }, + google: { + // https://developers.google.com/maps/documentation/embed/guide#api_key + maps_key: "INSERT YOUR VALUE" + }, + + /* + // Optional Camo Proxy to wrap all images: https://github.com/atmos/camo + camoProxy: { + camo_proxy_key: "INSERT YOUR VALUE", + camo_proxy_host: "INSERT YOUR VALUE" + // ssl_only: true // will only proxy non-ssl images + }, + */ + + youtube: { + // api_key: "INSERT YOUR VALUE", + // parts: [ "snippet", "player" ], + get_params: "?rel=0&showinfo=1", + fix_shorts_in_eu: true + }, + vimeo: { + get_params: "?byline=0&badge=0" + }, + soundcloud: { + old_player: true + }, + giphy: { + media_only: true + }, + bandcamp: { + get_params: '/size=large/bgcol=333333/linkcol=ffffff/artwork=small/transparent=true/', + media: { + album: { + height: 472, + 'max-width': 700 + }, + track: { + height: 120, + 'max-width': 700 + } + } + }, + // Docs: https://dev.twitch.tv/docs/embed/video-and-clips + /* + twitch: { + parent: 'jsbin.com, null.jsbin.com, localhost' + }, + */ + }, + + + /* + WHITELIST_WILDCARD: { + "twitter": { + "player": "allow", + "photo": "deny" + }, + "oembed": { + "video": "allow", + "photo": "allow", + "rich": "deny", + "link": "deny" + }, + "og": { + "video": ["allow", "ssl", "responsive"] + }, + "iframely": { + "survey": "allow", + "reader": "allow", + "player": "allow", + "image": "allow" + }, + "html-meta": { + "video": ["allow", "responsive"], + "promo": "allow" + } + } + */ + + IGNORE_DOMAINS_RE: [ + /^https?:\/\/127\.0\.0\.1/i, + /^https?:\/\/localhost/i, + /^https?:\/\/[^\/]+:\d+\/?/, + + // And this is AWS metadata service + // https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html + /^https?:\/\/169\.254\.169\.254/ + ], + + // Endpoint for prerender service, if you need it. Used to parse React apps. Very slow. + // Tested with https://github.com/prerender/prerender + // PRERENDER_URL: "https://domain/render?url=" +}; diff --git a/dockge/iframely/docker-compose.yml b/dockge/iframely/docker-compose.yml new file mode 100644 index 00000000..fab14675 --- /dev/null +++ b/dockge/iframely/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + iframely: + container_name: iframely + env_file: + - ./envs/global.env + - .env + environment: + - NODE_ENV=production + - PORT=8061 + - HOST=0.0.0.0 + - HTTPS_PROXY=${HTTP_PROXY} + image: qyg2297248353/iframely:v2.4.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8061 + restart: always + volumes: + - ./config/config.local.js:/iframely/config.local.js diff --git a/dockge/iframely/envs/default.env b/dockge/iframely/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/iframely/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/iframely/envs/global.env b/dockge/iframely/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/iframely/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/immich-machine-learning/.env b/dockge/immich-machine-learning/.env new file mode 100644 index 00000000..91116ad6 --- /dev/null +++ b/dockge/immich-machine-learning/.env @@ -0,0 +1,21 @@ +# 数据持久化路径 [必填] +IMMICH_ROOT_PATH=/home/immich-machine-learning + +# API 端口 [必填] +PANEL_APP_PORT_HTTP=2283 + +# 硬件驱动路径 [必填] +IMMICH_DRIVE_PATH=/dev/dri + +# 时区 [必填] +TZ=Asia/Shanghai + +# 机器学习 预加载模型 +MACHINE_LEARNING_PRELOAD__CLIP=XLM-Roberta-Large-Vit-B-16Plus + +# 人脸识别 预加载模型 +MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION=buffalo_l + +# Hugging Face 服务地址 +HF_ENDPOINT=https://hf-mirror.com + diff --git a/dockge/immich-machine-learning/docker-compose.yml b/dockge/immich-machine-learning/docker-compose.yml new file mode 100644 index 00000000..1753adb0 --- /dev/null +++ b/dockge/immich-machine-learning/docker-compose.yml @@ -0,0 +1,24 @@ +name: immich-machine-learning +networks: + 1panel-network: + external: true +services: + immich-machine-learning: + container_name: immich-machine-learning-immich-machine-learning + devices: + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + healthcheck: + disable: false + image: ghcr.io/immich-app/immich-machine-learning:v1.121.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3003 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/cache:/cache diff --git a/dockge/immich-machine-learning/envs/default.env b/dockge/immich-machine-learning/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/immich-machine-learning/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/immich-machine-learning/envs/global.env b/dockge/immich-machine-learning/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/immich-machine-learning/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/immich-server/.env b/dockge/immich-server/.env new file mode 100644 index 00000000..27aea550 --- /dev/null +++ b/dockge/immich-server/.env @@ -0,0 +1,48 @@ +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# 数据持久化路径 [必填] +IMMICH_ROOT_PATH=/home/immich-app + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2283 + +# 时区 [必填] +TZ=Asia/Shanghai + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 用户名 [必填] +DB_USERNAME=postgres + +# 数据库 密码 [必填] +DB_PASSWORD= + +# 数据库 名称 [必填] +DB_DATABASE_NAME=immich + +# Redis 主机 [必填] +REDIS_HOSTNAME=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 索引 [必填] +REDIS_DBINDEX=0 + +# Redis 用户名 +REDIS_USERNAME= + +# Redis 密码 +REDIS_PASSWORD= + +# 是否跳过目录检查 +IMMICH_IGNORE_MOUNT_CHECK_ERRORS=false + diff --git a/dockge/immich-server/docker-compose.yml b/dockge/immich-server/docker-compose.yml new file mode 100644 index 00000000..f13e5ac9 --- /dev/null +++ b/dockge/immich-server/docker-compose.yml @@ -0,0 +1,25 @@ +name: immich-server +networks: + 1panel-network: + external: true +services: + immich-server: + container_name: immich-server-immich-server + devices: + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + healthcheck: + disable: false + image: ghcr.io/immich-app/immich-server:v1.121.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2283 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/library:/usr/src/app/upload + - /etc/localtime:/etc/localtime diff --git a/dockge/immich-server/envs/default.env b/dockge/immich-server/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/immich-server/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/immich-server/envs/global.env b/dockge/immich-server/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/immich-server/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/immich/.env b/dockge/immich/.env new file mode 100644 index 00000000..a4e4ae28 --- /dev/null +++ b/dockge/immich/.env @@ -0,0 +1,54 @@ +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# 数据持久化路径 [必填] +IMMICH_ROOT_PATH=/home/immich-app + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2283 + +# 机器学习端口 [必填] +PANEL_APP_PORT_MACHINE_LEARNING=3003 + +# 数据库连接密码 [必填] +DB_PASSWORD= + +# 数据库 端口 [必填] +PANEL_APP_PORT_DB=5432 + +# 数据库 主机地址 [必填] +DB_HOSTNAME=immich-pg14-vectors + +# 数据库 用户名 [必填] +DB_USERNAME=postgres + +# 数据库 名称 [必填] +DB_DATABASE_NAME=immich + +# Redis 主机 [必填] +REDIS_HOSTNAME=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 索引 [必填] +REDIS_DBINDEX=0 + +# Redis 用户名 +REDIS_USERNAME= + +# Redis 密码 +REDIS_PASSWORD= + +# 机器学习 预加载模型 +MACHINE_LEARNING_PRELOAD__CLIP=XLM-Roberta-Large-Vit-B-16Plus + +# 人脸识别 预加载模型 +MACHINE_LEARNING_PRELOAD__FACIAL_RECOGNITION=buffalo_l + +# Hugging Face 服务地址 +HF_ENDPOINT=https://hf-mirror.com + +# 是否跳过目录检查 +IMMICH_IGNORE_MOUNT_CHECK_ERRORS=false + diff --git a/dockge/immich/docker-compose.yml b/dockge/immich/docker-compose.yml new file mode 100644 index 00000000..d6eb39a3 --- /dev/null +++ b/dockge/immich/docker-compose.yml @@ -0,0 +1,85 @@ +name: immich +networks: + 1panel-network: + external: true +services: + immich-machine-learning: + container_name: immich-machine-learning-immich + devices: &id001 + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + healthcheck: + disable: false + image: ghcr.io/immich-app/immich-machine-learning:v1.121.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_MACHINE_LEARNING}:3003 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/cache:/cache + immich-pg14-vectors: + command: + - postgres + - -c + - shared_preload_libraries=vectors.so + - -c + - search_path="$$user", public, vectors + - -c + - logging_collector=on + - -c + - max_wal_size=2GB + - -c + - shared_buffers=512MB + - -c + - wal_compression=on + container_name: pg14-vectors-immich + environment: + POSTGRES_DB: ${DB_DATABASE_NAME:-immich} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_USER: ${DB_USERNAME:-postgres} + healthcheck: + interval: 5m + start_interval: 30s + start_period: 5m + test: pg_isready --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' + || exit 1; Chksum="$$(psql --dbname='${DB_DATABASE_NAME}' --username='${DB_USERNAME}' + --tuples-only --no-align --command='SELECT COALESCE(SUM(checksum_failures), + 0) FROM pg_stat_database')"; echo "checksum failure count is $$Chksum"; [ + "$$Chksum" = '0' ] || exit 1 + image: tensorchord/pgvecto-rs:pg14-v0.2.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_DB:-5432}:5432 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/pg14/data:/var/lib/postgresql/data + immich-server: + container_name: immich-server-immich + depends_on: + - immich-pg14-vectors + devices: *id001 + env_file: + - ./envs/global.env + - .env + healthcheck: + disable: false + image: ghcr.io/immich-app/immich-server:v1.121.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2283 + restart: always + volumes: + - ${IMMICH_ROOT_PATH}/data/library:/usr/src/app/upload + - /etc/localtime:/etc/localtime diff --git a/dockge/immich/envs/default.env b/dockge/immich/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/immich/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/immich/envs/global.env b/dockge/immich/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/immich/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/iycms/.env b/dockge/iycms/.env new file mode 100644 index 00000000..e2d8dfce --- /dev/null +++ b/dockge/iycms/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +IYCMS_ROOT_PATH=/home/iycms + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=80 + +# 管理端口 [必填] +PANEL_APP_PORT_ADMIN=21007 + diff --git a/dockge/iycms/docker-compose.yml b/dockge/iycms/docker-compose.yml new file mode 100644 index 00000000..dd27dc32 --- /dev/null +++ b/dockge/iycms/docker-compose.yml @@ -0,0 +1,20 @@ +networks: + 1panel-network: + external: true +services: + iycms: + container_name: iycms + env_file: + - ./envs/global.env + - .env + image: qyg2297248353/iycms:v3.3.44 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + - ${PANEL_APP_PORT_ADMIN}:21007 + restart: always + volumes: + - ${IYCMS_ROOT_PATH}/iycms:/app/iycms diff --git a/dockge/iycms/envs/default.env b/dockge/iycms/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/iycms/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/iycms/envs/global.env b/dockge/iycms/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/iycms/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/iyuu-plus/.env b/dockge/iyuu-plus/.env new file mode 100644 index 00000000..219d88a8 --- /dev/null +++ b/dockge/iyuu-plus/.env @@ -0,0 +1,21 @@ +# 数据持久化路径 [必填] +IYUUCN_ROOT_PATH=/home/iyuuplus + +# WebUI 端口 (Nginx) [必填] +PANEL_APP_PORT_HTTP=8780 + +# WebUI 端口 (IYUU) +PANEL_APP_PORT_IYUU=8787 + +# WebUI 端口 (WS) +PANEL_APP_PORT_WS=3131 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/dockge/iyuu-plus/docker-compose.yml b/dockge/iyuu-plus/docker-compose.yml new file mode 100644 index 00000000..d119f8f7 --- /dev/null +++ b/dockge/iyuu-plus/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + iyuuplus: + container_name: iyuu-plus + image: iyuucn/iyuuplus-dev:latest + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8780 + - ${PANEL_APP_PORT_IYUU:-}:8787 + - ${PANEL_APP_PORT_WS:-}:3131 + restart: always + volumes: + - ${IYUUCN_ROOT_PATH}/iyuu:/iyuu + - ${IYUUCN_ROOT_PATH}/data:/data + - ${IYUUCN_ROOT_PATH}/qBittorrent:/qBittorrent + - ${IYUUCN_ROOT_PATH}/transmission:/transmission + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/iyuu-plus/envs/default.env b/dockge/iyuu-plus/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/iyuu-plus/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/iyuu-plus/envs/global.env b/dockge/iyuu-plus/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/iyuu-plus/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/jellyfin/.env b/dockge/jellyfin/.env new file mode 100644 index 00000000..d0720fd6 --- /dev/null +++ b/dockge/jellyfin/.env @@ -0,0 +1,21 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# 数据持久化路径 [必填] +JELLYFIN_ROOT_PATH=/home/jellyfin + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8096 + +# HTTP(s) 网络代理 +HTTP_SSL_PROXY= + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/dockge/jellyfin/docker-compose.yml b/dockge/jellyfin/docker-compose.yml new file mode 100644 index 00000000..f64614c1 --- /dev/null +++ b/dockge/jellyfin/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true +services: + jellyfin: + container_name: jellyfin + devices: + - /dev/dri:/dev/dri + environment: + - ROC_ENABLE_PRE_VEGA=1 + - HTTP_PROXY=${HTTP_PROXY:-} + - HTTPS_PROXY=${HTTP_PROXY:-} + - NO_PROXY=localhost,127.0.0.1,::1 + image: jellyfin/jellyfin:10.9.11 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8096 + restart: always + user: 0:0 + volumes: + - ${JELLYFIN_ROOT_PATH}/config:/config + - ${JELLYFIN_ROOT_PATH}/cache:/cache + - ${JELLYFIN_ROOT_PATH}/media:/media + - ${JELLYFIN_ROOT_PATH}/config/font:/config/font + - ${JELLYFIN_ROOT_PATH}/config/dejavu:/usr/share/fonts/truetype/dejavu + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/jellyfin/envs/default.env b/dockge/jellyfin/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/jellyfin/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/jellyfin/envs/global.env b/dockge/jellyfin/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/jellyfin/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/jellyfin_10_10_3/.env b/dockge/jellyfin_10_10_3/.env new file mode 100644 index 00000000..d0720fd6 --- /dev/null +++ b/dockge/jellyfin_10_10_3/.env @@ -0,0 +1,21 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# 数据持久化路径 [必填] +JELLYFIN_ROOT_PATH=/home/jellyfin + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8096 + +# HTTP(s) 网络代理 +HTTP_SSL_PROXY= + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/dockge/jellyfin_10_10_3/docker-compose.yml b/dockge/jellyfin_10_10_3/docker-compose.yml new file mode 100644 index 00000000..3ccccc0f --- /dev/null +++ b/dockge/jellyfin_10_10_3/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true +services: + jellyfin: + container_name: jellyfin + devices: + - /dev/dri:/dev/dri + environment: + - ROC_ENABLE_PRE_VEGA=1 + - HTTP_PROXY=${HTTP_PROXY:-} + - HTTPS_PROXY=${HTTP_PROXY:-} + - NO_PROXY=localhost,127.0.0.1,::1 + image: jellyfin/jellyfin:10.10.3 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8096 + restart: always + user: 0:0 + volumes: + - ${JELLYFIN_ROOT_PATH}/config:/config + - ${JELLYFIN_ROOT_PATH}/cache:/cache + - ${JELLYFIN_ROOT_PATH}/media:/media + - ${JELLYFIN_ROOT_PATH}/config/font:/config/font + - ${JELLYFIN_ROOT_PATH}/config/dejavu:/usr/share/fonts/truetype/dejavu + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/jellyfin_10_10_3/envs/default.env b/dockge/jellyfin_10_10_3/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/jellyfin_10_10_3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/jellyfin_10_10_3/envs/global.env b/dockge/jellyfin_10_10_3/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/jellyfin_10_10_3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/jellyseerr/.env b/dockge/jellyseerr/.env new file mode 100644 index 00000000..93ccebe2 --- /dev/null +++ b/dockge/jellyseerr/.env @@ -0,0 +1,12 @@ +# 数据持久化路径 [必填] +JELLYSEERR_ROOT_PATH=/home/jellyseerr + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5055 + +# 播放媒体服务器类型 [必填] +JELLYFIN_TYPE=jellyfin + +# HTTP(s) 网络代理 +http_proxy= + diff --git a/dockge/jellyseerr/docker-compose.yml b/dockge/jellyseerr/docker-compose.yml new file mode 100644 index 00000000..797dcc66 --- /dev/null +++ b/dockge/jellyseerr/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + jellyseerr: + container_name: jellyseerr + env_file: + - ./envs/global.env + - .env + environment: + - PORT=5055 + - LOG_LEVEL=debug + - TZ=Asia/Shanghai + - https_proxy=${http_proxy:-} + image: fallenbagel/jellyseerr:2.1.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5055 + restart: always + volumes: + - ${JELLYSEERR_ROOT_PATH}/config:/app/config diff --git a/dockge/jellyseerr/envs/default.env b/dockge/jellyseerr/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/jellyseerr/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/jellyseerr/envs/global.env b/dockge/jellyseerr/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/jellyseerr/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/jproxy/.env b/dockge/jproxy/.env new file mode 100644 index 00000000..7128605a --- /dev/null +++ b/dockge/jproxy/.env @@ -0,0 +1,27 @@ +# 数据持久化路径 [必填] +JPROXY_ROOT_PATH=/home/jproxy + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8117 + +# 运行参数 [必填] +JAVA_OPTS=-Xms512m -Xmx512m + +# 缓存过期时间 (分钟) [必填] +CACHE_EXPIRES=4320 + +# 登录过期时间 (分钟) [必填] +TOKEN_EXPIRES=10080 + +# 同步间隔 (分钟) [必填] +SYNC_INTERVAL=3 + +# 允许文件重命名 [必填] +RENAME_FILE=true + +# 追加语言标题 (结果小于设定值) [必填] +MIN_COUNT=6 + +# 索引器结果缓存过期时间 (分钟) [必填] +INDEXER_RESULT_CACHE_EXPIRES=15 + diff --git a/dockge/jproxy/docker-compose.yml b/dockge/jproxy/docker-compose.yml new file mode 100644 index 00000000..e258a4d2 --- /dev/null +++ b/dockge/jproxy/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true +services: + jproxy: + container_name: jproxy + env_file: + - ./envs/global.env + - .env + environment: + - PUID=0 + - PGID=0 + - TZ=Asia/Shanghai + image: luckypuppy514/jproxy:v3.4.4 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8117 + restart: always + volumes: + - ${JPROXY_ROOT_PATH}/data:/app/database diff --git a/dockge/jproxy/envs/default.env b/dockge/jproxy/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/jproxy/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/jproxy/envs/global.env b/dockge/jproxy/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/jproxy/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/kimai/.env b/dockge/kimai/.env new file mode 100644 index 00000000..66959813 --- /dev/null +++ b/dockge/kimai/.env @@ -0,0 +1,30 @@ +# MySQL 服务 (前置检查) [必填] +PANEL_DB_TYPE=mysql + +# 数据持久化路径 [必填] +KIMAI2_ROOT_PATH=/home/kimai2 + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8001 + +# 管理员邮箱 [必填] +ADMINMAIL= + +# 管理员密码 [必填] +ADMINPASS= + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 名称 [必填] +DB_NAME=kimai2 + +# 数据库 用户名 [必填] +DB_USER=kimai2 + +# 数据库 密码 [必填] +DB_USER_PASSWORD= + diff --git a/dockge/kimai/docker-compose.yml b/dockge/kimai/docker-compose.yml new file mode 100644 index 00000000..4b70aee5 --- /dev/null +++ b/dockge/kimai/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + kimai2: + container_name: kimai + env_file: + - ./envs/global.env + - .env + environment: + - DATABASE_URL=mysql://${DB_USER}:${DB_USER_PASSWORD}@${DB_HOSTNAME}:${DB_PORT}/${DB_NAME}?charset=utf8mb4 + image: kimai/kimai2:apache-2.23.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8001 + restart: always + volumes: + - ${KIMAI2_ROOT_PATH}/data:/opt/kimai/var/data + - ${KIMAI2_ROOT_PATH}/plugins:/opt/kimai/var/plugins diff --git a/dockge/kimai/envs/default.env b/dockge/kimai/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/kimai/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/kimai/envs/global.env b/dockge/kimai/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/kimai/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/limesurvey/.env b/dockge/limesurvey/.env new file mode 100644 index 00000000..bac62016 --- /dev/null +++ b/dockge/limesurvey/.env @@ -0,0 +1,42 @@ +# 数据库服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化路径 [必填] +LIMESURVEY_ROOT_PATH=/home/limesurvey + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 管理员 昵称 [必填] +ADMIN_NAME=Admin + +# 管理员 邮箱 [必填] +ADMIN_EMAIL= + +# 管理员 用户名 [必填] +ADMIN_USER=admin + +# 管理员 密码 [必填] +ADMIN_PASSWORD= + +# 数据库 类型 [必填] +DB_TYPE=pgsql + +# 数据库 主机地址 [必填] +DB_HOST=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 名称 [必填] +DB_NAME=limesurvey + +# 数据库 用户名 [必填] +DB_USERNAME=limesurvey + +# 数据库 密码 [必填] +DB_PASSWORD= + +# 公网域名 [必填] +PUBLIC_URL=127.0.0.1:8080 + diff --git a/dockge/limesurvey/docker-compose.yml b/dockge/limesurvey/docker-compose.yml new file mode 100644 index 00000000..2da3f28d --- /dev/null +++ b/dockge/limesurvey/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + limesurvey: + container_name: limesurvey + env_file: + - ./envs/global.env + - .env + environment: + - LISTEN_PORT=8080 + - PUBLIC_URL=foobar.com + image: martialblog/limesurvey:6.6.5-240924-apache + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${LIMESURVEY_ROOT_PATH}/surveys:/var/www/html/upload/surveys diff --git a/dockge/limesurvey/envs/default.env b/dockge/limesurvey/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/limesurvey/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/limesurvey/envs/global.env b/dockge/limesurvey/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/limesurvey/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/linkding/.env b/dockge/linkding/.env new file mode 100644 index 00000000..92fe6bb5 --- /dev/null +++ b/dockge/linkding/.env @@ -0,0 +1,60 @@ +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# 数据持久化路径 [必填] +LINKDING_ROOT_PATH=/home/linkding + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=9090 + +# 管理员 用户名 [必填] +LD_SUPERUSER_NAME= + +# 管理员 密码 [必填] +LD_SUPERUSER_PASSWORD= + +# 禁用后台任务 [必填] +LD_DISABLE_BACKGROUND_TASKS=False + +# 禁用 URL 验证 [必填] +LD_DISABLE_URL_VALIDATION=False + +# 请求超时时间 (秒) [必填] +LD_REQUEST_TIMEOUT=60 + +# 网站路径 +LD_CONTEXT_PATH= + +# 记录真实 IP [必填] +LD_LOG_X_FORWARDED_FOR=false + +# 网站图标提供商 [必填] +LD_FAVICON_PROVIDER=https://t1.gstatic.com/faviconV2?client=SOCIAL&type=FAVICON&fallback_opts=TYPE,SIZE,URL&url={url}&size=32 + +# 数据库 主机 [必填] +LD_DB_HOST=localhost + +# 数据库 端口 [必填] +LD_DB_PORT=5432 + +# 数据库 用户名 [必填] +LD_DB_USER=linkding + +# 数据库 密码 [必填] +LD_DB_PASSWORD= + +# 数据库名称 [必填] +LD_DB_DATABASE=linkding + +# 数据库选项 (JSON) [必填] +LD_DB_OPTIONS={} + +# CSRF 可信来源 +LD_CSRF_TRUSTED_ORIGINS= + +# 代理地址 +ALL_PROXY= + +# 代理白名单 +NO_PROXY=localhost,127.0.0.1,::1 + diff --git a/dockge/linkding/docker-compose.yml b/dockge/linkding/docker-compose.yml new file mode 100644 index 00000000..d0db7cf1 --- /dev/null +++ b/dockge/linkding/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + linkding: + container_name: linkding + env_file: + - ./envs/global.env + - .env + environment: + - LD_SERVER_PORT=9090 + - LD_DB_ENGINE=postgres + - HTTP_PROXY=${ALL_PROXY} + - HTTPS_PROXY=${ALL_PROXY} + image: sissbruecker/linkding:1.36.0-plus + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:9090 + restart: always + ulimits: + nofile: + hard: 40000 + soft: 20000 + nproc: 65535 + volumes: + - ${LINKDING_ROOT_PATH}/data:/etc/linkding/data diff --git a/dockge/linkding/envs/default.env b/dockge/linkding/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/linkding/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/linkding/envs/global.env b/dockge/linkding/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/linkding/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/maccms10/.env b/dockge/maccms10/.env new file mode 100644 index 00000000..1460923c --- /dev/null +++ b/dockge/maccms10/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +MACCMS10_ROOT_PATH=/home/maccms10 + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=80 + diff --git a/dockge/maccms10/docker-compose.yml b/dockge/maccms10/docker-compose.yml new file mode 100644 index 00000000..2b6be879 --- /dev/null +++ b/dockge/maccms10/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + maccms10: + container_name: maccms10 + env_file: + - ./envs/global.env + - .env + image: qyg2297248353/maccms10:v24.11.19 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${MACCMS10_ROOT_PATH}/iycms:/app/iycms diff --git a/dockge/maccms10/envs/default.env b/dockge/maccms10/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/maccms10/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/maccms10/envs/global.env b/dockge/maccms10/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/maccms10/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/macos/.env b/dockge/macos/.env new file mode 100644 index 00000000..4f834d86 --- /dev/null +++ b/dockge/macos/.env @@ -0,0 +1,21 @@ +# MacOS 存储目录 [必填] +MACOS_STORAGE_ROOT_PATH=/home/macos + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8006 + +# Mac 远程桌面 端口 [必填] +PANEL_APP_PORT_REMOTE=5900 + +# MacOS 版本 [必填] +VERSION=15 + +# 内存大小 [必填] +RAM_SIZE=8G + +# 硬盘大小 [必填] +DISK_SIZE=64G + +# CPU 核心数 [必填] +CPU_CORES=4 + diff --git a/dockge/macos/docker-compose.yml b/dockge/macos/docker-compose.yml new file mode 100644 index 00000000..10252d13 --- /dev/null +++ b/dockge/macos/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + windows: + cap_add: + - NET_ADMIN + container_name: macos + devices: + - /dev/kvm:/dev/kvm + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + environment: + - VERSION=${VERSION} + image: dockurr/macos:1.16 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8006 + - ${PANEL_APP_PORT_REMOTE}:5900/tcp + - ${PANEL_APP_PORT_REMOTE}:5900/udp + restart: always + stop_grace_period: 2m + volumes: + - ${MACOS_STORAGE_ROOT_PATH}/storage:/storage diff --git a/dockge/macos/envs/default.env b/dockge/macos/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/macos/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/macos/envs/global.env b/dockge/macos/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/macos/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/mailserver/.env b/dockge/mailserver/.env new file mode 100644 index 00000000..6e81ca5e --- /dev/null +++ b/dockge/mailserver/.env @@ -0,0 +1,75 @@ +# 数据持久化路径 [必填] +MAILSERVER_ROOT_PATH=/home/mailserver + +# SMTP 端口 (保持默认) [必填] +PANEL_APP_PORT_SMTP=25 + +# IMAP 端口 (保持默认) [必填] +PANEL_APP_PORT_IMAP=143 + +# SMTP SSL 端口 (保持默认) [必填] +PANEL_APP_PORT_SMTPS=465 + +# SMTP 提交端口 (保持默认) [必填] +PANEL_APP_PORT_ESMTP=587 + +# IMAP SSL 端口 (保持默认) [必填] +PANEL_APP_PORT_IPAPS=993 + +# ManageSieve 端口 (保持默认) [必填] +PANEL_APP_PORT_MANAGESIEVE=4190 + +# 启用 POP3 [必填] +ENABLE_POP3=0 + +# POP3 端口 (保持默认) +PANEL_APP_PORT_POP=110 + +# POP3 SSL 端口 (保持默认) +PANEL_APP_PORT_POPS=995 + +# 邮件服务器域名 [必填] +HOSTNAME_FQDN=domain.com + +# 管理员邮箱地址 [必填] +POSTMASTER_ADDRESS=postmaster@domain.com + +# 内容过滤器 (Amavis支持) [必填] +ENABLE_AMAVIS=0 + +# 邮件病毒扫描 (ClamAV支持) [必填] +ENABLE_CLAMAV=0 + +# SSL 证书类型 [必填] +SSL_TYPE=manual + +# SSL Public 证书文件名 +CERTS_PUBLIC_CRT=public.crt + +# SSL Private 证书文件名 +CERTS_PRIVATE_KEY=private.key + +# SMTP 中继主机 +RELAY_HOST= + +# SMTP 中继端口 +RELAY_PORT=587 + +# SMTP 中继用户名 +RELAY_USER= + +# SMTP 中继密码 +RELAY_PASSWORD= + +# 网络代理 +http_proxy= + +# 固定域名解析 [必填] +DOMAIN_HOSTS1=localhost:127.0.0.1 + +# 域名解析 (DNS) [必填] +DNS1=1.1.1.1 + +# 域名解析 (备用 DNS) [必填] +DNS2=114.114.114.114 + diff --git a/dockge/mailserver/docker-compose.yml b/dockge/mailserver/docker-compose.yml new file mode 100644 index 00000000..7b14595a --- /dev/null +++ b/dockge/mailserver/docker-compose.yml @@ -0,0 +1,52 @@ +networks: + 1panel-network: + external: true +services: + mailserver: + container_name: mailserver + dns: + - ${DNS1} + - ${DNS2} + env_file: + - ./envs/global.env + - ./envs/mailserver.env + - .env + environment: + - LOG_LEVEL=info + - SUPERVISOR_LOGLEVEL=info + - ACCOUNT_PROVISIONER=FILE + - SSL_CERT_PATH=/tmp/dms/certs/${CERTS_PUBLIC_CRT:-public.crt} + - SSL_KEY_PATH=/tmp/dms/certs/${CERTS_PRIVATE_KEY:-private.key} + - SPOOF_PROTECTION=1 + - https_proxy=${http_proxy} + extra_hosts: + - ${DOMAIN_HOSTS1} + healthcheck: + retries: 0 + test: ss --listening --tcp | grep -P 'LISTEN.+:smtp' || exit 1 + timeout: 3s + hostname: ${HOSTNAME_FQDN} + image: mailserver/docker-mailserver:14.0.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_SMTP}:25 + - ${PANEL_APP_PORT_IMAP}:143 + - ${PANEL_APP_PORT_SMTPS}:465 + - ${PANEL_APP_PORT_ESMTP}:587 + - ${PANEL_APP_PORT_IPAPS}:993 + - ${PANEL_APP_PORT_POP}:110 + - ${PANEL_APP_PORT_POPS}:995 + - ${PANEL_APP_PORT_MANAGESIEVE}:4190 + restart: always + stop_grace_period: 1m + volumes: + - /etc/localtime:/etc/localtime:ro + - ${MAILSERVER_ROOT_PATH}/dms/mail-data/:/var/mail/ + - ${MAILSERVER_ROOT_PATH}/dms/mail-state/:/var/mail-state/ + - ${MAILSERVER_ROOT_PATH}/dms/mail-logs/:/var/log/mail/ + - ${MAILSERVER_ROOT_PATH}/dms/config/:/tmp/docker-mailserver/ + - ${MAILSERVER_ROOT_PATH}/certs/:/tmp/dms/certs/ + - ${MAILSERVER_ROOT_PATH}/dms-backups/:/backup/ diff --git a/dockge/mailserver/envs/default.env b/dockge/mailserver/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/mailserver/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/mailserver/envs/global.env b/dockge/mailserver/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/mailserver/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/mailserver/envs/mailserver.env b/dockge/mailserver/envs/mailserver.env new file mode 100644 index 00000000..3db58204 --- /dev/null +++ b/dockge/mailserver/envs/mailserver.env @@ -0,0 +1,661 @@ +# ----------------------------------------------- +# --- Mailserver Environment Variables ---------- +# ----------------------------------------------- + +# DOCUMENTATION FOR THESE VARIABLES IS FOUND UNDER +# https://docker-mailserver.github.io/docker-mailserver/latest/config/environment/ + +# ----------------------------------------------- +# --- General Section --------------------------- +# ----------------------------------------------- + +# empty => uses the `hostname` command to get the mail server's canonical hostname +# => Specify a fully-qualified domainname to serve mail for. This is used for many of the config features so if you can't set your hostname (e.g. you're in a container platform that doesn't let you) specify it in this environment variable. +OVERRIDE_HOSTNAME= + +# REMOVED in version v11.0.0! Use LOG_LEVEL instead. +DMS_DEBUG=0 + +# Set the log level for DMS. +# This is mostly relevant for container startup scripts and change detection event feedback. +# +# Valid values (in order of increasing verbosity) are: `error`, `warn`, `info`, `debug` and `trace`. +# The default log level is `info`. +LOG_LEVEL=info + +# critical => Only show critical messages +# error => Only show erroneous output +# **warn** => Show warnings +# info => Normal informational output +# debug => Also show debug messages +SUPERVISOR_LOGLEVEL= + +# Support for deployment where these defaults are not compatible (eg: some NAS appliances): +# /var/mail vmail User ID (default: 5000) +DMS_VMAIL_UID= +# /var/mail vmail Group ID (default: 5000) +DMS_VMAIL_GID= + +# **empty** => use FILE +# LDAP => use LDAP authentication +# OIDC => use OIDC authentication (not yet implemented) +# FILE => use local files (this is used as the default) +ACCOUNT_PROVISIONER= + +# empty => postmaster@domain.com +# => Specify the postmaster address +POSTMASTER_ADDRESS= + +# Check for updates on container start and then once a day +# If an update is available, a mail is sent to POSTMASTER_ADDRESS +# 0 => Update check disabled +# 1 => Update check enabled +ENABLE_UPDATE_CHECK=0 + +# Customize the update check interval. +# Number + Suffix. Suffix must be 's' for seconds, 'm' for minutes, 'h' for hours or 'd' for days. +UPDATE_CHECK_INTERVAL=1d + +# Set different options for mynetworks option (can be overwrite in postfix-main.cf) +# **WARNING**: Adding the docker network's gateway to the list of trusted hosts, e.g. using the `network` or +# `connected-networks` option, can create an open relay +# https://github.com/docker-mailserver/docker-mailserver/issues/1405#issuecomment-590106498 +# The same can happen for rootless podman. To prevent this, set the value to "none" or configure slirp4netns +# https://github.com/docker-mailserver/docker-mailserver/issues/2377 +# +# none => Explicitly force authentication +# container => Container IP address only +# host => Add docker container network (ipv4 only) +# network => Add all docker container networks (ipv4 only) +# connected-networks => Add all connected docker networks (ipv4 only) +PERMIT_DOCKER=none + +# Set the timezone. If this variable is unset, the container runtime will try to detect the time using +# `/etc/localtime`, which you can alternatively mount into the container. The value of this variable +# must follow the pattern `AREA/ZONE`, i.e. of you want to use Germany's time zone, use `Europe/Berlin`. +# You can lookup all available timezones here: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List +TZ=Asia/Shanghai + +# In case you network interface differs from 'eth0', e.g. when you are using HostNetworking in Kubernetes, +# you can set NETWORK_INTERFACE to whatever interface you want. This interface will then be used. +# - **empty** => eth0 +NETWORK_INTERFACE= + +# empty => modern +# modern => Enables TLSv1.2 and modern ciphers only. (default) +# intermediate => Enables TLSv1, TLSv1.1 and TLSv1.2 and broad compatibility ciphers. +TLS_LEVEL= + +# Configures the handling of creating mails with forged sender addresses. +# +# **0** => (not recommended) Mail address spoofing allowed. Any logged in user may create email messages with a forged sender address (see also https://en.wikipedia.org/wiki/Email_spoofing). +# 1 => Mail spoofing denied. Each user may only send with his own or his alias addresses. Addresses with extension delimiters(http://www.postfix.org/postconf.5.html#recipient_delimiter) are not able to send messages. +SPOOF_PROTECTION= + +# Enables the Sender Rewriting Scheme. SRS is needed if your mail server acts as forwarder. See [postsrsd](https://github.com/roehling/postsrsd/blob/master/README.md#sender-rewriting-scheme-crash-course) for further explanation. +# - **0** => Disabled +# - 1 => Enabled +ENABLE_SRS=0 + +# Enables the OpenDKIM service. +# **1** => Enabled +# 0 => Disabled +ENABLE_OPENDKIM=1 + +# Enables the OpenDMARC service. +# **1** => Enabled +# 0 => Disabled +ENABLE_OPENDMARC=1 + + +# Enabled `policyd-spf` in Postfix's configuration. You will likely want to set this +# to `0` in case you're using Rspamd (`ENABLE_RSPAMD=1`). +# +# - 0 => Disabled +# - **1** => Enabled +ENABLE_POLICYD_SPF=1 + +# Enables POP3 service +# - **0** => Disabled +# - 1 => Enabled +ENABLE_POP3= + +# Enables IMAP service +# - 0 => Disabled +# - **1** => Enabled +ENABLE_IMAP=1 + +# Enables ClamAV, and anti-virus scanner. +# 1 => Enabled +# **0** => Disabled +ENABLE_CLAMAV=0 + +# Add the value of this ENV as a prefix to the mail subject when spam is detected. +# NOTE: This subject prefix may be redundant (by default spam is delivered to a junk folder). +# It provides value when your junk mail is stored alongside legitimate mail instead of a separate location (like with `SPAMASSASSIN_SPAM_TO_INBOX=1` or `MOVE_SPAM_TO_JUNK=0` or a POP3 only setup, without IMAP). +# NOTE: When not using Docker Compose, other CRI may not support quote-wrapping the value here to preserve any trailing white-space. +SPAM_SUBJECT= + +# Enables Rspamd +# **0** => Disabled +# 1 => Enabled +ENABLE_RSPAMD=1 + +# When `ENABLE_RSPAMD=1`, an internal Redis instance is enabled implicitly. +# This setting provides an opt-out to allow using an external instance instead. +# 0 => Disabled +# 1 => Enabled +ENABLE_RSPAMD_REDIS= + +# When enabled, +# +# 1. the "[autolearning][rspamd-autolearn]" feature is turned on; +# 2. the Bayes classifier will be trained when moving mails from or to the Junk folder (with the help of Sieve scripts). +# +# **0** => disabled +# 1 => enabled +RSPAMD_LEARN=1 + +# This settings controls whether checks should be performed on emails coming +# from authenticated users (i.e. most likely outgoing emails). The default value +# is `0` in order to align better with SpamAssassin. We recommend reading +# through https://rspamd.com/doc/tutorials/scanning_outbound.html though to +# decide for yourself whether you need and want this feature. +# +# Note that DKIM signing of e-mails will still happen. +RSPAMD_CHECK_AUTHENTICATED=0 + +# Controls whether the Rspamd Greylisting module is enabled. +# This module can further assist in avoiding spam emails by greylisting +# e-mails with a certain spam score. +# +# **0** => disabled +# 1 => enabled +RSPAMD_GREYLISTING=1 + +# Can be used to enable or disable the Hfilter group module. +# +# - 0 => Disabled +# - **1** => Enabled +RSPAMD_HFILTER=1 + +# Can be used to control the score when the HFILTER_HOSTNAME_UNKNOWN symbol applies. A higher score is more punishing. Setting it to 15 is equivalent to rejecting the email when the check fails. +# +# Default: 6 +RSPAMD_HFILTER_HOSTNAME_UNKNOWN_SCORE=6 + +# Can be used to enable or disable the (still experimental) neural module. +# +# - **0** => Disabled +# - 1 => Enabled +RSPAMD_NEURAL=0 + +# Amavis content filter (used for ClamAV & SpamAssassin) +# 0 => Disabled +# 1 => Enabled +ENABLE_AMAVIS=0 + +# -1/-2/-3 => Only show errors +# **0** => Show warnings +# 1/2 => Show default informational output +# 3/4/5 => log debug information (very verbose) +AMAVIS_LOGLEVEL=0 + +# This enables DNS block lists in Postscreen. +# Note: Emails will be rejected, if they don't pass the block list checks! +# **0** => DNS block lists are disabled +# 1 => DNS block lists are enabled +ENABLE_DNSBL=0 + +# If you enable Fail2Ban, don't forget to add the following lines to your `compose.yaml`: +# cap_add: +# - NET_ADMIN +# Otherwise, `nftables` won't be able to ban IPs. +ENABLE_FAIL2BAN=0 + +# Fail2Ban blocktype +# drop => drop packet (send NO reply) +# reject => reject packet (send ICMP unreachable) +FAIL2BAN_BLOCKTYPE=drop + +# 1 => Enables Managesieve on port 4190 +# empty => disables Managesieve +ENABLE_MANAGESIEVE= + +# **enforce** => Allow other tests to complete. Reject attempts to deliver mail with a 550 SMTP reply, and log the helo/sender/recipient information. Repeat this test the next time the client connects. +# drop => Drop the connection immediately with a 521 SMTP reply. Repeat this test the next time the client connects. +# ignore => Ignore the failure of this test. Allow other tests to complete. Repeat this test the next time the client connects. This option is useful for testing and collecting statistics without blocking mail. +POSTSCREEN_ACTION=enforce + +# empty => all daemons start +# 1 => only launch postfix smtp +SMTP_ONLY= + +# Please read [the SSL page in the documentation](https://docker-mailserver.github.io/docker-mailserver/latest/config/security/ssl) for more information. +# +# empty => SSL disabled +# letsencrypt => Enables Let's Encrypt certificates +# custom => Enables custom certificates +# manual => Let's you manually specify locations of your SSL certificates for non-standard cases +# self-signed => Enables self-signed certificates +SSL_TYPE= + +# These are only supported with `SSL_TYPE=manual`. +# Provide the path to your cert and key files that you've mounted access to within the container. +SSL_CERT_PATH= +SSL_KEY_PATH= +# Optional: A 2nd certificate can be supported as fallback (dual cert support), eg ECDSA with an RSA fallback. +# Useful for additional compatibility with older MTA and MUA (eg pre-2015). +SSL_ALT_CERT_PATH= +SSL_ALT_KEY_PATH= + +# Set how many days a virusmail will stay on the server before being deleted +# empty => 7 days +VIRUSMAILS_DELETE_DELAY= + +# Configure Postfix `virtual_transport` to deliver mail to a different LMTP client (default is a dovecot socket). +# Provide any valid URI. Examples: +# +# empty => `lmtp:unix:/var/run/dovecot/lmtp` (default, configured in Postfix main.cf) +# `lmtp:unix:private/dovecot-lmtp` (use socket) +# `lmtps:inet::` (secure lmtp with starttls) +# `lmtp::2003` (use kopano as mailstore) +POSTFIX_DAGENT= + +# Set the mailbox size limit for all users. If set to zero, the size will be unlimited (default). Size is in bytes. +# +# empty => 0 +POSTFIX_MAILBOX_SIZE_LIMIT= + +# See https://docker-mailserver.github.io/docker-mailserver/latest/config/account-management/overview/#quotas +# 0 => Dovecot quota is disabled +# 1 => Dovecot quota is enabled +ENABLE_QUOTAS=1 + +# Set the message size limit for all users. If set to zero, the size will be unlimited (not recommended!). Size is in bytes. +# +# empty => 10240000 (~10 MB) +POSTFIX_MESSAGE_SIZE_LIMIT= + +# Mails larger than this limit won't be scanned. +# ClamAV must be enabled (ENABLE_CLAMAV=1) for this. +# +# empty => 25M (25 MB) +CLAMAV_MESSAGE_SIZE_LIMIT= + +# Enables regular pflogsumm mail reports. +# This is a new option. The old REPORT options are still supported for backwards compatibility. If this is not set and reports are enabled with the old options, logrotate will be used. +# +# not set => No report +# daily_cron => Daily report for the previous day +# logrotate => Full report based on the mail log when it is rotated +PFLOGSUMM_TRIGGER= + +# Recipient address for pflogsumm reports. +# +# not set => Use REPORT_RECIPIENT or POSTMASTER_ADDRESS +# => Specify the recipient address(es) +PFLOGSUMM_RECIPIENT= + +# Sender address (`FROM`) for pflogsumm reports if pflogsumm reports are enabled. +# +# not set => Use REPORT_SENDER +# => Specify the sender address +PFLOGSUMM_SENDER= + +# Interval for logwatch report. +# +# none => No report is generated +# daily => Send a daily report +# weekly => Send a report every week +LOGWATCH_INTERVAL= + +# Recipient address for logwatch reports if they are enabled. +# +# not set => Use REPORT_RECIPIENT or POSTMASTER_ADDRESS +# => Specify the recipient address(es) +LOGWATCH_RECIPIENT= + +# Sender address (`FROM`) for logwatch reports if logwatch reports are enabled. +# +# not set => Use REPORT_SENDER +# => Specify the sender address +LOGWATCH_SENDER= + +# Defines who receives reports if they are enabled. +# **empty** => ${POSTMASTER_ADDRESS} +# => Specify the recipient address +REPORT_RECIPIENT= + +# Defines who sends reports if they are enabled. +# **empty** => mailserver-report@${DOMAINNAME} +# => Specify the sender address +REPORT_SENDER= + +# Changes the interval in which log files are rotated +# **weekly** => Rotate log files weekly +# daily => Rotate log files daily +# monthly => Rotate log files monthly +# +# Note: This Variable actually controls logrotate inside the container +# and rotates the log files depending on this setting. The main log output is +# still available in its entirety via `docker logs mail` (Or your +# respective container name). If you want to control logrotation for +# the Docker-generated logfile see: +# https://docs.docker.com/config/containers/logging/configure/ +# +# Note: This variable can also determine the interval for Postfix's log summary reports, see [`PFLOGSUMM_TRIGGER`](#pflogsumm_trigger). +LOGROTATE_INTERVAL=weekly + +# Defines how many log files are kept by logrorate +LOGROTATE_COUNT=4 + + +# If enabled, employs `reject_unknown_client_hostname` to sender restrictions in Postfix's configuration. +# +# - **0** => Disabled +# - 1 => Enabled +POSTFIX_REJECT_UNKNOWN_CLIENT_HOSTNAME=0 + +# Choose TCP/IP protocols for postfix to use +# **all** => All possible protocols. +# ipv4 => Use only IPv4 traffic. Most likely you want this behind Docker. +# ipv6 => Use only IPv6 traffic. +# +# Note: More details at http://www.postfix.org/postconf.5.html#inet_protocols +POSTFIX_INET_PROTOCOLS=all + +# Enables MTA-STS support for outbound mail. +# More details: https://docker-mailserver.github.io/docker-mailserver/v13.3/config/best-practices/mta-sts/ +# - **0** ==> MTA-STS disabled +# - 1 => MTA-STS enabled +ENABLE_MTA_STS=0 + +# Choose TCP/IP protocols for dovecot to use +# **all** => Listen on all interfaces +# ipv4 => Listen only on IPv4 interfaces. Most likely you want this behind Docker. +# ipv6 => Listen only on IPv6 interfaces. +# +# Note: More information at https://dovecot.org/doc/dovecot-example.conf +DOVECOT_INET_PROTOCOLS=all + +# ----------------------------------------------- +# --- SpamAssassin Section ---------------------- +# ----------------------------------------------- + +ENABLE_SPAMASSASSIN=0 + +# KAM is a 3rd party SpamAssassin ruleset, provided by the McGrail Foundation. +# If SpamAssassin is enabled, KAM can be used in addition to the default ruleset. +# - **0** => KAM disabled +# - 1 => KAM enabled +# +# Note: only has an effect if `ENABLE_SPAMASSASSIN=1` +ENABLE_SPAMASSASSIN_KAM=1 + +# deliver spam messages to the inbox (tagged using SPAM_SUBJECT) +SPAMASSASSIN_SPAM_TO_INBOX=1 + +# spam messages will be moved in the Junk folder (SPAMASSASSIN_SPAM_TO_INBOX=1 required) +MOVE_SPAM_TO_JUNK=1 + +# spam messages will be marked as read +MARK_SPAM_AS_READ=1 + +# add 'spam info' headers at, or above this level +SA_TAG=2.0 + +# add 'spam detected' headers at, or above this level +SA_TAG2=6.31 + +# triggers spam evasive actions +SA_KILL=10.0 + +# ----------------------------------------------- +# --- Fetchmail Section ------------------------- +# ----------------------------------------------- + +ENABLE_FETCHMAIL=0 + +# The interval to fetch mail in seconds +FETCHMAIL_POLL=300 +# Use multiple fetchmail instances (1 per poll entry in fetchmail.cf) +# Supports multiple IMAP IDLE connections when a server is used across multiple poll entries +# https://otremba.net/wiki/Fetchmail_(Debian)#Immediate_Download_via_IMAP_IDLE +FETCHMAIL_PARALLEL=0 + +# Enable or disable `getmail`. +# +# - **0** => Disabled +# - 1 => Enabled +ENABLE_GETMAIL=0 + +# The number of minutes for the interval. Min: 1; Max: 30. +GETMAIL_POLL=5 + +# ----------------------------------------------- +# --- OAUTH2 Section ---------------------------- +# ----------------------------------------------- + +# empty => OAUTH2 authentication is disabled +# 1 => OAUTH2 authentication is enabled +ENABLE_OAUTH2= + +# Specify the user info endpoint URL of the oauth2 provider +# Example: https://oauth2.example.com/userinfo/ +OAUTH2_INTROSPECTION_URL= + +# ----------------------------------------------- +# --- LDAP Section ------------------------------ +# ----------------------------------------------- + +# A second container for the ldap service is necessary (i.e. https://hub.docker.com/r/bitnami/openldap/) + +# empty => no +# yes => LDAP over TLS enabled for Postfix +LDAP_START_TLS= + +# empty => mail.example.com +# Specify the `` / `` where the LDAP server is reachable via a URI like: `ldaps://mail.example.com`. +# Note: You must include the desired URI scheme (`ldap://`, `ldaps://`, `ldapi://`). +LDAP_SERVER_HOST= + +# empty => ou=people,dc=domain,dc=com +# => e.g. LDAP_SEARCH_BASE=dc=mydomain,dc=local +LDAP_SEARCH_BASE= + +# empty => cn=admin,dc=domain,dc=com +# => take a look at examples of SASL_LDAP_BIND_DN +LDAP_BIND_DN= + +# empty** => admin +# => Specify the password to bind against ldap +LDAP_BIND_PW= + +# e.g. `"(&(mail=%s)(mailEnabled=TRUE))"` +# => Specify how ldap should be asked for users +LDAP_QUERY_FILTER_USER= + +# e.g. `"(&(mailGroupMember=%s)(mailEnabled=TRUE))"` +# => Specify how ldap should be asked for groups +LDAP_QUERY_FILTER_GROUP= + +# e.g. `"(&(mailAlias=%s)(mailEnabled=TRUE))"` +# => Specify how ldap should be asked for aliases +LDAP_QUERY_FILTER_ALIAS= + +# e.g. `"(&(|(mail=*@%s)(mailalias=*@%s)(mailGroupMember=*@%s))(mailEnabled=TRUE))"` +# => Specify how ldap should be asked for domains +LDAP_QUERY_FILTER_DOMAIN= + +# ----------------------------------------------- +# --- Dovecot Section --------------------------- +# ----------------------------------------------- + +# empty => no +# yes => LDAP over TLS enabled for Dovecot +DOVECOT_TLS= + +# e.g. `"(&(objectClass=PostfixBookMailAccount)(uniqueIdentifier=%n))"` +DOVECOT_USER_FILTER= + +# e.g. `"(&(objectClass=PostfixBookMailAccount)(uniqueIdentifier=%n))"` +DOVECOT_PASS_FILTER= + +# Define the mailbox format to be used +# default is maildir, supported values are: sdbox, mdbox, maildir +DOVECOT_MAILBOX_FORMAT=maildir + +# empty => no +# yes => Allow bind authentication for LDAP +# https://wiki.dovecot.org/AuthDatabase/LDAP/AuthBinds +DOVECOT_AUTH_BIND= + +# ----------------------------------------------- +# --- Postgrey Section -------------------------- +# ----------------------------------------------- + +ENABLE_POSTGREY=0 +# greylist for N seconds +POSTGREY_DELAY=300 +# delete entries older than N days since the last time that they have been seen +POSTGREY_MAX_AGE=35 +# response when a mail is greylisted +POSTGREY_TEXT="Delayed by Postgrey" +# whitelist host after N successful deliveries (N=0 to disable whitelisting) +POSTGREY_AUTO_WHITELIST_CLIENTS=5 + +# ----------------------------------------------- +# --- SASL Section ------------------------------ +# ----------------------------------------------- + +ENABLE_SASLAUTHD=0 + +# empty => pam +# `ldap` => authenticate against ldap server +# `shadow` => authenticate against local user db +# `mysql` => authenticate against mysql db +# `rimap` => authenticate against imap server +# Note: can be a list of mechanisms like pam ldap shadow +SASLAUTHD_MECHANISMS= + +# empty => None +# e.g. with SASLAUTHD_MECHANISMS rimap you need to specify the ip-address/servername of the imap server ==> xxx.xxx.xxx.xxx +SASLAUTHD_MECH_OPTIONS= + +# empty => Use value of LDAP_SERVER_HOST +# Note: You must include the desired URI scheme (`ldap://`, `ldaps://`, `ldapi://`). +SASLAUTHD_LDAP_SERVER= + +# empty => Use value of LDAP_BIND_DN +# specify an object with privileges to search the directory tree +# e.g. active directory: SASLAUTHD_LDAP_BIND_DN=cn=Administrator,cn=Users,dc=mydomain,dc=net +# e.g. openldap: SASLAUTHD_LDAP_BIND_DN=cn=admin,dc=mydomain,dc=net +SASLAUTHD_LDAP_BIND_DN= + +# empty => Use value of LDAP_BIND_PW +SASLAUTHD_LDAP_PASSWORD= + +# empty => Use value of LDAP_SEARCH_BASE +# specify the search base +SASLAUTHD_LDAP_SEARCH_BASE= + +# empty => default filter `(&(uniqueIdentifier=%u)(mailEnabled=TRUE))` +# e.g. for active directory: `(&(sAMAccountName=%U)(objectClass=person))` +# e.g. for openldap: `(&(uid=%U)(objectClass=person))` +SASLAUTHD_LDAP_FILTER= + +# empty => no +# yes => LDAP over TLS enabled for SASL +# If set to yes, the protocol in SASLAUTHD_LDAP_SERVER must be ldap:// or missing. +SASLAUTHD_LDAP_START_TLS= + +# empty => no +# yes => Require and verify server certificate +# If yes you must/could specify SASLAUTHD_LDAP_TLS_CACERT_FILE or SASLAUTHD_LDAP_TLS_CACERT_DIR. +SASLAUTHD_LDAP_TLS_CHECK_PEER= + +# File containing CA (Certificate Authority) certificate(s). +# empty => Nothing is added to the configuration +# Any value => Fills the `ldap_tls_cacert_file` option +SASLAUTHD_LDAP_TLS_CACERT_FILE= + +# Path to directory with CA (Certificate Authority) certificates. +# empty => Nothing is added to the configuration +# Any value => Fills the `ldap_tls_cacert_dir` option +SASLAUTHD_LDAP_TLS_CACERT_DIR= + +# Specify what password attribute to use for password verification. +# empty => Nothing is added to the configuration but the documentation says it is `userPassword` by default. +# Any value => Fills the `ldap_password_attr` option +SASLAUTHD_LDAP_PASSWORD_ATTR= + +# empty => `bind` will be used as a default value +# `fastbind` => The fastbind method is used +# `custom` => The custom method uses userPassword attribute to verify the password +SASLAUTHD_LDAP_AUTH_METHOD= + +# Specify the authentication mechanism for SASL bind +# empty => Nothing is added to the configuration +# Any value => Fills the `ldap_mech` option +SASLAUTHD_LDAP_MECH= + +# ----------------------------------------------- +# --- SRS Section ------------------------------- +# ----------------------------------------------- + +# envelope_sender => Rewrite only envelope sender address (default) +# header_sender => Rewrite only header sender (not recommended) +# envelope_sender,header_sender => Rewrite both senders +# An email has an "envelope" sender (indicating the sending server) and a +# "header" sender (indicating who sent it). More strict SPF policies may require +# you to replace both instead of just the envelope sender. +SRS_SENDER_CLASSES=envelope_sender + +# empty => Envelope sender will be rewritten for all domains +# provide comma separated list of domains to exclude from rewriting +SRS_EXCLUDE_DOMAINS= + +# empty => generated when the image is built +# provide a secret to use in base64 +# you may specify multiple keys, comma separated. the first one is used for +# signing and the remaining will be used for verification. this is how you +# rotate and expire keys +SRS_SECRET= + +# ----------------------------------------------- +# --- Default Relay Host Section ---------------- +# ----------------------------------------------- + +# Setup relaying all mail through a default relay host +# +# Set a default host to relay all mail through (optionally include a port) +# Example: [mail.example.com]:587 +DEFAULT_RELAY_HOST= + +# ----------------------------------------------- +# --- Multi-Domain Relay Section ---------------- +# ----------------------------------------------- + +# Setup relaying for multiple domains based on the domain name of the sender +# optionally uses usernames and passwords in postfix-sasl-password.cf and relay host mappings in postfix-relaymap.cf +# +# Set a default host to relay mail through +# Example: mail.example.com +RELAY_HOST= + +# empty => 25 +# default port to relay mail +RELAY_PORT=25 + +# ----------------------------------------------- +# --- Relay Host Credentials Section ------------ +# ----------------------------------------------- + +# Configure a relay user and password to use with RELAY_HOST / DEFAULT_RELAY_HOST + +# empty => no default +RELAY_USER= + +# empty => no default +RELAY_PASSWORD= diff --git a/dockge/mariadb/.env b/dockge/mariadb/.env new file mode 100644 index 00000000..441dbe74 --- /dev/null +++ b/dockge/mariadb/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +MARIADB_ROOT_PATH=/home/mariadb + +# 连接端口 [必填] +PANEL_APP_PORT_HTTP=3306 + +# 管理员密码 [必填] +MYSQL_ROOT_PASSWORD= + diff --git a/dockge/mariadb/config/my.cnf b/dockge/mariadb/config/my.cnf new file mode 100644 index 00000000..9d0d4c14 --- /dev/null +++ b/dockge/mariadb/config/my.cnf @@ -0,0 +1,30 @@ +# The MariaDB configuration file +# +# The MariaDB/MySQL tools read configuration files in the following order: +# 0. "/etc/mysql/my.cnf" symlinks to this file, reason why all the rest is read. +# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults, +# 2. "/etc/mysql/conf.d/*.cnf" to set global options. +# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options. +# 4. "~/.my.cnf" to set user-specific options. +# +# If the same option is defined multiple times, the last one will apply. +# +# One can use all long options that the program supports. +# Run program with --help to get a list of available options and with +# --print-defaults to see which it would actually understand and use. +# +# If you are new to MariaDB, check out https://mariadb.com/kb/en/basic-mariadb-articles/ + +# +# This group is read both by the client and the server +# use it for options that affect everything +# +[client-server] +# Port or socket location where to connect +# port = 3306 +socket = /run/mysqld/mysqld.sock + +# Import all .cnf files from configuration directory + +!includedir /etc/mysql/mariadb.conf.d/ +!includedir /etc/mysql/conf.d/ diff --git a/dockge/mariadb/docker-compose.yml b/dockge/mariadb/docker-compose.yml new file mode 100644 index 00000000..4f5cb4c6 --- /dev/null +++ b/dockge/mariadb/docker-compose.yml @@ -0,0 +1,20 @@ +networks: + 1panel-network: + external: true +services: + mariadb: + container_name: mariadb + env_file: + - ./envs/global.env + - .env + image: mariadb:11.6.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3306 + restart: always + volumes: + - ${MARIADB_ROOT_PATH}/data:/var/lib/mysql + - ${MARIADB_ROOT_PATH}/config/my.cnf:/etc/mysql/my.cnf diff --git a/dockge/mariadb/envs/default.env b/dockge/mariadb/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/mariadb/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/mariadb/envs/global.env b/dockge/mariadb/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/mariadb/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/maxkb/.env b/dockge/maxkb/.env new file mode 100644 index 00000000..38d3a912 --- /dev/null +++ b/dockge/maxkb/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +MAXKB_ROOT_PATH=/home/maxkb + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + diff --git a/dockge/maxkb/docker-compose.yml b/dockge/maxkb/docker-compose.yml new file mode 100644 index 00000000..b23fcf44 --- /dev/null +++ b/dockge/maxkb/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + 1panel-network: + external: true +services: + maxkb: + container_name: maxkb + env_file: + - ./envs/global.env + - .env + image: 1panel/maxkb:v1.7.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${MAXKB_ROOT_PATH}/data:/var/lib/postgresql/data + - ${MAXKB_ROOT_PATH}/python-packages:/opt/maxkb/app/sandbox/python-packages + - ${MAXKB_ROOT_PATH}/local_embedding:/opt/maxkb/model/local_embedding diff --git a/dockge/maxkb/envs/default.env b/dockge/maxkb/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/maxkb/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/maxkb/envs/global.env b/dockge/maxkb/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/maxkb/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/mcy-shop/.env b/dockge/mcy-shop/.env new file mode 100644 index 00000000..0c02bcbf --- /dev/null +++ b/dockge/mcy-shop/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +MCY_SHOP_ROOT_PATH=/home/mcy-shop + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + diff --git a/dockge/mcy-shop/docker-compose.yml b/dockge/mcy-shop/docker-compose.yml new file mode 100644 index 00000000..160afdb5 --- /dev/null +++ b/dockge/mcy-shop/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + mcy-shop: + container_name: mcy-shop + env_file: + - ./envs/global.env + - .env + image: qyg2297248353/mcy-shop:v5.0.17 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${MCY_SHOP_ROOT_PATH}/data:/var/www/html diff --git a/dockge/mcy-shop/envs/default.env b/dockge/mcy-shop/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/mcy-shop/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/mcy-shop/envs/global.env b/dockge/mcy-shop/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/mcy-shop/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/mediacms/.env b/dockge/mediacms/.env new file mode 100644 index 00000000..cb8a090e --- /dev/null +++ b/dockge/mediacms/.env @@ -0,0 +1,45 @@ +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# 数据持久化路径 [必填] +MEDIACMS_ROOT_PATH=/home/mediacms + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 管理员 用户名 [必填] +ADMIN_USER= + +# 管理员邮箱 [必填] +ADMIN_EMAIL= + +# 管理员密码 [必填] +ADMIN_PASSWORD= + +# 公开地址 [必填] +FRONTEND_HOST=http://localhost + +# 站点名称 [必填] +PORTAL_NAME=MediaCMS + +# Redis 地址 [必填] +REDIS_LOCATION=redis://127.0.0.1:6379/1 + +# 数据库 主机地址 [必填] +POSTGRES_HOST=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 名称 [必填] +DB_NAME=mediacms + +# 数据库 用户名 [必填] +DB_USER=mediacms + +# 数据库 密码 [必填] +DB_PASSWORD= + diff --git a/dockge/mediacms/docker-compose.yml b/dockge/mediacms/docker-compose.yml new file mode 100644 index 00000000..250eae7f --- /dev/null +++ b/dockge/mediacms/docker-compose.yml @@ -0,0 +1,77 @@ +networks: + 1panel-network: + external: true +services: + mediacms: + container_name: mediacms + depends_on: + - mediacms-migrations + env_file: + - ./envs/global.env + - .env + environment: + - ENABLE_CELERY_BEAT=no + - ENABLE_CELERY_SHORT=no + - ENABLE_CELERY_LONG=no + - ENABLE_MIGRATIONS=no + image: qyg2297248353/mediacms:v4.1.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${MEDIACMS_ROOT_PATH}/media_files/hls:/home/mediacms.io/mediacms/media_files/hls + - ${MEDIACMS_ROOT_PATH}/media_files/original:/home/mediacms.io/mediacms/media_files/original + - ${MEDIACMS_ROOT_PATH}/media_files/uploads:/home/mediacms.io/mediacms/media_files/uploads + mediacms-celery-beat: + container_name: celery-beat-mediacms + environment: + - ENABLE_UWSGI=no + - ENABLE_NGINX=no + - ENABLE_CELERY_SHORT=no + - ENABLE_CELERY_LONG=no + - ENABLE_MIGRATIONS=no + image: qyg2297248353/mediacms:v4.1.0 + volumes: + - ${MEDIACMS_ROOT_PATH}/media_files/hls:/home/mediacms.io/mediacms/media_files/hls + - ${MEDIACMS_ROOT_PATH}/media_files/original:/home/mediacms.io/mediacms/media_files/original + - ${MEDIACMS_ROOT_PATH}/media_files/uploads:/home/mediacms.io/mediacms/media_files/uploads + mediacms-celery-worker: + container_name: celery-worker-mediacms + depends_on: + - mediacms-migrations + environment: + - ENABLE_UWSGI=no + - ENABLE_NGINX=no + - ENABLE_CELERY_BEAT=no + - ENABLE_MIGRATIONS=no + image: qyg2297248353/mediacms:v4.1.0 + volumes: + - ${MEDIACMS_ROOT_PATH}/media_files/hls:/home/mediacms.io/mediacms/media_files/hls + - ${MEDIACMS_ROOT_PATH}/media_files/original:/home/mediacms.io/mediacms/media_files/original + - ${MEDIACMS_ROOT_PATH}/media_files/uploads:/home/mediacms.io/mediacms/media_files/uploads + mediacms-migrations: + command: + - ./deploy/docker/prestart.sh + container_name: migrations-mediacms + env_file: + - ./envs/global.env + - .env + environment: + - ENABLE_UWSGI=no + - ENABLE_NGINX=no + - ENABLE_CELERY_SHORT=no + - ENABLE_CELERY_LONG=no + - ENABLE_CELERY_BEAT=no + - ADMIN_USER=${ADMIN_USER} + - ADMIN_EMAIL=${ADMIN_EMAIL} + - ADMIN_PASSWORD=${ADMIN_PASSWORD} + image: qyg2297248353/mediacms:v4.1.0 + restart: on-failure + volumes: + - ${MEDIACMS_ROOT_PATH}/media_files/hls:/home/mediacms.io/mediacms/media_files/hls + - ${MEDIACMS_ROOT_PATH}/media_files/original:/home/mediacms.io/mediacms/media_files/original + - ${MEDIACMS_ROOT_PATH}/media_files/uploads:/home/mediacms.io/mediacms/media_files/uploads diff --git a/dockge/mediacms/envs/default.env b/dockge/mediacms/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/mediacms/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/mediacms/envs/global.env b/dockge/mediacms/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/mediacms/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/metatube-server/.env b/dockge/metatube-server/.env new file mode 100644 index 00000000..3b5aeb82 --- /dev/null +++ b/dockge/metatube-server/.env @@ -0,0 +1,33 @@ +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# 数据持久化路径 [必填] +METATUBE_ROOT_PATH=/home/metatube + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 访问令牌 [必填] +TOKEN= + +# 数据库 主机地址 [必填] +POSTGRES_HOST=127.0.0.1 + +# 数据库 端口 [必填] +POSTGRES_PORT=5432 + +# 数据库 名称 [必填] +POSTGRES_NAME=metatube + +# 数据库 用户名 [必填] +POSTGRES_USER=metatube + +# 数据库 密码 [必填] +POSTGRES_PASSWORD= + +# 请求超时时间 [必填] +REQUEST_TIMEOUT=1m + +# 网络代理 (HTTP/Socket5) +HTTP_PROXY= + diff --git a/dockge/metatube-server/docker-compose.yml b/dockge/metatube-server/docker-compose.yml new file mode 100644 index 00000000..382ae242 --- /dev/null +++ b/dockge/metatube-server/docker-compose.yml @@ -0,0 +1,27 @@ +networks: + 1panel-network: + external: true +services: + metatube-server: + command: -dsn "postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_NAME}" + -port 8080 -db-auto-migrate -db-prepared-stmt + container_name: metatube-server + env_file: + - ./envs/global.env + - .env + environment: + - HTTPS_PROXY=${HTTP_PROXY} + - DB_MAX_IDLE_CONNS=0 + - DB_MAX_OPEN_CONNS=0 + - DB_PREPARED_STMT=false + - DB_AUTO_MIGRATE=true + image: metatube/metatube-server:1.2.8 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${METATUBE_ROOT_PATH}/data:/var/run diff --git a/dockge/metatube-server/envs/default.env b/dockge/metatube-server/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/metatube-server/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/metatube-server/envs/global.env b/dockge/metatube-server/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/metatube-server/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/minio/.env b/dockge/minio/.env new file mode 100644 index 00000000..bca2652a --- /dev/null +++ b/dockge/minio/.env @@ -0,0 +1,36 @@ +# 数据持久化路径 [必填] +MINIO_ROOT_PATH=/home/minio + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=9001 + +# API 端口 (映射内部端口) [必填] +PANEL_APP_PORT_API=9000 + +# API 内部端口 [必填] +MINIO_API_PORT=9000 + +# 管理员 用户名 [必填] +MINIO_ROOT_USER=minio + +# 管理员 密码 [必填] +MINIO_ROOT_PASSWORD= + +# 启用 WebUI [必填] +MINIO_BROWSER=on + +# WebUI 登录动画 [必填] +MINIO_BROWSER_LOGIN_ANIMATION=on + +# 会话持续时间 (s/秒 m/分钟 h/小时 d/天) [必填] +MINIO_BROWSER_SESSION_DURATION=12h + +# API 服务器 URL [必填] +MINIO_SERVER_URL=http://127.0.0.1:9000 + +# API 域名 [必填] +MINIO_SERVER_HOST=localhost + +# WebUI 重定向 URL [必填] +MINIO_BROWSER_REDIRECT_URL=http://127.0.0.1:9001 + diff --git a/dockge/minio/docker-compose.yml b/dockge/minio/docker-compose.yml new file mode 100644 index 00000000..e4b90277 --- /dev/null +++ b/dockge/minio/docker-compose.yml @@ -0,0 +1,34 @@ +networks: + 1panel-network: + external: true +services: + minio: + command: server --console-address :${PANEL_APP_PORT_HTTP} --address :${MINIO_API_PORT} + --json + container_name: minio + env_file: + - ./envs/global.env + - .env + environment: + - MINIO_VOLUMES=/data + - MINIO_API_ROOT_ACCESS=on + - MINIO_BROWSER_REDIRECT=true + extra_hosts: + - ${MINIO_SERVER_HOST:-localhost}:127.0.0.1 + image: minio/minio:RELEASE.2024-11-07T00-52-20Z.fips + labels: + createdBy: Apps + logging: + driver: json-file + options: + max-file: '10' + max-size: 5M + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + - ${PANEL_APP_PORT_API}:${MINIO_API_PORT} + restart: always + volumes: + - ${MINIO_ROOT_PATH}/certs:/root/.minio/certs + - ${MINIO_ROOT_PATH}/data:/data diff --git a/dockge/minio/envs/default.env b/dockge/minio/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/minio/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/minio/envs/global.env b/dockge/minio/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/minio/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/movie-pilot/.env b/dockge/movie-pilot/.env new file mode 100644 index 00000000..f2b00857 --- /dev/null +++ b/dockge/movie-pilot/.env @@ -0,0 +1,33 @@ +# 数据持久化路径 [必填] +MOVIEPILOT_ROOT_PATH=/home/movie-pilot + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# API 端口 [必填] +PANEL_APP_PORT_API=3001 + +# 管理员用户名 [必填] +SUPERUSER=admin + +# API 令牌 [必填] +API_TOKEN=moviepilot + +# 网络代理 +PROXY_HOST= + +# 自动更新资源包 [必填] +AUTO_UPDATE_RESOURCE=false + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + +# IYUU登录令牌 +IYUU_SIGN= + diff --git a/dockge/movie-pilot/docker-compose.yml b/dockge/movie-pilot/docker-compose.yml new file mode 100644 index 00000000..8d788b9e --- /dev/null +++ b/dockge/movie-pilot/docker-compose.yml @@ -0,0 +1,39 @@ +networks: + 1panel-network: + external: true +services: + movie-pilot-v2: + container_name: movie-pilot + env_file: + - ./envs/global.env + - ./envs/movie-pilot.env + - .env + environment: + - NGINX_PORT=3000 + - PORT=3001 + - PUID=0 + - PGID=0 + - UMASK=022 + - HTTP_PROXY=${PROXY_HOST} + - HTTPS_PROXY=${PROXY_HOST} + image: jxxghp/moviepilot-v2:2.1.0 + labels: + createdBy: Apps + logging: + driver: json-file + options: + max-size: 5m + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + - ${PANEL_APP_PORT_API}:3001 + restart: always + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ${MOVIEPILOT_ROOT_PATH}/config:/config + - ${MOVIEPILOT_ROOT_PATH}/moviepilot:/moviepilot + - ${MOVIEPILOT_ROOT_PATH}/download:/download + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/movie-pilot/envs/default.env b/dockge/movie-pilot/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/movie-pilot/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/movie-pilot/envs/global.env b/dockge/movie-pilot/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/movie-pilot/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/movie-pilot/envs/movie-pilot.env b/dockge/movie-pilot/envs/movie-pilot.env new file mode 100644 index 00000000..78ba50bf --- /dev/null +++ b/dockge/movie-pilot/envs/movie-pilot.env @@ -0,0 +1,63 @@ +####################################################################### +# 【*】为必配项,其余为选配项,选配项可以删除整项配置项或者保留配置默认值 # +####################################################################### +# 【*】API监听地址(注意不是前端访问地址) +HOST=0.0.0.0 +# 是否调试模式,打开后将输出更多日志 +DEBUG=false +# 是否开发模式,打开后后台服务将不会启动 +DEV=false +# 日志级别(DEBUG、INFO、WARNING、ERROR等),当DEBUG=true时,此配置项将被忽略,日志级别始终为DEBUG +LOG_LEVEL=INFO +# 数据库连接池的大小,可适当降低如20-50以减少I/O压力 +DB_POOL_SIZE=100 +# 数据库连接池最大溢出连接数,可适当降低如0以减少I/O压力 +DB_MAX_OVERFLOW=500 +# SQLite 的 busy_timeout 参数,可适当增加如180以减少锁定错误 +DB_TIMEOUT=60 +# 【*】超级管理员,设置后一但重启将固化到数据库中,修改将无效(初始化超级管理员密码仅会生成一次,请在日志中查看并自行登录系统修改) +SUPERUSER=admin +# 辅助认证,允许通过外部服务进行认证、单点登录以及自动创建用户 +AUXILIARY_AUTH_ENABLE=false +# 大内存模式,开启后会增加缓存数量,但会占用更多内存 +BIG_MEMORY_MODE=false +# 是否启用DOH域名解析,启用后对于api.themovie.org等域名通过DOH解析,避免域名DNS被污染 +DOH_ENABLE=true +# 使用 DOH 解析的域名列表,多个域名使用`,`分隔 +DOH_DOMAINS=api.themoviedb.org,api.tmdb.org,webservice.fanart.tv,api.github.com,github.com,raw.githubusercontent.com,api.telegram.org +# DOH 解析服务器列表,多个服务器使用`,`分隔 +DOH_RESOLVERS=1.0.0.1,1.1.1.1,9.9.9.9,149.112.112.112 +# 元数据识别缓存过期时间,数字型,单位小时,0为系统默认(大内存模式为7天,滞则为3天),调大该值可减少themoviedb的访问次数 +META_CACHE_EXPIRE=0 +# 自动检查和更新站点资源包(索引、认证等) +AUTO_UPDATE_RESOURCE=true +# 【*】API密钥,未设置时系统将随机生成,建议使用复杂字符串,用于Jellyseerr/Overseerr、媒体服务器Webhook等配置以及部分支持API_TOKEN的API请求 +API_TOKEN='' +# 登录页面电影海报,tmdb/bing/mediaserver,tmdb要求能正常连接api.themoviedb.org +WALLPAPER=tmdb +# TMDB图片地址,无需修改需保留默认值,如果默认地址连通性不好可以尝试修改为:`static-mdb.v.geilijiasu.com` +TMDB_IMAGE_DOMAIN=image.tmdb.org +# TMDB API地址,无需修改需保留默认值,也可配置为`api.tmdb.org`或其它中转代理服务地址,能连通即可 +TMDB_API_DOMAIN=api.themoviedb.org +# 媒体识别来源 themoviedb/douban,使用themoviedb时需要确保能正常连接api.themoviedb.org,使用douban时不支持二级分类 +RECOGNIZE_SOURCE=themoviedb +# Fanart开关 +FANART_ENABLE=true +# 新增已入库媒体是否跟随TMDB信息变化,true/false,为false时即使TMDB信息变化时也会仍然按历史记录中已入库的信息进行刮削 +SCRAP_FOLLOW_TMDB=true +# 刮削来源 themoviedb/douban,使用themoviedb时需要确保能正常连接api.themoviedb.org,使用douban时会缺失部分信息 +SCRAP_SOURCE=themoviedb +# 电影重命名格式,Jinja2语法,参考:https://jinja.palletsprojects.com/en/3.0.x/templates/ +MOVIE_RENAME_FORMAT={{title}}{% if year %} ({{year}}){% endif %}/{{title}}{% if year %} ({{year}}){% endif %}{% if part %}-{{part}}{% endif %}{% if videoFormat %} - {{videoFormat}}{% endif %}{{fileExt}} +# 电视剧重命名格式,Jinja2语法,参考:https://jinja.palletsprojects.com/en/3.0.x/templates/ +TV_RENAME_FORMAT={{title}}{% if year %} ({{year}}){% endif %}/Season {{season}}/{{title}} - {{season_episode}}{% if part %}-{{part}}{% endif %}{% if episode %} - 第 {{episode}} 集{% endif %}{{fileExt}} +# 交互搜索自动下载用户ID(消息通知渠道的用户ID),使用,分割,设置为 all 代表所有用户自动择优下载,未设置需要用户手动选择资源或者回复`0`才自动择优下载 +AUTO_DOWNLOAD_USER= +# 自动下载站点字幕(如有) +DOWNLOAD_SUBTITLE=true +# OCR服务器地址 +OCR_HOST=https://movie-pilot.org +# 插件市场仓库地址,多个地址使用`,`分隔,保留最后的/ +PLUGIN_MARKET=https://github.com/jxxghp/MoviePilot-Plugins,https://github.com/thsrite/MoviePilot-Plugins,https://github.com/InfinityPacer/MoviePilot-Plugins,https://github.com/honue/MoviePilot-Plugins +# 搜索多个名称,true/false,为true时搜索时会同时搜索中英文及原始名称,搜索结果会更全面,但会增加搜索时间;为false时其中一个名称搜索到结果或全部名称搜索完毕即停止 +SEARCH_MULTIPLE_NAME=true diff --git a/dockge/movie-pilot_1_9_17/.env b/dockge/movie-pilot_1_9_17/.env new file mode 100644 index 00000000..a66ae0c6 --- /dev/null +++ b/dockge/movie-pilot_1_9_17/.env @@ -0,0 +1,138 @@ +# 数据持久化路径 [必填] +MOVIEPILOT_ROOT_PATH=/home/movie-pilot + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# API 端口 [必填] +PANEL_APP_PORT_API=3001 + +# 管理员用户名 [必填] +SUPERUSER=admin + +# API 令牌 [必填] +API_TOKEN=moviepilot + +# 网络代理 +PROXY_HOST= + +# 自动更新资源包 [必填] +AUTO_UPDATE_RESOURCES=false + +# 自动更新 [必填] +MOVIEPILOT_AUTO_UPDATE=false + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + +# IYUU登录令牌 +IYUU_SIGN= + +# hhclub 用户名 +HHCLUB_USERNAME= + +# hhclub 密钥 +HHCLUB_PASSKEY= + +# audiences 用户ID +AUDIENCES_UID= + +# audiences 密钥 +AUDIENCES_PASSKEY= + +# hddolby 用户ID +HDDOLBY_ID= + +# hddolby 密钥 +HDDOLBY_PASSKEY= + +# zmpt 用户ID +ZMPT_UID= + +# zmpt 密钥 +ZMPT_PASSKEY= + +# freefarm 用户ID +FREEFARM_UID= + +# freefarm 密钥 +FREEFARM_PASSKEY= + +# hdfans 用户ID +HDFANS_UID= + +# hdfans 密钥 +HDFANS_PASSKEY= + +# wintersakura 用户ID +WINTERSAKURA_UID= + +# wintersakura 密钥 +WINTERSAKURA_PASSKEY= + +# leaves 用户ID +LEAVES_UID= + +# leaves 密钥 +LEAVES_PASSKEY= + +# ptba 用户ID +PTBA_UID= + +# ptba 密钥 +PTBA_PASSKEY= + +# icc2022 用户ID +ICC2022_UID= + +# icc2022 密钥 +ICC2022_PASSKEY= + +# xingtan 用户ID +XINGTAN_UID= + +# xingtan 密钥 +XINGTAN_PASSKEY= + +# ptvicomo 用户ID +PTVICOMO_UID= + +# ptvicomo 密钥 +PTVICOMO_PASSKEY= + +# agsvpt 用户ID +AGSVPT_UID= + +# agsvpt 密钥 +AGSVPT_PASSKEY= + +# hdkyl 用户ID +HDKYL_UID= + +# hdkyl 密钥 +HDKYL_PASSKEY= + +# qingwa 用户ID +QINGWA_UID= + +# qingwa 密钥 +QINGWA_PASSKEY= + +# discfan 用户ID +DISCFAN_UID= + +# discfan 密钥 +DISCFAN_PASSKEY= + +# rousi 用户ID +ROUSI_UID= + +# rousi 密钥 +ROUSI_PASSKEY= + diff --git a/dockge/movie-pilot_1_9_17/docker-compose.yml b/dockge/movie-pilot_1_9_17/docker-compose.yml new file mode 100644 index 00000000..1e72340a --- /dev/null +++ b/dockge/movie-pilot_1_9_17/docker-compose.yml @@ -0,0 +1,37 @@ +networks: + 1panel-network: + external: true +services: + movie-pilot: + container_name: movie-pilot + env_file: + - ./envs/global.env + - ./envs/movie-pilot.env + - .env + environment: + - NGINX_PORT=3000 + - PORT=3001 + - PUID=0 + - PGID=0 + - UMASK=022 + image: jxxghp/moviepilot:1.9.17 + labels: + createdBy: Apps + logging: + driver: json-file + options: + max-size: 5m + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + - ${PANEL_APP_PORT_API}:3001 + restart: always + volumes: + - /var/run/docker.sock:/var/run/docker.sock + - ${MOVIEPILOT_ROOT_PATH}/config:/config + - ${MOVIEPILOT_ROOT_PATH}/moviepilot:/moviepilot + - ${MOVIEPILOT_ROOT_PATH}/download:/download + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/movie-pilot_1_9_17/envs/default.env b/dockge/movie-pilot_1_9_17/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/movie-pilot_1_9_17/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/movie-pilot_1_9_17/envs/global.env b/dockge/movie-pilot_1_9_17/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/movie-pilot_1_9_17/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/movie-pilot_1_9_17/envs/movie-pilot.env b/dockge/movie-pilot_1_9_17/envs/movie-pilot.env new file mode 100644 index 00000000..d244ac86 --- /dev/null +++ b/dockge/movie-pilot_1_9_17/envs/movie-pilot.env @@ -0,0 +1,53 @@ +####################################################################### +# 【*】为必配项,其余为选配项,选配项可以删除整项配置项或者保留配置默认值 # +####################################################################### +# 【*】API监听地址(注意不是前端访问地址) +HOST=0.0.0.0 +# 是否调试模式,打开后将输出更多日志 +DEBUG=false +# 是否开发模式,打开后后台服务将不会启动 +DEV=false +# 【*】超级管理员,设置后一但重启将固化到数据库中,修改将无效(初始化超级管理员密码仅会生成一次,请在日志中查看并自行登录系统修改) +SUPERUSER=admin +# 大内存模式,开启后会增加缓存数量,但会占用更多内存 +BIG_MEMORY_MODE=false +# 是否启用DOH域名解析,启用后对于api.themovie.org等域名通过DOH解析,避免域名DNS被污染 +DOH_ENABLE=true +# 元数据识别缓存过期时间,数字型,单位小时,0为系统默认(大内存模式为7天,滞则为3天),调大该值可减少themoviedb的访问次数 +META_CACHE_EXPIRE=0 +# 自动检查和更新站点资源包(索引、认证等) +AUTO_UPDATE_RESOURCE=true +# 【*】API密钥,建议更换复杂字符串,有Jellyseerr/Overseerr、媒体服务器Webhook等配置以及部分支持API_TOKEN的API中使用 +API_TOKEN=moviepilot +# 登录页面电影海报,tmdb/bing,tmdb要求能正常连接api.themoviedb.org +WALLPAPER=tmdb +# TMDB图片地址,无需修改需保留默认值,如果默认地址连通性不好可以尝试修改为:`static-mdb.v.geilijiasu.com` +TMDB_IMAGE_DOMAIN=image.tmdb.org +# TMDB API地址,无需修改需保留默认值,也可配置为`api.tmdb.org`或其它中转代理服务地址,能连通即可 +TMDB_API_DOMAIN=api.themoviedb.org +# 媒体识别来源 themoviedb/douban,使用themoviedb时需要确保能正常连接api.themoviedb.org,使用douban时不支持二级分类 +RECOGNIZE_SOURCE=themoviedb +# Fanart开关 +FANART_ENABLE=true +# 新增已入库媒体是否跟随TMDB信息变化,true/false,为false时即使TMDB信息变化时也会仍然按历史记录中已入库的信息进行刮削 +SCRAP_FOLLOW_TMDB=true +# 刮削来源 themoviedb/douban,使用themoviedb时需要确保能正常连接api.themoviedb.org,使用douban时会缺失部分信息 +SCRAP_SOURCE=themoviedb +# 电影重命名格式,Jinja2语法,参考:https://jinja.palletsprojects.com/en/3.0.x/templates/ +MOVIE_RENAME_FORMAT={{title}}{% if year %} ({{year}}){% endif %}/{{title}}{% if year %} ({{year}}){% endif %}{% if part %}-{{part}}{% endif %}{% if videoFormat %} - {{videoFormat}}{% endif %}{{fileExt}} +# 电视剧重命名格式,Jinja2语法,参考:https://jinja.palletsprojects.com/en/3.0.x/templates/ +TV_RENAME_FORMAT={{title}}{% if year %} ({{year}}){% endif %}/Season {{season}}/{{title}} - {{season_episode}}{% if part %}-{{part}}{% endif %}{% if episode %} - 第 {{episode}} 集{% endif %}{{fileExt}} +# 交互搜索自动下载用户ID(消息通知渠道的用户ID),使用,分割,设置为 all 代表所有用户自动择优下载,未设置需要用户手动选择资源或者回复`0`才自动择优下载 +AUTO_DOWNLOAD_USER= +# 自动下载站点字幕(如有) +DOWNLOAD_SUBTITLE=true +# OCR服务器地址 +OCR_HOST=https://movie-pilot.org +# 插件市场仓库地址,多个地址使用`,`分隔,保留最后的/ +PLUGIN_MARKET=https://github.com/jxxghp/MoviePilot-Plugins,https://github.com/thsrite/MoviePilot-Plugins,https://github.com/InfinityPacer/MoviePilot-Plugins,https://github.com/honue/MoviePilot-Plugins +# 搜索多个名称,true/false,为true时搜索时会同时搜索中英文及原始名称,搜索结果会更全面,但会增加搜索时间;为false时其中一个名称搜索到结果或全部名称搜索完毕即停止 +SEARCH_MULTIPLE_NAME=true + + +# 自定义配置 +AUTH_SITE="iyuu,hhclub,audiences,hddolby,zmpt,freefarm,hdfans,wintersakura,leaves,ptba,icc2022,xingtan,ptvicomo,agsvpt,hdkyl,qingwa,discfan,haidan,rousi" diff --git a/dockge/mysql/.env b/dockge/mysql/.env new file mode 100644 index 00000000..1706799c --- /dev/null +++ b/dockge/mysql/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +MYSQL_ROOT_PATH=/home/mysql + +# 连接端口 [必填] +PANEL_APP_PORT_HTTP=3306 + +# 管理员密码 [必填] +MYSQL_ROOT_PASSWORD= + diff --git a/dockge/mysql/config/my.cnf b/dockge/mysql/config/my.cnf new file mode 100644 index 00000000..c53ca32d --- /dev/null +++ b/dockge/mysql/config/my.cnf @@ -0,0 +1,20 @@ +[mysqld] +host_cache_size=0 +skip-name-resolve +datadir=/var/lib/mysql +socket=/var/run/mysqld/mysqld.sock +user=mysql + +mysql_native_password=ON +character_set_server=utf8mb4 +collation_server=utf8mb4_unicode_ci +lower_case_table_names=1 +group_concat_max_len=1024000 +log_bin_trust_function_creators=1 + +secure_file_priv= +pid_file=/var/run/mysqld/mysqld.pid +[client] +socket=/var/run/mysqld/mysqld.sock + +!includedir /etc/mysql/conf.d/ diff --git a/dockge/mysql/docker-compose.yml b/dockge/mysql/docker-compose.yml new file mode 100644 index 00000000..12a1d98e --- /dev/null +++ b/dockge/mysql/docker-compose.yml @@ -0,0 +1,28 @@ +networks: + 1panel-network: + external: true +services: + mysql: + command: + - --character-set-server=utf8mb4 + - --collation-server=utf8mb4_unicode_ci + - --mysql-native-password=ON + container_name: mysql + env_file: + - ./envs/global.env + - .env + image: mysql:8.4.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3306 + restart: always + user: 1000:1000 + volumes: + - ${MYSQL_ROOT_PATH}/data:/var/lib/mysql + - ${MYSQL_ROOT_PATH}/config/my.cnf:/etc/my.cnf + - ${MYSQL_ROOT_PATH}/log:/var/log/mysql + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro diff --git a/dockge/mysql/envs/default.env b/dockge/mysql/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/mysql/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/mysql/envs/global.env b/dockge/mysql/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/mysql/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/mysql_5_7_44/.env b/dockge/mysql_5_7_44/.env new file mode 100644 index 00000000..1706799c --- /dev/null +++ b/dockge/mysql_5_7_44/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +MYSQL_ROOT_PATH=/home/mysql + +# 连接端口 [必填] +PANEL_APP_PORT_HTTP=3306 + +# 管理员密码 [必填] +MYSQL_ROOT_PASSWORD= + diff --git a/dockge/mysql_5_7_44/config/my.cnf b/dockge/mysql_5_7_44/config/my.cnf new file mode 100644 index 00000000..6d6e1a93 --- /dev/null +++ b/dockge/mysql_5_7_44/config/my.cnf @@ -0,0 +1,42 @@ +# For advice on how to change settings please see +# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html + +[mysqld] +# +# Remove leading # and set to the amount of RAM for the most important data +# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. +# innodb_buffer_pool_size = 128M +# +# Remove leading # to turn on a very important data integrity option: logging +# changes to the binary log between backups. +# log_bin +# +# Remove leading # to set options mainly useful for reporting servers. +# The server defaults are faster for transactions and fast SELECTs. +# Adjust sizes as needed, experiment to find the optimal values. +# join_buffer_size = 128M +# sort_buffer_size = 2M +# read_rnd_buffer_size = 2M +skip-host-cache +skip-name-resolve +datadir=/var/lib/mysql +socket=/var/run/mysqld/mysqld.sock +secure-file-priv=/var/lib/mysql-files +user=mysql + +# Disabling symbolic-links is recommended to prevent assorted security risks +symbolic-links=0 + +#log-error=/var/log/mysqld.log +pid-file=/var/run/mysqld/mysqld.pid + +max_allowed_packet=64M +character_set_server=utf8mb4 +lower_case_table_names=1 +group_concat_max_len=1024000 + +[client] +socket=/var/run/mysqld/mysqld.sock + +!includedir /etc/mysql/conf.d/ +!includedir /etc/mysql/mysql.conf.d/ diff --git a/dockge/mysql_5_7_44/docker-compose.yml b/dockge/mysql_5_7_44/docker-compose.yml new file mode 100644 index 00000000..5cac14f4 --- /dev/null +++ b/dockge/mysql_5_7_44/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + mysql: + command: + - --character-set-server=utf8mb4 + - --lower_case_table_names=1 + - --collation-server=utf8mb4_general_ci + - --explicit_defaults_for_timestamp=true + container_name: mysql + env_file: + - ./envs/global.env + - .env + image: mysql:5.7.44 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3306 + restart: always + user: 1000:1000 + volumes: + - ${MYSQL_ROOT_PATH}/data/:/var/lib/mysql + - ${MYSQL_ROOT_PATH}/config/my.cnf:/etc/mysql/my.cnf + - ${MYSQL_ROOT_PATH}/log:/var/log/mysql + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro diff --git a/dockge/mysql_5_7_44/envs/default.env b/dockge/mysql_5_7_44/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/mysql_5_7_44/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/mysql_5_7_44/envs/global.env b/dockge/mysql_5_7_44/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/mysql_5_7_44/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/nacos/.env b/dockge/nacos/.env new file mode 100644 index 00000000..25c02493 --- /dev/null +++ b/dockge/nacos/.env @@ -0,0 +1,66 @@ +# MySQL 服务 (前置检查) [必填] +PANEL_DB_TYPE=mysql + +# 网络模式 [必填] +NETWORK_MODE=host + +# 数据持久化路径 [必填] +NACOS_ROOT_PATH=/home/nacos + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8848 + +# Nacos gRPC 客户端端口 [必填] +PANEL_APP_PORT_GRPC_CLIENT=9848 + +# Nacos gRPC 服务端端口 [必填] +PANEL_APP_PORT_GRPC_SERVER=9849 + +# IP模式/域名模式 [必填] +PREFER_HOST_MODE=ip + +# 服务IP [必填] +NACOS_SERVER_IP= + +# Nacos身份验证密钥键 [必填] +NACOS_AUTH_IDENTITY_KEY=serverIdentity + +# Nacos身份验证密钥值 [必填] +NACOS_AUTH_IDENTITY_VALUE=security + +# Nacos身份验证令牌(至少32位字符的Base64编码) [必填] +NACOS_AUTH_TOKEN=SecretKey012345678901234567890123456789012345678901234567890123456789 + +# JVM_XMS (初始内存大小) [必填] +JVM_XMS=512m + +# JVM_XMX (最大内存大小) [必填] +JVM_XMX=2g + +# JVM_XMN (新生代内存) [必填] +JVM_XMN=128m + +# JVM_MS (初始元空间大小) [必填] +JVM_MS=128m + +# JVM_MMS (最大元空间大小) [必填] +JVM_MMS=320m + +# 数据库 主机 [必填] +MYSQL_SERVICE_HOST=127.0.0.1 + +# 数据库 端口 [必填] +MYSQL_SERVICE_PORT=3306 + +# 数据库 用户名 [必填] +MYSQL_SERVICE_USER=nacos + +# 数据库 密码 [必填] +MYSQL_SERVICE_PASSWORD= + +# 数据库 名称 [必填] +MYSQL_SERVICE_DB_NAME=nacos + +# 数据库 连接参数 [必填] +MYSQL_SERVICE_DB_PARAM=characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true + diff --git a/dockge/nacos/docker-compose.yml b/dockge/nacos/docker-compose.yml new file mode 100644 index 00000000..a2dd1ec2 --- /dev/null +++ b/dockge/nacos/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + nacos: + container_name: nacos + env_file: + - ./envs/global.env + - .env + environment: + - MODE=standalone + - NACOS_SERVER_PORT=8848 + - NACOS_AUTH_ENABLE=true + - SPRING_DATASOURCE_PLATFORM=mysql + image: nacos/nacos-server:v2.4.3 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8848 + - ${PANEL_APP_PORT_GRPC_CLIENT}:9848 + - ${PANEL_APP_PORT_GRPC_SERVER}:9849 + restart: always + volumes: + - ${NACOS_ROOT_PATH}/logs:/home/nacos/logs + - ${NACOS_ROOT_PATH}/data:/home/nacos/data diff --git a/dockge/nacos/envs/default.env b/dockge/nacos/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/nacos/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/nacos/envs/global.env b/dockge/nacos/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/nacos/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/nacos/init/mysql-schema.sql b/dockge/nacos/init/mysql-schema.sql new file mode 100644 index 00000000..067d67a1 --- /dev/null +++ b/dockge/nacos/init/mysql-schema.sql @@ -0,0 +1,227 @@ +/* + * Copyright 1999-2018 Alibaba Group Holding Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * 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. + */ + +/******************************************/ +/* 表名称 = config_info */ +/******************************************/ +CREATE TABLE `config_info` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(128) DEFAULT NULL COMMENT 'group_id', + `content` longtext NOT NULL COMMENT 'content', + `md5` varchar(32) DEFAULT NULL COMMENT 'md5', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `src_user` text COMMENT 'source user', + `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', + `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', + `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', + `c_desc` varchar(256) DEFAULT NULL COMMENT 'configuration description', + `c_use` varchar(64) DEFAULT NULL COMMENT 'configuration usage', + `effect` varchar(64) DEFAULT NULL COMMENT '配置生效的描述', + `type` varchar(64) DEFAULT NULL COMMENT '配置的类型', + `c_schema` text COMMENT '配置的模式', + `encrypted_data_key` text NOT NULL COMMENT '密钥', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info'; + +/******************************************/ +/* 表名称 = config_info_aggr */ +/******************************************/ +CREATE TABLE `config_info_aggr` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(128) NOT NULL COMMENT 'group_id', + `datum_id` varchar(255) NOT NULL COMMENT 'datum_id', + `content` longtext NOT NULL COMMENT '内容', + `gmt_modified` datetime NOT NULL COMMENT '修改时间', + `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', + `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段'; + + +/******************************************/ +/* 表名称 = config_info_beta */ +/******************************************/ +CREATE TABLE `config_info_beta` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(128) NOT NULL COMMENT 'group_id', + `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', + `content` longtext NOT NULL COMMENT 'content', + `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps', + `md5` varchar(32) DEFAULT NULL COMMENT 'md5', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `src_user` text COMMENT 'source user', + `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', + `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', + `encrypted_data_key` text NOT NULL COMMENT '密钥', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta'; + +/******************************************/ +/* 表名称 = config_info_tag */ +/******************************************/ +CREATE TABLE `config_info_tag` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(128) NOT NULL COMMENT 'group_id', + `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id', + `tag_id` varchar(128) NOT NULL COMMENT 'tag_id', + `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', + `content` longtext NOT NULL COMMENT 'content', + `md5` varchar(32) DEFAULT NULL COMMENT 'md5', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `src_user` text COMMENT 'source user', + `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag'; + +/******************************************/ +/* 表名称 = config_tags_relation */ +/******************************************/ +CREATE TABLE `config_tags_relation` +( + `id` bigint(20) NOT NULL COMMENT 'id', + `tag_name` varchar(128) NOT NULL COMMENT 'tag_name', + `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(128) NOT NULL COMMENT 'group_id', + `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id', + `nid` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增长标识', + PRIMARY KEY (`nid`), + UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`), + KEY `idx_tenant_id` (`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation'; + +/******************************************/ +/* 表名称 = group_capacity */ +/******************************************/ +CREATE TABLE `group_capacity` +( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群', + `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值', + `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量', + `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', + `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值', + `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', + `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_group_id` (`group_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表'; + +/******************************************/ +/* 表名称 = his_config_info */ +/******************************************/ +CREATE TABLE `his_config_info` +( + `id` bigint(20) unsigned NOT NULL COMMENT 'id', + `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT 'nid, 自增标识', + `data_id` varchar(255) NOT NULL COMMENT 'data_id', + `group_id` varchar(128) NOT NULL COMMENT 'group_id', + `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name', + `content` longtext NOT NULL COMMENT 'content', + `md5` varchar(32) DEFAULT NULL COMMENT 'md5', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + `src_user` text COMMENT 'source user', + `src_ip` varchar(50) DEFAULT NULL COMMENT 'source ip', + `op_type` char(10) DEFAULT NULL COMMENT 'operation type', + `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段', + `encrypted_data_key` text NOT NULL COMMENT '密钥', + PRIMARY KEY (`nid`), + KEY `idx_gmt_create` (`gmt_create`), + KEY `idx_gmt_modified` (`gmt_modified`), + KEY `idx_did` (`data_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造'; + + +/******************************************/ +/* 表名称 = tenant_capacity */ +/******************************************/ +CREATE TABLE `tenant_capacity` +( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID', + `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID', + `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值', + `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量', + `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值', + `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数', + `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值', + `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量', + `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', + `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_tenant_id` (`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表'; + + +CREATE TABLE `tenant_info` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id', + `kp` varchar(128) NOT NULL COMMENT 'kp', + `tenant_id` varchar(128) default '' COMMENT 'tenant_id', + `tenant_name` varchar(128) default '' COMMENT 'tenant_name', + `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc', + `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source', + `gmt_create` bigint(20) NOT NULL COMMENT '创建时间', + `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间', + PRIMARY KEY (`id`), + UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`), + KEY `idx_tenant_id` (`tenant_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info'; + +CREATE TABLE `users` +( + `username` varchar(50) NOT NULL PRIMARY KEY COMMENT 'username', + `password` varchar(500) NOT NULL COMMENT 'password', + `enabled` boolean NOT NULL COMMENT 'enabled' +); + +CREATE TABLE `roles` +( + `username` varchar(50) NOT NULL COMMENT 'username', + `role` varchar(50) NOT NULL COMMENT 'role', + UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE +); + +CREATE TABLE `permissions` +( + `role` varchar(50) NOT NULL COMMENT 'role', + `resource` varchar(128) NOT NULL COMMENT 'resource', + `action` varchar(8) NOT NULL COMMENT 'action', + UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE +); + +INSERT INTO users (username, password, enabled) +VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE); + +INSERT INTO roles (username, role) +VALUES ('nacos', 'ROLE_ADMIN'); diff --git a/dockge/nexusphp/.env b/dockge/nexusphp/.env new file mode 100644 index 00000000..b655406b --- /dev/null +++ b/dockge/nexusphp/.env @@ -0,0 +1,18 @@ +# 数据持久化路径 [必填] +NEXUSPHP_ROOT_PATH=/home/nexusphp + +# 种子目录 [必填] +NEXUSPHP_TORRENTS_ROOT_PATH=/home/nexusphp + +# 上传器目录 [必填] +NEXUSPHP_BITBUCKET_ROOT_PATH=/home/nexusphp + +# 附件目录 [必填] +NEXUSPHP_ATTACHMENTS_ROOT_PATH=/home/nexusphp + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 应用密钥 [必填] +APP_KEY=base64:WUbN2wa2kl3E1VDW4iKaH3RBHw3hKY7BK0hWEkBZmGg= + diff --git a/dockge/nexusphp/docker-compose.yml b/dockge/nexusphp/docker-compose.yml new file mode 100644 index 00000000..ff26b016 --- /dev/null +++ b/dockge/nexusphp/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true +services: + nexusphp: + container_name: nexusphp + env_file: + - ./envs/global.env + - .env + image: qyg2297248353/nexusphp:v1.8.16 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${NEXUSPHP_ROOT_PATH}/config/.env.example:/var/www/html/.env.example + - ${NEXUSPHP_ROOT_PATH}/data:/var/www/html + - ${NEXUSPHP_TORRENTS_ROOT_PATH}/torrents:/var/www/html/torrents + - ${NEXUSPHP_BITBUCKET_ROOT_PATH}/bitbucket:/var/www/html/bitbucket + - ${NEXUSPHP_ATTACHMENTS_ROOT_PATH}/attachments:/var/www/html/attachments diff --git a/dockge/nexusphp/envs/default.env b/dockge/nexusphp/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/nexusphp/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/nexusphp/envs/global.env b/dockge/nexusphp/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/nexusphp/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/nexusphp/envs/nexusphp.env b/dockge/nexusphp/envs/nexusphp.env new file mode 100644 index 00000000..9fe2c609 --- /dev/null +++ b/dockge/nexusphp/envs/nexusphp.env @@ -0,0 +1,94 @@ +APP_NAME=NexusPHP +APP_ENV=local +APP_KEY=base64:WUbN2wa2kl3E1VDW4iKaH3RBHw3hKY7BK0hWEkBZmGg= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack +LOG_LEVEL=debug + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=nexusphp +DB_USERNAME=root +DB_PASSWORD= + +BROADCAST_DRIVER=log +CACHE_DRIVER=redis +QUEUE_CONNECTION=redis +SESSION_DRIVER=file +SESSION_LIFETIME=120 + +MEMCACHED_HOST=127.0.0.1 + +MAIL_MAILER=smtp +MAIL_HOST=mailhog +MAIL_PORT=1025 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null +MAIL_FROM_ADDRESS=null +MAIL_FROM_NAME="${APP_NAME}" + +AWS_ACCESS_KEY_ID= +AWS_SECRET_ACCESS_KEY= +AWS_DEFAULT_REGION=us-east-1 +AWS_BUCKET= + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_APP_CLUSTER=mt1 + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" + + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD= +REDIS_PORT=6379 +REDIS_DB=0 + +USE_CRON_TRIGGER_CLEANUP=true + +LOG_FILE=/tmp/nexus.log + +TIMEZONE=Asia/Shanghai + +GOOGLE_DRIVE_CLIENT_ID= +GOOGLE_DRIVE_CLIENT_SECRET= +GOOGLE_DRIVE_REFRESH_TOKEN= +GOOGLE_DRIVE_FOLDER_ID= + +GEOIP2_DATABASE=/var/www/html/geoip2/geoip2.mmdb + +ELASTICSEARCH_HOST= +ELASTICSEARCH_PORT= +ELASTICSEARCH_SCHEME= +ELASTICSEARCH_USER= +ELASTICSEARCH_PASS= +ELASTICSEARCH_SSL_VERIFICATION +ELASTICSEARCH_ENABLED= + +SFTP_HOST= +SFTP_USERNAME= +SFTP_PASSWORD= +SFTP_PORT= +SFTP_ROOT=/tmp + +UID_STARTS=10001 + +PHP_PATH= +NAS_TOOLS_KEY= +IYUU_SECRET= + +MEILISEARCH_SCHEME=http +MEILISEARCH_HOST=127.0.0.1 +MEILISEARCH_PORT=7700 +MEILISEARCH_MASTER_KEY= + +CACHE_KEY_AGENT_ALLOW=all_agent_allows +CACHE_KEY_AGENT_DENY=all_agent_denies +CHANNEL_NAME_SETTING=channel_setting +CHANNEL_NAME_MODEL_EVENT=channel_model_event diff --git a/dockge/nezha-dash/.env b/dockge/nezha-dash/.env new file mode 100644 index 00000000..50272d38 --- /dev/null +++ b/dockge/nezha-dash/.env @@ -0,0 +1,9 @@ +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# 哪吒服务地址 [必填] +NezhaBaseUrl= + +# 哪吒 API Token [必填] +NezhaAuth= + diff --git a/dockge/nezha-dash/docker-compose.yml b/dockge/nezha-dash/docker-compose.yml new file mode 100644 index 00000000..16db6c92 --- /dev/null +++ b/dockge/nezha-dash/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + nezha-dash: + container_name: nezha-dash + env_file: + - ./envs/global.env + - .env + environment: + - DefaultLocale=zh + - ForceShowAllServers=false + - NEXT_PUBLIC_NezhaFetchInterval=5000 + - NEXT_PUBLIC_ShowFlag=true + - NEXT_PUBLIC_DisableCartoon=false + - NEXT_PUBLIC_ShowTag=true + - NEXT_PUBLIC_ShowNetTransfer=false + - NEXT_PUBLIC_ForceUseSvgFlag=false + - NEXT_PUBLIC_CustomLogo=https://nezha-cf.buycoffee.top/apple-touch-icon.png + - NEXT_PUBLIC_CustomTitle=NezhaDash + - NEXT_PUBLIC_CustomDescription=NezhaDash is a dashboard for Nezha. + image: hamster1963/nezha-dash:v1.5.5 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + restart: always diff --git a/dockge/nezha-dash/envs/default.env b/dockge/nezha-dash/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/nezha-dash/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/nezha-dash/envs/global.env b/dockge/nezha-dash/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/nezha-dash/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/nezha/.env b/dockge/nezha/.env new file mode 100644 index 00000000..54509260 --- /dev/null +++ b/dockge/nezha/.env @@ -0,0 +1,33 @@ +# 数据持久化路径 [必填] +NEZHA_ROOT_PATH=/home/nezha + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8008 + +# gRPC 端口 [必填] +PANEL_APP_PORT_GRPC=5555 + +# OAuth 服务商 [必填] +OAUTH2_TYPE=github + +# 管理员账号ID [必填] +OAUTH2_ADMIN= + +# OAuth 客户端 ID [必填] +OAUTH2_CLIENTID= + +# OAuth 客户端 Secret [必填] +OAUTH2_CLIENTSECRET= + +# OAuth 端点 (可选) +OAUTH2_ENDPOINT= + +# 网站标题 [必填] +NZ_SITE_TITLE=哪吒监控 + +# Cookie 名称 (默认) [必填] +NZ_COOKIE_NAME=nezha-dashboard + +# 网站主题 (默认) [必填] +NZ_THEME=default + diff --git a/dockge/nezha/data/config-example.yaml b/dockge/nezha/data/config-example.yaml new file mode 100644 index 00000000..d063cf9f --- /dev/null +++ b/dockge/nezha/data/config-example.yaml @@ -0,0 +1,33 @@ +debug: false +httpport: 80 +language: zh-CN +grpcport: nz_grpc_port +oauth2: + type: "nz_oauth2_type" + admin: "nz_admin_logins" + clientid: "nz_github_oauth_client_id" + clientsecret: "nz_github_oauth_client_secret" + endpoint: "" +site: + brand: "nz_site_title" + cookiename: "nezha-dashboard" + theme: "default" +ddns: + enable: false + provider: "webhook" + accessid: "" + accesssecret: "" + webhookmethod: "" + webhookurl: "" + webhookrequestbody: "" + webhookheaders: "" + maxretries: 3 + profiles: + example: + provider: "" + accessid: "" + accesssecret: "" + webhookmethod: "" + webhookurl: "" + webhookrequestbody: "" + webhookheaders: "" diff --git a/dockge/nezha/docker-compose.yml b/dockge/nezha/docker-compose.yml new file mode 100644 index 00000000..ff7b23dd --- /dev/null +++ b/dockge/nezha/docker-compose.yml @@ -0,0 +1,20 @@ +networks: + 1panel-network: + external: true +services: + nezha-dashboard: + container_name: nezha + image: ghcr.io/naiba/nezha-dashboard:v0.20.13 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + - ${PANEL_APP_PORT_GRPC}:${PANEL_APP_PORT_GRPC} + restart: always + volumes: + - ${NEZHA_ROOT_PATH}/data:/dashboard/data + - ${NEZHA_ROOT_PATH}/static-custom/static:/dashboard/resource/static/custom + - ${NEZHA_ROOT_PATH}/theme-custom/template:/dashboard/resource/template/theme-custom + - ${NEZHA_ROOT_PATH}/dashboard-custom/template:/dashboard/resource/template/dashboard-custom diff --git a/dockge/nezha/envs/default.env b/dockge/nezha/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/nezha/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/nezha/envs/global.env b/dockge/nezha/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/nezha/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/nginx-ui/.env b/dockge/nginx-ui/.env new file mode 100644 index 00000000..654572fa --- /dev/null +++ b/dockge/nginx-ui/.env @@ -0,0 +1,30 @@ +# 数据持久化路径 [必填] +NGINX_UI_ROOT_PATH=/home/nginx-ui + +# Web UI 端口 [必填] +PANEL_APP_PORT_HTTP=80 + +# Web UI 端口 (HTTPS) [必填] +PANEL_APP_PORT_HTTPS=443 + +# 管理员邮箱 [必填] +ADMINMAIL= + +# 管理员密码 [必填] +ADMINPASS= + +# JWT 密钥盐 [必填] +NGINX_UI_SERVER_JWT_SECRET= + +# GitHub 代理地址 +NGINX_UI_SERVER_GITHUB_PROXY=https://mirror.ghproxy.com/ + +# Nginx UI 显示标题 [必填] +NGINX_UI_SERVER_NAME=Nginx UI + +# 预设用户名 +NGINX_UI_PREDEFINED_USER_NAME= + +# 预设密码 +NGINX_UI_PREDEFINED_USER_PASSWORD= + diff --git a/dockge/nginx-ui/docker-compose.yml b/dockge/nginx-ui/docker-compose.yml new file mode 100644 index 00000000..c00ca948 --- /dev/null +++ b/dockge/nginx-ui/docker-compose.yml @@ -0,0 +1,35 @@ +networks: + 1panel-network: + external: true +services: + nginx-ui: + container_name: nginx-ui + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + - NGINX_UI_SERVER_HTTP_HOST=0.0.0.0 + - NGINX_UI_SERVER_HTTP_PORT=9000 + - NGINX_UI_SERVER_RUN_MODE=release + - NGINX_UI_SERVER_HTTP_CHALLENGE_PORT=9180 + - NGINX_UI_SERVER_DATABASE=database + - NGINX_UI_SERVER_START_CMD=login + - NGINX_UI_SERVER_START_CMD=database + - NGINX_UI_SERVER_PAGE_SIZE=10 + - NGINX_UI_SERVER_CERT_RENEWAL_INTERVAL=7 + - NGINX_UI_SERVER_SKIP_INSTALLATION=true + image: uozi/nginx-ui:v2.0.0-beta.39 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + - ${PANEL_APP_PORT_HTTPS}:443 + restart: always + stdin_open: true + volumes: + - ${NGINX_UI_ROOT_PATH}/nginx:/etc/nginx + - ${NGINX_UI_ROOT_PATH}/nginx-ui:/etc/nginx-ui + - ${NGINX_UI_ROOT_PATH}/www:/var/www diff --git a/dockge/nginx-ui/envs/default.env b/dockge/nginx-ui/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/nginx-ui/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/nginx-ui/envs/global.env b/dockge/nginx-ui/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/nginx-ui/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/nocodb/.env b/dockge/nocodb/.env new file mode 100644 index 00000000..87a525b2 --- /dev/null +++ b/dockge/nocodb/.env @@ -0,0 +1,57 @@ +# 数据库 服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化路径 [必填] +NOCODB_ROOT_PATH=/home/nocodb + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 管理员邮箱 [必填] +NC_ADMIN_EMAIL= + +# 管理员密码 [必填] +NC_ADMIN_PASSWORD= + +# 数据加密密钥 [必填] +NC_AUTH_JWT_SECRET= + +# 数据库 类型 [必填] +DB_TYPE=pg + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 用户名 [必填] +DB_USER=nocodb + +# 数据库 密码 [必填] +DB_PASSWD= + +# 数据库 名称 [必填] +DB_NAME=nocodb + +# Redis 缓存地址 +NC_REDIS_URL= + +# 域名 +NC_PUBLIC_URL= + +# 邮件服务器地址 +NC_SMTP_HOST= + +# 邮件服务器端口 +NC_SMTP_PORT=465 + +# 邮件服务用户名 +NC_SMTP_USERNAME= + +# 邮件服务密码 +NC_SMTP_PASSWORD= + +# 邮件服务发件人 +NC_SMTP_FROM= + diff --git a/dockge/nocodb/docker-compose.yml b/dockge/nocodb/docker-compose.yml new file mode 100644 index 00000000..3072d3cc --- /dev/null +++ b/dockge/nocodb/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + nocodb: + container_name: nocodb + env_file: + - ./envs/global.env + - .env + environment: + - PORT=8080 + - NC_ALLOW_LOCAL_HOOKS=false + - NC_DISABLE_CACHE=false + - NC_DISABLE_TELE=true + - NC_DASHBOARD_URL=/dashboard + - NUXT_PUBLIC_NC_BACKEND_URL=http://localhost:8080 + - NC_SMTP_SECURE=true + - NC_SMTP_IGNORE_TLS=false + - NC_DB=${DB_TYPE}://${DB_HOSTNAME}:${DB_PORT}?u=${DB_USER}&p=${DB_PASSWD}&d=${DB_NAME} + image: nocodb/nocodb:0.258.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${NOCODB_ROOT_PATH}/data:/usr/app/data diff --git a/dockge/nocodb/envs/default.env b/dockge/nocodb/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/nocodb/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/nocodb/envs/global.env b/dockge/nocodb/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/nocodb/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/onedev/.env b/dockge/onedev/.env new file mode 100644 index 00000000..e7ab9a0b --- /dev/null +++ b/dockge/onedev/.env @@ -0,0 +1,24 @@ +# 数据持久化路径 [必填] +ONEDEV_ROOT_PATH=/home/onedev + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=6610 + +# SSH 端口 [必填] +PANEL_APP_PORT_SSH=6611 + +# 管理员帐户 +INITIAL_USER=root + +# 管理员密码 +INITIAL_PASSWORD= + +# 管理员电子邮件 +INITIAL_EMAIL= + +# 服务端地址 +INITIAL_SERVER_URL= + +# SSH 服务端地址 +INITIAL_SSH_ROOT_URL= + diff --git a/dockge/onedev/docker-compose.yml b/dockge/onedev/docker-compose.yml new file mode 100644 index 00000000..5a8b9b3d --- /dev/null +++ b/dockge/onedev/docker-compose.yml @@ -0,0 +1,28 @@ +networks: + 1panel-network: + external: true +services: + onedev: + container_name: onedev + env_file: + - ./envs/global.env + - ./envs/onedev.env + - .env + environment: + - initial_user=${INITIAL_USER} + - initial_password=${INITIAL_PASSWORD} + - initial_email=${INITIAL_EMAIL} + - initial_server_url=${INITIAL_SERVER_URL} + - initial_ssh_root_url=${INITIAL_SSH_ROOT_URL} + image: 1dev/server:11.5.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:6610 + - ${PANEL_APP_PORT_SSH}:6611 + restart: always + volumes: + - ${ONEDEV_ROOT_PATH}/data:/opt/onedev + - /var/run/docker.sock:/var/run/docker.sock diff --git a/dockge/onedev/envs/default.env b/dockge/onedev/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/onedev/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/onedev/envs/global.env b/dockge/onedev/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/onedev/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/onedev/envs/onedev.env b/dockge/onedev/envs/onedev.env new file mode 100644 index 00000000..134c16dd --- /dev/null +++ b/dockge/onedev/envs/onedev.env @@ -0,0 +1,29 @@ +# 外部数据库支持配置 + +# PostgreSQL +# hibernate_dialect=io.onedev.server.persistence.PostgreSQLDialect +# hibernate_connection_driver_class=org.postgresql.Driver +# hibernate_connection_url=jdbc:postgresql://localhost:5432/onedev +# hibernate_connection_username=postgres +# hibernate_connection_password=postgres + +# MySQL +# hibernate_dialect=org.hibernate.dialect.MySQL5InnoDBDialect +# hibernate_connection_driver_class=com.mysql.cj.jdbc.Driver +# hibernate_connection_url=jdbc:mysql://localhost:3306/onedev?serverTimezone=UTC&allowPublicKeyRetrieval=true&useSSL=false&disableMariaDbDriver=true +# hibernate_connection_username=root +# hibernate_connection_password=root + +# MariaDB +# hibernate_dialect=org.hibernate.dialect.MySQL5InnoDBDialect +# hibernate_connection_driver_class=org.mariadb.jdbc.Driver +# hibernate_connection_url=jdbc:mariadb://localhost:3306/onedev +# hibernate_connection_username=root +# hibernate_connection_password=root + +# MS SQL Server +# hibernate_dialect=org.hibernate.dialect.SQLServer2012Dialect +# hibernate_connection_driver_class=com.microsoft.sqlserver.jdbc.SQLServerDriver +# hibernate_connection_url=jdbc:sqlserver://localhost:1433;databaseName=onedev +# hibernate_connection_username=sa +# hibernate_connection_password=sa diff --git a/dockge/openfire/.env b/dockge/openfire/.env new file mode 100644 index 00000000..dd4f4559 --- /dev/null +++ b/dockge/openfire/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +OPENFIRE_ROOT_PATH=/home/openfire + +# WebUI 端口 (HTTP) [必填] +PANEL_APP_PORT_HTTP=9090 + +# WebUI 端口 (HTTPS) [必填] +PANEL_APP_PORT_HTTPS=9091 + +# 服务端口 [必填] +PANEL_APP_PORT_SERVER=5222 + +# 消息服务端口 [必填] +PANEL_APP_PORT_MESSAGE=7777 + diff --git a/dockge/openfire/docker-compose.yml b/dockge/openfire/docker-compose.yml new file mode 100644 index 00000000..18d3bc56 --- /dev/null +++ b/dockge/openfire/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true +services: + openfire: + container_name: openfire + env_file: + - ./envs/global.env + - .env + image: nasqueron/openfire:4.9.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:9090 + - ${PANEL_APP_PORT_WSS}:9091 + - ${PANEL_APP_PORT_SERVER}:5222 + - ${PANEL_APP_PORT_MESSAGE}:7777 + restart: always + volumes: + - ${OPENFIRE_ROOT_PATH}/data:/var/lib/openfire + - ${OPENFIRE_ROOT_PATH}/logs:/var/log/openfire diff --git a/dockge/openfire/envs/default.env b/dockge/openfire/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/openfire/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/openfire/envs/global.env b/dockge/openfire/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/openfire/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/outline/.env b/dockge/outline/.env new file mode 100644 index 00000000..b19151eb --- /dev/null +++ b/dockge/outline/.env @@ -0,0 +1,108 @@ +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# 数据持久化路径 [必填] +OUTLINE_ROOT_PATH=/home/outline + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# 加密密钥 [必填] +SECRET_KEY=fbad4f5da794acbc10f060cdfcf8673300f3302d87f076d7f6e781d4840e9c3d + +# 工具密钥 [必填] +UTILS_SECRET=b2be1c54acbfe6d965bda01e63195cc815e4743a6fb5ba5f82eae916d98989b5 + +# 域名 [必填] +URL=http://127.0.0.1:3000 + +# CDN 域名 +CDN_URL= + +# iFramely 地址 [必填] +IFRAMELY_URL=https://iframe.ly/api/iframely + +# iFramely 密钥 +IFRAMELY_API_KEY= + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 用户名 [必填] +DB_USERNAME=outline + +# 数据库 密码 [必填] +DB_PASSWORD= + +# 数据库 名称 [必填] +DB_DATABASE_NAME=outline + +# Redis 链接 [必填] +REDIS_URL=redis://localhost:6379 + +# Slack 客户端 ID (鉴权) +SLACK_CLIENT_ID= + +# Slack 客户端密钥 (鉴权) +SLACK_CLIENT_SECRET= + +# Google 客户端 ID (鉴权) +GOOGLE_CLIENT_ID= + +# Google 客户端密钥 (鉴权) +GOOGLE_CLIENT_SECRET= + +# Discord 客户端 ID (鉴权) +DISCORD_CLIENT_ID= + +# Discord 客户端密钥 (鉴权) +DISCORD_CLIENT_SECRET= + +# Discord 服务端 ID (鉴权) +DISCORD_SERVER_ID= + +# Discord 服务端角色 (鉴权) +DISCORD_SERVER_ROLES= + +# SMTP 主机 +SMTP_HOST= + +# SMTP 端口 +SMTP_PORT=465 + +# SMTP 用户名 +SMTP_USERNAME= + +# SMTP 密码 +SMTP_PASSWORD= + +# SMTP 发件人 +SMTP_FROM_EMAIL= + +# Slack 验证令牌 (Slack 集成) +SLACK_VERIFICATION_TOKEN= + +# Slack 应用ID (Slack 集成) +SLACK_APP_ID= + +# GitHub 客户端 ID (GitHub 集成) +GITHUB_CLIENT_ID= + +# GitHub 客户端密钥 (GitHub 集成) +GITHUB_CLIENT_SECRET= + +# GitHub 应用名称 (GitHub 集成) +GITHUB_APP_NAME= + +# GitHub 应用ID (GitHub 集成) +GITHUB_APP_ID= + +# GitHub 应用私钥 (GitHub 集成) +GITHUB_APP_PRIVATE_KEY= + diff --git a/dockge/outline/docker-compose.yml b/dockge/outline/docker-compose.yml new file mode 100644 index 00000000..8a45f39a --- /dev/null +++ b/dockge/outline/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + outline: + container_name: outline + env_file: + - ./envs/global.env + - ./envs/outline.env + - .env + environment: + - DATABASE_URL=postgres://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOSTNAME}:${DB_PORT}/${DB_DATABASE_NAME} + image: outlinewiki/outline:0.81.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + restart: always + volumes: + - ${OUTLINE_ROOT_PATH}/data:/var/lib/outline/data diff --git a/dockge/outline/envs/default.env b/dockge/outline/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/outline/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/outline/envs/global.env b/dockge/outline/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/outline/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/outline/envs/outline.env b/dockge/outline/envs/outline.env new file mode 100644 index 00000000..1e366c08 --- /dev/null +++ b/dockge/outline/envs/outline.env @@ -0,0 +1,224 @@ +# –––––––––––––––– REQUIRED –––––––––––––––– + +NODE_ENV=production + +# Generate a hex-encoded 32-byte random key. You should use `openssl rand -hex 32` +# in your terminal to generate a random value. +SECRET_KEY=generate_a_new_key + +# Generate a unique random key. The format is not important but you could still use +# `openssl rand -hex 32` in your terminal to produce this. +UTILS_SECRET=generate_a_new_key + +# For production point these at your databases, in development the default +# should work out of the box. +DATABASE_URL=postgres://user:pass@localhost:5432/outline +DATABASE_CONNECTION_POOL_MIN= +DATABASE_CONNECTION_POOL_MAX= +# Uncomment this to disable SSL for connecting to Postgres +PGSSLMODE=disable + +# For redis you can either specify an ioredis compatible url like this +REDIS_URL=redis://localhost:6379 +# or alternatively, if you would like to provide additional connection options, +# use a base64 encoded JSON connection option object. Refer to the ioredis documentation +# for a list of available options. +# Example: Use Redis Sentinel for high availability +# {"sentinels":[{"host":"sentinel-0","port":26379},{"host":"sentinel-1","port":26379}],"name":"mymaster"} +# REDIS_URL=ioredis://eyJzZW50aW5lbHMiOlt7Imhvc3QiOiJzZW50aW5lbC0wIiwicG9ydCI6MjYzNzl9LHsiaG9zdCI6InNlbnRpbmVsLTEiLCJwb3J0IjoyNjM3OX1dLCJuYW1lIjoibXltYXN0ZXIifQ== + +# URL should point to the fully qualified, publicly accessible URL. If using a +# proxy the port in URL and PORT may be different. +URL=http://127.0.0.1:3000 +PORT=3000 + +# See [documentation](docs/SERVICES.md) on running a separate collaboration +# server, for normal operation this does not need to be set. +COLLABORATION_URL= + +# Specify what storage system to use. Possible value is one of "s3" or "local". +# For "local", the avatar images and document attachments will be saved on local disk. +FILE_STORAGE=local + +# If "local" is configured for FILE_STORAGE above, then this sets the parent directory under +# which all attachments/images go. Make sure that the process has permissions to create +# this path and also to write files to it. +FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data + +# Maximum allowed size for the uploaded attachment. +FILE_STORAGE_UPLOAD_MAX_SIZE=262144000 + +# Override the maximum size of document imports, generally this should be lower +# than the document attachment maximum size. +FILE_STORAGE_IMPORT_MAX_SIZE= + +# Override the maximum size of workspace imports, these can be especially large +# and the files are temporary being automatically deleted after a period of time. +FILE_STORAGE_WORKSPACE_IMPORT_MAX_SIZE= + +# To support uploading of images for avatars and document attachments in a distributed +# architecture an s3-compatible storage can be configured if FILE_STORAGE=s3 above. +AWS_ACCESS_KEY_ID=get_a_key_from_aws +AWS_SECRET_ACCESS_KEY=get_the_secret_of_above_key +AWS_REGION=xx-xxxx-x +AWS_S3_ACCELERATE_URL= +AWS_S3_UPLOAD_BUCKET_URL=http://s3:4569 +AWS_S3_UPLOAD_BUCKET_NAME=bucket_name_here +AWS_S3_FORCE_PATH_STYLE=true +AWS_S3_ACL=private + +# –––––––––––––– AUTHENTICATION –––––––––––––– + +# Third party signin credentials, at least ONE OF EITHER Google, Slack, +# or Microsoft is required for a working installation or you'll have no sign-in +# options. + +# To configure Slack auth, you'll need to create an Application at +# => https://api.slack.com/apps +# +# When configuring the Client ID, add a redirect URL under "OAuth & Permissions": +# https:///auth/slack.callback +SLACK_CLIENT_ID=get_a_key_from_slack +SLACK_CLIENT_SECRET=get_the_secret_of_above_key + +# To configure Google auth, you'll need to create an OAuth Client ID at +# => https://console.cloud.google.com/apis/credentials +# +# When configuring the Client ID, add an Authorized redirect URI: +# https:///auth/google.callback +GOOGLE_CLIENT_ID= +GOOGLE_CLIENT_SECRET= + +# To configure Microsoft/Azure auth, you'll need to create an OAuth Client. See +# the guide for details on setting up your Azure App: +# => https://wiki.generaloutline.com/share/dfa77e56-d4d2-4b51-8ff8-84ea6608faa4 +AZURE_CLIENT_ID= +AZURE_CLIENT_SECRET= +AZURE_RESOURCE_APP_ID= + +# To configure generic OIDC auth, you'll need some kind of identity provider. +# See documentation for whichever IdP you use to acquire the following info: +# Redirect URI is https:///auth/oidc.callback +OIDC_CLIENT_ID= +OIDC_CLIENT_SECRET= +OIDC_AUTH_URI= +OIDC_TOKEN_URI= +OIDC_USERINFO_URI= +OIDC_LOGOUT_URI= + +# Specify which claims to derive user information from +# Supports any valid JSON path with the JWT payload +OIDC_USERNAME_CLAIM=preferred_username + +# Display name for OIDC authentication +OIDC_DISPLAY_NAME=OpenID Connect + +# Space separated auth scopes. +OIDC_SCOPES=openid profile email + +# To configure the GitHub integration, you'll need to create a GitHub App at +# => https://github.com/settings/apps +# +# When configuring the Client ID, add a redirect URL under "Permissions & events": +# https:///api/github.callback +GITHUB_CLIENT_ID= +GITHUB_CLIENT_SECRET= +GITHUB_APP_NAME= +GITHUB_APP_ID= +GITHUB_APP_PRIVATE_KEY= + +# To configure Discord auth, you'll need to create a Discord Application at +# => https://discord.com/developers/applications/ +# +# When configuring the Client ID, add a redirect URL under "OAuth2": +# https:///auth/discord.callback +DISCORD_CLIENT_ID= +DISCORD_CLIENT_SECRET= + +# DISCORD_SERVER_ID should be the ID of the Discord server that Outline is +# integrated with. +# Used to verify that the user is a member of the server as well as server +# metadata such as nicknames, server icon and name. +DISCORD_SERVER_ID= + +# DISCORD_SERVER_ROLES should be a comma separated list of role IDs that are +# allowed to access Outline. If this is not set, all members of the server +# will be allowed to access Outline. +# DISCORD_SERVER_ID and DISCORD_SERVER_ROLES must be set together. +DISCORD_SERVER_ROLES= + +# –––––––––––––––– OPTIONAL –––––––––––––––– + +# Base64 encoded private key and certificate for HTTPS termination. This is only +# required if you do not use an external reverse proxy. See documentation: +# https://wiki.generaloutline.com/share/1c922644-40d8-41fe-98f9-df2b67239d45 +SSL_KEY= +SSL_CERT= + +# If using a Cloudfront/Cloudflare distribution or similar it can be set below. +# This will cause paths to javascript, stylesheets, and images to be updated to +# the hostname defined in CDN_URL. In your CDN configuration the origin server +# should be set to the same as URL. +CDN_URL= + +# Auto-redirect to https in production. The default is true but you may set to +# false if you can be sure that SSL is terminated at an external loadbalancer. +FORCE_HTTPS=false + +# Have the installation check for updates by sending anonymized statistics to +# the maintainers +ENABLE_UPDATES=true + +# How many processes should be spawned. As a reasonable rule divide your servers +# available memory by 512 for a rough estimate +WEB_CONCURRENCY=1 + +# You can remove this line if your reverse proxy already logs incoming http +# requests and this ends up being duplicative +DEBUG=http + +# Configure lowest severity level for server logs. Should be one of +# error, warn, info, http, verbose, debug and silly +LOG_LEVEL=info + +# For a complete Slack integration with search and posting to channels the +# following configs are also needed, some more details +# => https://wiki.generaloutline.com/share/be25efd1-b3ef-4450-b8e5-c4a4fc11e02a +# +SLACK_VERIFICATION_TOKEN=your_token +SLACK_APP_ID=A0XXXXXXX +SLACK_MESSAGE_ACTIONS=true + +# Optionally enable Sentry (sentry.io) to track errors and performance, +# and optionally add a Sentry proxy tunnel for bypassing ad blockers in the UI: +# https://docs.sentry.io/platforms/javascript/troubleshooting/#using-the-tunnel-option) +SENTRY_DSN= +SENTRY_TUNNEL= + +# To support sending outgoing transactional emails such as "document updated" or +# "you've been invited" you'll need to provide authentication for an SMTP server +SMTP_HOST= +SMTP_PORT= +SMTP_USERNAME= +SMTP_PASSWORD= +SMTP_FROM_EMAIL= +SMTP_REPLY_EMAIL= +SMTP_TLS_CIPHERS= +SMTP_SECURE=true + +# The default interface language. See translate.getoutline.com for a list of +# available language codes and their rough percentage translated. +DEFAULT_LANGUAGE=zh_CN + +# Optionally enable rate limiter at application web server +RATE_LIMITER_ENABLED=true + +# Configure default throttling parameters for rate limiter +RATE_LIMITER_REQUESTS=1000 +RATE_LIMITER_DURATION_WINDOW=60 + +# Iframely API config +# https://iframe.ly/api/oembed +# https://iframe.ly/api/iframely +IFRAMELY_URL=https://iframe.ly/api/iframely +# IFRAMELY_API_KEY= diff --git a/dockge/page-spy-web/.env b/dockge/page-spy-web/.env new file mode 100644 index 00000000..ae48894f --- /dev/null +++ b/dockge/page-spy-web/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +PAGE_SPY_WEB_ROOT_PATH=/home/PageSpy + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=6752 + diff --git a/dockge/page-spy-web/docker-compose.yml b/dockge/page-spy-web/docker-compose.yml new file mode 100644 index 00000000..631aefc6 --- /dev/null +++ b/dockge/page-spy-web/docker-compose.yml @@ -0,0 +1,20 @@ +networks: + 1panel-network: + external: true +services: + page-spy-web: + container_name: page-spy-web + env_file: + - ./envs/global.env + - .env + image: huolalatech/page-spy-web:v1.9.6 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:6752 + restart: always + volumes: + - ${PAGE_SPY_WEB_ROOT_PATH}/log:/app/log + - ${PAGE_SPY_WEB_ROOT_PATH}/data:/app/data diff --git a/dockge/page-spy-web/envs/default.env b/dockge/page-spy-web/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/page-spy-web/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/page-spy-web/envs/global.env b/dockge/page-spy-web/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/page-spy-web/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/percona/.env b/dockge/percona/.env new file mode 100644 index 00000000..f9ccfd0f --- /dev/null +++ b/dockge/percona/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +PERCONA_ROOT_PATH=/home/percona + +# 连接端口 [必填] +PANEL_APP_PORT_HTTP=3306 + +# 管理员密码 [必填] +MYSQL_ROOT_PASSWORD= + diff --git a/dockge/percona/config/my.cnf b/dockge/percona/config/my.cnf new file mode 100644 index 00000000..feee7b63 --- /dev/null +++ b/dockge/percona/config/my.cnf @@ -0,0 +1,19 @@ +[mysqld] +skip-host-cache +skip-name-resolve +datadir=/var/lib/mysql +socket=/var/run/mysqld/mysqld.sock +secure-file-priv=/var/lib/mysql-files +user=mysql +log_error_suppression_list='MY-013360' + +character_set_server=utf8 +lower_case_table_names=1 +group_concat_max_len=1024000 +log_bin_trust_function_creators=1 + +pid-file=/var/run/mysqld/mysqld.pid +[client] +socket=/var/run/mysqld/mysqld.sock + +!includedir /etc/mysql/conf.d/ diff --git a/dockge/percona/docker-compose.yml b/dockge/percona/docker-compose.yml new file mode 100644 index 00000000..826f3896 --- /dev/null +++ b/dockge/percona/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + percona: + command: + - --default-authentication-plugin=mysql_native_password + container_name: percona + env_file: + - ./envs/global.env + - .env + image: percona:8.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3306 + restart: always + user: ${UID:-1000}:${GID:-1000} + volumes: + - ${PERCONA_ROOT_PATH}/data:/var/lib/mysql + - ${PERCONA_ROOT_PATH}/config/my.cnf:/etc/my.cnf + - ${PERCONA_ROOT_PATH}/log:/var/log/mysql + - /etc/timezone:/etc/timezone:ro + - /etc/localtime:/etc/localtime:ro diff --git a/dockge/percona/envs/default.env b/dockge/percona/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/percona/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/percona/envs/global.env b/dockge/percona/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/percona/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/photoprism/.env b/dockge/photoprism/.env new file mode 100644 index 00000000..16e27336 --- /dev/null +++ b/dockge/photoprism/.env @@ -0,0 +1,60 @@ +# MySQL 服务 (前置检查) [必填] +PANEL_DB_TYPE=mariadb + +# 数据持久化路径 [必填] +PHOTOPRISM_ROOT_PATH=/home/photoprism + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2342 + +# 管理员用户名 [必填] +PHOTOPRISM_ADMIN_USER=admin + +# 管理员密码 (8-72 字符) [必填] +PHOTOPRISM_ADMIN_PASSWORD=password_random + +# 认证模式 [必填] +PHOTOPRISM_AUTH_MODE=password + +# 网站 URL [必填] +PHOTOPRISM_SITE_URL=http://127.0.0.1:2342 + +# 网站标题 [必填] +PHOTOPRISM_SITE_CAPTION=AI-Powered Photos App + +# 网站描述 +PHOTOPRISM_SITE_DESCRIPTION= + +# 网站作者 +PHOTOPRISM_SITE_AUTHOR= + +# 数据库 地址 [必填] +PHOTOPRISM_DATABASE_SERVER=127.0.0.1:3306 + +# 数据库 用户名 [必填] +PHOTOPRISM_DATABASE_USER=photoprism + +# 数据库 密码 [必填] +PHOTOPRISM_DATABASE_PASSWORD= + +# 数据库 名称 [必填] +PHOTOPRISM_DATABASE_NAME=photoprism + +# 原始文件限制最大值 (MB) [必填] +PHOTOPRISM_ORIGINALS_LIMIT=5000 + +# 开启定时备份计划 [必填] +PHOTOPRISM_BACKUP_DATABASE=true + +# 定时备份计划周期 (daily, weekly, cron) [必填] +PHOTOPRISM_BACKUP_SCHEDULE=daily + +# 视频编码器 [必填] +PHOTOPRISM_FFMPEG_ENCODER=software + +# 视频分辨率限制 [必填] +PHOTOPRISM_FFMPEG_SIZE=1920 + +# 视频比特率限制 [必填] +PHOTOPRISM_FFMPEG_BITRATE=32 + diff --git a/dockge/photoprism/docker-compose.yml b/dockge/photoprism/docker-compose.yml new file mode 100644 index 00000000..9f97a2cb --- /dev/null +++ b/dockge/photoprism/docker-compose.yml @@ -0,0 +1,38 @@ +networks: + 1panel-network: + external: true +services: + photoprism: + container_name: photoprism + devices: + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - ./envs/photoprism.env + - .env + environment: + PHOTOPRISM_ADMIN_USERNAME: ${PHOTOPRISM_ADMIN_USER} + PHOTOPRISM_DATABASE_DRIVER: mysql + PHOTOPRISM_GID: 0 + PHOTOPRISM_PASSWORD_LENGTH: 8 + PHOTOPRISM_UID: 0 + PHOTOPRISM_UMASK: 18 + image: photoprism/photoprism:240915 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2342 + restart: always + security_opt: + - seccomp:unconfined + - apparmor:unconfined + stop_grace_period: 10s + user: 1000:1000 + volumes: + - ${PHOTOPRISM_ROOT_PATH}/originals:/photoprism/originals + - ${PHOTOPRISM_ROOT_PATH}/storage:/photoprism/storage + - ${PHOTOPRISM_ROOT_PATH}/family:/photoprism/originals/family + - ${PHOTOPRISM_ROOT_PATH}/import:/photoprism/import + working_dir: /photoprism diff --git a/dockge/photoprism/envs/default.env b/dockge/photoprism/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/photoprism/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/photoprism/envs/global.env b/dockge/photoprism/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/photoprism/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/photoprism/envs/photoprism.env b/dockge/photoprism/envs/photoprism.env new file mode 100644 index 00000000..4cbf9229 --- /dev/null +++ b/dockge/photoprism/envs/photoprism.env @@ -0,0 +1,25 @@ +PHOTOPRISM_DISABLE_TLS="false" +PHOTOPRISM_DEFAULT_TLS="true" +PHOTOPRISM_HTTP_COMPRESSION="gzip" +PHOTOPRISM_LOG_LEVEL="info" +PHOTOPRISM_READONLY="false" +PHOTOPRISM_EXPERIMENTAL="false" +PHOTOPRISM_DISABLE_CHOWN="false" +PHOTOPRISM_DISABLE_WEBDAV="false" +PHOTOPRISM_DISABLE_SETTINGS="false" +PHOTOPRISM_DISABLE_TENSORFLOW="false" +PHOTOPRISM_DISABLE_FACES="false" +PHOTOPRISM_DISABLE_CLASSIFICATION="false" +PHOTOPRISM_DISABLE_VECTORS="false" +PHOTOPRISM_DISABLE_RAW="false" +PHOTOPRISM_RAW_PRESETS="false" +PHOTOPRISM_SIDECAR_YAML="true" +PHOTOPRISM_BACKUP_ALBUMS="true" +PHOTOPRISM_BACKUP_DATABASE="true" +PHOTOPRISM_BACKUP_SCHEDULE="daily" +PHOTOPRISM_INDEX_SCHEDULE="" +PHOTOPRISM_AUTO_INDEX=300 +PHOTOPRISM_AUTO_IMPORT=-1 +PHOTOPRISM_DETECT_NSFW="false" +PHOTOPRISM_UPLOAD_NSFW="true" +PHOTOPRISM_INIT="https gpu ffmpeg tensorflow" diff --git a/dockge/pingvin-share/.env b/dockge/pingvin-share/.env new file mode 100644 index 00000000..219831f2 --- /dev/null +++ b/dockge/pingvin-share/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +PINGVIN_SHARE_ROOT_PATH=/home/pingvin-share + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=3333 + +# 是否信任代理 [必填] +TRUST_PROXY=false + diff --git a/dockge/pingvin-share/docker-compose.yml b/dockge/pingvin-share/docker-compose.yml new file mode 100644 index 00000000..b245ce88 --- /dev/null +++ b/dockge/pingvin-share/docker-compose.yml @@ -0,0 +1,25 @@ +networks: + 1panel-network: + external: true +services: + pingvin-share: + container_name: pingvin-share + env_file: + - ./envs/global.env + - .env + environment: + - BACKEND_PORT=8080 + - PORT=3333 + - API_URL=http://localhost:8080 + - TRUST_PROXY=false + image: stonith404/pingvin-share:v1.6.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3333 + restart: always + volumes: + - ${PINGVIN_SHARE_ROOT_PATH}/data:/opt/app/backend/data + - ${PINGVIN_SHARE_ROOT_PATH}/images:/opt/app/frontend/public/img diff --git a/dockge/pingvin-share/envs/default.env b/dockge/pingvin-share/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/pingvin-share/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/pingvin-share/envs/global.env b/dockge/pingvin-share/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/pingvin-share/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/pixman/.env b/dockge/pixman/.env new file mode 100644 index 00000000..8ccfb02d --- /dev/null +++ b/dockge/pixman/.env @@ -0,0 +1,12 @@ +# 数据持久化路径 [必填] +PIXMAN_ROOT_PATH=/home/pixman + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5000 + +# MyTVSuper 授权码 +MYTVSUPER_TOKEN= + +# 网络代理 +NETWORK_PROXY= + diff --git a/dockge/pixman/docker-compose.yml b/dockge/pixman/docker-compose.yml new file mode 100644 index 00000000..e162c6a8 --- /dev/null +++ b/dockge/pixman/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + pixman: + container_name: pixman + env_file: + - ./envs/global.env + - .env + environment: + - http_proxy=${NETWORK_PROXY:-} + - https_proxy=${NETWORK_PROXY:-} + image: pixman/pixman:v1.8.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5000 + restart: always + volumes: + - ${PIXMAN_ROOT_PATH}/m3u:/app/app/data/m3u diff --git a/dockge/pixman/envs/default.env b/dockge/pixman/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/pixman/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/pixman/envs/global.env b/dockge/pixman/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/pixman/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/pixman/m3u/Adult.m3u b/dockge/pixman/m3u/Adult.m3u new file mode 100644 index 00000000..d4147496 --- /dev/null +++ b/dockge/pixman/m3u/Adult.m3u @@ -0,0 +1,50 @@ +#EXTINF:-1 tvg-id="" tvg-name="Live Cams" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Live Cams +http://cdn.adultiptv.net/livecams.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="MILF" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",MILF +http://cdn.adultiptv.net/milf.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Big Dick" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Big Dick +http://cdn.adultiptv.net/bigdick.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Big Tits" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Big Tits +http://cdn.adultiptv.net/bigtits.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Fetish" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Fetish +http://cdn.adultiptv.net/fetish.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Pornstar" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Pornstar +http://cdn.adultiptv.net/pornstar.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Big Ass" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Big Ass +http://cdn.adultiptv.net/bigass.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Interracial" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Interracial +http://cdn.adultiptv.net/interracial.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Latina" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Latina +http://cdn.adultiptv.net/latina.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="POV" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",POV +http://cdn.adultiptv.net/pov.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Blowjob" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Blowjob +http://cdn.adultiptv.net/blowjob.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Teen" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Teen +http://cdn.adultiptv.net/teen.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Hardcore" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Hardcore +http://cdn.adultiptv.net/hardcore.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Cuckold" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Cuckold +http://cdn.adultiptv.net/cuckold.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Threesome" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Threesome +http://cdn.adultiptv.net/threesome.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Russian" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Russian +http://cdn.adultiptv.net/russian.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Lesbian" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Lesbian +http://cdn.adultiptv.net/lesbian.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Rough" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Rough +http://cdn.adultiptv.net/rough.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Gangbang" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Gangbang +http://cdn.adultiptv.net/gangbang.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Anal" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Anal +http://cdn.adultiptv.net/anal.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Compilation" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Compilation +http://cdn.adultiptv.net/compilation.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Brunette" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Brunette +http://cdn.adultiptv.net/brunette.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Blonde" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Blonde +http://cdn.adultiptv.net/blonde.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Gay" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Gay +http://cdn.adultiptv.net/gay.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Asian" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Asian +http://cdn.adultiptv.net/asian.m3u8 diff --git a/dockge/pixman/m3u/CCTV.m3u b/dockge/pixman/m3u/CCTV.m3u new file mode 100644 index 00000000..b8299e56 --- /dev/null +++ b/dockge/pixman/m3u/CCTV.m3u @@ -0,0 +1,57 @@ +#EXTM3U +#EXTINF:-1 tvg-name="CCTV1" tvg-logo="https://live.fanmingming.com/tv/CCTV1.png" group-title="央视频道",CCTV-1 综合 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN111128BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUU6FFmRK8Hl0ytyd5e5kWGEwoDIwMxbrlyyVy9x6ZDKnldIYKOjBOUjRyoym5n7Kg0yIYstFTUfqtC14fzxhy5Y +#EXTINF:-1 tvg-name="CCTV2" tvg-logo="https://live.fanmingming.com/tv/CCTV2.png" group-title="央视频道",CCTV-2 财经 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000036BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfGVSARKsxkWGZw7vFUuOj2QZHeRzosIxVbl7i2QHFATHA3k5wDWG1qHkZQAleNv%2FbI +#EXTINF:-1 tvg-name="CCTV3" tvg-logo="https://live.fanmingming.com/tv/CCTV3.png" group-title="央视频道",CCTV-3 综艺 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727c125355/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMUNNEYLCPUtKY62j1Wp5u04wipypKUQ1TTuR2lXvBl5YpHqBJmlA19x22TD9bUOjk +#EXTINF:-1 tvg-name="CCTV4" tvg-logo="https://live.fanmingming.com/tv/CCTV4.png" group-title="央视频道",CCTV-4 中文国际 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000037BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfH0ZQXwaiVktPr6ILPKXqwOUC2ZXft7ZULN6h9qLQPFOTSlVTfophiKaMb8h1kPV74 +#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://live.fanmingming.com/tv/CCTV5.png" group-title="央视频道",CCTV-5 体育 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727e617ca0/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMSXw4ajlL%2FoUYC2RZQQDco6uQSifXBocz5ID6RePfIKQ4rFWiHjq%2FeZoDmrzW%2FKlw +#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://live.fanmingming.com/tv/CCTV5+.png" group-title="央视频道",CCTV-5+ 体育赛事 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63872908d48f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSBx06ZL9Bo6JOM%2BSTjxZRK254G1jtietGzDaHvFNRtjXOvFnbf%2BTao33JqYlfMYYn2z3agOn9gvNMT9KmBaR9o +#EXTINF:-1 tvg-name="CCTV6" tvg-logo="https://live.fanmingming.com/tv/CCTV6.png" group-title="央视频道",CCTV-6 电影 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728804b1f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdazJhFQmuq4XUiks9ZrIlJN%2BknLs8H%2BSxcDXy%2BTesEc8Q0KCN89MjYoj85Sol1kbKI4 +#EXTINF:-1 tvg-name="CCTV7" tvg-logo="https://live.fanmingming.com/tv/CCTV7.png" group-title="央视频道",CCTV-7 国防军事 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000038BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHYKFve4MwNzRa0jPXeHjqnBjPmzSdKDNWNHhnZSaMGCXKmdx8d%2BnYdhVK5ge22ot4 +#EXTINF:-1 tvg-name="CCTV8" tvg-logo="https://live.fanmingming.com/tv/CCTV8.png" group-title="央视频道",CCTV-8 电视剧 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728970aa82/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdaymid9ta2tVUW0%2FdVrFqszC1EVEkAbpip1IYxn%2Ba2aA%2BVAihIiw9D8ejUsDbfU0K68 +#EXTINF:-1 tvg-name="CCTV9" tvg-logo="https://live.fanmingming.com/tv/CCTV9.png" group-title="央视频道",CCTV-9 纪录 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000039BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHArfvJF2pWpm4RxcBNhZ7j9vEUeCQte%2BbQaOGNIUEEK%2B3RBE1BC9EUsM18gnb%2FyAA +#EXTINF:-1 tvg-name="CCTV10" tvg-logo="https://live.fanmingming.com/tv/CCTV10.png" group-title="央视频道",CCTV-10 科教 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949784BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5OuXozn3alq9%2BUx7ZLG1w9aOfkLjZvYj56D3xkOAtSOIoLsdw8c1%2BCwLDg1aS4esN4 +#EXTINF:-1 tvg-name="CCTV11" tvg-logo="https://live.fanmingming.com/tv/CCTV11.png" group-title="央视频道",CCTV-11 戏曲 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000053BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Qj2xHA4vdPGsjBbxSL3p%2FmAObVTfznR%2Fpc%2B76QYmLRMuL3Lj9iabhv8arW7kJe6%2F4 +#EXTINF:-1 tvg-name="CCTV12" tvg-logo="https://live.fanmingming.com/tv/CCTV12.png" group-title="央视频道",CCTV-12 社会与法 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000040BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUd3JM2PCgDefrKOVZLNt0QMAmpLefguRLiOPXiDRWhxHg8yim2giTBA8RILsb%2B8Y5pkFUyZBE%2FkNJAbwncEegkU +#EXTINF:-1 tvg-name="CCTV13" tvg-logo="https://live.fanmingming.com/tv/CCTV13.png" group-title="央视频道",CCTV-13 新闻 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000054BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0SuXozn3alq9%2BUx7ZLG1w9awc14iEUxQ5VsTsr5pEBsmF56tXUfsukRUpygmTCKvAI +#EXTINF:-1 tvg-name="CCTV14" tvg-logo="https://live.fanmingming.com/tv/CCTV14.png" group-title="央视频道",CCTV-14 少儿 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949788BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5PYKFve4MwNzRa0jPXeHjqnp7khdLaCMP6L4QpTf84Oz6DvCG1%2BJ81QvStkxO%2FoGm8 +#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://live.fanmingming.com/tv/CCTV15.png" group-title="央视频道",CCTV-15 音乐 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000055BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Tdo%2FUL80msfbhDYvoWpNl31Dy7jHvMl%2FzVUrNxhL1ek1YEGVDZ7lCg0LtKJY4Ku%2B8 +#EXTINF:-1 tvg-name="CCTV16" tvg-logo="https://live.fanmingming.com/tv/CCTV16.png" group-title="央视频道",CCTV-16 奥林匹克 +http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226100/index.m3u8 +#EXTINF:-1 tvg-name="CCTV17" tvg-logo="https://live.fanmingming.com/tv/CCTV17.png" group-title="央视频道",CCTV-17 农业农村 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728afa13b4/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdaz%2FyAI9to%2FMBBt%2FivcdSfljJ1%2FqqamWUjAiBAxNssfyBlZUDSXAIMtStS86hRHFuJM +#EXTINF:-1 tvg-name="CCTV4K" tvg-logo="https://live.fanmingming.com/tv/CCTV4K.png" group-title="央视频道",CCTV-4K 超高清 +http://liveop.cctv.cn/hls/4KHD/playlist.m3u8 +#EXTINF:-1 tvg-name="CHC影迷电影" tvg-logo="https://live.fanmingming.com/tv/CHC影迷电影.png" group-title="央视频道",CHC影迷电影 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380764b172c9/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CHC动作电影" tvg-logo="https://live.fanmingming.com/tv/CHC动作电影.png" group-title="央视频道",CHC动作电影 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380763222d00/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CHC家庭影院" tvg-logo="https://live.fanmingming.com/tv/CHC家庭影院.png" group-title="央视频道",CHC家庭影院 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807601b19dd/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN" tvg-logo="https://live.fanmingming.com/tv/CGTN.png" group-title="央视频道",CGTN英语 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806f4f64099/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN纪录" tvg-logo="https://live.fanmingming.com/tv/CGTN纪录.png" group-title="央视频道",CGTN记录 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63a15d0ee63f3/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN俄语" tvg-logo="https://live.fanmingming.com/tv/CGTN俄语.png" group-title="央视频道",CGTN俄语 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638071d299009/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN法语" tvg-logo="https://live.fanmingming.com/tv/CGTN法语.png" group-title="央视频道",CGTN法语 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806fb631afe/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN西语" tvg-logo="https://live.fanmingming.com/tv/CGTN西语.png" group-title="央视频道",CGTN西语 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806f81c8eb5/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN阿语" tvg-logo="https://live.fanmingming.com/tv/CGTN阿语.png" group-title="央视频道",CGTN阿语 +http://livear.cgtn.com/1000a/prog_index.m3u8 diff --git a/dockge/pixman/m3u/CNTV.m3u b/dockge/pixman/m3u/CNTV.m3u new file mode 100644 index 00000000..0745157c --- /dev/null +++ b/dockge/pixman/m3u/CNTV.m3u @@ -0,0 +1,171 @@ +#EXTM3U +#EXTINF:-1 tvg-name="凤凰中文" tvg-logo="https://live.fanmingming.com/tv/凤凰卫视中文台.png" group-title="卫视频道",凤凰中文 +http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701pcc72.m3u8 +#EXTINF:-1 tvg-name="凤凰资讯" tvg-logo="https://live.fanmingming.com/tv/凤凰卫视资讯台.png" group-title="卫视频道",凤凰资讯 +http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701pin72.m3u8 +#EXTINF:-1 tvg-name="凤凰香港" tvg-logo="https://live.fanmingming.com/tv/凤凰卫视香港台.png" group-title="卫视频道",凤凰香港 +http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701phk72.m3u8 +#EXTINF:-1 tvg-name="北京卫视" tvg-logo="https://live.fanmingming.com/tv/北京卫视.png" group-title="卫视频道",北京卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8 +#EXTINF:-1 tvg-name="湖南卫视" tvg-logo="https://live.fanmingming.com/tv/湖南卫视.png" group-title="卫视频道",湖南卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8 +#EXTINF:-1 tvg-name="东方卫视" tvg-logo="https://live.fanmingming.com/tv/东方卫视.png" group-title="卫视频道",东方卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8 +#EXTINF:-1 tvg-name="四川卫视" tvg-logo="https://live.fanmingming.com/tv/四川卫视.png" group-title="卫视频道",四川卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8 +#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://live.fanmingming.com/tv/天津卫视.png" group-title="卫视频道",天津卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8 +#EXTINF:-1 tvg-name="安徽卫视" tvg-logo="https://live.fanmingming.com/tv/安徽卫视.png" group-title="卫视频道",安徽卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8 +#EXTINF:-1 tvg-name="山东卫视" tvg-logo="https://live.fanmingming.com/tv/山东卫视.png" group-title="卫视频道",山东卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8 +#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://live.fanmingming.com/tv/深圳卫视.png" group-title="卫视频道",深圳卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8 +#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://live.fanmingming.com/tv/广东卫视.png" group-title="卫视频道",广东卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8 +#EXTINF:-1 tvg-name="广西卫视" tvg-logo="https://live.fanmingming.com/tv/广西卫视.png" group-title="卫视频道",广西卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226549/index.m3u8 +#EXTINF:-1 tvg-name="江苏卫视" tvg-logo="https://live.fanmingming.com/tv/江苏卫视.png" group-title="卫视频道",江苏卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8 +#EXTINF:-1 tvg-name="江西卫视" tvg-logo="https://live.fanmingming.com/tv/江西卫视.png" group-title="卫视频道",江西卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8 +#EXTINF:-1 tvg-name="河北卫视" tvg-logo="https://live.fanmingming.com/tv/河北卫视.png" group-title="卫视频道",河北卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8 +#EXTINF:-1 tvg-name="河南卫视" tvg-logo="https://live.fanmingming.com/tv/河南卫视.png" group-title="卫视频道",河南卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8 +#EXTINF:-1 tvg-name="浙江卫视" tvg-logo="https://live.fanmingming.com/tv/浙江卫视.png" group-title="卫视频道",浙江卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8 +#EXTINF:-1 tvg-name="海南卫视" tvg-logo="https://live.fanmingming.com/tv/海南卫视.png" group-title="卫视频道",海南卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8 +#EXTINF:-1 tvg-name="湖北卫视" tvg-logo="https://live.fanmingming.com/tv/湖北卫视.png" group-title="卫视频道",湖北卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8 +#EXTINF:-1 tvg-name="山西卫视" tvg-logo="https://live.fanmingming.com/tv/山西卫视.png" group-title="卫视频道",山西卫视 +http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/00000001000000060000000000000318/index.m3u8?IAS +#EXTINF:-1 tvg-name="东南卫视" tvg-logo="https://live.fanmingming.com/tv/东南卫视.png" group-title="卫视频道",东南卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8 +#EXTINF:-1 tvg-name="贵州卫视" tvg-logo="https://live.fanmingming.com/tv/贵州卫视.png" group-title="卫视频道",贵州卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8 +#EXTINF:-1 tvg-name="辽宁卫视" tvg-logo="https://live.fanmingming.com/tv/辽宁卫视.png" group-title="卫视频道",辽宁卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.m3u8 +#EXTINF:-1 tvg-name="重庆卫视" tvg-logo="https://live.fanmingming.com/tv/重庆卫视.png" group-title="卫视频道",重庆卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8 +#EXTINF:-1 tvg-name="黑龙江卫视" tvg-logo="https://live.fanmingming.com/tv/黑龙江卫视.png" group-title="卫视频道",黑龙江卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8 +#EXTINF:-1 tvg-name="内蒙古卫视" tvg-logo="https://live.fanmingming.com/tv/内蒙古卫视.png" group-title="卫视频道",内蒙古卫视 +http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000319/index.m3u8?IAS +#EXTINF:-1 tvg-name="宁夏卫视" tvg-logo="https://live.fanmingming.com/tv/宁夏卫视.png" group-title="卫视频道",宁夏卫视 +http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000309/index.m3u8?IAS +#EXTINF:-1 tvg-name="陕西卫视" tvg-logo="https://live.fanmingming.com/tv/陕西卫视.png" group-title="卫视频道",陕西卫视 +http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000313/index.m3u8?IAS +#EXTINF:-1 tvg-name="吉林卫视" tvg-logo="https://live.fanmingming.com/tv/吉林卫视.png" group-title="卫视频道",吉林卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8 +#EXTINF:-1 tvg-name="甘肃卫视" tvg-logo="https://live.fanmingming.com/tv/甘肃卫视.png" group-title="卫视频道",甘肃卫视 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8 +#EXTINF:-1 tvg-name="云南卫视" tvg-logo="https://live.fanmingming.com/tv/云南卫视.png" group-title="卫视频道",云南卫视 +http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000305/index.m3u8?IAS +#EXTINF:-1 tvg-name="三沙卫视" tvg-logo="https://live.fanmingming.com/tv/三沙卫视.png" group-title="卫视频道",三沙卫视 +http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?IAS +#EXTINF:-1 tvg-name="青海卫视" tvg-logo="https://live.fanmingming.com/tv/青海卫视.png" group-title="卫视频道",青海卫视 +http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225628/index.m3u8 +#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://live.fanmingming.com/tv/新疆卫视.png" group-title="卫视频道",新疆卫视 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225635/index.m3u8 +#EXTINF:-1 tvg-name="西藏卫视" tvg-logo="https://live.fanmingming.com/tv/西藏卫视.png" group-title="卫视频道",西藏卫视 +http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000317/index.m3u8?IAS +#EXTINF:-1 tvg-name="兵团卫视" tvg-logo="https://live.fanmingming.com/tv/兵团卫视.png" group-title="卫视频道",兵团卫视 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226439/index.m3u8 +#EXTINF:-1 tvg-name="延边卫视" tvg-logo="https://live.fanmingming.com/tv/延边卫视.png" group-title="卫视频道",延边卫视 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8 +#EXTINF:-1 tvg-name="安多卫视" tvg-logo="https://live.fanmingming.com/tv/安多卫视.png" group-title="卫视频道",安多卫视 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8 +#EXTINF:-1 tvg-name="厦门卫视" tvg-logo="https://live.fanmingming.com/tv/厦门卫视.png" group-title="卫视频道",厦门卫视 +http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000193/index.m3u8?IAS +#EXTINF:-1 tvg-name="康巴卫视" tvg-logo="https://live.fanmingming.com/tv/康巴卫视.png" group-title="卫视频道",康巴卫视 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8 +#EXTINF:-1 tvg-name="中国教育1台" tvg-logo="https://live.fanmingming.com/tv/CETV1.png" group-title="卫视频道",CETV-1 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8 +#EXTINF:-1 tvg-name="中国教育2台" tvg-logo="https://live.fanmingming.com/tv/CETV2.png" group-title="卫视频道",CETV-2 +http://[2409:8087:1a0b:df::4013]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8 +#EXTINF:-1 tvg-name="中国教育4台" tvg-logo="https://live.fanmingming.com/tv/CETV4.png" group-title="卫视频道",CETV-4 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8 +#EXTINF:-1 tvg-name="内蒙古蒙语卫视" tvg-logo="https://live.fanmingming.com/tv/内蒙古蒙语卫视.png" group-title="内蒙频道",蒙语卫视 +https://livestream-bt.nmtv.cn/nmtv/2315general.m3u8?txSecret=e2b255285dd119a92c8aa5cdf00f8b84&txTime=771EF880 +#EXTINF:-1 tvg-name="爱上4K" tvg-logo="https://live.fanmingming.com/tv/爱上4K.png" tvg-logo="" group-title="数字频道",爱上4K +http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000459/index.m3u8?IAS +#EXTINF:-1 tvg-name="上海纪实人文" tvg-logo="https://live.fanmingming.com/tv/纪实人文.png" group-title="数字频道",纪实人文 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225738/index.m3u8 +#EXTINF:-1 tvg-name="纪实科教" tvg-logo="https://live.fanmingming.com/tv/北京纪实科教.png" group-title="数字频道",纪实科教 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225729/index.m3u8 +#EXTINF:-1 tvg-name="劲爆体育" tvg-logo="https://live.fanmingming.com/tv/劲爆体育.png" group-title="数字频道",劲爆体育 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000008&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="全纪实" tvg-logo="https://live.fanmingming.com/tv/乐游.png" group-title="数字频道",乐游频道 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000092/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000092&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="卡酷动画" tvg-logo="https://live.fanmingming.com/tv/卡酷少儿.png" group-title="数字频道",卡酷少儿 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225654/index.m3u8 +#EXTINF:-1 tvg-name="金鹰卡通" tvg-logo="https://live.fanmingming.com/tv/金鹰卡通.png" group-title="数字频道",金鹰卡通 +http://[2409:8087:1a0b:df::4008]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225653/index.m3u8 +#EXTINF:-1 tvg-name="金鹰纪实" tvg-logo="https://live.fanmingming.com/tv/金鹰纪实.png" group-title="数字频道",金鹰纪实 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN4766929BESTVSMGSMG/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="茶" tvg-logo="https://live.fanmingming.com/tv/茶.png" group-title="数字频道",茶友频道 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638729d8aca53/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSBx06ZL9Bo6JOM%2BSTjxZRIdUCZxTtaM%2Bza0L7mJjkPMmnEhAf%2Bi68sKjzRCbPoTU0E%2B6Pia2CkRtxgPs8Tmw7I +#EXTINF:-1 tvg-name="快乐垂钓" tvg-logo="https://live.fanmingming.com/tv/快乐垂钓.png" group-title="数字频道",快乐垂钓 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638729b6002c4/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="哒啵赛事" tvg-logo="https://live.fanmingming.com/tv/哒啵赛事.png" group-title="数字频道",哒啵赛事 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225675/index.m3u8 +#EXTINF:-1 tvg-name="哒啵电竞" tvg-logo="https://live.fanmingming.com/tv/哒啵电竞.png" group-title="数字频道",哒啵电竞 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000003000000066/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000003000000066&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://live.fanmingming.com/tv/优漫卡通.png" group-title="数字频道",优漫卡通 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8 +#EXTINF:-1 tvg-name="哈哈炫动" tvg-logo="https://live.fanmingming.com/tv/哈哈炫动.png" group-title="数字频道",哈哈炫动 +http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8 +#EXTINF:-1 tvg-name="黑莓动画" tvg-logo="https://live.fanmingming.com/tv/黑莓动画.png" group-title="数字频道",黑莓动画 +http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8 +#EXTINF:-1 tvg-name="黑莓电影" tvg-logo="https://live.fanmingming.com/tv/黑莓电影.png" group-title="数字频道",黑莓电影 +http://[2409:8087:1a0b:df::4014]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225743/index.m3u8 +#EXTINF:-1 tvg-name="梨园" tvg-logo="https://live.fanmingming.com/tv/河南梨园.png" group-title="数字频道",梨园频道 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380788ba7bed/index.m3u8?AuthInfo=toEYVdLfxymUP2l9NZpQI5%2BK6T7j%2FlRm%2BvbM9VO7bA0q1S1k1f36SqqriM0FZoFSAJRfCt8SS7X6sTRmXb81a8O4H%2FdroDKjLoDeaMQdyJQ +#EXTINF:-1 tvg-name="求索记录" tvg-logo="https://live.fanmingming.com/tv/求索记录.png" group-title="数字频道",求索记录 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000010/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000010&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="求索动物" tvg-logo="https://live.fanmingming.com/tv/求索动物.png" group-title="数字频道",求索动物 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000009/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000009&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="求索科学" tvg-logo="https://live.fanmingming.com/tv/求索科学.png" group-title="数字频道",求索科学 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000011/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000011&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="求索生活" tvg-logo="https://live.fanmingming.com/tv/求索生活.png" group-title="数字频道",求索生活 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000008&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="newtv超级体育" tvg-logo="https://live.fanmingming.com/tv/NEWTV超级体育.png" group-title="数字频道",超级体育 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8 +#EXTINF:-1 tvg-name="newtv超级电影" tvg-logo="https://live.fanmingming.com/tv/NEWTV超级电影.png" group-title="数字频道",超级电影 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8 +#EXTINF:-1 tvg-name="newtv超级电视剧" tvg-logo="https://live.fanmingming.com/tv/NEWTV超级电视剧.png" group-title="数字频道",超级视剧 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225716/index.m3u8 +#EXTINF:-1 tvg-name="newtv东北热剧" tvg-logo="https://live.fanmingming.com/tv/NEWTV东北热剧.png" group-title="数字频道",东北热剧 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225741/index.m3u8 +#EXTINF:-1 tvg-name="newtv海外剧场" tvg-logo="https://live.fanmingming.com/tv/NEWTV海外剧场.png" group-title="数字频道",海外剧场 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225671/index.m3u8 +#EXTINF:-1 tvg-name="newtv中国功夫" tvg-logo="https://live.fanmingming.com/tv/NEWTV中国功夫.png" group-title="数字频道",中国功夫 +http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225681/index.m3u8 +#EXTINF:-1 tvg-name="newtv军旅剧场" tvg-logo="https://live.fanmingming.com/tv/NEWTV军旅剧场.png" group-title="数字频道",军旅剧场 +http://[2409:8087:1a0b:df::4018]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225676/index.m3u8 +#EXTINF:-1 tvg-name="newtv惊悚悬疑" tvg-logo="https://live.fanmingming.com/tv/NEWTV惊悚悬疑.png" group-title="数字频道",惊悚悬疑 +http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8 +#EXTINF:-1 tvg-name="newtv潮妈辣婆" tvg-logo="https://live.fanmingming.com/tv/NEWTV潮妈辣婆.png" group-title="数字频道",潮妈辣婆 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225685/index.m3u8 +#EXTINF:-1 tvg-name="newtv精品体育" tvg-logo="https://live.fanmingming.com/tv/NEWTV精品体育.png" group-title="数字频道",精品体育 +http://[2409:8087:1a0b:df::4004]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8 +#EXTINF:-1 tvg-name="newtv精品纪录" tvg-logo="https://live.fanmingming.com/tv/NEWTV精品纪录.png" group-title="数字频道",精品纪录 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225672/index.m3u8 +#EXTINF:-1 tvg-name="newtv家庭剧场" tvg-logo="https://live.fanmingming.com/tv/NEWTV家庭剧场.png" group-title="数字频道",家庭剧场 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225677/index.m3u8 +#EXTINF:-1 tvg-name="newtv精品大剧" tvg-logo="https://live.fanmingming.com/tv/NEWTV精品大剧.png" group-title="数字频道",精品大剧 +http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225670/index.m3u8 +#EXTINF:-1 tvg-name="newtv军事评论" tvg-logo="https://live.fanmingming.com/tv/NEWTV军事评论.png" group-title="数字频道",军事评论 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225668/index.m3u8 +#EXTINF:-1 tvg-name="newtv明星大片" tvg-logo="https://live.fanmingming.com/tv/NEWTV明星大片.png" group-title="数字频道",明星大片 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225664/index.m3u8 +#EXTINF:-1 tvg-name="newtv欢乐剧场" tvg-logo="https://live.fanmingming.com/tv/NEWTV欢乐剧场.png" group-title="数字频道",欢乐剧场 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225742/index.m3u8 +#EXTINF:-1 tvg-name="newtv精品萌宠" tvg-logo="https://live.fanmingming.com/tv/NEWTV精品萌宠.png" group-title="数字频道",精品萌宠 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226505/index.m3u8 +#EXTINF:-1 tvg-name="newtv超级综艺" tvg-logo="https://live.fanmingming.com/tv/NEWTV超级综艺.png" group-title="数字频道",超级综艺 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225714/index.m3u8 +#EXTINF:-1 tvg-name="newtv金牌综艺" tvg-logo="https://live.fanmingming.com/tv/NEWTV金牌综艺.png" group-title="数字频道",金牌综艺 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8 diff --git a/dockge/pixman/m3u/IPTV.m3u b/dockge/pixman/m3u/IPTV.m3u new file mode 100644 index 00000000..a673d103 --- /dev/null +++ b/dockge/pixman/m3u/IPTV.m3u @@ -0,0 +1,277 @@ +#EXTM3U +#EXTINF:-1 tvg-name="CCTV1" tvg-logo="https://live.fanmingming.com/tv/CCTV1.png" group-title="央视频道",CCTV-1 综合 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN111128BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUU6FFmRK8Hl0ytyd5e5kWGEwoDIwMxbrlyyVy9x6ZDKnldIYKOjBOUjRyoym5n7Kg0yIYstFTUfqtC14fzxhy5Y +#EXTINF:-1 tvg-name="CCTV2" tvg-logo="https://live.fanmingming.com/tv/CCTV2.png" group-title="央视频道",CCTV-2 财经 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000036BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfGVSARKsxkWGZw7vFUuOj2QZHeRzosIxVbl7i2QHFATHA3k5wDWG1qHkZQAleNv%2FbI +#EXTINF:-1 tvg-name="CCTV3" tvg-logo="https://live.fanmingming.com/tv/CCTV3.png" group-title="央视频道",CCTV-3 综艺 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727c125355/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMUNNEYLCPUtKY62j1Wp5u04wipypKUQ1TTuR2lXvBl5YpHqBJmlA19x22TD9bUOjk +#EXTINF:-1 tvg-name="CCTV4" tvg-logo="https://live.fanmingming.com/tv/CCTV4.png" group-title="央视频道",CCTV-4 中文国际 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000037BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfH0ZQXwaiVktPr6ILPKXqwOUC2ZXft7ZULN6h9qLQPFOTSlVTfophiKaMb8h1kPV74 +#EXTINF:-1 tvg-name="CCTV5" tvg-logo="https://live.fanmingming.com/tv/CCTV5.png" group-title="央视频道",CCTV-5 体育 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638727e617ca0/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSPTZ4CK5oLfjaEYe9dogNMSXw4ajlL%2FoUYC2RZQQDco6uQSifXBocz5ID6RePfIKQ4rFWiHjq%2FeZoDmrzW%2FKlw +#EXTINF:-1 tvg-name="CCTV5+" tvg-logo="https://live.fanmingming.com/tv/CCTV5+.png" group-title="央视频道",CCTV-5+ 体育赛事 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63872908d48f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSBx06ZL9Bo6JOM%2BSTjxZRK254G1jtietGzDaHvFNRtjXOvFnbf%2BTao33JqYlfMYYn2z3agOn9gvNMT9KmBaR9o +#EXTINF:-1 tvg-name="CCTV6" tvg-logo="https://live.fanmingming.com/tv/CCTV6.png" group-title="央视频道",CCTV-6 电影 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728804b1f9/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdazJhFQmuq4XUiks9ZrIlJN%2BknLs8H%2BSxcDXy%2BTesEc8Q0KCN89MjYoj85Sol1kbKI4 +#EXTINF:-1 tvg-name="CCTV7" tvg-logo="https://live.fanmingming.com/tv/CCTV7.png" group-title="央视频道",CCTV-7 国防军事 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000038BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHYKFve4MwNzRa0jPXeHjqnBjPmzSdKDNWNHhnZSaMGCXKmdx8d%2BnYdhVK5ge22ot4 +#EXTINF:-1 tvg-name="CCTV8" tvg-logo="https://live.fanmingming.com/tv/CCTV8.png" group-title="央视频道",CCTV-8 电视剧 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728970aa82/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdaymid9ta2tVUW0%2FdVrFqszC1EVEkAbpip1IYxn%2Ba2aA%2BVAihIiw9D8ejUsDbfU0K68 +#EXTINF:-1 tvg-name="CCTV9" tvg-logo="https://live.fanmingming.com/tv/CCTV9.png" group-title="央视频道",CCTV-9 纪录 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000039BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSpr1AVNI633ampcuzdN%2BfHArfvJF2pWpm4RxcBNhZ7j9vEUeCQte%2BbQaOGNIUEEK%2B3RBE1BC9EUsM18gnb%2FyAA +#EXTINF:-1 tvg-name="CCTV10" tvg-logo="https://live.fanmingming.com/tv/CCTV10.png" group-title="央视频道",CCTV-10 科教 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949784BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5OuXozn3alq9%2BUx7ZLG1w9aOfkLjZvYj56D3xkOAtSOIoLsdw8c1%2BCwLDg1aS4esN4 +#EXTINF:-1 tvg-name="CCTV11" tvg-logo="https://live.fanmingming.com/tv/CCTV11.png" group-title="央视频道",CCTV-11 戏曲 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000053BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Qj2xHA4vdPGsjBbxSL3p%2FmAObVTfznR%2Fpc%2B76QYmLRMuL3Lj9iabhv8arW7kJe6%2F4 +#EXTINF:-1 tvg-name="CCTV12" tvg-logo="https://live.fanmingming.com/tv/CCTV12.png" group-title="央视频道",CCTV-12 社会与法 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN5000040BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUd3JM2PCgDefrKOVZLNt0QMAmpLefguRLiOPXiDRWhxHg8yim2giTBA8RILsb%2B8Y5pkFUyZBE%2FkNJAbwncEegkU +#EXTINF:-1 tvg-name="CCTV13" tvg-logo="https://live.fanmingming.com/tv/CCTV13.png" group-title="央视频道",CCTV-13 新闻 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000054BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0SuXozn3alq9%2BUx7ZLG1w9awc14iEUxQ5VsTsr5pEBsmF56tXUfsukRUpygmTCKvAI +#EXTINF:-1 tvg-name="CCTV14" tvg-logo="https://live.fanmingming.com/tv/CCTV14.png" group-title="央视频道",CCTV-14 少儿 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN3949788BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUXt3TPFwzzdHCkOT9AjSv5PYKFve4MwNzRa0jPXeHjqnp7khdLaCMP6L4QpTf84Oz6DvCG1%2BJ81QvStkxO%2FoGm8 +#EXTINF:-1 tvg-name="CCTV15" tvg-logo="https://live.fanmingming.com/tv/CCTV15.png" group-title="央视频道",CCTV-15 音乐 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6000055BESTVSMGSMG/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUTWDyIgRkFJBAHMhA2ayG0Tdo%2FUL80msfbhDYvoWpNl31Dy7jHvMl%2FzVUrNxhL1ek1YEGVDZ7lCg0LtKJY4Ku%2B8 +#EXTINF:-1 tvg-name="CCTV16" tvg-logo="https://live.fanmingming.com/tv/CCTV16.png" group-title="央视频道",CCTV-16 奥林匹克 +http://[2409:8087:1a01:df::7005]/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226100/index.m3u8 +#EXTINF:-1 tvg-name="CCTV17" tvg-logo="https://live.fanmingming.com/tv/CCTV17.png" group-title="央视频道",CCTV-17 农业农村 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638728afa13b4/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUdDh4EPdDnvGlSBkYaxFdaz%2FyAI9to%2FMBBt%2FivcdSfljJ1%2FqqamWUjAiBAxNssfyBlZUDSXAIMtStS86hRHFuJM +#EXTINF:-1 tvg-name="CCTV4K" tvg-logo="https://live.fanmingming.com/tv/CCTV4K.png" group-title="央视频道",CCTV-4K 超高清 +http://liveop.cctv.cn/hls/4KHD/playlist.m3u8 +#EXTINF:-1 tvg-name="CHC影迷电影" tvg-logo="https://live.fanmingming.com/tv/CHC影迷电影.png" group-title="央视频道",CHC影迷电影 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380764b172c9/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CHC动作电影" tvg-logo="https://live.fanmingming.com/tv/CHC动作电影.png" group-title="央视频道",CHC动作电影 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380763222d00/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CHC家庭影院" tvg-logo="https://live.fanmingming.com/tv/CHC家庭影院.png" group-title="央视频道",CHC家庭影院 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63807601b19dd/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN" tvg-logo="https://live.fanmingming.com/tv/CGTN.png" group-title="央视频道",CGTN英语 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806f4f64099/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN纪录" tvg-logo="https://live.fanmingming.com/tv/CGTN纪录.png" group-title="央视频道",CGTN记录 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63a15d0ee63f3/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN俄语" tvg-logo="https://live.fanmingming.com/tv/CGTN俄语.png" group-title="央视频道",CGTN俄语 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638071d299009/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN法语" tvg-logo="https://live.fanmingming.com/tv/CGTN法语.png" group-title="央视频道",CGTN法语 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806fb631afe/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN西语" tvg-logo="https://live.fanmingming.com/tv/CGTN西语.png" group-title="央视频道",CGTN西语 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN63806f81c8eb5/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="CGTN阿语" tvg-logo="https://live.fanmingming.com/tv/CGTN阿语.png" group-title="央视频道",CGTN阿语 +http://livear.cgtn.com/1000a/prog_index.m3u8 +#EXTINF:-1 tvg-name="凤凰中文" tvg-logo="https://live.fanmingming.com/tv/凤凰卫视中文台.png" group-title="卫视频道",凤凰中文 +http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701pcc72.m3u8 +#EXTINF:-1 tvg-name="凤凰资讯" tvg-logo="https://live.fanmingming.com/tv/凤凰卫视资讯台.png" group-title="卫视频道",凤凰资讯 +http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701pin72.m3u8 +#EXTINF:-1 tvg-name="凤凰香港" tvg-logo="https://live.fanmingming.com/tv/凤凰卫视香港台.png" group-title="卫视频道",凤凰香港 +http://116.162.6.192/1.v.smtcdns.net/qctv.fengshows.cn/live/0701phk72.m3u8 +#EXTINF:-1 tvg-name="北京卫视" tvg-logo="https://live.fanmingming.com/tv/北京卫视.png" group-title="卫视频道",北京卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226450/index.m3u8 +#EXTINF:-1 tvg-name="湖南卫视" tvg-logo="https://live.fanmingming.com/tv/湖南卫视.png" group-title="卫视频道",湖南卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226307/index.m3u8 +#EXTINF:-1 tvg-name="东方卫视" tvg-logo="https://live.fanmingming.com/tv/东方卫视.png" group-title="卫视频道",东方卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226345/index.m3u8 +#EXTINF:-1 tvg-name="四川卫视" tvg-logo="https://live.fanmingming.com/tv/四川卫视.png" group-title="卫视频道",四川卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226338/index.m3u8 +#EXTINF:-1 tvg-name="天津卫视" tvg-logo="https://live.fanmingming.com/tv/天津卫视.png" group-title="卫视频道",天津卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226459/index.m3u8 +#EXTINF:-1 tvg-name="安徽卫视" tvg-logo="https://live.fanmingming.com/tv/安徽卫视.png" group-title="卫视频道",安徽卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226391/index.m3u8 +#EXTINF:-1 tvg-name="山东卫视" tvg-logo="https://live.fanmingming.com/tv/山东卫视.png" group-title="卫视频道",山东卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226456/index.m3u8 +#EXTINF:-1 tvg-name="深圳卫视" tvg-logo="https://live.fanmingming.com/tv/深圳卫视.png" group-title="卫视频道",深圳卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226313/index.m3u8 +#EXTINF:-1 tvg-name="广东卫视" tvg-logo="https://live.fanmingming.com/tv/广东卫视.png" group-title="卫视频道",广东卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226248/index.m3u8 +#EXTINF:-1 tvg-name="广西卫视" tvg-logo="https://live.fanmingming.com/tv/广西卫视.png" group-title="卫视频道",广西卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226549/index.m3u8 +#EXTINF:-1 tvg-name="江苏卫视" tvg-logo="https://live.fanmingming.com/tv/江苏卫视.png" group-title="卫视频道",江苏卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226310/index.m3u8 +#EXTINF:-1 tvg-name="江西卫视" tvg-logo="https://live.fanmingming.com/tv/江西卫视.png" group-title="卫视频道",江西卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226344/index.m3u8 +#EXTINF:-1 tvg-name="河北卫视" tvg-logo="https://live.fanmingming.com/tv/河北卫视.png" group-title="卫视频道",河北卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226406/index.m3u8 +#EXTINF:-1 tvg-name="河南卫视" tvg-logo="https://live.fanmingming.com/tv/河南卫视.png" group-title="卫视频道",河南卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226480/index.m3u8 +#EXTINF:-1 tvg-name="浙江卫视" tvg-logo="https://live.fanmingming.com/tv/浙江卫视.png" group-title="卫视频道",浙江卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226339/index.m3u8 +#EXTINF:-1 tvg-name="海南卫视" tvg-logo="https://live.fanmingming.com/tv/海南卫视.png" group-title="卫视频道",海南卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226465/index.m3u8 +#EXTINF:-1 tvg-name="湖北卫视" tvg-logo="https://live.fanmingming.com/tv/湖北卫视.png" group-title="卫视频道",湖北卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226477/index.m3u8 +#EXTINF:-1 tvg-name="山西卫视" tvg-logo="https://live.fanmingming.com/tv/山西卫视.png" group-title="卫视频道",山西卫视 +http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/00000001000000060000000000000318/index.m3u8?IAS +#EXTINF:-1 tvg-name="东南卫视" tvg-logo="https://live.fanmingming.com/tv/东南卫视.png" group-title="卫视频道",东南卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226341/index.m3u8 +#EXTINF:-1 tvg-name="贵州卫视" tvg-logo="https://live.fanmingming.com/tv/贵州卫视.png" group-title="卫视频道",贵州卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226474/index.m3u8 +#EXTINF:-1 tvg-name="辽宁卫视" tvg-logo="https://live.fanmingming.com/tv/辽宁卫视.png" group-title="卫视频道",辽宁卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226546/index.m3u8 +#EXTINF:-1 tvg-name="重庆卫视" tvg-logo="https://live.fanmingming.com/tv/重庆卫视.png" group-title="卫视频道",重庆卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226409/index.m3u8 +#EXTINF:-1 tvg-name="黑龙江卫视" tvg-logo="https://live.fanmingming.com/tv/黑龙江卫视.png" group-title="卫视频道",黑龙江卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226327/index.m3u8 +#EXTINF:-1 tvg-name="内蒙古卫视" tvg-logo="https://live.fanmingming.com/tv/内蒙古卫视.png" group-title="卫视频道",内蒙古卫视 +http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000319/index.m3u8?IAS +#EXTINF:-1 tvg-name="宁夏卫视" tvg-logo="https://live.fanmingming.com/tv/宁夏卫视.png" group-title="卫视频道",宁夏卫视 +http://[2409:8087:5e01:34::20]:6610/ZTE_CMS/00000001000000060000000000000309/index.m3u8?IAS +#EXTINF:-1 tvg-name="陕西卫视" tvg-logo="https://live.fanmingming.com/tv/陕西卫视.png" group-title="卫视频道",陕西卫视 +http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000313/index.m3u8?IAS +#EXTINF:-1 tvg-name="吉林卫视" tvg-logo="https://live.fanmingming.com/tv/吉林卫视.png" group-title="卫视频道",吉林卫视 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226397/index.m3u8 +#EXTINF:-1 tvg-name="甘肃卫视" tvg-logo="https://live.fanmingming.com/tv/甘肃卫视.png" group-title="卫视频道",甘肃卫视 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225633/index.m3u8 +#EXTINF:-1 tvg-name="云南卫视" tvg-logo="https://live.fanmingming.com/tv/云南卫视.png" group-title="卫视频道",云南卫视 +http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000305/index.m3u8?IAS +#EXTINF:-1 tvg-name="三沙卫视" tvg-logo="https://live.fanmingming.com/tv/三沙卫视.png" group-title="卫视频道",三沙卫视 +http://[2409:8087:5e01:34::21]:6610/ZTE_CMS/08984400000000060000000000000319/index.m3u8?IAS +#EXTINF:-1 tvg-name="青海卫视" tvg-logo="https://live.fanmingming.com/tv/青海卫视.png" group-title="卫视频道",青海卫视 +http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225628/index.m3u8 +#EXTINF:-1 tvg-name="新疆卫视" tvg-logo="https://live.fanmingming.com/tv/新疆卫视.png" group-title="卫视频道",新疆卫视 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225635/index.m3u8 +#EXTINF:-1 tvg-name="西藏卫视" tvg-logo="https://live.fanmingming.com/tv/西藏卫视.png" group-title="卫视频道",西藏卫视 +http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000317/index.m3u8?IAS +#EXTINF:-1 tvg-name="兵团卫视" tvg-logo="https://live.fanmingming.com/tv/兵团卫视.png" group-title="卫视频道",兵团卫视 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226439/index.m3u8 +#EXTINF:-1 tvg-name="延边卫视" tvg-logo="https://live.fanmingming.com/tv/延边卫视.png" group-title="卫视频道",延边卫视 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226516/index.m3u8 +#EXTINF:-1 tvg-name="安多卫视" tvg-logo="https://live.fanmingming.com/tv/安多卫视.png" group-title="卫视频道",安多卫视 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225659/index.m3u8 +#EXTINF:-1 tvg-name="厦门卫视" tvg-logo="https://live.fanmingming.com/tv/厦门卫视.png" group-title="卫视频道",厦门卫视 +http://[2409:8087:5e01:34::22]:6610/ZTE_CMS/00000001000000060000000000000193/index.m3u8?IAS +#EXTINF:-1 tvg-name="康巴卫视" tvg-logo="https://live.fanmingming.com/tv/康巴卫视.png" group-title="卫视频道",康巴卫视 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225660/index.m3u8 +#EXTINF:-1 tvg-name="中国教育1台" tvg-logo="https://live.fanmingming.com/tv/CETV1.png" group-title="卫视频道",CETV-1 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225652/index.m3u8 +#EXTINF:-1 tvg-name="中国教育2台" tvg-logo="https://live.fanmingming.com/tv/CETV2.png" group-title="卫视频道",CETV-2 +http://[2409:8087:1a0b:df::4013]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226425/index.m3u8 +#EXTINF:-1 tvg-name="中国教育4台" tvg-logo="https://live.fanmingming.com/tv/CETV4.png" group-title="卫视频道",CETV-4 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225783/index.m3u8 +#EXTINF:-1 tvg-name="内蒙古蒙语卫视" tvg-logo="https://live.fanmingming.com/tv/内蒙古蒙语卫视.png" group-title="内蒙频道",蒙语卫视 +https://livestream-bt.nmtv.cn/nmtv/2315general.m3u8?txSecret=e2b255285dd119a92c8aa5cdf00f8b84&txTime=771EF880 +#EXTINF:-1 tvg-name="爱上4K" tvg-logo="https://live.fanmingming.com/tv/爱上4K.png" tvg-logo="" group-title="数字频道",爱上4K +http://[2409:8087:5e01:34::23]:6610/ZTE_CMS/00000001000000060000000000000459/index.m3u8?IAS +#EXTINF:-1 tvg-name="上海纪实人文" tvg-logo="https://live.fanmingming.com/tv/纪实人文.png" group-title="数字频道",纪实人文 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225738/index.m3u8 +#EXTINF:-1 tvg-name="纪实科教" tvg-logo="https://live.fanmingming.com/tv/北京纪实科教.png" group-title="数字频道",纪实科教 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225729/index.m3u8 +#EXTINF:-1 tvg-name="劲爆体育" tvg-logo="https://live.fanmingming.com/tv/劲爆体育.png" group-title="数字频道",劲爆体育 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000008&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="全纪实" tvg-logo="https://live.fanmingming.com/tv/乐游.png" group-title="数字频道",乐游频道 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000002000000092/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000002000000092&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="卡酷动画" tvg-logo="https://live.fanmingming.com/tv/卡酷少儿.png" group-title="数字频道",卡酷少儿 +http://[2409:8087:1a0b:df::4020]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225654/index.m3u8 +#EXTINF:-1 tvg-name="金鹰卡通" tvg-logo="https://live.fanmingming.com/tv/金鹰卡通.png" group-title="数字频道",金鹰卡通 +http://[2409:8087:1a0b:df::4008]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225653/index.m3u8 +#EXTINF:-1 tvg-name="金鹰纪实" tvg-logo="https://live.fanmingming.com/tv/金鹰纪实.png" group-title="数字频道",金鹰纪实 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN4766929BESTVSMGSMG/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="茶" tvg-logo="https://live.fanmingming.com/tv/茶.png" group-title="数字频道",茶友频道 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638729d8aca53/index.m3u8?AuthInfo=9kOOdBn7MFF%2F2bWjKgahUSBx06ZL9Bo6JOM%2BSTjxZRIdUCZxTtaM%2Bza0L7mJjkPMmnEhAf%2Bi68sKjzRCbPoTU0E%2B6Pia2CkRtxgPs8Tmw7I +#EXTINF:-1 tvg-name="快乐垂钓" tvg-logo="https://live.fanmingming.com/tv/快乐垂钓.png" group-title="数字频道",快乐垂钓 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN638729b6002c4/index.m3u8?m3u8_level=2 +#EXTINF:-1 tvg-name="哒啵赛事" tvg-logo="https://live.fanmingming.com/tv/哒啵赛事.png" group-title="数字频道",哒啵赛事 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225675/index.m3u8 +#EXTINF:-1 tvg-name="哒啵电竞" tvg-logo="https://live.fanmingming.com/tv/哒啵电竞.png" group-title="数字频道",哒啵电竞 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000003000000066/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000003000000066&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="优漫卡通" tvg-logo="https://live.fanmingming.com/tv/优漫卡通.png" group-title="数字频道",优漫卡通 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225656/index.m3u8 +#EXTINF:-1 tvg-name="哈哈炫动" tvg-logo="https://live.fanmingming.com/tv/哈哈炫动.png" group-title="数字频道",哈哈炫动 +http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225657/index.m3u8 +#EXTINF:-1 tvg-name="黑莓动画" tvg-logo="https://live.fanmingming.com/tv/黑莓动画.png" group-title="数字频道",黑莓动画 +http://[2409:8087:1a0b:df::4006]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225662/index.m3u8 +#EXTINF:-1 tvg-name="黑莓电影" tvg-logo="https://live.fanmingming.com/tv/黑莓电影.png" group-title="数字频道",黑莓电影 +http://[2409:8087:1a0b:df::4014]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225743/index.m3u8 +#EXTINF:-1 tvg-name="梨园" tvg-logo="https://live.fanmingming.com/tv/河南梨园.png" group-title="数字频道",梨园频道 +http://[2409:8087:4c0a:22:1::11]:6410/170000001115/UmaiCHAN6380788ba7bed/index.m3u8?AuthInfo=toEYVdLfxymUP2l9NZpQI5%2BK6T7j%2FlRm%2BvbM9VO7bA0q1S1k1f36SqqriM0FZoFSAJRfCt8SS7X6sTRmXb81a8O4H%2FdroDKjLoDeaMQdyJQ +#EXTINF:-1 tvg-name="求索记录" tvg-logo="https://live.fanmingming.com/tv/求索记录.png" group-title="数字频道",求索记录 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000010/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000010&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="求索动物" tvg-logo="https://live.fanmingming.com/tv/求索动物.png" group-title="数字频道",求索动物 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000009/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000009&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="求索科学" tvg-logo="https://live.fanmingming.com/tv/求索科学.png" group-title="数字频道",求索科学 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000011/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000011&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="求索生活" tvg-logo="https://live.fanmingming.com/tv/求索生活.png" group-title="数字频道",求索生活 +http://[2409:8087:5e08:24::12]:6610/000000001000/2000000004000000008/index.m3u8?stbId=3&livemode=1&HlsProfileId=&channel-id=hnbblive&Contentid=2000000004000000008&IASHttpSessionId=OTT19019320240419154124000281 +#EXTINF:-1 tvg-name="newtv超级体育" tvg-logo="https://live.fanmingming.com/tv/NEWTV超级体育.png" group-title="数字频道",超级体育 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225715/index.m3u8 +#EXTINF:-1 tvg-name="newtv超级电影" tvg-logo="https://live.fanmingming.com/tv/NEWTV超级电影.png" group-title="数字频道",超级电影 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225717/index.m3u8 +#EXTINF:-1 tvg-name="newtv超级电视剧" tvg-logo="https://live.fanmingming.com/tv/NEWTV超级电视剧.png" group-title="数字频道",超级视剧 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225716/index.m3u8 +#EXTINF:-1 tvg-name="newtv东北热剧" tvg-logo="https://live.fanmingming.com/tv/NEWTV东北热剧.png" group-title="数字频道",东北热剧 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225741/index.m3u8 +#EXTINF:-1 tvg-name="newtv海外剧场" tvg-logo="https://live.fanmingming.com/tv/NEWTV海外剧场.png" group-title="数字频道",海外剧场 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225671/index.m3u8 +#EXTINF:-1 tvg-name="newtv中国功夫" tvg-logo="https://live.fanmingming.com/tv/NEWTV中国功夫.png" group-title="数字频道",中国功夫 +http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225681/index.m3u8 +#EXTINF:-1 tvg-name="newtv军旅剧场" tvg-logo="https://live.fanmingming.com/tv/NEWTV军旅剧场.png" group-title="数字频道",军旅剧场 +http://[2409:8087:1a0b:df::4018]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225676/index.m3u8 +#EXTINF:-1 tvg-name="newtv惊悚悬疑" tvg-logo="https://live.fanmingming.com/tv/NEWTV惊悚悬疑.png" group-title="数字频道",惊悚悬疑 +http://[2409:8087:1a0b:df::4002]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225665/index.m3u8 +#EXTINF:-1 tvg-name="newtv潮妈辣婆" tvg-logo="https://live.fanmingming.com/tv/NEWTV潮妈辣婆.png" group-title="数字频道",潮妈辣婆 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225685/index.m3u8 +#EXTINF:-1 tvg-name="newtv精品体育" tvg-logo="https://live.fanmingming.com/tv/NEWTV精品体育.png" group-title="数字频道",精品体育 +http://[2409:8087:1a0b:df::4004]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225674/index.m3u8 +#EXTINF:-1 tvg-name="newtv精品纪录" tvg-logo="https://live.fanmingming.com/tv/NEWTV精品纪录.png" group-title="数字频道",精品纪录 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225672/index.m3u8 +#EXTINF:-1 tvg-name="newtv家庭剧场" tvg-logo="https://live.fanmingming.com/tv/NEWTV家庭剧场.png" group-title="数字频道",家庭剧场 +http://[2409:8087:1a0b:df::4007]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225677/index.m3u8 +#EXTINF:-1 tvg-name="newtv精品大剧" tvg-logo="https://live.fanmingming.com/tv/NEWTV精品大剧.png" group-title="数字频道",精品大剧 +http://[2409:8087:1a0b:df::4001]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225670/index.m3u8 +#EXTINF:-1 tvg-name="newtv军事评论" tvg-logo="https://live.fanmingming.com/tv/NEWTV军事评论.png" group-title="数字频道",军事评论 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225668/index.m3u8 +#EXTINF:-1 tvg-name="newtv明星大片" tvg-logo="https://live.fanmingming.com/tv/NEWTV明星大片.png" group-title="数字频道",明星大片 +http://[2409:8087:1a0b:df::4005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225664/index.m3u8 +#EXTINF:-1 tvg-name="newtv欢乐剧场" tvg-logo="https://live.fanmingming.com/tv/NEWTV欢乐剧场.png" group-title="数字频道",欢乐剧场 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225742/index.m3u8 +#EXTINF:-1 tvg-name="newtv精品萌宠" tvg-logo="https://live.fanmingming.com/tv/NEWTV精品萌宠.png" group-title="数字频道",精品萌宠 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221226505/index.m3u8 +#EXTINF:-1 tvg-name="newtv超级综艺" tvg-logo="https://live.fanmingming.com/tv/NEWTV超级综艺.png" group-title="数字频道",超级综艺 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225714/index.m3u8 +#EXTINF:-1 tvg-name="newtv金牌综艺" tvg-logo="https://live.fanmingming.com/tv/NEWTV金牌综艺.png" group-title="数字频道",金牌综艺 +http://[2409:8087:1a01:df::7005]:80/ottrrs.hl.chinamobile.com/PLTV/88888888/224/3221225666/index.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Live Cams" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Live Cams +http://cdn.adultiptv.net/livecams.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="MILF" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",MILF +http://cdn.adultiptv.net/milf.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Big Dick" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Big Dick +http://cdn.adultiptv.net/bigdick.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Big Tits" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Big Tits +http://cdn.adultiptv.net/bigtits.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Fetish" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Fetish +http://cdn.adultiptv.net/fetish.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Pornstar" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Pornstar +http://cdn.adultiptv.net/pornstar.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Big Ass" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Big Ass +http://cdn.adultiptv.net/bigass.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Interracial" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Interracial +http://cdn.adultiptv.net/interracial.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Latina" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Latina +http://cdn.adultiptv.net/latina.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="POV" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",POV +http://cdn.adultiptv.net/pov.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Blowjob" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Blowjob +http://cdn.adultiptv.net/blowjob.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Teen" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Teen +http://cdn.adultiptv.net/teen.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Hardcore" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Hardcore +http://cdn.adultiptv.net/hardcore.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Cuckold" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Cuckold +http://cdn.adultiptv.net/cuckold.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Threesome" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Threesome +http://cdn.adultiptv.net/threesome.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Russian" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Russian +http://cdn.adultiptv.net/russian.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Lesbian" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Lesbian +http://cdn.adultiptv.net/lesbian.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Rough" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Rough +http://cdn.adultiptv.net/rough.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Gangbang" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Gangbang +http://cdn.adultiptv.net/gangbang.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Anal" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Anal +http://cdn.adultiptv.net/anal.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Compilation" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Compilation +http://cdn.adultiptv.net/compilation.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Brunette" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Brunette +http://cdn.adultiptv.net/brunette.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Blonde" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Blonde +http://cdn.adultiptv.net/blonde.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Gay" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Gay +http://cdn.adultiptv.net/gay.m3u8 +#EXTINF:-1 tvg-id="" tvg-name="Asian" tvg-language="English" tvg-logo="https://files.adultiptv.net/adultiptvnet.jpg" group-title="成人频道",Asian +http://cdn.adultiptv.net/asian.m3u8 diff --git a/dockge/postgresql/.env b/dockge/postgresql/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/dockge/postgresql/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/dockge/postgresql/docker-compose.yml b/dockge/postgresql/docker-compose.yml new file mode 100644 index 00000000..644e2fa7 --- /dev/null +++ b/dockge/postgresql/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg15-vectors-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: tensorchord/pgvecto-rs:pg15-v0.2.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/dockge/postgresql/envs/default.env b/dockge/postgresql/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/postgresql/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/postgresql/envs/global.env b/dockge/postgresql/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/postgresql/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/postgresql_16_6-alpine/.env b/dockge/postgresql_16_6-alpine/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/dockge/postgresql_16_6-alpine/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/dockge/postgresql_16_6-alpine/docker-compose.yml b/dockge/postgresql_16_6-alpine/docker-compose.yml new file mode 100644 index 00000000..0d03dd25 --- /dev/null +++ b/dockge/postgresql_16_6-alpine/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:16.6-alpine + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/dockge/postgresql_16_6-alpine/envs/default.env b/dockge/postgresql_16_6-alpine/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/postgresql_16_6-alpine/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/postgresql_16_6-alpine/envs/global.env b/dockge/postgresql_16_6-alpine/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/postgresql_16_6-alpine/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/postgresql_16_6/.env b/dockge/postgresql_16_6/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/dockge/postgresql_16_6/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/dockge/postgresql_16_6/docker-compose.yml b/dockge/postgresql_16_6/docker-compose.yml new file mode 100644 index 00000000..080abe7d --- /dev/null +++ b/dockge/postgresql_16_6/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:16.6 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/dockge/postgresql_16_6/envs/default.env b/dockge/postgresql_16_6/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/postgresql_16_6/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/postgresql_16_6/envs/global.env b/dockge/postgresql_16_6/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/postgresql_16_6/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/postgresql_17_2-alpine/.env b/dockge/postgresql_17_2-alpine/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/dockge/postgresql_17_2-alpine/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/dockge/postgresql_17_2-alpine/docker-compose.yml b/dockge/postgresql_17_2-alpine/docker-compose.yml new file mode 100644 index 00000000..755bbd95 --- /dev/null +++ b/dockge/postgresql_17_2-alpine/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:17.2-alpine + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/dockge/postgresql_17_2-alpine/envs/default.env b/dockge/postgresql_17_2-alpine/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/postgresql_17_2-alpine/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/postgresql_17_2-alpine/envs/global.env b/dockge/postgresql_17_2-alpine/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/postgresql_17_2-alpine/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/postgresql_17_2/.env b/dockge/postgresql_17_2/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/dockge/postgresql_17_2/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/dockge/postgresql_17_2/docker-compose.yml b/dockge/postgresql_17_2/docker-compose.yml new file mode 100644 index 00000000..1252085c --- /dev/null +++ b/dockge/postgresql_17_2/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:17.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/dockge/postgresql_17_2/envs/default.env b/dockge/postgresql_17_2/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/postgresql_17_2/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/postgresql_17_2/envs/global.env b/dockge/postgresql_17_2/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/postgresql_17_2/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/postgresql_pg14-alpine/.env b/dockge/postgresql_pg14-alpine/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/dockge/postgresql_pg14-alpine/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/dockge/postgresql_pg14-alpine/docker-compose.yml b/dockge/postgresql_pg14-alpine/docker-compose.yml new file mode 100644 index 00000000..ba67b95b --- /dev/null +++ b/dockge/postgresql_pg14-alpine/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg14-alpine-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:14-alpine + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/dockge/postgresql_pg14-alpine/envs/default.env b/dockge/postgresql_pg14-alpine/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/postgresql_pg14-alpine/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/postgresql_pg14-alpine/envs/global.env b/dockge/postgresql_pg14-alpine/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/postgresql_pg14-alpine/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/postgresql_pg14-vectors/.env b/dockge/postgresql_pg14-vectors/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/dockge/postgresql_pg14-vectors/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/dockge/postgresql_pg14-vectors/docker-compose.yml b/dockge/postgresql_pg14-vectors/docker-compose.yml new file mode 100644 index 00000000..a02df308 --- /dev/null +++ b/dockge/postgresql_pg14-vectors/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg14-vectors-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: tensorchord/pgvecto-rs:pg14-v0.2.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/dockge/postgresql_pg14-vectors/envs/default.env b/dockge/postgresql_pg14-vectors/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/postgresql_pg14-vectors/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/postgresql_pg14-vectors/envs/global.env b/dockge/postgresql_pg14-vectors/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/postgresql_pg14-vectors/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/postgresql_pg14/.env b/dockge/postgresql_pg14/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/dockge/postgresql_pg14/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/dockge/postgresql_pg14/docker-compose.yml b/dockge/postgresql_pg14/docker-compose.yml new file mode 100644 index 00000000..9724e766 --- /dev/null +++ b/dockge/postgresql_pg14/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg14-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:14 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/dockge/postgresql_pg14/envs/default.env b/dockge/postgresql_pg14/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/postgresql_pg14/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/postgresql_pg14/envs/global.env b/dockge/postgresql_pg14/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/postgresql_pg14/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/postgresql_pg15-alpine/.env b/dockge/postgresql_pg15-alpine/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/dockge/postgresql_pg15-alpine/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/dockge/postgresql_pg15-alpine/docker-compose.yml b/dockge/postgresql_pg15-alpine/docker-compose.yml new file mode 100644 index 00000000..d7d310cd --- /dev/null +++ b/dockge/postgresql_pg15-alpine/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg15-alpine-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:15-alpine + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/dockge/postgresql_pg15-alpine/envs/default.env b/dockge/postgresql_pg15-alpine/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/postgresql_pg15-alpine/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/postgresql_pg15-alpine/envs/global.env b/dockge/postgresql_pg15-alpine/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/postgresql_pg15-alpine/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/postgresql_pg15/.env b/dockge/postgresql_pg15/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/dockge/postgresql_pg15/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/dockge/postgresql_pg15/docker-compose.yml b/dockge/postgresql_pg15/docker-compose.yml new file mode 100644 index 00000000..7ee42ec3 --- /dev/null +++ b/dockge/postgresql_pg15/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg15-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:15 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/dockge/postgresql_pg15/envs/default.env b/dockge/postgresql_pg15/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/postgresql_pg15/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/postgresql_pg15/envs/global.env b/dockge/postgresql_pg15/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/postgresql_pg15/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/postgresql_pg16-alpine/.env b/dockge/postgresql_pg16-alpine/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/dockge/postgresql_pg16-alpine/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/dockge/postgresql_pg16-alpine/docker-compose.yml b/dockge/postgresql_pg16-alpine/docker-compose.yml new file mode 100644 index 00000000..6826af06 --- /dev/null +++ b/dockge/postgresql_pg16-alpine/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg16-alpine-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:16-alpine + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/dockge/postgresql_pg16-alpine/envs/default.env b/dockge/postgresql_pg16-alpine/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/postgresql_pg16-alpine/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/postgresql_pg16-alpine/envs/global.env b/dockge/postgresql_pg16-alpine/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/postgresql_pg16-alpine/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/postgresql_pg16-vectors/.env b/dockge/postgresql_pg16-vectors/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/dockge/postgresql_pg16-vectors/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/dockge/postgresql_pg16-vectors/docker-compose.yml b/dockge/postgresql_pg16-vectors/docker-compose.yml new file mode 100644 index 00000000..a51bbf2f --- /dev/null +++ b/dockge/postgresql_pg16-vectors/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg16-vectors-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: tensorchord/pgvecto-rs:pg16-v0.2.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/dockge/postgresql_pg16-vectors/envs/default.env b/dockge/postgresql_pg16-vectors/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/postgresql_pg16-vectors/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/postgresql_pg16-vectors/envs/global.env b/dockge/postgresql_pg16-vectors/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/postgresql_pg16-vectors/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/postgresql_pg16/.env b/dockge/postgresql_pg16/.env new file mode 100644 index 00000000..2b7cd6d0 --- /dev/null +++ b/dockge/postgresql_pg16/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +POSTGRES_ROOT_PATH=/home/postgres + +# Postgres 密码 (首次生效) [必填] +POSTGRES_PASSWORD= + +# Postgres 端口 [必填] +PANEL_APP_PORT_HTTP=5432 + +# Postgres 用户(不建议改动) +POSTGRES_USER=postgres + +# Postgres 数据库名称(不建议改动) +POSTGRES_DB=postgres + diff --git a/dockge/postgresql_pg16/docker-compose.yml b/dockge/postgresql_pg16/docker-compose.yml new file mode 100644 index 00000000..53121747 --- /dev/null +++ b/dockge/postgresql_pg16/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + postgresql: + container_name: pg16-postgresql + env_file: + - ./envs/global.env + - .env + environment: + POSTGRES_DB: ${POSTGRES_DB:-postgres} + POSTGRES_INITDB_ARGS: --data-checksums + POSTGRES_PASSWORD: ${POSTGRES_PASSWORD} + POSTGRES_USER: ${POSTGRES_USER:-postgres} + image: postgres:16 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5432 + restart: always + volumes: + - ${POSTGRES_ROOT_PATH}/data:/var/lib/postgresql/data diff --git a/dockge/postgresql_pg16/envs/default.env b/dockge/postgresql_pg16/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/postgresql_pg16/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/postgresql_pg16/envs/global.env b/dockge/postgresql_pg16/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/postgresql_pg16/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/prowlarr/.env b/dockge/prowlarr/.env new file mode 100644 index 00000000..3000d877 --- /dev/null +++ b/dockge/prowlarr/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +PROWLARR_ROOT_PATH=/home/prowlarr + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=9696 + diff --git a/dockge/prowlarr/docker-compose.yml b/dockge/prowlarr/docker-compose.yml new file mode 100644 index 00000000..2f609c89 --- /dev/null +++ b/dockge/prowlarr/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + prowlarr: + container_name: prowlarr + env_file: + - ./envs/global.env + - .env + environment: + - PUID=1000 + - PGID=1000 + - UMASK=022 + - TZ=Asia/Shanghai + image: linuxserver/prowlarr:1.27.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:9696 + restart: always + volumes: + - ${PROWLARR_ROOT_PATH}/config:/config diff --git a/dockge/prowlarr/envs/default.env b/dockge/prowlarr/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/prowlarr/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/prowlarr/envs/global.env b/dockge/prowlarr/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/prowlarr/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/puff/.env b/dockge/puff/.env new file mode 100644 index 00000000..743cc24d --- /dev/null +++ b/dockge/puff/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +PUFF_ROOT_PATH=/home/puff + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + diff --git a/dockge/puff/docker-compose.yml b/dockge/puff/docker-compose.yml new file mode 100644 index 00000000..fb46fd31 --- /dev/null +++ b/dockge/puff/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + puff: + container_name: puff + env_file: + - ./envs/global.env + - .env + image: bitaur/puff:v0.2.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${PUFF_ROOT_PATH}/data:/app/data diff --git a/dockge/puff/envs/default.env b/dockge/puff/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/puff/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/puff/envs/global.env b/dockge/puff/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/puff/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/qbittorrent/.env b/dockge/qbittorrent/.env new file mode 100644 index 00000000..63b576a9 --- /dev/null +++ b/dockge/qbittorrent/.env @@ -0,0 +1,21 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# Torrenting 端口 [必填] +PANEL_APP_PORT_TORRENTING=6881 + +# 数据持久化路径 [必填] +QBITTORRENT_ROOT_PATH=/home/qBittorrent + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/dockge/qbittorrent/docker-compose.yml b/dockge/qbittorrent/docker-compose.yml new file mode 100644 index 00000000..f0dd9eba --- /dev/null +++ b/dockge/qbittorrent/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + qbittorrent: + container_name: qbittorrent + env_file: + - ./envs/global.env + environment: + - PUID=0 + - PGID=0 + - UMASK=022 + - WEBUI_PORT=${PANEL_APP_PORT_HTTP} + - TORRENTING_PORT=${PANEL_APP_PORT_TORRENTING} + image: linuxserver/qbittorrent:5.0.2 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP} + - ${PANEL_APP_PORT_TORRENTING} + - ${PANEL_APP_PORT_TORRENTING}/udp + restart: always + volumes: + - ${QBITTORRENT_ROOT_PATH}/config:/config + - ${QBITTORRENT_ROOT_PATH}/downloads:/downloads + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/qbittorrent/envs/default.env b/dockge/qbittorrent/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/qbittorrent/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/qbittorrent/envs/global.env b/dockge/qbittorrent/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/qbittorrent/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/qbittorrent_4_6_7/.env b/dockge/qbittorrent_4_6_7/.env new file mode 100644 index 00000000..63b576a9 --- /dev/null +++ b/dockge/qbittorrent_4_6_7/.env @@ -0,0 +1,21 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# Torrenting 端口 [必填] +PANEL_APP_PORT_TORRENTING=6881 + +# 数据持久化路径 [必填] +QBITTORRENT_ROOT_PATH=/home/qBittorrent + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/dockge/qbittorrent_4_6_7/docker-compose.yml b/dockge/qbittorrent_4_6_7/docker-compose.yml new file mode 100644 index 00000000..5ec4b458 --- /dev/null +++ b/dockge/qbittorrent_4_6_7/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + qbittorrent: + container_name: qbittorrent + env_file: + - ./envs/global.env + environment: + - PUID=0 + - PGID=0 + - UMASK=022 + - WEBUI_PORT=${PANEL_APP_PORT_HTTP} + - TORRENTING_PORT=${PANEL_APP_PORT_TORRENTING} + image: linuxserver/qbittorrent:4.6.7 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP} + - ${PANEL_APP_PORT_TORRENTING} + - ${PANEL_APP_PORT_TORRENTING}/udp + restart: always + volumes: + - ${QBITTORRENT_ROOT_PATH}/config:/config + - ${QBITTORRENT_ROOT_PATH}/downloads:/downloads + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/qbittorrent_4_6_7/envs/default.env b/dockge/qbittorrent_4_6_7/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/qbittorrent_4_6_7/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/qbittorrent_4_6_7/envs/global.env b/dockge/qbittorrent_4_6_7/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/qbittorrent_4_6_7/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/qinglong/.env b/dockge/qinglong/.env new file mode 100644 index 00000000..6b1207e9 --- /dev/null +++ b/dockge/qinglong/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +QINGLONG_ROOT_PATH=/home/qinglong + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5700 + +# 部署路径 +QINGLONG_BASE_URL=/ + diff --git a/dockge/qinglong/docker-compose.yml b/dockge/qinglong/docker-compose.yml new file mode 100644 index 00000000..1bd8fd56 --- /dev/null +++ b/dockge/qinglong/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + 1panel-network: + external: true +services: + qinglong: + container_name: qinglong + environment: + - QlPort=5700 + - QlBaseUrl=${QINGLONG_BASE_URL:-/} + image: whyour/qinglong:2.17.12 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP:-5700}:5700 + restart: always + volumes: + - ${QINGLONG_ROOT_PATH}/data:/ql/data diff --git a/dockge/qinglong/envs/default.env b/dockge/qinglong/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/qinglong/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/qinglong/envs/global.env b/dockge/qinglong/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/qinglong/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/radarr/.env b/dockge/radarr/.env new file mode 100644 index 00000000..8ff38249 --- /dev/null +++ b/dockge/radarr/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +RADARR_ROOT_PATH=/home/radarr + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=7878 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/dockge/radarr/docker-compose.yml b/dockge/radarr/docker-compose.yml new file mode 100644 index 00000000..db129b54 --- /dev/null +++ b/dockge/radarr/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + radarr: + container_name: radarr + env_file: + - ./envs/global.env + - .env + environment: + - PUID=1000 + - PGID=1000 + - UMASK=022 + - TZ=Asia/Shanghai + image: linuxserver/radarr:5.15.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:7878 + restart: always + volumes: + - ${RADARR_ROOT_PATH}/config:/config + - ${RADARR_ROOT_PATH}/movies:/movies + - ${RADARR_ROOT_PATH}/downloads:/downloads + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/radarr/envs/default.env b/dockge/radarr/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/radarr/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/radarr/envs/global.env b/dockge/radarr/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/radarr/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/reader3-webview/.env b/dockge/reader3-webview/.env new file mode 100644 index 00000000..8cb19dcc --- /dev/null +++ b/dockge/reader3-webview/.env @@ -0,0 +1,3 @@ +# API 端口 [必填] +PANEL_APP_PORT_HTTP=8050 + diff --git a/dockge/reader3-webview/docker-compose.yml b/dockge/reader3-webview/docker-compose.yml new file mode 100644 index 00000000..faccb3e1 --- /dev/null +++ b/dockge/reader3-webview/docker-compose.yml @@ -0,0 +1,16 @@ +networks: + 1panel-network: + external: true +services: + reader3-webview: + container_name: reader3-webview + env_file: + - ./envs/global.env + image: hectorqin/remote-webview:3.2.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8050 + restart: always diff --git a/dockge/reader3-webview/envs/default.env b/dockge/reader3-webview/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/reader3-webview/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/reader3-webview/envs/global.env b/dockge/reader3-webview/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/reader3-webview/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/reader3/.env b/dockge/reader3/.env new file mode 100644 index 00000000..62e99f56 --- /dev/null +++ b/dockge/reader3/.env @@ -0,0 +1,39 @@ +# 数据持久化路径 [必填] +READER3_ROOT_PATH=/home/reader3 + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 管理员 密码 [必填] +READER_APP_SECUREKEY= + +# 邀请码 +READER_APP_INVITECODE= + +# 缓存章节内容 [必填] +READER_APP_CACHECHAPTERCONTENT=true + +# 自动清理不活跃用户 (天) [必填] +READER_APP_AUTOCLEARINACTIVEUSER=0 + +# 远程 WebView API 地址 (插件) +READER_APP_REMOTEWEBVIEWAPI= + +# 新用户默认启用 WebDAV [必填] +READER_APP_DEFAULTUSERENABLEWEBDAV=false + +# 新用户默认启用 LocalStore [必填] +READER_APP_DEFAULTUSERENABLELOCALSTORE=false + +# 允许新用户编辑书源 [必填] +READER_APP_DEFAULTUSERENABLEBOOKSOURCE=false + +# 允许新用户编辑 RSS 源 [必填] +READER_APP_DEFAULTUSERENABLERSSSOURCE=false + +# 新用户书源数量限制 [必填] +READER_APP_DEFAULTUSERBOOKSOURCELIMIT=200 + +# 用户密码最小长度 [必填] +READER_APP_minUserPasswordLength=8 + diff --git a/dockge/reader3/docker-compose.yml b/dockge/reader3/docker-compose.yml new file mode 100644 index 00000000..c0c6d20f --- /dev/null +++ b/dockge/reader3/docker-compose.yml @@ -0,0 +1,28 @@ +networks: + 1panel-network: + external: true +services: + reader3: + container_name: reader3 + env_file: + - ./envs/global.env + - .env + environment: + - SPRING_PROFILES_ACTIVE=prod + - READER_SERVER_PORT=8080 + - READER_SERVER_CONTEXTPATH=${READER_SERVER_CONTEXTPATH:-} + - READER_APP_USERLIMIT=50 + - READER_APP_SECURE=true + - READER_APP_SHELFUPDATEINTEVAL=10 + - READER_APP_REMOTEBOOKSOURCEUPDATEINTERVAL=720 + image: hectorqin/reader:3.2.10 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${READER3_ROOT_PATH}/logs:/logs + - ${READER3_ROOT_PATH}/storage:/storage diff --git a/dockge/reader3/envs/default.env b/dockge/reader3/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/reader3/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/reader3/envs/global.env b/dockge/reader3/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/reader3/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/redis/.env b/dockge/redis/.env new file mode 100644 index 00000000..969809e6 --- /dev/null +++ b/dockge/redis/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +REDIS_ROOT_PATH=/home/redis + +# 端口 [必填] +PANEL_APP_PORT_HTTP=6379 + +# 密码 +REDIS_ROOT_PASSWORD= + diff --git a/dockge/redis/config/redis.conf b/dockge/redis/config/redis.conf new file mode 100644 index 00000000..8795ae29 --- /dev/null +++ b/dockge/redis/config/redis.conf @@ -0,0 +1,2276 @@ +# Redis configuration file example. +# +# Note that in order to read the configuration file, Redis must be +# started with the file path as first argument: +# +# ./redis-server /path/to/redis.conf + +# Note on units: when memory size is needed, it is possible to specify +# it in the usual form of 1k 5GB 4M and so forth: +# +# 1k => 1000 bytes +# 1kb => 1024 bytes +# 1m => 1000000 bytes +# 1mb => 1024*1024 bytes +# 1g => 1000000000 bytes +# 1gb => 1024*1024*1024 bytes +# +# units are case insensitive so 1GB 1Gb 1gB are all the same. + +################################## INCLUDES ################################### + +# Include one or more other config files here. This is useful if you +# have a standard template that goes to all Redis servers but also need +# to customize a few per-server settings. Include files can include +# other files, so use this wisely. +# +# Note that option "include" won't be rewritten by command "CONFIG REWRITE" +# from admin or Redis Sentinel. Since Redis always uses the last processed +# line as value of a configuration directive, you'd better put includes +# at the beginning of this file to avoid overwriting config change at runtime. +# +# If instead you are interested in using includes to override configuration +# options, it is better to use include as the last line. +# +# Included paths may contain wildcards. All files matching the wildcards will +# be included in alphabetical order. +# Note that if an include path contains a wildcards but no files match it when +# the server is started, the include statement will be ignored and no error will +# be emitted. It is safe, therefore, to include wildcard files from empty +# directories. +# +# include /path/to/local.conf +# include /path/to/other.conf +# include /path/to/fragments/*.conf +# + +################################## MODULES ##################################### + +# Load modules at startup. If the server is not able to load modules +# it will abort. It is possible to use multiple loadmodule directives. +# +# loadmodule /path/to/my_module.so +# loadmodule /path/to/other_module.so + +################################## NETWORK ##################################### + +# By default, if no "bind" configuration directive is specified, Redis listens +# for connections from all available network interfaces on the host machine. +# It is possible to listen to just one or multiple selected interfaces using +# the "bind" configuration directive, followed by one or more IP addresses. +# Each address can be prefixed by "-", which means that redis will not fail to +# start if the address is not available. Being not available only refers to +# addresses that does not correspond to any network interface. Addresses that +# are already in use will always fail, and unsupported protocols will always BE +# silently skipped. +# +# Examples: +# +# bind 192.168.1.100 10.0.0.1 # listens on two specific IPv4 addresses +# bind 127.0.0.1 ::1 # listens on loopback IPv4 and IPv6 +# bind * -::* # like the default, all available interfaces +# +# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the +# internet, binding to all the interfaces is dangerous and will expose the +# instance to everybody on the internet. So by default we uncomment the +# following bind directive, that will force Redis to listen only on the +# IPv4 and IPv6 (if available) loopback interface addresses (this means Redis +# will only be able to accept client connections from the same host that it is +# running on). +# +# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES +# COMMENT OUT THE FOLLOWING LINE. +# +# You will also need to set a password unless you explicitly disable protected +# mode. +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +bind 0.0.0.0 + +# By default, outgoing connections (from replica to master, from Sentinel to +# instances, cluster bus, etc.) are not bound to a specific local address. In +# most cases, this means the operating system will handle that based on routing +# and the interface through which the connection goes out. +# +# Using bind-source-addr it is possible to configure a specific address to bind +# to, which may also affect how the connection gets routed. +# +# Example: +# +# bind-source-addr 10.0.0.1 + +# Protected mode is a layer of security protection, in order to avoid that +# Redis instances left open on the internet are accessed and exploited. +# +# When protected mode is on and the default user has no password, the server +# only accepts local connections from the IPv4 address (127.0.0.1), IPv6 address +# (::1) or Unix domain sockets. +# +# By default protected mode is enabled. You should disable it only if +# you are sure you want clients from other hosts to connect to Redis +# even if no authentication is configured. +protected-mode yes + +# Redis uses default hardened security configuration directives to reduce the +# attack surface on innocent users. Therefore, several sensitive configuration +# directives are immutable, and some potentially-dangerous commands are blocked. +# +# Configuration directives that control files that Redis writes to (e.g., 'dir' +# and 'dbfilename') and that aren't usually modified during runtime +# are protected by making them immutable. +# +# Commands that can increase the attack surface of Redis and that aren't usually +# called by users are blocked by default. +# +# These can be exposed to either all connections or just local ones by setting +# each of the configs listed below to either of these values: +# +# no - Block for any connection (remain immutable) +# yes - Allow for any connection (no protection) +# local - Allow only for local connections. Ones originating from the +# IPv4 address (127.0.0.1), IPv6 address (::1) or Unix domain sockets. +# +# enable-protected-configs no +# enable-debug-command no +# enable-module-command no + +# Accept connections on the specified port, default is 6379 (IANA #815344). +# If port 0 is specified Redis will not listen on a TCP socket. +port 6379 + +# TCP listen() backlog. +# +# In high requests-per-second environments you need a high backlog in order +# to avoid slow clients connection issues. Note that the Linux kernel +# will silently truncate it to the value of /proc/sys/net/core/somaxconn so +# make sure to raise both the value of somaxconn and tcp_max_syn_backlog +# in order to get the desired effect. +tcp-backlog 511 + +# Unix socket. +# +# Specify the path for the Unix socket that will be used to listen for +# incoming connections. There is no default, so Redis will not listen +# on a unix socket when not specified. +# +# unixsocket /run/redis.sock +# unixsocketperm 700 + +# Close the connection after a client is idle for N seconds (0 to disable) +timeout 0 + +# TCP keepalive. +# +# If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence +# of communication. This is useful for two reasons: +# +# 1) Detect dead peers. +# 2) Force network equipment in the middle to consider the connection to be +# alive. +# +# On Linux, the specified value (in seconds) is the period used to send ACKs. +# Note that to close the connection the double of the time is needed. +# On other kernels the period depends on the kernel configuration. +# +# A reasonable value for this option is 300 seconds, which is the new +# Redis default starting with Redis 3.2.1. +tcp-keepalive 300 + +# Apply OS-specific mechanism to mark the listening socket with the specified +# ID, to support advanced routing and filtering capabilities. +# +# On Linux, the ID represents a connection mark. +# On FreeBSD, the ID represents a socket cookie ID. +# On OpenBSD, the ID represents a route table ID. +# +# The default value is 0, which implies no marking is required. +# socket-mark-id 0 + +################################# TLS/SSL ##################################### + +# By default, TLS/SSL is disabled. To enable it, the "tls-port" configuration +# directive can be used to define TLS-listening ports. To enable TLS on the +# default port, use: +# +# port 0 +# tls-port 6379 + +# Configure a X.509 certificate and private key to use for authenticating the +# server to connected clients, masters or cluster peers. These files should be +# PEM formatted. +# +# tls-cert-file redis.crt +# tls-key-file redis.key +# +# If the key file is encrypted using a passphrase, it can be included here +# as well. +# +# tls-key-file-pass secret + +# Normally Redis uses the same certificate for both server functions (accepting +# connections) and client functions (replicating from a master, establishing +# cluster bus connections, etc.). +# +# Sometimes certificates are issued with attributes that designate them as +# client-only or server-only certificates. In that case it may be desired to use +# different certificates for incoming (server) and outgoing (client) +# connections. To do that, use the following directives: +# +# tls-client-cert-file client.crt +# tls-client-key-file client.key +# +# If the key file is encrypted using a passphrase, it can be included here +# as well. +# +# tls-client-key-file-pass secret + +# Configure a DH parameters file to enable Diffie-Hellman (DH) key exchange, +# required by older versions of OpenSSL (<3.0). Newer versions do not require +# this configuration and recommend against it. +# +# tls-dh-params-file redis.dh + +# Configure a CA certificate(s) bundle or directory to authenticate TLS/SSL +# clients and peers. Redis requires an explicit configuration of at least one +# of these, and will not implicitly use the system wide configuration. +# +# tls-ca-cert-file ca.crt +# tls-ca-cert-dir /etc/ssl/certs + +# By default, clients (including replica servers) on a TLS port are required +# to authenticate using valid client side certificates. +# +# If "no" is specified, client certificates are not required and not accepted. +# If "optional" is specified, client certificates are accepted and must be +# valid if provided, but are not required. +# +# tls-auth-clients no +# tls-auth-clients optional + +# By default, a Redis replica does not attempt to establish a TLS connection +# with its master. +# +# Use the following directive to enable TLS on replication links. +# +# tls-replication yes + +# By default, the Redis Cluster bus uses a plain TCP connection. To enable +# TLS for the bus protocol, use the following directive: +# +# tls-cluster yes + +# By default, only TLSv1.2 and TLSv1.3 are enabled and it is highly recommended +# that older formally deprecated versions are kept disabled to reduce the attack surface. +# You can explicitly specify TLS versions to support. +# Allowed values are case insensitive and include "TLSv1", "TLSv1.1", "TLSv1.2", +# "TLSv1.3" (OpenSSL >= 1.1.1) or any combination. +# To enable only TLSv1.2 and TLSv1.3, use: +# +# tls-protocols "TLSv1.2 TLSv1.3" + +# Configure allowed ciphers. See the ciphers(1ssl) manpage for more information +# about the syntax of this string. +# +# Note: this configuration applies only to <= TLSv1.2. +# +# tls-ciphers DEFAULT:!MEDIUM + +# Configure allowed TLSv1.3 ciphersuites. See the ciphers(1ssl) manpage for more +# information about the syntax of this string, and specifically for TLSv1.3 +# ciphersuites. +# +# tls-ciphersuites TLS_CHACHA20_POLY1305_SHA256 + +# When choosing a cipher, use the server's preference instead of the client +# preference. By default, the server follows the client's preference. +# +# tls-prefer-server-ciphers yes + +# By default, TLS session caching is enabled to allow faster and less expensive +# reconnections by clients that support it. Use the following directive to disable +# caching. +# +# tls-session-caching no + +# Change the default number of TLS sessions cached. A zero value sets the cache +# to unlimited size. The default size is 20480. +# +# tls-session-cache-size 5000 + +# Change the default timeout of cached TLS sessions. The default timeout is 300 +# seconds. +# +# tls-session-cache-timeout 60 + +################################# GENERAL ##################################### + +# By default Redis does not run as a daemon. Use 'yes' if you need it. +# Note that Redis will write a pid file in /var/run/redis.pid when daemonized. +# When Redis is supervised by upstart or systemd, this parameter has no impact. +daemonize no + +# If you run Redis from upstart or systemd, Redis can interact with your +# supervision tree. Options: +# supervised no - no supervision interaction +# supervised upstart - signal upstart by putting Redis into SIGSTOP mode +# requires "expect stop" in your upstart job config +# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET +# on startup, and updating Redis status on a regular +# basis. +# supervised auto - detect upstart or systemd method based on +# UPSTART_JOB or NOTIFY_SOCKET environment variables +# Note: these supervision methods only signal "process is ready." +# They do not enable continuous pings back to your supervisor. +# +# The default is "no". To run under upstart/systemd, you can simply uncomment +# the line below: +# +# supervised auto + +# If a pid file is specified, Redis writes it where specified at startup +# and removes it at exit. +# +# When the server runs non daemonized, no pid file is created if none is +# specified in the configuration. When the server is daemonized, the pid file +# is used even if not specified, defaulting to "/var/run/redis.pid". +# +# Creating a pid file is best effort: if Redis is not able to create it +# nothing bad happens, the server will start and run normally. +# +# Note that on modern Linux systems "/run/redis.pid" is more conforming +# and should be used instead. +pidfile /var/run/redis_6379.pid + +# Specify the server verbosity level. +# This can be one of: +# debug (a lot of information, useful for development/testing) +# verbose (many rarely useful info, but not a mess like the debug level) +# notice (moderately verbose, what you want in production probably) +# warning (only very important / critical messages are logged) +loglevel notice + +# Specify the log file name. Also the empty string can be used to force +# Redis to log on the standard output. Note that if you use standard +# output for logging but daemonize, logs will be sent to /dev/null +logfile "" + +# To enable logging to the system logger, just set 'syslog-enabled' to yes, +# and optionally update the other syslog parameters to suit your needs. +# syslog-enabled no + +# Specify the syslog identity. +# syslog-ident redis + +# Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7. +# syslog-facility local0 + +# To disable the built in crash log, which will possibly produce cleaner core +# dumps when they are needed, uncomment the following: +# +# crash-log-enabled no + +# To disable the fast memory check that's run as part of the crash log, which +# will possibly let redis terminate sooner, uncomment the following: +# +# crash-memcheck-enabled no + +# Set the number of databases. The default database is DB 0, you can select +# a different one on a per-connection basis using SELECT where +# dbid is a number between 0 and 'databases'-1 +databases 16 + +# By default Redis shows an ASCII art logo only when started to log to the +# standard output and if the standard output is a TTY and syslog logging is +# disabled. Basically this means that normally a logo is displayed only in +# interactive sessions. +# +# However it is possible to force the pre-4.0 behavior and always show a +# ASCII art logo in startup logs by setting the following option to yes. +always-show-logo no + +# By default, Redis modifies the process title (as seen in 'top' and 'ps') to +# provide some runtime information. It is possible to disable this and leave +# the process name as executed by setting the following to no. +set-proc-title yes + +# When changing the process title, Redis uses the following template to construct +# the modified title. +# +# Template variables are specified in curly brackets. The following variables are +# supported: +# +# {title} Name of process as executed if parent, or type of child process. +# {listen-addr} Bind address or '*' followed by TCP or TLS port listening on, or +# Unix socket if only that's available. +# {server-mode} Special mode, i.e. "[sentinel]" or "[cluster]". +# {port} TCP port listening on, or 0. +# {tls-port} TLS port listening on, or 0. +# {unixsocket} Unix domain socket listening on, or "". +# {config-file} Name of configuration file used. +# +proc-title-template "{title} {listen-addr} {server-mode}" + +################################ SNAPSHOTTING ################################ + +# Save the DB to disk. +# +# save [ ...] +# +# Redis will save the DB if the given number of seconds elapsed and it +# surpassed the given number of write operations against the DB. +# +# Snapshotting can be completely disabled with a single empty string argument +# as in following example: +# +# save "" +# +# Unless specified otherwise, by default Redis will save the DB: +# * After 3600 seconds (an hour) if at least 1 change was performed +# * After 300 seconds (5 minutes) if at least 100 changes were performed +# * After 60 seconds if at least 10000 changes were performed +# +# You can set these explicitly by uncommenting the following line. +# +# save 3600 1 300 100 60 10000 + +# By default Redis will stop accepting writes if RDB snapshots are enabled +# (at least one save point) and the latest background save failed. +# This will make the user aware (in a hard way) that data is not persisting +# on disk properly, otherwise chances are that no one will notice and some +# disaster will happen. +# +# If the background saving process will start working again Redis will +# automatically allow writes again. +# +# However if you have setup your proper monitoring of the Redis server +# and persistence, you may want to disable this feature so that Redis will +# continue to work as usual even if there are problems with disk, +# permissions, and so forth. +stop-writes-on-bgsave-error yes + +# Compress string objects using LZF when dump .rdb databases? +# By default compression is enabled as it's almost always a win. +# If you want to save some CPU in the saving child set it to 'no' but +# the dataset will likely be bigger if you have compressible values or keys. +rdbcompression yes + +# Since version 5 of RDB a CRC64 checksum is placed at the end of the file. +# This makes the format more resistant to corruption but there is a performance +# hit to pay (around 10%) when saving and loading RDB files, so you can disable it +# for maximum performances. +# +# RDB files created with checksum disabled have a checksum of zero that will +# tell the loading code to skip the check. +rdbchecksum yes + +# Enables or disables full sanitization checks for ziplist and listpack etc when +# loading an RDB or RESTORE payload. This reduces the chances of a assertion or +# crash later on while processing commands. +# Options: +# no - Never perform full sanitization +# yes - Always perform full sanitization +# clients - Perform full sanitization only for user connections. +# Excludes: RDB files, RESTORE commands received from the master +# connection, and client connections which have the +# skip-sanitize-payload ACL flag. +# The default should be 'clients' but since it currently affects cluster +# resharding via MIGRATE, it is temporarily set to 'no' by default. +# +# sanitize-dump-payload no + +# The filename where to dump the DB +dbfilename dump.rdb + +# Remove RDB files used by replication in instances without persistence +# enabled. By default this option is disabled, however there are environments +# where for regulations or other security concerns, RDB files persisted on +# disk by masters in order to feed replicas, or stored on disk by replicas +# in order to load them for the initial synchronization, should be deleted +# ASAP. Note that this option ONLY WORKS in instances that have both AOF +# and RDB persistence disabled, otherwise is completely ignored. +# +# An alternative (and sometimes better) way to obtain the same effect is +# to use diskless replication on both master and replicas instances. However +# in the case of replicas, diskless is not always an option. +rdb-del-sync-files no + +# The working directory. +# +# The DB will be written inside this directory, with the filename specified +# above using the 'dbfilename' configuration directive. +# +# The Append Only File will also be created inside this directory. +# +# Note that you must specify a directory here, not a file name. +dir ./ + +################################# REPLICATION ################################# + +# Master-Replica replication. Use replicaof to make a Redis instance a copy of +# another Redis server. A few things to understand ASAP about Redis replication. +# +# +------------------+ +---------------+ +# | Master | ---> | Replica | +# | (receive writes) | | (exact copy) | +# +------------------+ +---------------+ +# +# 1) Redis replication is asynchronous, but you can configure a master to +# stop accepting writes if it appears to be not connected with at least +# a given number of replicas. +# 2) Redis replicas are able to perform a partial resynchronization with the +# master if the replication link is lost for a relatively small amount of +# time. You may want to configure the replication backlog size (see the next +# sections of this file) with a sensible value depending on your needs. +# 3) Replication is automatic and does not need user intervention. After a +# network partition replicas automatically try to reconnect to masters +# and resynchronize with them. +# +# replicaof + +# If the master is password protected (using the "requirepass" configuration +# directive below) it is possible to tell the replica to authenticate before +# starting the replication synchronization process, otherwise the master will +# refuse the replica request. +# +# masterauth +# +# However this is not enough if you are using Redis ACLs (for Redis version +# 6 or greater), and the default user is not capable of running the PSYNC +# command and/or other commands needed for replication. In this case it's +# better to configure a special user to use with replication, and specify the +# masteruser configuration as such: +# +# masteruser +# +# When masteruser is specified, the replica will authenticate against its +# master using the new AUTH form: AUTH . + +# When a replica loses its connection with the master, or when the replication +# is still in progress, the replica can act in two different ways: +# +# 1) if replica-serve-stale-data is set to 'yes' (the default) the replica will +# still reply to client requests, possibly with out of date data, or the +# data set may just be empty if this is the first synchronization. +# +# 2) If replica-serve-stale-data is set to 'no' the replica will reply with error +# "MASTERDOWN Link with MASTER is down and replica-serve-stale-data is set to 'no'" +# to all data access commands, excluding commands such as: +# INFO, REPLICAOF, AUTH, SHUTDOWN, REPLCONF, ROLE, CONFIG, SUBSCRIBE, +# UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB, COMMAND, POST, +# HOST and LATENCY. +# +replica-serve-stale-data yes + +# You can configure a replica instance to accept writes or not. Writing against +# a replica instance may be useful to store some ephemeral data (because data +# written on a replica will be easily deleted after resync with the master) but +# may also cause problems if clients are writing to it because of a +# misconfiguration. +# +# Since Redis 2.6 by default replicas are read-only. +# +# Note: read only replicas are not designed to be exposed to untrusted clients +# on the internet. It's just a protection layer against misuse of the instance. +# Still a read only replica exports by default all the administrative commands +# such as CONFIG, DEBUG, and so forth. To a limited extent you can improve +# security of read only replicas using 'rename-command' to shadow all the +# administrative / dangerous commands. +replica-read-only yes + +# Replication SYNC strategy: disk or socket. +# +# New replicas and reconnecting replicas that are not able to continue the +# replication process just receiving differences, need to do what is called a +# "full synchronization". An RDB file is transmitted from the master to the +# replicas. +# +# The transmission can happen in two different ways: +# +# 1) Disk-backed: The Redis master creates a new process that writes the RDB +# file on disk. Later the file is transferred by the parent +# process to the replicas incrementally. +# 2) Diskless: The Redis master creates a new process that directly writes the +# RDB file to replica sockets, without touching the disk at all. +# +# With disk-backed replication, while the RDB file is generated, more replicas +# can be queued and served with the RDB file as soon as the current child +# producing the RDB file finishes its work. With diskless replication instead +# once the transfer starts, new replicas arriving will be queued and a new +# transfer will start when the current one terminates. +# +# When diskless replication is used, the master waits a configurable amount of +# time (in seconds) before starting the transfer in the hope that multiple +# replicas will arrive and the transfer can be parallelized. +# +# With slow disks and fast (large bandwidth) networks, diskless replication +# works better. +repl-diskless-sync yes + +# When diskless replication is enabled, it is possible to configure the delay +# the server waits in order to spawn the child that transfers the RDB via socket +# to the replicas. +# +# This is important since once the transfer starts, it is not possible to serve +# new replicas arriving, that will be queued for the next RDB transfer, so the +# server waits a delay in order to let more replicas arrive. +# +# The delay is specified in seconds, and by default is 5 seconds. To disable +# it entirely just set it to 0 seconds and the transfer will start ASAP. +repl-diskless-sync-delay 5 + +# When diskless replication is enabled with a delay, it is possible to let +# the replication start before the maximum delay is reached if the maximum +# number of replicas expected have connected. Default of 0 means that the +# maximum is not defined and Redis will wait the full delay. +repl-diskless-sync-max-replicas 0 + +# ----------------------------------------------------------------------------- +# WARNING: RDB diskless load is experimental. Since in this setup the replica +# does not immediately store an RDB on disk, it may cause data loss during +# failovers. RDB diskless load + Redis modules not handling I/O reads may also +# cause Redis to abort in case of I/O errors during the initial synchronization +# stage with the master. Use only if you know what you are doing. +# ----------------------------------------------------------------------------- +# +# Replica can load the RDB it reads from the replication link directly from the +# socket, or store the RDB to a file and read that file after it was completely +# received from the master. +# +# In many cases the disk is slower than the network, and storing and loading +# the RDB file may increase replication time (and even increase the master's +# Copy on Write memory and replica buffers). +# However, parsing the RDB file directly from the socket may mean that we have +# to flush the contents of the current database before the full rdb was +# received. For this reason we have the following options: +# +# "disabled" - Don't use diskless load (store the rdb file to the disk first) +# "on-empty-db" - Use diskless load only when it is completely safe. +# "swapdb" - Keep current db contents in RAM while parsing the data directly +# from the socket. Replicas in this mode can keep serving current +# data set while replication is in progress, except for cases where +# they can't recognize master as having a data set from same +# replication history. +# Note that this requires sufficient memory, if you don't have it, +# you risk an OOM kill. +repl-diskless-load disabled + +# Master send PINGs to its replicas in a predefined interval. It's possible to +# change this interval with the repl_ping_replica_period option. The default +# value is 10 seconds. +# +# repl-ping-replica-period 10 + +# The following option sets the replication timeout for: +# +# 1) Bulk transfer I/O during SYNC, from the point of view of replica. +# 2) Master timeout from the point of view of replicas (data, pings). +# 3) Replica timeout from the point of view of masters (REPLCONF ACK pings). +# +# It is important to make sure that this value is greater than the value +# specified for repl-ping-replica-period otherwise a timeout will be detected +# every time there is low traffic between the master and the replica. The default +# value is 60 seconds. +# +# repl-timeout 60 + +# Disable TCP_NODELAY on the replica socket after SYNC? +# +# If you select "yes" Redis will use a smaller number of TCP packets and +# less bandwidth to send data to replicas. But this can add a delay for +# the data to appear on the replica side, up to 40 milliseconds with +# Linux kernels using a default configuration. +# +# If you select "no" the delay for data to appear on the replica side will +# be reduced but more bandwidth will be used for replication. +# +# By default we optimize for low latency, but in very high traffic conditions +# or when the master and replicas are many hops away, turning this to "yes" may +# be a good idea. +repl-disable-tcp-nodelay no + +# Set the replication backlog size. The backlog is a buffer that accumulates +# replica data when replicas are disconnected for some time, so that when a +# replica wants to reconnect again, often a full resync is not needed, but a +# partial resync is enough, just passing the portion of data the replica +# missed while disconnected. +# +# The bigger the replication backlog, the longer the replica can endure the +# disconnect and later be able to perform a partial resynchronization. +# +# The backlog is only allocated if there is at least one replica connected. +# +# repl-backlog-size 1mb + +# After a master has no connected replicas for some time, the backlog will be +# freed. The following option configures the amount of seconds that need to +# elapse, starting from the time the last replica disconnected, for the backlog +# buffer to be freed. +# +# Note that replicas never free the backlog for timeout, since they may be +# promoted to masters later, and should be able to correctly "partially +# resynchronize" with other replicas: hence they should always accumulate backlog. +# +# A value of 0 means to never release the backlog. +# +# repl-backlog-ttl 3600 + +# The replica priority is an integer number published by Redis in the INFO +# output. It is used by Redis Sentinel in order to select a replica to promote +# into a master if the master is no longer working correctly. +# +# A replica with a low priority number is considered better for promotion, so +# for instance if there are three replicas with priority 10, 100, 25 Sentinel +# will pick the one with priority 10, that is the lowest. +# +# However a special priority of 0 marks the replica as not able to perform the +# role of master, so a replica with priority of 0 will never be selected by +# Redis Sentinel for promotion. +# +# By default the priority is 100. +replica-priority 100 + +# The propagation error behavior controls how Redis will behave when it is +# unable to handle a command being processed in the replication stream from a master +# or processed while reading from an AOF file. Errors that occur during propagation +# are unexpected, and can cause data inconsistency. However, there are edge cases +# in earlier versions of Redis where it was possible for the server to replicate or persist +# commands that would fail on future versions. For this reason the default behavior +# is to ignore such errors and continue processing commands. +# +# If an application wants to ensure there is no data divergence, this configuration +# should be set to 'panic' instead. The value can also be set to 'panic-on-replicas' +# to only panic when a replica encounters an error on the replication stream. One of +# these two panic values will become the default value in the future once there are +# sufficient safety mechanisms in place to prevent false positive crashes. +# +# propagation-error-behavior ignore + +# Replica ignore disk write errors controls the behavior of a replica when it is +# unable to persist a write command received from its master to disk. By default, +# this configuration is set to 'no' and will crash the replica in this condition. +# It is not recommended to change this default, however in order to be compatible +# with older versions of Redis this config can be toggled to 'yes' which will just +# log a warning and execute the write command it got from the master. +# +# replica-ignore-disk-write-errors no + +# ----------------------------------------------------------------------------- +# By default, Redis Sentinel includes all replicas in its reports. A replica +# can be excluded from Redis Sentinel's announcements. An unannounced replica +# will be ignored by the 'sentinel replicas ' command and won't be +# exposed to Redis Sentinel's clients. +# +# This option does not change the behavior of replica-priority. Even with +# replica-announced set to 'no', the replica can be promoted to master. To +# prevent this behavior, set replica-priority to 0. +# +# replica-announced yes + +# It is possible for a master to stop accepting writes if there are less than +# N replicas connected, having a lag less or equal than M seconds. +# +# The N replicas need to be in "online" state. +# +# The lag in seconds, that must be <= the specified value, is calculated from +# the last ping received from the replica, that is usually sent every second. +# +# This option does not GUARANTEE that N replicas will accept the write, but +# will limit the window of exposure for lost writes in case not enough replicas +# are available, to the specified number of seconds. +# +# For example to require at least 3 replicas with a lag <= 10 seconds use: +# +# min-replicas-to-write 3 +# min-replicas-max-lag 10 +# +# Setting one or the other to 0 disables the feature. +# +# By default min-replicas-to-write is set to 0 (feature disabled) and +# min-replicas-max-lag is set to 10. + +# A Redis master is able to list the address and port of the attached +# replicas in different ways. For example the "INFO replication" section +# offers this information, which is used, among other tools, by +# Redis Sentinel in order to discover replica instances. +# Another place where this info is available is in the output of the +# "ROLE" command of a master. +# +# The listed IP address and port normally reported by a replica is +# obtained in the following way: +# +# IP: The address is auto detected by checking the peer address +# of the socket used by the replica to connect with the master. +# +# Port: The port is communicated by the replica during the replication +# handshake, and is normally the port that the replica is using to +# listen for connections. +# +# However when port forwarding or Network Address Translation (NAT) is +# used, the replica may actually be reachable via different IP and port +# pairs. The following two options can be used by a replica in order to +# report to its master a specific set of IP and port, so that both INFO +# and ROLE will report those values. +# +# There is no need to use both the options if you need to override just +# the port or the IP address. +# +# replica-announce-ip 5.5.5.5 +# replica-announce-port 1234 + +############################### KEYS TRACKING ################################# + +# Redis implements server assisted support for client side caching of values. +# This is implemented using an invalidation table that remembers, using +# a radix key indexed by key name, what clients have which keys. In turn +# this is used in order to send invalidation messages to clients. Please +# check this page to understand more about the feature: +# +# https://redis.io/topics/client-side-caching +# +# When tracking is enabled for a client, all the read only queries are assumed +# to be cached: this will force Redis to store information in the invalidation +# table. When keys are modified, such information is flushed away, and +# invalidation messages are sent to the clients. However if the workload is +# heavily dominated by reads, Redis could use more and more memory in order +# to track the keys fetched by many clients. +# +# For this reason it is possible to configure a maximum fill value for the +# invalidation table. By default it is set to 1M of keys, and once this limit +# is reached, Redis will start to evict keys in the invalidation table +# even if they were not modified, just to reclaim memory: this will in turn +# force the clients to invalidate the cached values. Basically the table +# maximum size is a trade off between the memory you want to spend server +# side to track information about who cached what, and the ability of clients +# to retain cached objects in memory. +# +# If you set the value to 0, it means there are no limits, and Redis will +# retain as many keys as needed in the invalidation table. +# In the "stats" INFO section, you can find information about the number of +# keys in the invalidation table at every given moment. +# +# Note: when key tracking is used in broadcasting mode, no memory is used +# in the server side so this setting is useless. +# +# tracking-table-max-keys 1000000 + +################################## SECURITY ################################### + +# Warning: since Redis is pretty fast, an outside user can try up to +# 1 million passwords per second against a modern box. This means that you +# should use very strong passwords, otherwise they will be very easy to break. +# Note that because the password is really a shared secret between the client +# and the server, and should not be memorized by any human, the password +# can be easily a long string from /dev/urandom or whatever, so by using a +# long and unguessable password no brute force attack will be possible. + +# Redis ACL users are defined in the following format: +# +# user ... acl rules ... +# +# For example: +# +# user worker +@list +@connection ~jobs:* on >ffa9203c493aa99 +# +# The special username "default" is used for new connections. If this user +# has the "nopass" rule, then new connections will be immediately authenticated +# as the "default" user without the need of any password provided via the +# AUTH command. Otherwise if the "default" user is not flagged with "nopass" +# the connections will start in not authenticated state, and will require +# AUTH (or the HELLO command AUTH option) in order to be authenticated and +# start to work. +# +# The ACL rules that describe what a user can do are the following: +# +# on Enable the user: it is possible to authenticate as this user. +# off Disable the user: it's no longer possible to authenticate +# with this user, however the already authenticated connections +# will still work. +# skip-sanitize-payload RESTORE dump-payload sanitization is skipped. +# sanitize-payload RESTORE dump-payload is sanitized (default). +# + Allow the execution of that command. +# May be used with `|` for allowing subcommands (e.g "+config|get") +# - Disallow the execution of that command. +# May be used with `|` for blocking subcommands (e.g "-config|set") +# +@ Allow the execution of all the commands in such category +# with valid categories are like @admin, @set, @sortedset, ... +# and so forth, see the full list in the server.c file where +# the Redis command table is described and defined. +# The special category @all means all the commands, but currently +# present in the server, and that will be loaded in the future +# via modules. +# +|first-arg Allow a specific first argument of an otherwise +# disabled command. It is only supported on commands with +# no sub-commands, and is not allowed as negative form +# like -SELECT|1, only additive starting with "+". This +# feature is deprecated and may be removed in the future. +# allcommands Alias for +@all. Note that it implies the ability to execute +# all the future commands loaded via the modules system. +# nocommands Alias for -@all. +# ~ Add a pattern of keys that can be mentioned as part of +# commands. For instance ~* allows all the keys. The pattern +# is a glob-style pattern like the one of KEYS. +# It is possible to specify multiple patterns. +# %R~ Add key read pattern that specifies which keys can be read +# from. +# %W~ Add key write pattern that specifies which keys can be +# written to. +# allkeys Alias for ~* +# resetkeys Flush the list of allowed keys patterns. +# & Add a glob-style pattern of Pub/Sub channels that can be +# accessed by the user. It is possible to specify multiple channel +# patterns. +# allchannels Alias for &* +# resetchannels Flush the list of allowed channel patterns. +# > Add this password to the list of valid password for the user. +# For example >mypass will add "mypass" to the list. +# This directive clears the "nopass" flag (see later). +# < Remove this password from the list of valid passwords. +# nopass All the set passwords of the user are removed, and the user +# is flagged as requiring no password: it means that every +# password will work against this user. If this directive is +# used for the default user, every new connection will be +# immediately authenticated with the default user without +# any explicit AUTH command required. Note that the "resetpass" +# directive will clear this condition. +# resetpass Flush the list of allowed passwords. Moreover removes the +# "nopass" status. After "resetpass" the user has no associated +# passwords and there is no way to authenticate without adding +# some password (or setting it as "nopass" later). +# reset Performs the following actions: resetpass, resetkeys, off, +# -@all. The user returns to the same state it has immediately +# after its creation. +# () Create a new selector with the options specified within the +# parentheses and attach it to the user. Each option should be +# space separated. The first character must be ( and the last +# character must be ). +# clearselectors Remove all of the currently attached selectors. +# Note this does not change the "root" user permissions, +# which are the permissions directly applied onto the +# user (outside the parentheses). +# +# ACL rules can be specified in any order: for instance you can start with +# passwords, then flags, or key patterns. However note that the additive +# and subtractive rules will CHANGE MEANING depending on the ordering. +# For instance see the following example: +# +# user alice on +@all -DEBUG ~* >somepassword +# +# This will allow "alice" to use all the commands with the exception of the +# DEBUG command, since +@all added all the commands to the set of the commands +# alice can use, and later DEBUG was removed. However if we invert the order +# of two ACL rules the result will be different: +# +# user alice on -DEBUG +@all ~* >somepassword +# +# Now DEBUG was removed when alice had yet no commands in the set of allowed +# commands, later all the commands are added, so the user will be able to +# execute everything. +# +# Basically ACL rules are processed left-to-right. +# +# The following is a list of command categories and their meanings: +# * keyspace - Writing or reading from keys, databases, or their metadata +# in a type agnostic way. Includes DEL, RESTORE, DUMP, RENAME, EXISTS, DBSIZE, +# KEYS, EXPIRE, TTL, FLUSHALL, etc. Commands that may modify the keyspace, +# key or metadata will also have `write` category. Commands that only read +# the keyspace, key or metadata will have the `read` category. +# * read - Reading from keys (values or metadata). Note that commands that don't +# interact with keys, will not have either `read` or `write`. +# * write - Writing to keys (values or metadata) +# * admin - Administrative commands. Normal applications will never need to use +# these. Includes REPLICAOF, CONFIG, DEBUG, SAVE, MONITOR, ACL, SHUTDOWN, etc. +# * dangerous - Potentially dangerous (each should be considered with care for +# various reasons). This includes FLUSHALL, MIGRATE, RESTORE, SORT, KEYS, +# CLIENT, DEBUG, INFO, CONFIG, SAVE, REPLICAOF, etc. +# * connection - Commands affecting the connection or other connections. +# This includes AUTH, SELECT, COMMAND, CLIENT, ECHO, PING, etc. +# * blocking - Potentially blocking the connection until released by another +# command. +# * fast - Fast O(1) commands. May loop on the number of arguments, but not the +# number of elements in the key. +# * slow - All commands that are not Fast. +# * pubsub - PUBLISH / SUBSCRIBE related +# * transaction - WATCH / MULTI / EXEC related commands. +# * scripting - Scripting related. +# * set - Data type: sets related. +# * sortedset - Data type: zsets related. +# * list - Data type: lists related. +# * hash - Data type: hashes related. +# * string - Data type: strings related. +# * bitmap - Data type: bitmaps related. +# * hyperloglog - Data type: hyperloglog related. +# * geo - Data type: geo related. +# * stream - Data type: streams related. +# +# For more information about ACL configuration please refer to +# the Redis web site at https://redis.io/topics/acl + +# ACL LOG +# +# The ACL Log tracks failed commands and authentication events associated +# with ACLs. The ACL Log is useful to troubleshoot failed commands blocked +# by ACLs. The ACL Log is stored in memory. You can reclaim memory with +# ACL LOG RESET. Define the maximum entry length of the ACL Log below. +acllog-max-len 128 + +# Using an external ACL file +# +# Instead of configuring users here in this file, it is possible to use +# a stand-alone file just listing users. The two methods cannot be mixed: +# if you configure users here and at the same time you activate the external +# ACL file, the server will refuse to start. +# +# The format of the external ACL user file is exactly the same as the +# format that is used inside redis.conf to describe users. +# +# aclfile /etc/redis/users.acl + +# IMPORTANT NOTE: starting with Redis 6 "requirepass" is just a compatibility +# layer on top of the new ACL system. The option effect will be just setting +# the password for the default user. Clients will still authenticate using +# AUTH as usually, or more explicitly with AUTH default +# if they follow the new protocol: both will work. +# +# The requirepass is not compatible with aclfile option and the ACL LOAD +# command, these will cause requirepass to be ignored. +# +# requirepass foobared + +# New users are initialized with restrictive permissions by default, via the +# equivalent of this ACL rule 'off resetkeys -@all'. Starting with Redis 6.2, it +# is possible to manage access to Pub/Sub channels with ACL rules as well. The +# default Pub/Sub channels permission if new users is controlled by the +# acl-pubsub-default configuration directive, which accepts one of these values: +# +# allchannels: grants access to all Pub/Sub channels +# resetchannels: revokes access to all Pub/Sub channels +# +# From Redis 7.0, acl-pubsub-default defaults to 'resetchannels' permission. +# +# acl-pubsub-default resetchannels + +# Command renaming (DEPRECATED). +# +# ------------------------------------------------------------------------ +# WARNING: avoid using this option if possible. Instead use ACLs to remove +# commands from the default user, and put them only in some admin user you +# create for administrative purposes. +# ------------------------------------------------------------------------ +# +# It is possible to change the name of dangerous commands in a shared +# environment. For instance the CONFIG command may be renamed into something +# hard to guess so that it will still be available for internal-use tools +# but not available for general clients. +# +# Example: +# +# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 +# +# It is also possible to completely kill a command by renaming it into +# an empty string: +# +# rename-command CONFIG "" +# +# Please note that changing the name of commands that are logged into the +# AOF file or transmitted to replicas may cause problems. + +################################### CLIENTS #################################### + +# Set the max number of connected clients at the same time. By default +# this limit is set to 10000 clients, however if the Redis server is not +# able to configure the process file limit to allow for the specified limit +# the max number of allowed clients is set to the current file limit +# minus 32 (as Redis reserves a few file descriptors for internal uses). +# +# Once the limit is reached Redis will close all the new connections sending +# an error 'max number of clients reached'. +# +# IMPORTANT: When Redis Cluster is used, the max number of connections is also +# shared with the cluster bus: every node in the cluster will use two +# connections, one incoming and another outgoing. It is important to size the +# limit accordingly in case of very large clusters. +# +# maxclients 10000 + +############################## MEMORY MANAGEMENT ################################ + +# Set a memory usage limit to the specified amount of bytes. +# When the memory limit is reached Redis will try to remove keys +# according to the eviction policy selected (see maxmemory-policy). +# +# If Redis can't remove keys according to the policy, or if the policy is +# set to 'noeviction', Redis will start to reply with errors to commands +# that would use more memory, like SET, LPUSH, and so on, and will continue +# to reply to read-only commands like GET. +# +# This option is usually useful when using Redis as an LRU or LFU cache, or to +# set a hard memory limit for an instance (using the 'noeviction' policy). +# +# WARNING: If you have replicas attached to an instance with maxmemory on, +# the size of the output buffers needed to feed the replicas are subtracted +# from the used memory count, so that network problems / resyncs will +# not trigger a loop where keys are evicted, and in turn the output +# buffer of replicas is full with DELs of keys evicted triggering the deletion +# of more keys, and so forth until the database is completely emptied. +# +# In short... if you have replicas attached it is suggested that you set a lower +# limit for maxmemory so that there is some free RAM on the system for replica +# output buffers (but this is not needed if the policy is 'noeviction'). +# +# maxmemory + +# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory +# is reached. You can select one from the following behaviors: +# +# volatile-lru -> Evict using approximated LRU, only keys with an expire set. +# allkeys-lru -> Evict any key using approximated LRU. +# volatile-lfu -> Evict using approximated LFU, only keys with an expire set. +# allkeys-lfu -> Evict any key using approximated LFU. +# volatile-random -> Remove a random key having an expire set. +# allkeys-random -> Remove a random key, any key. +# volatile-ttl -> Remove the key with the nearest expire time (minor TTL) +# noeviction -> Don't evict anything, just return an error on write operations. +# +# LRU means Least Recently Used +# LFU means Least Frequently Used +# +# Both LRU, LFU and volatile-ttl are implemented using approximated +# randomized algorithms. +# +# Note: with any of the above policies, when there are no suitable keys for +# eviction, Redis will return an error on write operations that require +# more memory. These are usually commands that create new keys, add data or +# modify existing keys. A few examples are: SET, INCR, HSET, LPUSH, SUNIONSTORE, +# SORT (due to the STORE argument), and EXEC (if the transaction includes any +# command that requires memory). +# +# The default is: +# +# maxmemory-policy noeviction + +# LRU, LFU and minimal TTL algorithms are not precise algorithms but approximated +# algorithms (in order to save memory), so you can tune it for speed or +# accuracy. By default Redis will check five keys and pick the one that was +# used least recently, you can change the sample size using the following +# configuration directive. +# +# The default of 5 produces good enough results. 10 Approximates very closely +# true LRU but costs more CPU. 3 is faster but not very accurate. +# +# maxmemory-samples 5 + +# Eviction processing is designed to function well with the default setting. +# If there is an unusually large amount of write traffic, this value may need to +# be increased. Decreasing this value may reduce latency at the risk of +# eviction processing effectiveness +# 0 = minimum latency, 10 = default, 100 = process without regard to latency +# +# maxmemory-eviction-tenacity 10 + +# Starting from Redis 5, by default a replica will ignore its maxmemory setting +# (unless it is promoted to master after a failover or manually). It means +# that the eviction of keys will be just handled by the master, sending the +# DEL commands to the replica as keys evict in the master side. +# +# This behavior ensures that masters and replicas stay consistent, and is usually +# what you want, however if your replica is writable, or you want the replica +# to have a different memory setting, and you are sure all the writes performed +# to the replica are idempotent, then you may change this default (but be sure +# to understand what you are doing). +# +# Note that since the replica by default does not evict, it may end using more +# memory than the one set via maxmemory (there are certain buffers that may +# be larger on the replica, or data structures may sometimes take more memory +# and so forth). So make sure you monitor your replicas and make sure they +# have enough memory to never hit a real out-of-memory condition before the +# master hits the configured maxmemory setting. +# +# replica-ignore-maxmemory yes + +# Redis reclaims expired keys in two ways: upon access when those keys are +# found to be expired, and also in background, in what is called the +# "active expire key". The key space is slowly and interactively scanned +# looking for expired keys to reclaim, so that it is possible to free memory +# of keys that are expired and will never be accessed again in a short time. +# +# The default effort of the expire cycle will try to avoid having more than +# ten percent of expired keys still in memory, and will try to avoid consuming +# more than 25% of total memory and to add latency to the system. However +# it is possible to increase the expire "effort" that is normally set to +# "1", to a greater value, up to the value "10". At its maximum value the +# system will use more CPU, longer cycles (and technically may introduce +# more latency), and will tolerate less already expired keys still present +# in the system. It's a tradeoff between memory, CPU and latency. +# +# active-expire-effort 1 + +############################# LAZY FREEING #################################### + +# Redis has two primitives to delete keys. One is called DEL and is a blocking +# deletion of the object. It means that the server stops processing new commands +# in order to reclaim all the memory associated with an object in a synchronous +# way. If the key deleted is associated with a small object, the time needed +# in order to execute the DEL command is very small and comparable to most other +# O(1) or O(log_N) commands in Redis. However if the key is associated with an +# aggregated value containing millions of elements, the server can block for +# a long time (even seconds) in order to complete the operation. +# +# For the above reasons Redis also offers non blocking deletion primitives +# such as UNLINK (non blocking DEL) and the ASYNC option of FLUSHALL and +# FLUSHDB commands, in order to reclaim memory in background. Those commands +# are executed in constant time. Another thread will incrementally free the +# object in the background as fast as possible. +# +# DEL, UNLINK and ASYNC option of FLUSHALL and FLUSHDB are user-controlled. +# It's up to the design of the application to understand when it is a good +# idea to use one or the other. However the Redis server sometimes has to +# delete keys or flush the whole database as a side effect of other operations. +# Specifically Redis deletes objects independently of a user call in the +# following scenarios: +# +# 1) On eviction, because of the maxmemory and maxmemory policy configurations, +# in order to make room for new data, without going over the specified +# memory limit. +# 2) Because of expire: when a key with an associated time to live (see the +# EXPIRE command) must be deleted from memory. +# 3) Because of a side effect of a command that stores data on a key that may +# already exist. For example the RENAME command may delete the old key +# content when it is replaced with another one. Similarly SUNIONSTORE +# or SORT with STORE option may delete existing keys. The SET command +# itself removes any old content of the specified key in order to replace +# it with the specified string. +# 4) During replication, when a replica performs a full resynchronization with +# its master, the content of the whole database is removed in order to +# load the RDB file just transferred. +# +# In all the above cases the default is to delete objects in a blocking way, +# like if DEL was called. However you can configure each case specifically +# in order to instead release memory in a non-blocking way like if UNLINK +# was called, using the following configuration directives. + +lazyfree-lazy-eviction no +lazyfree-lazy-expire no +lazyfree-lazy-server-del no +replica-lazy-flush no + +# It is also possible, for the case when to replace the user code DEL calls +# with UNLINK calls is not easy, to modify the default behavior of the DEL +# command to act exactly like UNLINK, using the following configuration +# directive: + +lazyfree-lazy-user-del no + +# FLUSHDB, FLUSHALL, SCRIPT FLUSH and FUNCTION FLUSH support both asynchronous and synchronous +# deletion, which can be controlled by passing the [SYNC|ASYNC] flags into the +# commands. When neither flag is passed, this directive will be used to determine +# if the data should be deleted asynchronously. + +lazyfree-lazy-user-flush no + +################################ THREADED I/O ################################# + +# Redis is mostly single threaded, however there are certain threaded +# operations such as UNLINK, slow I/O accesses and other things that are +# performed on side threads. +# +# Now it is also possible to handle Redis clients socket reads and writes +# in different I/O threads. Since especially writing is so slow, normally +# Redis users use pipelining in order to speed up the Redis performances per +# core, and spawn multiple instances in order to scale more. Using I/O +# threads it is possible to easily speedup two times Redis without resorting +# to pipelining nor sharding of the instance. +# +# By default threading is disabled, we suggest enabling it only in machines +# that have at least 4 or more cores, leaving at least one spare core. +# Using more than 8 threads is unlikely to help much. We also recommend using +# threaded I/O only if you actually have performance problems, with Redis +# instances being able to use a quite big percentage of CPU time, otherwise +# there is no point in using this feature. +# +# So for instance if you have a four cores boxes, try to use 2 or 3 I/O +# threads, if you have a 8 cores, try to use 6 threads. In order to +# enable I/O threads use the following configuration directive: +# +# io-threads 4 +# +# Setting io-threads to 1 will just use the main thread as usual. +# When I/O threads are enabled, we only use threads for writes, that is +# to thread the write(2) syscall and transfer the client buffers to the +# socket. However it is also possible to enable threading of reads and +# protocol parsing using the following configuration directive, by setting +# it to yes: +# +# io-threads-do-reads no +# +# Usually threading reads doesn't help much. +# +# NOTE 1: This configuration directive cannot be changed at runtime via +# CONFIG SET. Also, this feature currently does not work when SSL is +# enabled. +# +# NOTE 2: If you want to test the Redis speedup using redis-benchmark, make +# sure you also run the benchmark itself in threaded mode, using the +# --threads option to match the number of Redis threads, otherwise you'll not +# be able to notice the improvements. + +############################ KERNEL OOM CONTROL ############################## + +# On Linux, it is possible to hint the kernel OOM killer on what processes +# should be killed first when out of memory. +# +# Enabling this feature makes Redis actively control the oom_score_adj value +# for all its processes, depending on their role. The default scores will +# attempt to have background child processes killed before all others, and +# replicas killed before masters. +# +# Redis supports these options: +# +# no: Don't make changes to oom-score-adj (default). +# yes: Alias to "relative" see below. +# absolute: Values in oom-score-adj-values are written as is to the kernel. +# relative: Values are used relative to the initial value of oom_score_adj when +# the server starts and are then clamped to a range of -1000 to 1000. +# Because typically the initial value is 0, they will often match the +# absolute values. +oom-score-adj no + +# When oom-score-adj is used, this directive controls the specific values used +# for master, replica and background child processes. Values range -2000 to +# 2000 (higher means more likely to be killed). +# +# Unprivileged processes (not root, and without CAP_SYS_RESOURCE capabilities) +# can freely increase their value, but not decrease it below its initial +# settings. This means that setting oom-score-adj to "relative" and setting the +# oom-score-adj-values to positive values will always succeed. +oom-score-adj-values 0 200 800 + + +#################### KERNEL transparent hugepage CONTROL ###################### + +# Usually the kernel Transparent Huge Pages control is set to "madvise" or +# or "never" by default (/sys/kernel/mm/transparent_hugepage/enabled), in which +# case this config has no effect. On systems in which it is set to "always", +# redis will attempt to disable it specifically for the redis process in order +# to avoid latency problems specifically with fork(2) and CoW. +# If for some reason you prefer to keep it enabled, you can set this config to +# "no" and the kernel global to "always". + +disable-thp yes + +############################## APPEND ONLY MODE ############################### + +# By default Redis asynchronously dumps the dataset on disk. This mode is +# good enough in many applications, but an issue with the Redis process or +# a power outage may result into a few minutes of writes lost (depending on +# the configured save points). +# +# The Append Only File is an alternative persistence mode that provides +# much better durability. For instance using the default data fsync policy +# (see later in the config file) Redis can lose just one second of writes in a +# dramatic event like a server power outage, or a single write if something +# wrong with the Redis process itself happens, but the operating system is +# still running correctly. +# +# AOF and RDB persistence can be enabled at the same time without problems. +# If the AOF is enabled on startup Redis will load the AOF, that is the file +# with the better durability guarantees. +# +# Please check https://redis.io/topics/persistence for more information. + +appendonly no + +# The base name of the append only file. +# +# Redis 7 and newer use a set of append-only files to persist the dataset +# and changes applied to it. There are two basic types of files in use: +# +# - Base files, which are a snapshot representing the complete state of the +# dataset at the time the file was created. Base files can be either in +# the form of RDB (binary serialized) or AOF (textual commands). +# - Incremental files, which contain additional commands that were applied +# to the dataset following the previous file. +# +# In addition, manifest files are used to track the files and the order in +# which they were created and should be applied. +# +# Append-only file names are created by Redis following a specific pattern. +# The file name's prefix is based on the 'appendfilename' configuration +# parameter, followed by additional information about the sequence and type. +# +# For example, if appendfilename is set to appendonly.aof, the following file +# names could be derived: +# +# - appendonly.aof.1.base.rdb as a base file. +# - appendonly.aof.1.incr.aof, appendonly.aof.2.incr.aof as incremental files. +# - appendonly.aof.manifest as a manifest file. + +appendfilename "appendonly.aof" + +# For convenience, Redis stores all persistent append-only files in a dedicated +# directory. The name of the directory is determined by the appenddirname +# configuration parameter. + +appenddirname "appendonlydir" + +# The fsync() call tells the Operating System to actually write data on disk +# instead of waiting for more data in the output buffer. Some OS will really flush +# data on disk, some other OS will just try to do it ASAP. +# +# Redis supports three different modes: +# +# no: don't fsync, just let the OS flush the data when it wants. Faster. +# always: fsync after every write to the append only log. Slow, Safest. +# everysec: fsync only one time every second. Compromise. +# +# The default is "everysec", as that's usually the right compromise between +# speed and data safety. It's up to you to understand if you can relax this to +# "no" that will let the operating system flush the output buffer when +# it wants, for better performances (but if you can live with the idea of +# some data loss consider the default persistence mode that's snapshotting), +# or on the contrary, use "always" that's very slow but a bit safer than +# everysec. +# +# More details please check the following article: +# http://antirez.com/post/redis-persistence-demystified.html +# +# If unsure, use "everysec". + +# appendfsync always +appendfsync everysec +# appendfsync no + +# When the AOF fsync policy is set to always or everysec, and a background +# saving process (a background save or AOF log background rewriting) is +# performing a lot of I/O against the disk, in some Linux configurations +# Redis may block too long on the fsync() call. Note that there is no fix for +# this currently, as even performing fsync in a different thread will block +# our synchronous write(2) call. +# +# In order to mitigate this problem it's possible to use the following option +# that will prevent fsync() from being called in the main process while a +# BGSAVE or BGREWRITEAOF is in progress. +# +# This means that while another child is saving, the durability of Redis is +# the same as "appendfsync no". In practical terms, this means that it is +# possible to lose up to 30 seconds of log in the worst scenario (with the +# default Linux settings). +# +# If you have latency problems turn this to "yes". Otherwise leave it as +# "no" that is the safest pick from the point of view of durability. + +no-appendfsync-on-rewrite no + +# Automatic rewrite of the append only file. +# Redis is able to automatically rewrite the log file implicitly calling +# BGREWRITEAOF when the AOF log size grows by the specified percentage. +# +# This is how it works: Redis remembers the size of the AOF file after the +# latest rewrite (if no rewrite has happened since the restart, the size of +# the AOF at startup is used). +# +# This base size is compared to the current size. If the current size is +# bigger than the specified percentage, the rewrite is triggered. Also +# you need to specify a minimal size for the AOF file to be rewritten, this +# is useful to avoid rewriting the AOF file even if the percentage increase +# is reached but it is still pretty small. +# +# Specify a percentage of zero in order to disable the automatic AOF +# rewrite feature. + +auto-aof-rewrite-percentage 100 +auto-aof-rewrite-min-size 64mb + +# An AOF file may be found to be truncated at the end during the Redis +# startup process, when the AOF data gets loaded back into memory. +# This may happen when the system where Redis is running +# crashes, especially when an ext4 filesystem is mounted without the +# data=ordered option (however this can't happen when Redis itself +# crashes or aborts but the operating system still works correctly). +# +# Redis can either exit with an error when this happens, or load as much +# data as possible (the default now) and start if the AOF file is found +# to be truncated at the end. The following option controls this behavior. +# +# If aof-load-truncated is set to yes, a truncated AOF file is loaded and +# the Redis server starts emitting a log to inform the user of the event. +# Otherwise if the option is set to no, the server aborts with an error +# and refuses to start. When the option is set to no, the user requires +# to fix the AOF file using the "redis-check-aof" utility before to restart +# the server. +# +# Note that if the AOF file will be found to be corrupted in the middle +# the server will still exit with an error. This option only applies when +# Redis will try to read more data from the AOF file but not enough bytes +# will be found. +aof-load-truncated yes + +# Redis can create append-only base files in either RDB or AOF formats. Using +# the RDB format is always faster and more efficient, and disabling it is only +# supported for backward compatibility purposes. +aof-use-rdb-preamble yes + +# Redis supports recording timestamp annotations in the AOF to support restoring +# the data from a specific point-in-time. However, using this capability changes +# the AOF format in a way that may not be compatible with existing AOF parsers. +aof-timestamp-enabled no + +################################ SHUTDOWN ##################################### + +# Maximum time to wait for replicas when shutting down, in seconds. +# +# During shut down, a grace period allows any lagging replicas to catch up with +# the latest replication offset before the master exists. This period can +# prevent data loss, especially for deployments without configured disk backups. +# +# The 'shutdown-timeout' value is the grace period's duration in seconds. It is +# only applicable when the instance has replicas. To disable the feature, set +# the value to 0. +# +# shutdown-timeout 10 + +# When Redis receives a SIGINT or SIGTERM, shutdown is initiated and by default +# an RDB snapshot is written to disk in a blocking operation if save points are configured. +# The options used on signaled shutdown can include the following values: +# default: Saves RDB snapshot only if save points are configured. +# Waits for lagging replicas to catch up. +# save: Forces a DB saving operation even if no save points are configured. +# nosave: Prevents DB saving operation even if one or more save points are configured. +# now: Skips waiting for lagging replicas. +# force: Ignores any errors that would normally prevent the server from exiting. +# +# Any combination of values is allowed as long as "save" and "nosave" are not set simultaneously. +# Example: "nosave force now" +# +# shutdown-on-sigint default +# shutdown-on-sigterm default + +################ NON-DETERMINISTIC LONG BLOCKING COMMANDS ##################### + +# Maximum time in milliseconds for EVAL scripts, functions and in some cases +# modules' commands before Redis can start processing or rejecting other clients. +# +# If the maximum execution time is reached Redis will start to reply to most +# commands with a BUSY error. +# +# In this state Redis will only allow a handful of commands to be executed. +# For instance, SCRIPT KILL, FUNCTION KILL, SHUTDOWN NOSAVE and possibly some +# module specific 'allow-busy' commands. +# +# SCRIPT KILL and FUNCTION KILL will only be able to stop a script that did not +# yet call any write commands, so SHUTDOWN NOSAVE may be the only way to stop +# the server in the case a write command was already issued by the script when +# the user doesn't want to wait for the natural termination of the script. +# +# The default is 5 seconds. It is possible to set it to 0 or a negative value +# to disable this mechanism (uninterrupted execution). Note that in the past +# this config had a different name, which is now an alias, so both of these do +# the same: +# lua-time-limit 5000 +# busy-reply-threshold 5000 + +################################ REDIS CLUSTER ############################### + +# Normal Redis instances can't be part of a Redis Cluster; only nodes that are +# started as cluster nodes can. In order to start a Redis instance as a +# cluster node enable the cluster support uncommenting the following: +# +# cluster-enabled yes + +# Every cluster node has a cluster configuration file. This file is not +# intended to be edited by hand. It is created and updated by Redis nodes. +# Every Redis Cluster node requires a different cluster configuration file. +# Make sure that instances running in the same system do not have +# overlapping cluster configuration file names. +# +# cluster-config-file nodes-6379.conf + +# Cluster node timeout is the amount of milliseconds a node must be unreachable +# for it to be considered in failure state. +# Most other internal time limits are a multiple of the node timeout. +# +# cluster-node-timeout 15000 + +# The cluster port is the port that the cluster bus will listen for inbound connections on. When set +# to the default value, 0, it will be bound to the command port + 10000. Setting this value requires +# you to specify the cluster bus port when executing cluster meet. +# cluster-port 0 + +# A replica of a failing master will avoid to start a failover if its data +# looks too old. +# +# There is no simple way for a replica to actually have an exact measure of +# its "data age", so the following two checks are performed: +# +# 1) If there are multiple replicas able to failover, they exchange messages +# in order to try to give an advantage to the replica with the best +# replication offset (more data from the master processed). +# Replicas will try to get their rank by offset, and apply to the start +# of the failover a delay proportional to their rank. +# +# 2) Every single replica computes the time of the last interaction with +# its master. This can be the last ping or command received (if the master +# is still in the "connected" state), or the time that elapsed since the +# disconnection with the master (if the replication link is currently down). +# If the last interaction is too old, the replica will not try to failover +# at all. +# +# The point "2" can be tuned by user. Specifically a replica will not perform +# the failover if, since the last interaction with the master, the time +# elapsed is greater than: +# +# (node-timeout * cluster-replica-validity-factor) + repl-ping-replica-period +# +# So for example if node-timeout is 30 seconds, and the cluster-replica-validity-factor +# is 10, and assuming a default repl-ping-replica-period of 10 seconds, the +# replica will not try to failover if it was not able to talk with the master +# for longer than 310 seconds. +# +# A large cluster-replica-validity-factor may allow replicas with too old data to failover +# a master, while a too small value may prevent the cluster from being able to +# elect a replica at all. +# +# For maximum availability, it is possible to set the cluster-replica-validity-factor +# to a value of 0, which means, that replicas will always try to failover the +# master regardless of the last time they interacted with the master. +# (However they'll always try to apply a delay proportional to their +# offset rank). +# +# Zero is the only value able to guarantee that when all the partitions heal +# the cluster will always be able to continue. +# +# cluster-replica-validity-factor 10 + +# Cluster replicas are able to migrate to orphaned masters, that are masters +# that are left without working replicas. This improves the cluster ability +# to resist to failures as otherwise an orphaned master can't be failed over +# in case of failure if it has no working replicas. +# +# Replicas migrate to orphaned masters only if there are still at least a +# given number of other working replicas for their old master. This number +# is the "migration barrier". A migration barrier of 1 means that a replica +# will migrate only if there is at least 1 other working replica for its master +# and so forth. It usually reflects the number of replicas you want for every +# master in your cluster. +# +# Default is 1 (replicas migrate only if their masters remain with at least +# one replica). To disable migration just set it to a very large value or +# set cluster-allow-replica-migration to 'no'. +# A value of 0 can be set but is useful only for debugging and dangerous +# in production. +# +# cluster-migration-barrier 1 + +# Turning off this option allows to use less automatic cluster configuration. +# It both disables migration to orphaned masters and migration from masters +# that became empty. +# +# Default is 'yes' (allow automatic migrations). +# +# cluster-allow-replica-migration yes + +# By default Redis Cluster nodes stop accepting queries if they detect there +# is at least a hash slot uncovered (no available node is serving it). +# This way if the cluster is partially down (for example a range of hash slots +# are no longer covered) all the cluster becomes, eventually, unavailable. +# It automatically returns available as soon as all the slots are covered again. +# +# However sometimes you want the subset of the cluster which is working, +# to continue to accept queries for the part of the key space that is still +# covered. In order to do so, just set the cluster-require-full-coverage +# option to no. +# +# cluster-require-full-coverage yes + +# This option, when set to yes, prevents replicas from trying to failover its +# master during master failures. However the replica can still perform a +# manual failover, if forced to do so. +# +# This is useful in different scenarios, especially in the case of multiple +# data center operations, where we want one side to never be promoted if not +# in the case of a total DC failure. +# +# cluster-replica-no-failover no + +# This option, when set to yes, allows nodes to serve read traffic while the +# cluster is in a down state, as long as it believes it owns the slots. +# +# This is useful for two cases. The first case is for when an application +# doesn't require consistency of data during node failures or network partitions. +# One example of this is a cache, where as long as the node has the data it +# should be able to serve it. +# +# The second use case is for configurations that don't meet the recommended +# three shards but want to enable cluster mode and scale later. A +# master outage in a 1 or 2 shard configuration causes a read/write outage to the +# entire cluster without this option set, with it set there is only a write outage. +# Without a quorum of masters, slot ownership will not change automatically. +# +# cluster-allow-reads-when-down no + +# This option, when set to yes, allows nodes to serve pubsub shard traffic while +# the cluster is in a down state, as long as it believes it owns the slots. +# +# This is useful if the application would like to use the pubsub feature even when +# the cluster global stable state is not OK. If the application wants to make sure only +# one shard is serving a given channel, this feature should be kept as yes. +# +# cluster-allow-pubsubshard-when-down yes + +# Cluster link send buffer limit is the limit on the memory usage of an individual +# cluster bus link's send buffer in bytes. Cluster links would be freed if they exceed +# this limit. This is to primarily prevent send buffers from growing unbounded on links +# toward slow peers (E.g. PubSub messages being piled up). +# This limit is disabled by default. Enable this limit when 'mem_cluster_links' INFO field +# and/or 'send-buffer-allocated' entries in the 'CLUSTER LINKS` command output continuously increase. +# Minimum limit of 1gb is recommended so that cluster link buffer can fit in at least a single +# PubSub message by default. (client-query-buffer-limit default value is 1gb) +# +# cluster-link-sendbuf-limit 0 + +# Clusters can configure their announced hostname using this config. This is a common use case for +# applications that need to use TLS Server Name Indication (SNI) or dealing with DNS based +# routing. By default this value is only shown as additional metadata in the CLUSTER SLOTS +# command, but can be changed using 'cluster-preferred-endpoint-type' config. This value is +# communicated along the clusterbus to all nodes, setting it to an empty string will remove +# the hostname and also propagate the removal. +# +# cluster-announce-hostname "" + +# Clusters can advertise how clients should connect to them using either their IP address, +# a user defined hostname, or by declaring they have no endpoint. Which endpoint is +# shown as the preferred endpoint is set by using the cluster-preferred-endpoint-type +# config with values 'ip', 'hostname', or 'unknown-endpoint'. This value controls how +# the endpoint returned for MOVED/ASKING requests as well as the first field of CLUSTER SLOTS. +# If the preferred endpoint type is set to hostname, but no announced hostname is set, a '?' +# will be returned instead. +# +# When a cluster advertises itself as having an unknown endpoint, it's indicating that +# the server doesn't know how clients can reach the cluster. This can happen in certain +# networking situations where there are multiple possible routes to the node, and the +# server doesn't know which one the client took. In this case, the server is expecting +# the client to reach out on the same endpoint it used for making the last request, but use +# the port provided in the response. +# +# cluster-preferred-endpoint-type ip + +# In order to setup your cluster make sure to read the documentation +# available at https://redis.io web site. + +########################## CLUSTER DOCKER/NAT support ######################## + +# In certain deployments, Redis Cluster nodes address discovery fails, because +# addresses are NAT-ted or because ports are forwarded (the typical case is +# Docker and other containers). +# +# In order to make Redis Cluster working in such environments, a static +# configuration where each node knows its public address is needed. The +# following four options are used for this scope, and are: +# +# * cluster-announce-ip +# * cluster-announce-port +# * cluster-announce-tls-port +# * cluster-announce-bus-port +# +# Each instructs the node about its address, client ports (for connections +# without and with TLS) and cluster message bus port. The information is then +# published in the header of the bus packets so that other nodes will be able to +# correctly map the address of the node publishing the information. +# +# If cluster-tls is set to yes and cluster-announce-tls-port is omitted or set +# to zero, then cluster-announce-port refers to the TLS port. Note also that +# cluster-announce-tls-port has no effect if cluster-tls is set to no. +# +# If the above options are not used, the normal Redis Cluster auto-detection +# will be used instead. +# +# Note that when remapped, the bus port may not be at the fixed offset of +# clients port + 10000, so you can specify any port and bus-port depending +# on how they get remapped. If the bus-port is not set, a fixed offset of +# 10000 will be used as usual. +# +# Example: +# +# cluster-announce-ip 10.1.1.5 +# cluster-announce-tls-port 6379 +# cluster-announce-port 0 +# cluster-announce-bus-port 6380 + +################################## SLOW LOG ################################### + +# The Redis Slow Log is a system to log queries that exceeded a specified +# execution time. The execution time does not include the I/O operations +# like talking with the client, sending the reply and so forth, +# but just the time needed to actually execute the command (this is the only +# stage of command execution where the thread is blocked and can not serve +# other requests in the meantime). +# +# You can configure the slow log with two parameters: one tells Redis +# what is the execution time, in microseconds, to exceed in order for the +# command to get logged, and the other parameter is the length of the +# slow log. When a new command is logged the oldest one is removed from the +# queue of logged commands. + +# The following time is expressed in microseconds, so 1000000 is equivalent +# to one second. Note that a negative number disables the slow log, while +# a value of zero forces the logging of every command. +slowlog-log-slower-than 10000 + +# There is no limit to this length. Just be aware that it will consume memory. +# You can reclaim memory used by the slow log with SLOWLOG RESET. +slowlog-max-len 128 + +################################ LATENCY MONITOR ############################## + +# The Redis latency monitoring subsystem samples different operations +# at runtime in order to collect data related to possible sources of +# latency of a Redis instance. +# +# Via the LATENCY command this information is available to the user that can +# print graphs and obtain reports. +# +# The system only logs operations that were performed in a time equal or +# greater than the amount of milliseconds specified via the +# latency-monitor-threshold configuration directive. When its value is set +# to zero, the latency monitor is turned off. +# +# By default latency monitoring is disabled since it is mostly not needed +# if you don't have latency issues, and collecting data has a performance +# impact, that while very small, can be measured under big load. Latency +# monitoring can easily be enabled at runtime using the command +# "CONFIG SET latency-monitor-threshold " if needed. +latency-monitor-threshold 0 + +################################ LATENCY TRACKING ############################## + +# The Redis extended latency monitoring tracks the per command latencies and enables +# exporting the percentile distribution via the INFO latencystats command, +# and cumulative latency distributions (histograms) via the LATENCY command. +# +# By default, the extended latency monitoring is enabled since the overhead +# of keeping track of the command latency is very small. +# latency-tracking yes + +# By default the exported latency percentiles via the INFO latencystats command +# are the p50, p99, and p999. +# latency-tracking-info-percentiles 50 99 99.9 + +############################# EVENT NOTIFICATION ############################## + +# Redis can notify Pub/Sub clients about events happening in the key space. +# This feature is documented at https://redis.io/topics/notifications +# +# For instance if keyspace events notification is enabled, and a client +# performs a DEL operation on key "foo" stored in the Database 0, two +# messages will be published via Pub/Sub: +# +# PUBLISH __keyspace@0__:foo del +# PUBLISH __keyevent@0__:del foo +# +# It is possible to select the events that Redis will notify among a set +# of classes. Every class is identified by a single character: +# +# K Keyspace events, published with __keyspace@__ prefix. +# E Keyevent events, published with __keyevent@__ prefix. +# g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ... +# $ String commands +# l List commands +# s Set commands +# h Hash commands +# z Sorted set commands +# x Expired events (events generated every time a key expires) +# e Evicted events (events generated when a key is evicted for maxmemory) +# n New key events (Note: not included in the 'A' class) +# t Stream commands +# d Module key type events +# m Key-miss events (Note: It is not included in the 'A' class) +# A Alias for g$lshzxetd, so that the "AKE" string means all the events +# (Except key-miss events which are excluded from 'A' due to their +# unique nature). +# +# The "notify-keyspace-events" takes as argument a string that is composed +# of zero or multiple characters. The empty string means that notifications +# are disabled. +# +# Example: to enable list and generic events, from the point of view of the +# event name, use: +# +# notify-keyspace-events Elg +# +# Example 2: to get the stream of the expired keys subscribing to channel +# name __keyevent@0__:expired use: +# +# notify-keyspace-events Ex +# +# By default all notifications are disabled because most users don't need +# this feature and the feature has some overhead. Note that if you don't +# specify at least one of K or E, no events will be delivered. +notify-keyspace-events "" + +############################### ADVANCED CONFIG ############################### + +# Hashes are encoded using a memory efficient data structure when they have a +# small number of entries, and the biggest entry does not exceed a given +# threshold. These thresholds can be configured using the following directives. +hash-max-listpack-entries 512 +hash-max-listpack-value 64 + +# Lists are also encoded in a special way to save a lot of space. +# The number of entries allowed per internal list node can be specified +# as a fixed maximum size or a maximum number of elements. +# For a fixed maximum size, use -5 through -1, meaning: +# -5: max size: 64 Kb <-- not recommended for normal workloads +# -4: max size: 32 Kb <-- not recommended +# -3: max size: 16 Kb <-- probably not recommended +# -2: max size: 8 Kb <-- good +# -1: max size: 4 Kb <-- good +# Positive numbers mean store up to _exactly_ that number of elements +# per list node. +# The highest performing option is usually -2 (8 Kb size) or -1 (4 Kb size), +# but if your use case is unique, adjust the settings as necessary. +list-max-listpack-size -2 + +# Lists may also be compressed. +# Compress depth is the number of quicklist ziplist nodes from *each* side of +# the list to *exclude* from compression. The head and tail of the list +# are always uncompressed for fast push/pop operations. Settings are: +# 0: disable all list compression +# 1: depth 1 means "don't start compressing until after 1 node into the list, +# going from either the head or tail" +# So: [head]->node->node->...->node->[tail] +# [head], [tail] will always be uncompressed; inner nodes will compress. +# 2: [head]->[next]->node->node->...->node->[prev]->[tail] +# 2 here means: don't compress head or head->next or tail->prev or tail, +# but compress all nodes between them. +# 3: [head]->[next]->[next]->node->node->...->node->[prev]->[prev]->[tail] +# etc. +list-compress-depth 0 + +# Sets have a special encoding in just one case: when a set is composed +# of just strings that happen to be integers in radix 10 in the range +# of 64 bit signed integers. +# The following configuration setting sets the limit in the size of the +# set in order to use this special memory saving encoding. +set-max-intset-entries 512 + +# Similarly to hashes and lists, sorted sets are also specially encoded in +# order to save a lot of space. This encoding is only used when the length and +# elements of a sorted set are below the following limits: +zset-max-listpack-entries 128 +zset-max-listpack-value 64 + +# HyperLogLog sparse representation bytes limit. The limit includes the +# 16 bytes header. When an HyperLogLog using the sparse representation crosses +# this limit, it is converted into the dense representation. +# +# A value greater than 16000 is totally useless, since at that point the +# dense representation is more memory efficient. +# +# The suggested value is ~ 3000 in order to have the benefits of +# the space efficient encoding without slowing down too much PFADD, +# which is O(N) with the sparse encoding. The value can be raised to +# ~ 10000 when CPU is not a concern, but space is, and the data set is +# composed of many HyperLogLogs with cardinality in the 0 - 15000 range. +hll-sparse-max-bytes 3000 + +# Streams macro node max size / items. The stream data structure is a radix +# tree of big nodes that encode multiple items inside. Using this configuration +# it is possible to configure how big a single node can be in bytes, and the +# maximum number of items it may contain before switching to a new node when +# appending new stream entries. If any of the following settings are set to +# zero, the limit is ignored, so for instance it is possible to set just a +# max entries limit by setting max-bytes to 0 and max-entries to the desired +# value. +stream-node-max-bytes 4096 +stream-node-max-entries 100 + +# Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in +# order to help rehashing the main Redis hash table (the one mapping top-level +# keys to values). The hash table implementation Redis uses (see dict.c) +# performs a lazy rehashing: the more operation you run into a hash table +# that is rehashing, the more rehashing "steps" are performed, so if the +# server is idle the rehashing is never complete and some more memory is used +# by the hash table. +# +# The default is to use this millisecond 10 times every second in order to +# actively rehash the main dictionaries, freeing memory when possible. +# +# If unsure: +# use "activerehashing no" if you have hard latency requirements and it is +# not a good thing in your environment that Redis can reply from time to time +# to queries with 2 milliseconds delay. +# +# use "activerehashing yes" if you don't have such hard requirements but +# want to free memory asap when possible. +activerehashing yes + +# The client output buffer limits can be used to force disconnection of clients +# that are not reading data from the server fast enough for some reason (a +# common reason is that a Pub/Sub client can't consume messages as fast as the +# publisher can produce them). +# +# The limit can be set differently for the three different classes of clients: +# +# normal -> normal clients including MONITOR clients +# replica -> replica clients +# pubsub -> clients subscribed to at least one pubsub channel or pattern +# +# The syntax of every client-output-buffer-limit directive is the following: +# +# client-output-buffer-limit +# +# A client is immediately disconnected once the hard limit is reached, or if +# the soft limit is reached and remains reached for the specified number of +# seconds (continuously). +# So for instance if the hard limit is 32 megabytes and the soft limit is +# 16 megabytes / 10 seconds, the client will get disconnected immediately +# if the size of the output buffers reach 32 megabytes, but will also get +# disconnected if the client reaches 16 megabytes and continuously overcomes +# the limit for 10 seconds. +# +# By default normal clients are not limited because they don't receive data +# without asking (in a push way), but just after a request, so only +# asynchronous clients may create a scenario where data is requested faster +# than it can read. +# +# Instead there is a default limit for pubsub and replica clients, since +# subscribers and replicas receive data in a push fashion. +# +# Note that it doesn't make sense to set the replica clients output buffer +# limit lower than the repl-backlog-size config (partial sync will succeed +# and then replica will get disconnected). +# Such a configuration is ignored (the size of repl-backlog-size will be used). +# This doesn't have memory consumption implications since the replica client +# will share the backlog buffers memory. +# +# Both the hard or the soft limit can be disabled by setting them to zero. +client-output-buffer-limit normal 0 0 0 +client-output-buffer-limit replica 256mb 64mb 60 +client-output-buffer-limit pubsub 32mb 8mb 60 + +# Client query buffers accumulate new commands. They are limited to a fixed +# amount by default in order to avoid that a protocol desynchronization (for +# instance due to a bug in the client) will lead to unbound memory usage in +# the query buffer. However you can configure it here if you have very special +# needs, such us huge multi/exec requests or alike. +# +# client-query-buffer-limit 1gb + +# In some scenarios client connections can hog up memory leading to OOM +# errors or data eviction. To avoid this we can cap the accumulated memory +# used by all client connections (all pubsub and normal clients). Once we +# reach that limit connections will be dropped by the server freeing up +# memory. The server will attempt to drop the connections using the most +# memory first. We call this mechanism "client eviction". +# +# Client eviction is configured using the maxmemory-clients setting as follows: +# 0 - client eviction is disabled (default) +# +# A memory value can be used for the client eviction threshold, +# for example: +# maxmemory-clients 1g +# +# A percentage value (between 1% and 100%) means the client eviction threshold +# is based on a percentage of the maxmemory setting. For example to set client +# eviction at 5% of maxmemory: +# maxmemory-clients 5% + +# In the Redis protocol, bulk requests, that are, elements representing single +# strings, are normally limited to 512 mb. However you can change this limit +# here, but must be 1mb or greater +# +# proto-max-bulk-len 512mb + +# Redis calls an internal function to perform many background tasks, like +# closing connections of clients in timeout, purging expired keys that are +# never requested, and so forth. +# +# Not all tasks are performed with the same frequency, but Redis checks for +# tasks to perform according to the specified "hz" value. +# +# By default "hz" is set to 10. Raising the value will use more CPU when +# Redis is idle, but at the same time will make Redis more responsive when +# there are many keys expiring at the same time, and timeouts may be +# handled with more precision. +# +# The range is between 1 and 500, however a value over 100 is usually not +# a good idea. Most users should use the default of 10 and raise this up to +# 100 only in environments where very low latency is required. +hz 10 + +# Normally it is useful to have an HZ value which is proportional to the +# number of clients connected. This is useful in order, for instance, to +# avoid too many clients are processed for each background task invocation +# in order to avoid latency spikes. +# +# Since the default HZ value by default is conservatively set to 10, Redis +# offers, and enables by default, the ability to use an adaptive HZ value +# which will temporarily raise when there are many connected clients. +# +# When dynamic HZ is enabled, the actual configured HZ will be used +# as a baseline, but multiples of the configured HZ value will be actually +# used as needed once more clients are connected. In this way an idle +# instance will use very little CPU time while a busy instance will be +# more responsive. +dynamic-hz yes + +# When a child rewrites the AOF file, if the following option is enabled +# the file will be fsync-ed every 4 MB of data generated. This is useful +# in order to commit the file to the disk more incrementally and avoid +# big latency spikes. +aof-rewrite-incremental-fsync yes + +# When redis saves RDB file, if the following option is enabled +# the file will be fsync-ed every 4 MB of data generated. This is useful +# in order to commit the file to the disk more incrementally and avoid +# big latency spikes. +rdb-save-incremental-fsync yes + +# Redis LFU eviction (see maxmemory setting) can be tuned. However it is a good +# idea to start with the default settings and only change them after investigating +# how to improve the performances and how the keys LFU change over time, which +# is possible to inspect via the OBJECT FREQ command. +# +# There are two tunable parameters in the Redis LFU implementation: the +# counter logarithm factor and the counter decay time. It is important to +# understand what the two parameters mean before changing them. +# +# The LFU counter is just 8 bits per key, it's maximum value is 255, so Redis +# uses a probabilistic increment with logarithmic behavior. Given the value +# of the old counter, when a key is accessed, the counter is incremented in +# this way: +# +# 1. A random number R between 0 and 1 is extracted. +# 2. A probability P is calculated as 1/(old_value*lfu_log_factor+1). +# 3. The counter is incremented only if R < P. +# +# The default lfu-log-factor is 10. This is a table of how the frequency +# counter changes with a different number of accesses with different +# logarithmic factors: +# +# +--------+------------+------------+------------+------------+------------+ +# | factor | 100 hits | 1000 hits | 100K hits | 1M hits | 10M hits | +# +--------+------------+------------+------------+------------+------------+ +# | 0 | 104 | 255 | 255 | 255 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# | 1 | 18 | 49 | 255 | 255 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# | 10 | 10 | 18 | 142 | 255 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# | 100 | 8 | 11 | 49 | 143 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# +# NOTE: The above table was obtained by running the following commands: +# +# redis-benchmark -n 1000000 incr foo +# redis-cli object freq foo +# +# NOTE 2: The counter initial value is 5 in order to give new objects a chance +# to accumulate hits. +# +# The counter decay time is the time, in minutes, that must elapse in order +# for the key counter to be divided by two (or decremented if it has a value +# less <= 10). +# +# The default value for the lfu-decay-time is 1. A special value of 0 means to +# decay the counter every time it happens to be scanned. +# +# lfu-log-factor 10 +# lfu-decay-time 1 + +########################### ACTIVE DEFRAGMENTATION ####################### +# +# What is active defragmentation? +# ------------------------------- +# +# Active (online) defragmentation allows a Redis server to compact the +# spaces left between small allocations and deallocations of data in memory, +# thus allowing to reclaim back memory. +# +# Fragmentation is a natural process that happens with every allocator (but +# less so with Jemalloc, fortunately) and certain workloads. Normally a server +# restart is needed in order to lower the fragmentation, or at least to flush +# away all the data and create it again. However thanks to this feature +# implemented by Oran Agra for Redis 4.0 this process can happen at runtime +# in a "hot" way, while the server is running. +# +# Basically when the fragmentation is over a certain level (see the +# configuration options below) Redis will start to create new copies of the +# values in contiguous memory regions by exploiting certain specific Jemalloc +# features (in order to understand if an allocation is causing fragmentation +# and to allocate it in a better place), and at the same time, will release the +# old copies of the data. This process, repeated incrementally for all the keys +# will cause the fragmentation to drop back to normal values. +# +# Important things to understand: +# +# 1. This feature is disabled by default, and only works if you compiled Redis +# to use the copy of Jemalloc we ship with the source code of Redis. +# This is the default with Linux builds. +# +# 2. You never need to enable this feature if you don't have fragmentation +# issues. +# +# 3. Once you experience fragmentation, you can enable this feature when +# needed with the command "CONFIG SET activedefrag yes". +# +# The configuration parameters are able to fine tune the behavior of the +# defragmentation process. If you are not sure about what they mean it is +# a good idea to leave the defaults untouched. + +# Active defragmentation is disabled by default +# activedefrag no + +# Minimum amount of fragmentation waste to start active defrag +# active-defrag-ignore-bytes 100mb + +# Minimum percentage of fragmentation to start active defrag +# active-defrag-threshold-lower 10 + +# Maximum percentage of fragmentation at which we use maximum effort +# active-defrag-threshold-upper 100 + +# Minimal effort for defrag in CPU percentage, to be used when the lower +# threshold is reached +# active-defrag-cycle-min 1 + +# Maximal effort for defrag in CPU percentage, to be used when the upper +# threshold is reached +# active-defrag-cycle-max 25 + +# Maximum number of set/hash/zset/list fields that will be processed from +# the main dictionary scan +# active-defrag-max-scan-fields 1000 + +# Jemalloc background thread for purging will be enabled by default +jemalloc-bg-thread yes + +# It is possible to pin different threads and processes of Redis to specific +# CPUs in your system, in order to maximize the performances of the server. +# This is useful both in order to pin different Redis threads in different +# CPUs, but also in order to make sure that multiple Redis instances running +# in the same host will be pinned to different CPUs. +# +# Normally you can do this using the "taskset" command, however it is also +# possible to this via Redis configuration directly, both in Linux and FreeBSD. +# +# You can pin the server/IO threads, bio threads, aof rewrite child process, and +# the bgsave child process. The syntax to specify the cpu list is the same as +# the taskset command: +# +# Set redis server/io threads to cpu affinity 0,2,4,6: +# server_cpulist 0-7:2 +# +# Set bio threads to cpu affinity 1,3: +# bio_cpulist 1,3 +# +# Set aof rewrite child process to cpu affinity 8,9,10,11: +# aof_rewrite_cpulist 8-11 +# +# Set bgsave child process to cpu affinity 1,10,11 +# bgsave_cpulist 1,10-11 + +# In some cases redis will emit warnings and even refuse to start if it detects +# that the system is in bad state, it is possible to suppress these warnings +# by setting the following config which takes a space delimited list of warnings +# to suppress +# +# ignore-warnings ARM64-COW-BUG diff --git a/dockge/redis/docker-compose.yml b/dockge/redis/docker-compose.yml new file mode 100644 index 00000000..ea836be9 --- /dev/null +++ b/dockge/redis/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + 1panel-network: + external: true +services: + redis: + command: "sh -c ' if [ -z \"${REDIS_ROOT_PASSWORD}\" ]; then\n redis-server /etc/redis/redis.conf\n\ + else\n redis-server /etc/redis/redis.conf --requirepass ${REDIS_ROOT_PASSWORD}\n\ + fi'\n" + container_name: redis + image: redis:7.4.1-alpine + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:6379 + restart: always + volumes: + - ${REDIS_ROOT_PATH}/data:/data + - ${REDIS_ROOT_PATH}/config/redis.conf:/etc/redis/redis.conf + - ${REDIS_ROOT_PATH}/logs:/logs diff --git a/dockge/redis/envs/default.env b/dockge/redis/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/redis/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/redis/envs/global.env b/dockge/redis/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/redis/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/redis_6_2_16/.env b/dockge/redis_6_2_16/.env new file mode 100644 index 00000000..969809e6 --- /dev/null +++ b/dockge/redis_6_2_16/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +REDIS_ROOT_PATH=/home/redis + +# 端口 [必填] +PANEL_APP_PORT_HTTP=6379 + +# 密码 +REDIS_ROOT_PASSWORD= + diff --git a/dockge/redis_6_2_16/config/redis.conf b/dockge/redis_6_2_16/config/redis.conf new file mode 100644 index 00000000..ca22ec9f --- /dev/null +++ b/dockge/redis_6_2_16/config/redis.conf @@ -0,0 +1,1877 @@ +# Redis configuration file example. +# +# Note that in order to read the configuration file, Redis must be +# started with the file path as first argument: +# +# ./redis-server /path/to/redis.conf + +# Note on units: when memory size is needed, it is possible to specify +# it in the usual form of 1k 5GB 4M and so forth: +# +# 1k => 1000 bytes +# 1kb => 1024 bytes +# 1m => 1000000 bytes +# 1mb => 1024*1024 bytes +# 1g => 1000000000 bytes +# 1gb => 1024*1024*1024 bytes +# +# units are case insensitive so 1GB 1Gb 1gB are all the same. + +################################## INCLUDES ################################### + +# Include one or more other config files here. This is useful if you +# have a standard template that goes to all Redis servers but also need +# to customize a few per-server settings. Include files can include +# other files, so use this wisely. +# +# Note that option "include" won't be rewritten by command "CONFIG REWRITE" +# from admin or Redis Sentinel. Since Redis always uses the last processed +# line as value of a configuration directive, you'd better put includes +# at the beginning of this file to avoid overwriting config change at runtime. +# +# If instead you are interested in using includes to override configuration +# options, it is better to use include as the last line. +# +# include /path/to/local.conf +# include /path/to/other.conf + +################################## MODULES ##################################### + +# Load modules at startup. If the server is not able to load modules +# it will abort. It is possible to use multiple loadmodule directives. +# +# loadmodule /path/to/my_module.so +# loadmodule /path/to/other_module.so + +################################## NETWORK ##################################### + +# By default, if no "bind" configuration directive is specified, Redis listens +# for connections from all available network interfaces on the host machine. +# It is possible to listen to just one or multiple selected interfaces using +# the "bind" configuration directive, followed by one or more IP addresses. +# +# Examples: +# +# bind 192.168.1.100 10.0.0.1 +# bind 127.0.0.1 ::1 +# +# ~~~ WARNING ~~~ If the computer running Redis is directly exposed to the +# internet, binding to all the interfaces is dangerous and will expose the +# instance to everybody on the internet. So by default we uncomment the +# following bind directive, that will force Redis to listen only on the +# IPv4 loopback interface address (this means Redis will only be able to +# accept client connections from the same host that it is running on). +# +# IF YOU ARE SURE YOU WANT YOUR INSTANCE TO LISTEN TO ALL THE INTERFACES +# JUST COMMENT OUT THE FOLLOWING LINE. +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +bind 0.0.0.0 + +# Protected mode is a layer of security protection, in order to avoid that +# Redis instances left open on the internet are accessed and exploited. +# +# When protected mode is on and if: +# +# 1) The server is not binding explicitly to a set of addresses using the +# "bind" directive. +# 2) No password is configured. +# +# The server only accepts connections from clients connecting from the +# IPv4 and IPv6 loopback addresses 127.0.0.1 and ::1, and from Unix domain +# sockets. +# +# By default protected mode is enabled. You should disable it only if +# you are sure you want clients from other hosts to connect to Redis +# even if no authentication is configured, nor a specific set of interfaces +# are explicitly listed using the "bind" directive. +protected-mode yes + +# Accept connections on the specified port, default is 6379 (IANA #815344). +# If port 0 is specified Redis will not listen on a TCP socket. +port 6379 + +# TCP listen() backlog. +# +# In high requests-per-second environments you need a high backlog in order +# to avoid slow clients connection issues. Note that the Linux kernel +# will silently truncate it to the value of /proc/sys/net/core/somaxconn so +# make sure to raise both the value of somaxconn and tcp_max_syn_backlog +# in order to get the desired effect. +tcp-backlog 511 + +# Unix socket. +# +# Specify the path for the Unix socket that will be used to listen for +# incoming connections. There is no default, so Redis will not listen +# on a unix socket when not specified. +# +# unixsocket /tmp/redis.sock +# unixsocketperm 700 + +# Close the connection after a client is idle for N seconds (0 to disable) +timeout 0 + +# TCP keepalive. +# +# If non-zero, use SO_KEEPALIVE to send TCP ACKs to clients in absence +# of communication. This is useful for two reasons: +# +# 1) Detect dead peers. +# 2) Force network equipment in the middle to consider the connection to be +# alive. +# +# On Linux, the specified value (in seconds) is the period used to send ACKs. +# Note that to close the connection the double of the time is needed. +# On other kernels the period depends on the kernel configuration. +# +# A reasonable value for this option is 300 seconds, which is the new +# Redis default starting with Redis 3.2.1. +tcp-keepalive 300 + +################################# TLS/SSL ##################################### + +# By default, TLS/SSL is disabled. To enable it, the "tls-port" configuration +# directive can be used to define TLS-listening ports. To enable TLS on the +# default port, use: +# +# port 0 +# tls-port 6379 + +# Configure a X.509 certificate and private key to use for authenticating the +# server to connected clients, masters or cluster peers. These files should be +# PEM formatted. +# +# tls-cert-file redis.crt +# tls-key-file redis.key + +# Configure a DH parameters file to enable Diffie-Hellman (DH) key exchange: +# +# tls-dh-params-file redis.dh + +# Configure a CA certificate(s) bundle or directory to authenticate TLS/SSL +# clients and peers. Redis requires an explicit configuration of at least one +# of these, and will not implicitly use the system wide configuration. +# +# tls-ca-cert-file ca.crt +# tls-ca-cert-dir /etc/ssl/certs + +# By default, clients (including replica servers) on a TLS port are required +# to authenticate using valid client side certificates. +# +# If "no" is specified, client certificates are not required and not accepted. +# If "optional" is specified, client certificates are accepted and must be +# valid if provided, but are not required. +# +# tls-auth-clients no +# tls-auth-clients optional + +# By default, a Redis replica does not attempt to establish a TLS connection +# with its master. +# +# Use the following directive to enable TLS on replication links. +# +# tls-replication yes + +# By default, the Redis Cluster bus uses a plain TCP connection. To enable +# TLS for the bus protocol, use the following directive: +# +# tls-cluster yes + +# Explicitly specify TLS versions to support. Allowed values are case insensitive +# and include "TLSv1", "TLSv1.1", "TLSv1.2", "TLSv1.3" (OpenSSL >= 1.1.1) or +# any combination. To enable only TLSv1.2 and TLSv1.3, use: +# +# tls-protocols "TLSv1.2 TLSv1.3" + +# Configure allowed ciphers. See the ciphers(1ssl) manpage for more information +# about the syntax of this string. +# +# Note: this configuration applies only to <= TLSv1.2. +# +# tls-ciphers DEFAULT:!MEDIUM + +# Configure allowed TLSv1.3 ciphersuites. See the ciphers(1ssl) manpage for more +# information about the syntax of this string, and specifically for TLSv1.3 +# ciphersuites. +# +# tls-ciphersuites TLS_CHACHA20_POLY1305_SHA256 + +# When choosing a cipher, use the server's preference instead of the client +# preference. By default, the server follows the client's preference. +# +# tls-prefer-server-ciphers yes + +# By default, TLS session caching is enabled to allow faster and less expensive +# reconnections by clients that support it. Use the following directive to disable +# caching. +# +# tls-session-caching no + +# Change the default number of TLS sessions cached. A zero value sets the cache +# to unlimited size. The default size is 20480. +# +# tls-session-cache-size 5000 + +# Change the default timeout of cached TLS sessions. The default timeout is 300 +# seconds. +# +# tls-session-cache-timeout 60 + +################################# GENERAL ##################################### + +# By default Redis does not run as a daemon. Use 'yes' if you need it. +# Note that Redis will write a pid file in /var/run/redis.pid when daemonized. +daemonize no + +# If you run Redis from upstart or systemd, Redis can interact with your +# supervision tree. Options: +# supervised no - no supervision interaction +# supervised upstart - signal upstart by putting Redis into SIGSTOP mode +# requires "expect stop" in your upstart job config +# supervised systemd - signal systemd by writing READY=1 to $NOTIFY_SOCKET +# supervised auto - detect upstart or systemd method based on +# UPSTART_JOB or NOTIFY_SOCKET environment variables +# Note: these supervision methods only signal "process is ready." +# They do not enable continuous pings back to your supervisor. +supervised no + +# If a pid file is specified, Redis writes it where specified at startup +# and removes it at exit. +# +# When the server runs non daemonized, no pid file is created if none is +# specified in the configuration. When the server is daemonized, the pid file +# is used even if not specified, defaulting to "/var/run/redis.pid". +# +# Creating a pid file is best effort: if Redis is not able to create it +# nothing bad happens, the server will start and run normally. +pidfile /var/run/redis_6379.pid + +# Specify the server verbosity level. +# This can be one of: +# debug (a lot of information, useful for development/testing) +# verbose (many rarely useful info, but not a mess like the debug level) +# notice (moderately verbose, what you want in production probably) +# warning (only very important / critical messages are logged) +loglevel notice + +# Specify the log file name. Also the empty string can be used to force +# Redis to log on the standard output. Note that if you use standard +# output for logging but daemonize, logs will be sent to /dev/null +logfile "" + +# To enable logging to the system logger, just set 'syslog-enabled' to yes, +# and optionally update the other syslog parameters to suit your needs. +# syslog-enabled no + +# Specify the syslog identity. +# syslog-ident redis + +# Specify the syslog facility. Must be USER or between LOCAL0-LOCAL7. +# syslog-facility local0 + +# Set the number of databases. The default database is DB 0, you can select +# a different one on a per-connection basis using SELECT where +# dbid is a number between 0 and 'databases'-1 +databases 16 + +# By default Redis shows an ASCII art logo only when started to log to the +# standard output and if the standard output is a TTY. Basically this means +# that normally a logo is displayed only in interactive sessions. +# +# However it is possible to force the pre-4.0 behavior and always show a +# ASCII art logo in startup logs by setting the following option to yes. +always-show-logo yes + +################################ SNAPSHOTTING ################################ +# +# Save the DB on disk: +# +# save +# +# Will save the DB if both the given number of seconds and the given +# number of write operations against the DB occurred. +# +# In the example below the behavior will be to save: +# after 900 sec (15 min) if at least 1 key changed +# after 300 sec (5 min) if at least 10 keys changed +# after 60 sec if at least 10000 keys changed +# +# Note: you can disable saving completely by commenting out all "save" lines. +# +# It is also possible to remove all the previously configured save +# points by adding a save directive with a single empty string argument +# like in the following example: +# +# save "" + +save 900 1 +save 300 10 +save 60 10000 + +# By default Redis will stop accepting writes if RDB snapshots are enabled +# (at least one save point) and the latest background save failed. +# This will make the user aware (in a hard way) that data is not persisting +# on disk properly, otherwise chances are that no one will notice and some +# disaster will happen. +# +# If the background saving process will start working again Redis will +# automatically allow writes again. +# +# However if you have setup your proper monitoring of the Redis server +# and persistence, you may want to disable this feature so that Redis will +# continue to work as usual even if there are problems with disk, +# permissions, and so forth. +stop-writes-on-bgsave-error yes + +# Compress string objects using LZF when dump .rdb databases? +# By default compression is enabled as it's almost always a win. +# If you want to save some CPU in the saving child set it to 'no' but +# the dataset will likely be bigger if you have compressible values or keys. +rdbcompression yes + +# Since version 5 of RDB a CRC64 checksum is placed at the end of the file. +# This makes the format more resistant to corruption but there is a performance +# hit to pay (around 10%) when saving and loading RDB files, so you can disable it +# for maximum performances. +# +# RDB files created with checksum disabled have a checksum of zero that will +# tell the loading code to skip the check. +rdbchecksum yes + +# The filename where to dump the DB +dbfilename dump.rdb + +# Remove RDB files used by replication in instances without persistence +# enabled. By default this option is disabled, however there are environments +# where for regulations or other security concerns, RDB files persisted on +# disk by masters in order to feed replicas, or stored on disk by replicas +# in order to load them for the initial synchronization, should be deleted +# ASAP. Note that this option ONLY WORKS in instances that have both AOF +# and RDB persistence disabled, otherwise is completely ignored. +# +# An alternative (and sometimes better) way to obtain the same effect is +# to use diskless replication on both master and replicas instances. However +# in the case of replicas, diskless is not always an option. +rdb-del-sync-files no + +# The working directory. +# +# The DB will be written inside this directory, with the filename specified +# above using the 'dbfilename' configuration directive. +# +# The Append Only File will also be created inside this directory. +# +# Note that you must specify a directory here, not a file name. +dir ./ + +################################# REPLICATION ################################# + +# Master-Replica replication. Use replicaof to make a Redis instance a copy of +# another Redis server. A few things to understand ASAP about Redis replication. +# +# +------------------+ +---------------+ +# | Master | ---> | Replica | +# | (receive writes) | | (exact copy) | +# +------------------+ +---------------+ +# +# 1) Redis replication is asynchronous, but you can configure a master to +# stop accepting writes if it appears to be not connected with at least +# a given number of replicas. +# 2) Redis replicas are able to perform a partial resynchronization with the +# master if the replication link is lost for a relatively small amount of +# time. You may want to configure the replication backlog size (see the next +# sections of this file) with a sensible value depending on your needs. +# 3) Replication is automatic and does not need user intervention. After a +# network partition replicas automatically try to reconnect to masters +# and resynchronize with them. +# +# replicaof + +# If the master is password protected (using the "requirepass" configuration +# directive below) it is possible to tell the replica to authenticate before +# starting the replication synchronization process, otherwise the master will +# refuse the replica request. +# +# masterauth +# +# However this is not enough if you are using Redis ACLs (for Redis version +# 6 or greater), and the default user is not capable of running the PSYNC +# command and/or other commands needed for replication. In this case it's +# better to configure a special user to use with replication, and specify the +# masteruser configuration as such: +# +# masteruser +# +# When masteruser is specified, the replica will authenticate against its +# master using the new AUTH form: AUTH . + +# When a replica loses its connection with the master, or when the replication +# is still in progress, the replica can act in two different ways: +# +# 1) if replica-serve-stale-data is set to 'yes' (the default) the replica will +# still reply to client requests, possibly with out of date data, or the +# data set may just be empty if this is the first synchronization. +# +# 2) If replica-serve-stale-data is set to 'no' the replica will reply with +# an error "SYNC with master in progress" to all commands except: +# INFO, REPLICAOF, AUTH, PING, SHUTDOWN, REPLCONF, ROLE, CONFIG, SUBSCRIBE, +# UNSUBSCRIBE, PSUBSCRIBE, PUNSUBSCRIBE, PUBLISH, PUBSUB, COMMAND, POST, +# HOST and LATENCY. +# +replica-serve-stale-data yes + +# You can configure a replica instance to accept writes or not. Writing against +# a replica instance may be useful to store some ephemeral data (because data +# written on a replica will be easily deleted after resync with the master) but +# may also cause problems if clients are writing to it because of a +# misconfiguration. +# +# Since Redis 2.6 by default replicas are read-only. +# +# Note: read only replicas are not designed to be exposed to untrusted clients +# on the internet. It's just a protection layer against misuse of the instance. +# Still a read only replica exports by default all the administrative commands +# such as CONFIG, DEBUG, and so forth. To a limited extent you can improve +# security of read only replicas using 'rename-command' to shadow all the +# administrative / dangerous commands. +replica-read-only yes + +# Replication SYNC strategy: disk or socket. +# +# New replicas and reconnecting replicas that are not able to continue the +# replication process just receiving differences, need to do what is called a +# "full synchronization". An RDB file is transmitted from the master to the +# replicas. +# +# The transmission can happen in two different ways: +# +# 1) Disk-backed: The Redis master creates a new process that writes the RDB +# file on disk. Later the file is transferred by the parent +# process to the replicas incrementally. +# 2) Diskless: The Redis master creates a new process that directly writes the +# RDB file to replica sockets, without touching the disk at all. +# +# With disk-backed replication, while the RDB file is generated, more replicas +# can be queued and served with the RDB file as soon as the current child +# producing the RDB file finishes its work. With diskless replication instead +# once the transfer starts, new replicas arriving will be queued and a new +# transfer will start when the current one terminates. +# +# When diskless replication is used, the master waits a configurable amount of +# time (in seconds) before starting the transfer in the hope that multiple +# replicas will arrive and the transfer can be parallelized. +# +# With slow disks and fast (large bandwidth) networks, diskless replication +# works better. +repl-diskless-sync no + +# When diskless replication is enabled, it is possible to configure the delay +# the server waits in order to spawn the child that transfers the RDB via socket +# to the replicas. +# +# This is important since once the transfer starts, it is not possible to serve +# new replicas arriving, that will be queued for the next RDB transfer, so the +# server waits a delay in order to let more replicas arrive. +# +# The delay is specified in seconds, and by default is 5 seconds. To disable +# it entirely just set it to 0 seconds and the transfer will start ASAP. +repl-diskless-sync-delay 5 + +# ----------------------------------------------------------------------------- +# WARNING: RDB diskless load is experimental. Since in this setup the replica +# does not immediately store an RDB on disk, it may cause data loss during +# failovers. RDB diskless load + Redis modules not handling I/O reads may also +# cause Redis to abort in case of I/O errors during the initial synchronization +# stage with the master. Use only if your do what you are doing. +# ----------------------------------------------------------------------------- +# +# Replica can load the RDB it reads from the replication link directly from the +# socket, or store the RDB to a file and read that file after it was completely +# received from the master. +# +# In many cases the disk is slower than the network, and storing and loading +# the RDB file may increase replication time (and even increase the master's +# Copy on Write memory and salve buffers). +# However, parsing the RDB file directly from the socket may mean that we have +# to flush the contents of the current database before the full rdb was +# received. For this reason we have the following options: +# +# "disabled" - Don't use diskless load (store the rdb file to the disk first) +# "on-empty-db" - Use diskless load only when it is completely safe. +# "swapdb" - Keep a copy of the current db contents in RAM while parsing +# the data directly from the socket. note that this requires +# sufficient memory, if you don't have it, you risk an OOM kill. +repl-diskless-load disabled + +# Replicas send PINGs to server in a predefined interval. It's possible to +# change this interval with the repl_ping_replica_period option. The default +# value is 10 seconds. +# +# repl-ping-replica-period 10 + +# The following option sets the replication timeout for: +# +# 1) Bulk transfer I/O during SYNC, from the point of view of replica. +# 2) Master timeout from the point of view of replicas (data, pings). +# 3) Replica timeout from the point of view of masters (REPLCONF ACK pings). +# +# It is important to make sure that this value is greater than the value +# specified for repl-ping-replica-period otherwise a timeout will be detected +# every time there is low traffic between the master and the replica. The default +# value is 60 seconds. +# +# repl-timeout 60 + +# Disable TCP_NODELAY on the replica socket after SYNC? +# +# If you select "yes" Redis will use a smaller number of TCP packets and +# less bandwidth to send data to replicas. But this can add a delay for +# the data to appear on the replica side, up to 40 milliseconds with +# Linux kernels using a default configuration. +# +# If you select "no" the delay for data to appear on the replica side will +# be reduced but more bandwidth will be used for replication. +# +# By default we optimize for low latency, but in very high traffic conditions +# or when the master and replicas are many hops away, turning this to "yes" may +# be a good idea. +repl-disable-tcp-nodelay no + +# Set the replication backlog size. The backlog is a buffer that accumulates +# replica data when replicas are disconnected for some time, so that when a +# replica wants to reconnect again, often a full resync is not needed, but a +# partial resync is enough, just passing the portion of data the replica +# missed while disconnected. +# +# The bigger the replication backlog, the longer the replica can endure the +# disconnect and later be able to perform a partial resynchronization. +# +# The backlog is only allocated if there is at least one replica connected. +# +# repl-backlog-size 1mb + +# After a master has no connected replicas for some time, the backlog will be +# freed. The following option configures the amount of seconds that need to +# elapse, starting from the time the last replica disconnected, for the backlog +# buffer to be freed. +# +# Note that replicas never free the backlog for timeout, since they may be +# promoted to masters later, and should be able to correctly "partially +# resynchronize" with other replicas: hence they should always accumulate backlog. +# +# A value of 0 means to never release the backlog. +# +# repl-backlog-ttl 3600 + +# The replica priority is an integer number published by Redis in the INFO +# output. It is used by Redis Sentinel in order to select a replica to promote +# into a master if the master is no longer working correctly. +# +# A replica with a low priority number is considered better for promotion, so +# for instance if there are three replicas with priority 10, 100, 25 Sentinel +# will pick the one with priority 10, that is the lowest. +# +# However a special priority of 0 marks the replica as not able to perform the +# role of master, so a replica with priority of 0 will never be selected by +# Redis Sentinel for promotion. +# +# By default the priority is 100. +replica-priority 100 + +# It is possible for a master to stop accepting writes if there are less than +# N replicas connected, having a lag less or equal than M seconds. +# +# The N replicas need to be in "online" state. +# +# The lag in seconds, that must be <= the specified value, is calculated from +# the last ping received from the replica, that is usually sent every second. +# +# This option does not GUARANTEE that N replicas will accept the write, but +# will limit the window of exposure for lost writes in case not enough replicas +# are available, to the specified number of seconds. +# +# For example to require at least 3 replicas with a lag <= 10 seconds use: +# +# min-replicas-to-write 3 +# min-replicas-max-lag 10 +# +# Setting one or the other to 0 disables the feature. +# +# By default min-replicas-to-write is set to 0 (feature disabled) and +# min-replicas-max-lag is set to 10. + +# A Redis master is able to list the address and port of the attached +# replicas in different ways. For example the "INFO replication" section +# offers this information, which is used, among other tools, by +# Redis Sentinel in order to discover replica instances. +# Another place where this info is available is in the output of the +# "ROLE" command of a master. +# +# The listed IP address and port normally reported by a replica is +# obtained in the following way: +# +# IP: The address is auto detected by checking the peer address +# of the socket used by the replica to connect with the master. +# +# Port: The port is communicated by the replica during the replication +# handshake, and is normally the port that the replica is using to +# listen for connections. +# +# However when port forwarding or Network Address Translation (NAT) is +# used, the replica may actually be reachable via different IP and port +# pairs. The following two options can be used by a replica in order to +# report to its master a specific set of IP and port, so that both INFO +# and ROLE will report those values. +# +# There is no need to use both the options if you need to override just +# the port or the IP address. +# +# replica-announce-ip 5.5.5.5 +# replica-announce-port 1234 + +############################### KEYS TRACKING ################################# + +# Redis implements server assisted support for client side caching of values. +# This is implemented using an invalidation table that remembers, using +# 16 millions of slots, what clients may have certain subsets of keys. In turn +# this is used in order to send invalidation messages to clients. Please +# check this page to understand more about the feature: +# +# https://redis.io/topics/client-side-caching +# +# When tracking is enabled for a client, all the read only queries are assumed +# to be cached: this will force Redis to store information in the invalidation +# table. When keys are modified, such information is flushed away, and +# invalidation messages are sent to the clients. However if the workload is +# heavily dominated by reads, Redis could use more and more memory in order +# to track the keys fetched by many clients. +# +# For this reason it is possible to configure a maximum fill value for the +# invalidation table. By default it is set to 1M of keys, and once this limit +# is reached, Redis will start to evict keys in the invalidation table +# even if they were not modified, just to reclaim memory: this will in turn +# force the clients to invalidate the cached values. Basically the table +# maximum size is a trade off between the memory you want to spend server +# side to track information about who cached what, and the ability of clients +# to retain cached objects in memory. +# +# If you set the value to 0, it means there are no limits, and Redis will +# retain as many keys as needed in the invalidation table. +# In the "stats" INFO section, you can find information about the number of +# keys in the invalidation table at every given moment. +# +# Note: when key tracking is used in broadcasting mode, no memory is used +# in the server side so this setting is useless. +# +# tracking-table-max-keys 1000000 + +################################## SECURITY ################################### + +# Warning: since Redis is pretty fast, an outside user can try up to +# 1 million passwords per second against a modern box. This means that you +# should use very strong passwords, otherwise they will be very easy to break. +# Note that because the password is really a shared secret between the client +# and the server, and should not be memorized by any human, the password +# can be easily a long string from /dev/urandom or whatever, so by using a +# long and unguessable password no brute force attack will be possible. + +# Redis ACL users are defined in the following format: +# +# user ... acl rules ... +# +# For example: +# +# user worker +@list +@connection ~jobs:* on >ffa9203c493aa99 +# +# The special username "default" is used for new connections. If this user +# has the "nopass" rule, then new connections will be immediately authenticated +# as the "default" user without the need of any password provided via the +# AUTH command. Otherwise if the "default" user is not flagged with "nopass" +# the connections will start in not authenticated state, and will require +# AUTH (or the HELLO command AUTH option) in order to be authenticated and +# start to work. +# +# The ACL rules that describe what a user can do are the following: +# +# on Enable the user: it is possible to authenticate as this user. +# off Disable the user: it's no longer possible to authenticate +# with this user, however the already authenticated connections +# will still work. +# + Allow the execution of that command +# - Disallow the execution of that command +# +@ Allow the execution of all the commands in such category +# with valid categories are like @admin, @set, @sortedset, ... +# and so forth, see the full list in the server.c file where +# the Redis command table is described and defined. +# The special category @all means all the commands, but currently +# present in the server, and that will be loaded in the future +# via modules. +# +|subcommand Allow a specific subcommand of an otherwise +# disabled command. Note that this form is not +# allowed as negative like -DEBUG|SEGFAULT, but +# only additive starting with "+". +# allcommands Alias for +@all. Note that it implies the ability to execute +# all the future commands loaded via the modules system. +# nocommands Alias for -@all. +# ~ Add a pattern of keys that can be mentioned as part of +# commands. For instance ~* allows all the keys. The pattern +# is a glob-style pattern like the one of KEYS. +# It is possible to specify multiple patterns. +# allkeys Alias for ~* +# resetkeys Flush the list of allowed keys patterns. +# > Add this password to the list of valid password for the user. +# For example >mypass will add "mypass" to the list. +# This directive clears the "nopass" flag (see later). +# < Remove this password from the list of valid passwords. +# nopass All the set passwords of the user are removed, and the user +# is flagged as requiring no password: it means that every +# password will work against this user. If this directive is +# used for the default user, every new connection will be +# immediately authenticated with the default user without +# any explicit AUTH command required. Note that the "resetpass" +# directive will clear this condition. +# resetpass Flush the list of allowed passwords. Moreover removes the +# "nopass" status. After "resetpass" the user has no associated +# passwords and there is no way to authenticate without adding +# some password (or setting it as "nopass" later). +# reset Performs the following actions: resetpass, resetkeys, off, +# -@all. The user returns to the same state it has immediately +# after its creation. +# +# ACL rules can be specified in any order: for instance you can start with +# passwords, then flags, or key patterns. However note that the additive +# and subtractive rules will CHANGE MEANING depending on the ordering. +# For instance see the following example: +# +# user alice on +@all -DEBUG ~* >somepassword +# +# This will allow "alice" to use all the commands with the exception of the +# DEBUG command, since +@all added all the commands to the set of the commands +# alice can use, and later DEBUG was removed. However if we invert the order +# of two ACL rules the result will be different: +# +# user alice on -DEBUG +@all ~* >somepassword +# +# Now DEBUG was removed when alice had yet no commands in the set of allowed +# commands, later all the commands are added, so the user will be able to +# execute everything. +# +# Basically ACL rules are processed left-to-right. +# +# For more information about ACL configuration please refer to +# the Redis web site at https://redis.io/topics/acl + +# ACL LOG +# +# The ACL Log tracks failed commands and authentication events associated +# with ACLs. The ACL Log is useful to troubleshoot failed commands blocked +# by ACLs. The ACL Log is stored in memory. You can reclaim memory with +# ACL LOG RESET. Define the maximum entry length of the ACL Log below. +acllog-max-len 128 + +# Using an external ACL file +# +# Instead of configuring users here in this file, it is possible to use +# a stand-alone file just listing users. The two methods cannot be mixed: +# if you configure users here and at the same time you activate the external +# ACL file, the server will refuse to start. +# +# The format of the external ACL user file is exactly the same as the +# format that is used inside redis.conf to describe users. +# +# aclfile /etc/redis/users.acl + +# IMPORTANT NOTE: starting with Redis 6 "requirepass" is just a compatibility +# layer on top of the new ACL system. The option effect will be just setting +# the password for the default user. Clients will still authenticate using +# AUTH as usually, or more explicitly with AUTH default +# if they follow the new protocol: both will work. +# +# requirepass foobared + +# Command renaming (DEPRECATED). +# +# ------------------------------------------------------------------------ +# WARNING: avoid using this option if possible. Instead use ACLs to remove +# commands from the default user, and put them only in some admin user you +# create for administrative purposes. +# ------------------------------------------------------------------------ +# +# It is possible to change the name of dangerous commands in a shared +# environment. For instance the CONFIG command may be renamed into something +# hard to guess so that it will still be available for internal-use tools +# but not available for general clients. +# +# Example: +# +# rename-command CONFIG b840fc02d524045429941cc15f59e41cb7be6c52 +# +# It is also possible to completely kill a command by renaming it into +# an empty string: +# +# rename-command CONFIG "" +# +# Please note that changing the name of commands that are logged into the +# AOF file or transmitted to replicas may cause problems. + +################################### CLIENTS #################################### + +# Set the max number of connected clients at the same time. By default +# this limit is set to 10000 clients, however if the Redis server is not +# able to configure the process file limit to allow for the specified limit +# the max number of allowed clients is set to the current file limit +# minus 32 (as Redis reserves a few file descriptors for internal uses). +# +# Once the limit is reached Redis will close all the new connections sending +# an error 'max number of clients reached'. +# +# IMPORTANT: When Redis Cluster is used, the max number of connections is also +# shared with the cluster bus: every node in the cluster will use two +# connections, one incoming and another outgoing. It is important to size the +# limit accordingly in case of very large clusters. +# +# maxclients 10000 + +############################## MEMORY MANAGEMENT ################################ + +# Set a memory usage limit to the specified amount of bytes. +# When the memory limit is reached Redis will try to remove keys +# according to the eviction policy selected (see maxmemory-policy). +# +# If Redis can't remove keys according to the policy, or if the policy is +# set to 'noeviction', Redis will start to reply with errors to commands +# that would use more memory, like SET, LPUSH, and so on, and will continue +# to reply to read-only commands like GET. +# +# This option is usually useful when using Redis as an LRU or LFU cache, or to +# set a hard memory limit for an instance (using the 'noeviction' policy). +# +# WARNING: If you have replicas attached to an instance with maxmemory on, +# the size of the output buffers needed to feed the replicas are subtracted +# from the used memory count, so that network problems / resyncs will +# not trigger a loop where keys are evicted, and in turn the output +# buffer of replicas is full with DELs of keys evicted triggering the deletion +# of more keys, and so forth until the database is completely emptied. +# +# In short... if you have replicas attached it is suggested that you set a lower +# limit for maxmemory so that there is some free RAM on the system for replica +# output buffers (but this is not needed if the policy is 'noeviction'). +# +# maxmemory + +# MAXMEMORY POLICY: how Redis will select what to remove when maxmemory +# is reached. You can select one from the following behaviors: +# +# volatile-lru -> Evict using approximated LRU, only keys with an expire set. +# allkeys-lru -> Evict any key using approximated LRU. +# volatile-lfu -> Evict using approximated LFU, only keys with an expire set. +# allkeys-lfu -> Evict any key using approximated LFU. +# volatile-random -> Remove a random key having an expire set. +# allkeys-random -> Remove a random key, any key. +# volatile-ttl -> Remove the key with the nearest expire time (minor TTL) +# noeviction -> Don't evict anything, just return an error on write operations. +# +# LRU means Least Recently Used +# LFU means Least Frequently Used +# +# Both LRU, LFU and volatile-ttl are implemented using approximated +# randomized algorithms. +# +# Note: with any of the above policies, Redis will return an error on write +# operations, when there are no suitable keys for eviction. +# +# At the date of writing these commands are: set setnx setex append +# incr decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd +# sinter sinterstore sunion sunionstore sdiff sdiffstore zadd zincrby +# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby +# getset mset msetnx exec sort +# +# The default is: +# +# maxmemory-policy noeviction + +# LRU, LFU and minimal TTL algorithms are not precise algorithms but approximated +# algorithms (in order to save memory), so you can tune it for speed or +# accuracy. By default Redis will check five keys and pick the one that was +# used least recently, you can change the sample size using the following +# configuration directive. +# +# The default of 5 produces good enough results. 10 Approximates very closely +# true LRU but costs more CPU. 3 is faster but not very accurate. +# +# maxmemory-samples 5 + +# Starting from Redis 5, by default a replica will ignore its maxmemory setting +# (unless it is promoted to master after a failover or manually). It means +# that the eviction of keys will be just handled by the master, sending the +# DEL commands to the replica as keys evict in the master side. +# +# This behavior ensures that masters and replicas stay consistent, and is usually +# what you want, however if your replica is writable, or you want the replica +# to have a different memory setting, and you are sure all the writes performed +# to the replica are idempotent, then you may change this default (but be sure +# to understand what you are doing). +# +# Note that since the replica by default does not evict, it may end using more +# memory than the one set via maxmemory (there are certain buffers that may +# be larger on the replica, or data structures may sometimes take more memory +# and so forth). So make sure you monitor your replicas and make sure they +# have enough memory to never hit a real out-of-memory condition before the +# master hits the configured maxmemory setting. +# +# replica-ignore-maxmemory yes + +# Redis reclaims expired keys in two ways: upon access when those keys are +# found to be expired, and also in background, in what is called the +# "active expire key". The key space is slowly and interactively scanned +# looking for expired keys to reclaim, so that it is possible to free memory +# of keys that are expired and will never be accessed again in a short time. +# +# The default effort of the expire cycle will try to avoid having more than +# ten percent of expired keys still in memory, and will try to avoid consuming +# more than 25% of total memory and to add latency to the system. However +# it is possible to increase the expire "effort" that is normally set to +# "1", to a greater value, up to the value "10". At its maximum value the +# system will use more CPU, longer cycles (and technically may introduce +# more latency), and will tolerate less already expired keys still present +# in the system. It's a tradeoff between memory, CPU and latency. +# +# active-expire-effort 1 + +############################# LAZY FREEING #################################### + +# Redis has two primitives to delete keys. One is called DEL and is a blocking +# deletion of the object. It means that the server stops processing new commands +# in order to reclaim all the memory associated with an object in a synchronous +# way. If the key deleted is associated with a small object, the time needed +# in order to execute the DEL command is very small and comparable to most other +# O(1) or O(log_N) commands in Redis. However if the key is associated with an +# aggregated value containing millions of elements, the server can block for +# a long time (even seconds) in order to complete the operation. +# +# For the above reasons Redis also offers non blocking deletion primitives +# such as UNLINK (non blocking DEL) and the ASYNC option of FLUSHALL and +# FLUSHDB commands, in order to reclaim memory in background. Those commands +# are executed in constant time. Another thread will incrementally free the +# object in the background as fast as possible. +# +# DEL, UNLINK and ASYNC option of FLUSHALL and FLUSHDB are user-controlled. +# It's up to the design of the application to understand when it is a good +# idea to use one or the other. However the Redis server sometimes has to +# delete keys or flush the whole database as a side effect of other operations. +# Specifically Redis deletes objects independently of a user call in the +# following scenarios: +# +# 1) On eviction, because of the maxmemory and maxmemory policy configurations, +# in order to make room for new data, without going over the specified +# memory limit. +# 2) Because of expire: when a key with an associated time to live (see the +# EXPIRE command) must be deleted from memory. +# 3) Because of a side effect of a command that stores data on a key that may +# already exist. For example the RENAME command may delete the old key +# content when it is replaced with another one. Similarly SUNIONSTORE +# or SORT with STORE option may delete existing keys. The SET command +# itself removes any old content of the specified key in order to replace +# it with the specified string. +# 4) During replication, when a replica performs a full resynchronization with +# its master, the content of the whole database is removed in order to +# load the RDB file just transferred. +# +# In all the above cases the default is to delete objects in a blocking way, +# like if DEL was called. However you can configure each case specifically +# in order to instead release memory in a non-blocking way like if UNLINK +# was called, using the following configuration directives. + +lazyfree-lazy-eviction no +lazyfree-lazy-expire no +lazyfree-lazy-server-del no +replica-lazy-flush no + +# It is also possible, for the case when to replace the user code DEL calls +# with UNLINK calls is not easy, to modify the default behavior of the DEL +# command to act exactly like UNLINK, using the following configuration +# directive: + +lazyfree-lazy-user-del no + +################################ THREADED I/O ################################# + +# Redis is mostly single threaded, however there are certain threaded +# operations such as UNLINK, slow I/O accesses and other things that are +# performed on side threads. +# +# Now it is also possible to handle Redis clients socket reads and writes +# in different I/O threads. Since especially writing is so slow, normally +# Redis users use pipelining in order to speed up the Redis performances per +# core, and spawn multiple instances in order to scale more. Using I/O +# threads it is possible to easily speedup two times Redis without resorting +# to pipelining nor sharding of the instance. +# +# By default threading is disabled, we suggest enabling it only in machines +# that have at least 4 or more cores, leaving at least one spare core. +# Using more than 8 threads is unlikely to help much. We also recommend using +# threaded I/O only if you actually have performance problems, with Redis +# instances being able to use a quite big percentage of CPU time, otherwise +# there is no point in using this feature. +# +# So for instance if you have a four cores boxes, try to use 2 or 3 I/O +# threads, if you have a 8 cores, try to use 6 threads. In order to +# enable I/O threads use the following configuration directive: +# +# io-threads 4 +# +# Setting io-threads to 1 will just use the main thread as usual. +# When I/O threads are enabled, we only use threads for writes, that is +# to thread the write(2) syscall and transfer the client buffers to the +# socket. However it is also possible to enable threading of reads and +# protocol parsing using the following configuration directive, by setting +# it to yes: +# +# io-threads-do-reads no +# +# Usually threading reads doesn't help much. +# +# NOTE 1: This configuration directive cannot be changed at runtime via +# CONFIG SET. Aso this feature currently does not work when SSL is +# enabled. +# +# NOTE 2: If you want to test the Redis speedup using redis-benchmark, make +# sure you also run the benchmark itself in threaded mode, using the +# --threads option to match the number of Redis threads, otherwise you'll not +# be able to notice the improvements. + +############################ KERNEL OOM CONTROL ############################## + +# On Linux, it is possible to hint the kernel OOM killer on what processes +# should be killed first when out of memory. +# +# Enabling this feature makes Redis actively control the oom_score_adj value +# for all its processes, depending on their role. The default scores will +# attempt to have background child processes killed before all others, and +# replicas killed before masters. +# +# Redis supports three options: +# +# no: Don't make changes to oom-score-adj (default). +# yes: Alias to "relative" see below. +# absolute: Values in oom-score-adj-values are written as is to the kernel. +# relative: Values are used relative to the initial value of oom_score_adj when +# the server starts and are then clamped to a range of -1000 to 1000. +# Because typically the initial value is 0, they will often match the +# absolute values. +oom-score-adj no + +# When oom-score-adj is used, this directive controls the specific values used +# for master, replica and background child processes. Values range -2000 to +# 2000 (higher means more likely to be killed). +# +# Unprivileged processes (not root, and without CAP_SYS_RESOURCE capabilities) +# can freely increase their value, but not decrease it below its initial +# settings. This means that setting oom-score-adj to "relative" and setting the +# oom-score-adj-values to positive values will always succeed. +oom-score-adj-values 0 200 800 + +############################## APPEND ONLY MODE ############################### + +# By default Redis asynchronously dumps the dataset on disk. This mode is +# good enough in many applications, but an issue with the Redis process or +# a power outage may result into a few minutes of writes lost (depending on +# the configured save points). +# +# The Append Only File is an alternative persistence mode that provides +# much better durability. For instance using the default data fsync policy +# (see later in the config file) Redis can lose just one second of writes in a +# dramatic event like a server power outage, or a single write if something +# wrong with the Redis process itself happens, but the operating system is +# still running correctly. +# +# AOF and RDB persistence can be enabled at the same time without problems. +# If the AOF is enabled on startup Redis will load the AOF, that is the file +# with the better durability guarantees. +# +# Please check http://redis.io/topics/persistence for more information. + +appendonly no + +# The name of the append only file (default: "appendonly.aof") + +appendfilename "appendonly.aof" + +# The fsync() call tells the Operating System to actually write data on disk +# instead of waiting for more data in the output buffer. Some OS will really flush +# data on disk, some other OS will just try to do it ASAP. +# +# Redis supports three different modes: +# +# no: don't fsync, just let the OS flush the data when it wants. Faster. +# always: fsync after every write to the append only log. Slow, Safest. +# everysec: fsync only one time every second. Compromise. +# +# The default is "everysec", as that's usually the right compromise between +# speed and data safety. It's up to you to understand if you can relax this to +# "no" that will let the operating system flush the output buffer when +# it wants, for better performances (but if you can live with the idea of +# some data loss consider the default persistence mode that's snapshotting), +# or on the contrary, use "always" that's very slow but a bit safer than +# everysec. +# +# More details please check the following article: +# http://antirez.com/post/redis-persistence-demystified.html +# +# If unsure, use "everysec". + +# appendfsync always +appendfsync everysec +# appendfsync no + +# When the AOF fsync policy is set to always or everysec, and a background +# saving process (a background save or AOF log background rewriting) is +# performing a lot of I/O against the disk, in some Linux configurations +# Redis may block too long on the fsync() call. Note that there is no fix for +# this currently, as even performing fsync in a different thread will block +# our synchronous write(2) call. +# +# In order to mitigate this problem it's possible to use the following option +# that will prevent fsync() from being called in the main process while a +# BGSAVE or BGREWRITEAOF is in progress. +# +# This means that while another child is saving, the durability of Redis is +# the same as "appendfsync none". In practical terms, this means that it is +# possible to lose up to 30 seconds of log in the worst scenario (with the +# default Linux settings). +# +# If you have latency problems turn this to "yes". Otherwise leave it as +# "no" that is the safest pick from the point of view of durability. + +no-appendfsync-on-rewrite no + +# Automatic rewrite of the append only file. +# Redis is able to automatically rewrite the log file implicitly calling +# BGREWRITEAOF when the AOF log size grows by the specified percentage. +# +# This is how it works: Redis remembers the size of the AOF file after the +# latest rewrite (if no rewrite has happened since the restart, the size of +# the AOF at startup is used). +# +# This base size is compared to the current size. If the current size is +# bigger than the specified percentage, the rewrite is triggered. Also +# you need to specify a minimal size for the AOF file to be rewritten, this +# is useful to avoid rewriting the AOF file even if the percentage increase +# is reached but it is still pretty small. +# +# Specify a percentage of zero in order to disable the automatic AOF +# rewrite feature. + +auto-aof-rewrite-percentage 100 +auto-aof-rewrite-min-size 64mb + +# An AOF file may be found to be truncated at the end during the Redis +# startup process, when the AOF data gets loaded back into memory. +# This may happen when the system where Redis is running +# crashes, especially when an ext4 filesystem is mounted without the +# data=ordered option (however this can't happen when Redis itself +# crashes or aborts but the operating system still works correctly). +# +# Redis can either exit with an error when this happens, or load as much +# data as possible (the default now) and start if the AOF file is found +# to be truncated at the end. The following option controls this behavior. +# +# If aof-load-truncated is set to yes, a truncated AOF file is loaded and +# the Redis server starts emitting a log to inform the user of the event. +# Otherwise if the option is set to no, the server aborts with an error +# and refuses to start. When the option is set to no, the user requires +# to fix the AOF file using the "redis-check-aof" utility before to restart +# the server. +# +# Note that if the AOF file will be found to be corrupted in the middle +# the server will still exit with an error. This option only applies when +# Redis will try to read more data from the AOF file but not enough bytes +# will be found. +aof-load-truncated yes + +# When rewriting the AOF file, Redis is able to use an RDB preamble in the +# AOF file for faster rewrites and recoveries. When this option is turned +# on the rewritten AOF file is composed of two different stanzas: +# +# [RDB file][AOF tail] +# +# When loading, Redis recognizes that the AOF file starts with the "REDIS" +# string and loads the prefixed RDB file, then continues loading the AOF +# tail. +aof-use-rdb-preamble yes + +################################ LUA SCRIPTING ############################### + +# Max execution time of a Lua script in milliseconds. +# +# If the maximum execution time is reached Redis will log that a script is +# still in execution after the maximum allowed time and will start to +# reply to queries with an error. +# +# When a long running script exceeds the maximum execution time only the +# SCRIPT KILL and SHUTDOWN NOSAVE commands are available. The first can be +# used to stop a script that did not yet call any write commands. The second +# is the only way to shut down the server in the case a write command was +# already issued by the script but the user doesn't want to wait for the natural +# termination of the script. +# +# Set it to 0 or a negative value for unlimited execution without warnings. +lua-time-limit 5000 + +################################ REDIS CLUSTER ############################### + +# Normal Redis instances can't be part of a Redis Cluster; only nodes that are +# started as cluster nodes can. In order to start a Redis instance as a +# cluster node enable the cluster support uncommenting the following: +# +# cluster-enabled yes + +# Every cluster node has a cluster configuration file. This file is not +# intended to be edited by hand. It is created and updated by Redis nodes. +# Every Redis Cluster node requires a different cluster configuration file. +# Make sure that instances running in the same system do not have +# overlapping cluster configuration file names. +# +# cluster-config-file nodes-6379.conf + +# Cluster node timeout is the amount of milliseconds a node must be unreachable +# for it to be considered in failure state. +# Most other internal time limits are a multiple of the node timeout. +# +# cluster-node-timeout 15000 + +# A replica of a failing master will avoid to start a failover if its data +# looks too old. +# +# There is no simple way for a replica to actually have an exact measure of +# its "data age", so the following two checks are performed: +# +# 1) If there are multiple replicas able to failover, they exchange messages +# in order to try to give an advantage to the replica with the best +# replication offset (more data from the master processed). +# Replicas will try to get their rank by offset, and apply to the start +# of the failover a delay proportional to their rank. +# +# 2) Every single replica computes the time of the last interaction with +# its master. This can be the last ping or command received (if the master +# is still in the "connected" state), or the time that elapsed since the +# disconnection with the master (if the replication link is currently down). +# If the last interaction is too old, the replica will not try to failover +# at all. +# +# The point "2" can be tuned by user. Specifically a replica will not perform +# the failover if, since the last interaction with the master, the time +# elapsed is greater than: +# +# (node-timeout * cluster-replica-validity-factor) + repl-ping-replica-period +# +# So for example if node-timeout is 30 seconds, and the cluster-replica-validity-factor +# is 10, and assuming a default repl-ping-replica-period of 10 seconds, the +# replica will not try to failover if it was not able to talk with the master +# for longer than 310 seconds. +# +# A large cluster-replica-validity-factor may allow replicas with too old data to failover +# a master, while a too small value may prevent the cluster from being able to +# elect a replica at all. +# +# For maximum availability, it is possible to set the cluster-replica-validity-factor +# to a value of 0, which means, that replicas will always try to failover the +# master regardless of the last time they interacted with the master. +# (However they'll always try to apply a delay proportional to their +# offset rank). +# +# Zero is the only value able to guarantee that when all the partitions heal +# the cluster will always be able to continue. +# +# cluster-replica-validity-factor 10 + +# Cluster replicas are able to migrate to orphaned masters, that are masters +# that are left without working replicas. This improves the cluster ability +# to resist to failures as otherwise an orphaned master can't be failed over +# in case of failure if it has no working replicas. +# +# Replicas migrate to orphaned masters only if there are still at least a +# given number of other working replicas for their old master. This number +# is the "migration barrier". A migration barrier of 1 means that a replica +# will migrate only if there is at least 1 other working replica for its master +# and so forth. It usually reflects the number of replicas you want for every +# master in your cluster. +# +# Default is 1 (replicas migrate only if their masters remain with at least +# one replica). To disable migration just set it to a very large value. +# A value of 0 can be set but is useful only for debugging and dangerous +# in production. +# +# cluster-migration-barrier 1 + +# By default Redis Cluster nodes stop accepting queries if they detect there +# is at least a hash slot uncovered (no available node is serving it). +# This way if the cluster is partially down (for example a range of hash slots +# are no longer covered) all the cluster becomes, eventually, unavailable. +# It automatically returns available as soon as all the slots are covered again. +# +# However sometimes you want the subset of the cluster which is working, +# to continue to accept queries for the part of the key space that is still +# covered. In order to do so, just set the cluster-require-full-coverage +# option to no. +# +# cluster-require-full-coverage yes + +# This option, when set to yes, prevents replicas from trying to failover its +# master during master failures. However the master can still perform a +# manual failover, if forced to do so. +# +# This is useful in different scenarios, especially in the case of multiple +# data center operations, where we want one side to never be promoted if not +# in the case of a total DC failure. +# +# cluster-replica-no-failover no + +# This option, when set to yes, allows nodes to serve read traffic while the +# the cluster is in a down state, as long as it believes it owns the slots. +# +# This is useful for two cases. The first case is for when an application +# doesn't require consistency of data during node failures or network partitions. +# One example of this is a cache, where as long as the node has the data it +# should be able to serve it. +# +# The second use case is for configurations that don't meet the recommended +# three shards but want to enable cluster mode and scale later. A +# master outage in a 1 or 2 shard configuration causes a read/write outage to the +# entire cluster without this option set, with it set there is only a write outage. +# Without a quorum of masters, slot ownership will not change automatically. +# +# cluster-allow-reads-when-down no + +# In order to setup your cluster make sure to read the documentation +# available at http://redis.io web site. + +########################## CLUSTER DOCKER/NAT support ######################## + +# In certain deployments, Redis Cluster nodes address discovery fails, because +# addresses are NAT-ted or because ports are forwarded (the typical case is +# Docker and other containers). +# +# In order to make Redis Cluster working in such environments, a static +# configuration where each node knows its public address is needed. The +# following two options are used for this scope, and are: +# +# * cluster-announce-ip +# * cluster-announce-port +# * cluster-announce-bus-port +# +# Each instructs the node about its address, client port, and cluster message +# bus port. The information is then published in the header of the bus packets +# so that other nodes will be able to correctly map the address of the node +# publishing the information. +# +# If the above options are not used, the normal Redis Cluster auto-detection +# will be used instead. +# +# Note that when remapped, the bus port may not be at the fixed offset of +# clients port + 10000, so you can specify any port and bus-port depending +# on how they get remapped. If the bus-port is not set, a fixed offset of +# 10000 will be used as usual. +# +# Example: +# +# cluster-announce-ip 10.1.1.5 +# cluster-announce-port 6379 +# cluster-announce-bus-port 6380 + +################################## SLOW LOG ################################### + +# The Redis Slow Log is a system to log queries that exceeded a specified +# execution time. The execution time does not include the I/O operations +# like talking with the client, sending the reply and so forth, +# but just the time needed to actually execute the command (this is the only +# stage of command execution where the thread is blocked and can not serve +# other requests in the meantime). +# +# You can configure the slow log with two parameters: one tells Redis +# what is the execution time, in microseconds, to exceed in order for the +# command to get logged, and the other parameter is the length of the +# slow log. When a new command is logged the oldest one is removed from the +# queue of logged commands. + +# The following time is expressed in microseconds, so 1000000 is equivalent +# to one second. Note that a negative number disables the slow log, while +# a value of zero forces the logging of every command. +slowlog-log-slower-than 10000 + +# There is no limit to this length. Just be aware that it will consume memory. +# You can reclaim memory used by the slow log with SLOWLOG RESET. +slowlog-max-len 128 + +################################ LATENCY MONITOR ############################## + +# The Redis latency monitoring subsystem samples different operations +# at runtime in order to collect data related to possible sources of +# latency of a Redis instance. +# +# Via the LATENCY command this information is available to the user that can +# print graphs and obtain reports. +# +# The system only logs operations that were performed in a time equal or +# greater than the amount of milliseconds specified via the +# latency-monitor-threshold configuration directive. When its value is set +# to zero, the latency monitor is turned off. +# +# By default latency monitoring is disabled since it is mostly not needed +# if you don't have latency issues, and collecting data has a performance +# impact, that while very small, can be measured under big load. Latency +# monitoring can easily be enabled at runtime using the command +# "CONFIG SET latency-monitor-threshold " if needed. +latency-monitor-threshold 0 + +############################# EVENT NOTIFICATION ############################## + +# Redis can notify Pub/Sub clients about events happening in the key space. +# This feature is documented at http://redis.io/topics/notifications +# +# For instance if keyspace events notification is enabled, and a client +# performs a DEL operation on key "foo" stored in the Database 0, two +# messages will be published via Pub/Sub: +# +# PUBLISH __keyspace@0__:foo del +# PUBLISH __keyevent@0__:del foo +# +# It is possible to select the events that Redis will notify among a set +# of classes. Every class is identified by a single character: +# +# K Keyspace events, published with __keyspace@__ prefix. +# E Keyevent events, published with __keyevent@__ prefix. +# g Generic commands (non-type specific) like DEL, EXPIRE, RENAME, ... +# $ String commands +# l List commands +# s Set commands +# h Hash commands +# z Sorted set commands +# x Expired events (events generated every time a key expires) +# e Evicted events (events generated when a key is evicted for maxmemory) +# t Stream commands +# m Key-miss events (Note: It is not included in the 'A' class) +# A Alias for g$lshzxet, so that the "AKE" string means all the events +# (Except key-miss events which are excluded from 'A' due to their +# unique nature). +# +# The "notify-keyspace-events" takes as argument a string that is composed +# of zero or multiple characters. The empty string means that notifications +# are disabled. +# +# Example: to enable list and generic events, from the point of view of the +# event name, use: +# +# notify-keyspace-events Elg +# +# Example 2: to get the stream of the expired keys subscribing to channel +# name __keyevent@0__:expired use: +# +# notify-keyspace-events Ex +# +# By default all notifications are disabled because most users don't need +# this feature and the feature has some overhead. Note that if you don't +# specify at least one of K or E, no events will be delivered. +notify-keyspace-events "" + +############################### GOPHER SERVER ################################# + +# Redis contains an implementation of the Gopher protocol, as specified in +# the RFC 1436 (https://www.ietf.org/rfc/rfc1436.txt). +# +# The Gopher protocol was very popular in the late '90s. It is an alternative +# to the web, and the implementation both server and client side is so simple +# that the Redis server has just 100 lines of code in order to implement this +# support. +# +# What do you do with Gopher nowadays? Well Gopher never *really* died, and +# lately there is a movement in order for the Gopher more hierarchical content +# composed of just plain text documents to be resurrected. Some want a simpler +# internet, others believe that the mainstream internet became too much +# controlled, and it's cool to create an alternative space for people that +# want a bit of fresh air. +# +# Anyway for the 10nth birthday of the Redis, we gave it the Gopher protocol +# as a gift. +# +# --- HOW IT WORKS? --- +# +# The Redis Gopher support uses the inline protocol of Redis, and specifically +# two kind of inline requests that were anyway illegal: an empty request +# or any request that starts with "/" (there are no Redis commands starting +# with such a slash). Normal RESP2/RESP3 requests are completely out of the +# path of the Gopher protocol implementation and are served as usual as well. +# +# If you open a connection to Redis when Gopher is enabled and send it +# a string like "/foo", if there is a key named "/foo" it is served via the +# Gopher protocol. +# +# In order to create a real Gopher "hole" (the name of a Gopher site in Gopher +# talking), you likely need a script like the following: +# +# https://github.com/antirez/gopher2redis +# +# --- SECURITY WARNING --- +# +# If you plan to put Redis on the internet in a publicly accessible address +# to server Gopher pages MAKE SURE TO SET A PASSWORD to the instance. +# Once a password is set: +# +# 1. The Gopher server (when enabled, not by default) will still serve +# content via Gopher. +# 2. However other commands cannot be called before the client will +# authenticate. +# +# So use the 'requirepass' option to protect your instance. +# +# Note that Gopher is not currently supported when 'io-threads-do-reads' +# is enabled. +# +# To enable Gopher support, uncomment the following line and set the option +# from no (the default) to yes. +# +# gopher-enabled no + +############################### ADVANCED CONFIG ############################### + +# Hashes are encoded using a memory efficient data structure when they have a +# small number of entries, and the biggest entry does not exceed a given +# threshold. These thresholds can be configured using the following directives. +hash-max-ziplist-entries 512 +hash-max-ziplist-value 64 + +# Lists are also encoded in a special way to save a lot of space. +# The number of entries allowed per internal list node can be specified +# as a fixed maximum size or a maximum number of elements. +# For a fixed maximum size, use -5 through -1, meaning: +# -5: max size: 64 Kb <-- not recommended for normal workloads +# -4: max size: 32 Kb <-- not recommended +# -3: max size: 16 Kb <-- probably not recommended +# -2: max size: 8 Kb <-- good +# -1: max size: 4 Kb <-- good +# Positive numbers mean store up to _exactly_ that number of elements +# per list node. +# The highest performing option is usually -2 (8 Kb size) or -1 (4 Kb size), +# but if your use case is unique, adjust the settings as necessary. +list-max-ziplist-size -2 + +# Lists may also be compressed. +# Compress depth is the number of quicklist ziplist nodes from *each* side of +# the list to *exclude* from compression. The head and tail of the list +# are always uncompressed for fast push/pop operations. Settings are: +# 0: disable all list compression +# 1: depth 1 means "don't start compressing until after 1 node into the list, +# going from either the head or tail" +# So: [head]->node->node->...->node->[tail] +# [head], [tail] will always be uncompressed; inner nodes will compress. +# 2: [head]->[next]->node->node->...->node->[prev]->[tail] +# 2 here means: don't compress head or head->next or tail->prev or tail, +# but compress all nodes between them. +# 3: [head]->[next]->[next]->node->node->...->node->[prev]->[prev]->[tail] +# etc. +list-compress-depth 0 + +# Sets have a special encoding in just one case: when a set is composed +# of just strings that happen to be integers in radix 10 in the range +# of 64 bit signed integers. +# The following configuration setting sets the limit in the size of the +# set in order to use this special memory saving encoding. +set-max-intset-entries 512 + +# Similarly to hashes and lists, sorted sets are also specially encoded in +# order to save a lot of space. This encoding is only used when the length and +# elements of a sorted set are below the following limits: +zset-max-ziplist-entries 128 +zset-max-ziplist-value 64 + +# HyperLogLog sparse representation bytes limit. The limit includes the +# 16 bytes header. When an HyperLogLog using the sparse representation crosses +# this limit, it is converted into the dense representation. +# +# A value greater than 16000 is totally useless, since at that point the +# dense representation is more memory efficient. +# +# The suggested value is ~ 3000 in order to have the benefits of +# the space efficient encoding without slowing down too much PFADD, +# which is O(N) with the sparse encoding. The value can be raised to +# ~ 10000 when CPU is not a concern, but space is, and the data set is +# composed of many HyperLogLogs with cardinality in the 0 - 15000 range. +hll-sparse-max-bytes 3000 + +# Streams macro node max size / items. The stream data structure is a radix +# tree of big nodes that encode multiple items inside. Using this configuration +# it is possible to configure how big a single node can be in bytes, and the +# maximum number of items it may contain before switching to a new node when +# appending new stream entries. If any of the following settings are set to +# zero, the limit is ignored, so for instance it is possible to set just a +# max entires limit by setting max-bytes to 0 and max-entries to the desired +# value. +stream-node-max-bytes 4096 +stream-node-max-entries 100 + +# Active rehashing uses 1 millisecond every 100 milliseconds of CPU time in +# order to help rehashing the main Redis hash table (the one mapping top-level +# keys to values). The hash table implementation Redis uses (see dict.c) +# performs a lazy rehashing: the more operation you run into a hash table +# that is rehashing, the more rehashing "steps" are performed, so if the +# server is idle the rehashing is never complete and some more memory is used +# by the hash table. +# +# The default is to use this millisecond 10 times every second in order to +# actively rehash the main dictionaries, freeing memory when possible. +# +# If unsure: +# use "activerehashing no" if you have hard latency requirements and it is +# not a good thing in your environment that Redis can reply from time to time +# to queries with 2 milliseconds delay. +# +# use "activerehashing yes" if you don't have such hard requirements but +# want to free memory asap when possible. +activerehashing yes + +# The client output buffer limits can be used to force disconnection of clients +# that are not reading data from the server fast enough for some reason (a +# common reason is that a Pub/Sub client can't consume messages as fast as the +# publisher can produce them). +# +# The limit can be set differently for the three different classes of clients: +# +# normal -> normal clients including MONITOR clients +# replica -> replica clients +# pubsub -> clients subscribed to at least one pubsub channel or pattern +# +# The syntax of every client-output-buffer-limit directive is the following: +# +# client-output-buffer-limit +# +# A client is immediately disconnected once the hard limit is reached, or if +# the soft limit is reached and remains reached for the specified number of +# seconds (continuously). +# So for instance if the hard limit is 32 megabytes and the soft limit is +# 16 megabytes / 10 seconds, the client will get disconnected immediately +# if the size of the output buffers reach 32 megabytes, but will also get +# disconnected if the client reaches 16 megabytes and continuously overcomes +# the limit for 10 seconds. +# +# By default normal clients are not limited because they don't receive data +# without asking (in a push way), but just after a request, so only +# asynchronous clients may create a scenario where data is requested faster +# than it can read. +# +# Instead there is a default limit for pubsub and replica clients, since +# subscribers and replicas receive data in a push fashion. +# +# Both the hard or the soft limit can be disabled by setting them to zero. +client-output-buffer-limit normal 0 0 0 +client-output-buffer-limit replica 256mb 64mb 60 +client-output-buffer-limit pubsub 32mb 8mb 60 + +# Client query buffers accumulate new commands. They are limited to a fixed +# amount by default in order to avoid that a protocol desynchronization (for +# instance due to a bug in the client) will lead to unbound memory usage in +# the query buffer. However you can configure it here if you have very special +# needs, such us huge multi/exec requests or alike. +# +# client-query-buffer-limit 1gb + +# In the Redis protocol, bulk requests, that are, elements representing single +# strings, are normally limited to 512 mb. However you can change this limit +# here, but must be 1mb or greater +# +# proto-max-bulk-len 512mb + +# Redis calls an internal function to perform many background tasks, like +# closing connections of clients in timeout, purging expired keys that are +# never requested, and so forth. +# +# Not all tasks are performed with the same frequency, but Redis checks for +# tasks to perform according to the specified "hz" value. +# +# By default "hz" is set to 10. Raising the value will use more CPU when +# Redis is idle, but at the same time will make Redis more responsive when +# there are many keys expiring at the same time, and timeouts may be +# handled with more precision. +# +# The range is between 1 and 500, however a value over 100 is usually not +# a good idea. Most users should use the default of 10 and raise this up to +# 100 only in environments where very low latency is required. +hz 10 + +# Normally it is useful to have an HZ value which is proportional to the +# number of clients connected. This is useful in order, for instance, to +# avoid too many clients are processed for each background task invocation +# in order to avoid latency spikes. +# +# Since the default HZ value by default is conservatively set to 10, Redis +# offers, and enables by default, the ability to use an adaptive HZ value +# which will temporarily raise when there are many connected clients. +# +# When dynamic HZ is enabled, the actual configured HZ will be used +# as a baseline, but multiples of the configured HZ value will be actually +# used as needed once more clients are connected. In this way an idle +# instance will use very little CPU time while a busy instance will be +# more responsive. +dynamic-hz yes + +# When a child rewrites the AOF file, if the following option is enabled +# the file will be fsync-ed every 32 MB of data generated. This is useful +# in order to commit the file to the disk more incrementally and avoid +# big latency spikes. +aof-rewrite-incremental-fsync yes + +# When redis saves RDB file, if the following option is enabled +# the file will be fsync-ed every 32 MB of data generated. This is useful +# in order to commit the file to the disk more incrementally and avoid +# big latency spikes. +rdb-save-incremental-fsync yes + +# Redis LFU eviction (see maxmemory setting) can be tuned. However it is a good +# idea to start with the default settings and only change them after investigating +# how to improve the performances and how the keys LFU change over time, which +# is possible to inspect via the OBJECT FREQ command. +# +# There are two tunable parameters in the Redis LFU implementation: the +# counter logarithm factor and the counter decay time. It is important to +# understand what the two parameters mean before changing them. +# +# The LFU counter is just 8 bits per key, it's maximum value is 255, so Redis +# uses a probabilistic increment with logarithmic behavior. Given the value +# of the old counter, when a key is accessed, the counter is incremented in +# this way: +# +# 1. A random number R between 0 and 1 is extracted. +# 2. A probability P is calculated as 1/(old_value*lfu_log_factor+1). +# 3. The counter is incremented only if R < P. +# +# The default lfu-log-factor is 10. This is a table of how the frequency +# counter changes with a different number of accesses with different +# logarithmic factors: +# +# +--------+------------+------------+------------+------------+------------+ +# | factor | 100 hits | 1000 hits | 100K hits | 1M hits | 10M hits | +# +--------+------------+------------+------------+------------+------------+ +# | 0 | 104 | 255 | 255 | 255 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# | 1 | 18 | 49 | 255 | 255 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# | 10 | 10 | 18 | 142 | 255 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# | 100 | 8 | 11 | 49 | 143 | 255 | +# +--------+------------+------------+------------+------------+------------+ +# +# NOTE: The above table was obtained by running the following commands: +# +# redis-benchmark -n 1000000 incr foo +# redis-cli object freq foo +# +# NOTE 2: The counter initial value is 5 in order to give new objects a chance +# to accumulate hits. +# +# The counter decay time is the time, in minutes, that must elapse in order +# for the key counter to be divided by two (or decremented if it has a value +# less <= 10). +# +# The default value for the lfu-decay-time is 1. A special value of 0 means to +# decay the counter every time it happens to be scanned. +# +# lfu-log-factor 10 +# lfu-decay-time 1 + +########################### ACTIVE DEFRAGMENTATION ####################### +# +# What is active defragmentation? +# ------------------------------- +# +# Active (online) defragmentation allows a Redis server to compact the +# spaces left between small allocations and deallocations of data in memory, +# thus allowing to reclaim back memory. +# +# Fragmentation is a natural process that happens with every allocator (but +# less so with Jemalloc, fortunately) and certain workloads. Normally a server +# restart is needed in order to lower the fragmentation, or at least to flush +# away all the data and create it again. However thanks to this feature +# implemented by Oran Agra for Redis 4.0 this process can happen at runtime +# in a "hot" way, while the server is running. +# +# Basically when the fragmentation is over a certain level (see the +# configuration options below) Redis will start to create new copies of the +# values in contiguous memory regions by exploiting certain specific Jemalloc +# features (in order to understand if an allocation is causing fragmentation +# and to allocate it in a better place), and at the same time, will release the +# old copies of the data. This process, repeated incrementally for all the keys +# will cause the fragmentation to drop back to normal values. +# +# Important things to understand: +# +# 1. This feature is disabled by default, and only works if you compiled Redis +# to use the copy of Jemalloc we ship with the source code of Redis. +# This is the default with Linux builds. +# +# 2. You never need to enable this feature if you don't have fragmentation +# issues. +# +# 3. Once you experience fragmentation, you can enable this feature when +# needed with the command "CONFIG SET activedefrag yes". +# +# The configuration parameters are able to fine tune the behavior of the +# defragmentation process. If you are not sure about what they mean it is +# a good idea to leave the defaults untouched. + +# Enabled active defragmentation +# activedefrag no + +# Minimum amount of fragmentation waste to start active defrag +# active-defrag-ignore-bytes 100mb + +# Minimum percentage of fragmentation to start active defrag +# active-defrag-threshold-lower 10 + +# Maximum percentage of fragmentation at which we use maximum effort +# active-defrag-threshold-upper 100 + +# Minimal effort for defrag in CPU percentage, to be used when the lower +# threshold is reached +# active-defrag-cycle-min 1 + +# Maximal effort for defrag in CPU percentage, to be used when the upper +# threshold is reached +# active-defrag-cycle-max 25 + +# Maximum number of set/hash/zset/list fields that will be processed from +# the main dictionary scan +# active-defrag-max-scan-fields 1000 + +# Jemalloc background thread for purging will be enabled by default +jemalloc-bg-thread yes + +# It is possible to pin different threads and processes of Redis to specific +# CPUs in your system, in order to maximize the performances of the server. +# This is useful both in order to pin different Redis threads in different +# CPUs, but also in order to make sure that multiple Redis instances running +# in the same host will be pinned to different CPUs. +# +# Normally you can do this using the "taskset" command, however it is also +# possible to this via Redis configuration directly, both in Linux and FreeBSD. +# +# You can pin the server/IO threads, bio threads, aof rewrite child process, and +# the bgsave child process. The syntax to specify the cpu list is the same as +# the taskset command: +# +# Set redis server/io threads to cpu affinity 0,2,4,6: +# server_cpulist 0-7:2 +# +# Set bio threads to cpu affinity 1,3: +# bio_cpulist 1,3 +# +# Set aof rewrite child process to cpu affinity 8,9,10,11: +# aof_rewrite_cpulist 8-11 +# +# Set bgsave child process to cpu affinity 1,10,11 +# bgsave_cpulist 1,10-11 + +# In some cases redis will emit warnings and even refuse to start if it detects +# that the system is in bad state, it is possible to suppress these warnings +# by setting the following config which takes a space delimited list of warnings +# to suppress +# +# ignore-warnings ARM64-COW-BUG diff --git a/dockge/redis_6_2_16/docker-compose.yml b/dockge/redis_6_2_16/docker-compose.yml new file mode 100644 index 00000000..95805faa --- /dev/null +++ b/dockge/redis_6_2_16/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + 1panel-network: + external: true +services: + redis: + command: "sh -c ' if [ -z \"${REDIS_ROOT_PASSWORD}\" ]; then\n redis-server /etc/redis/redis.conf\n\ + else\n redis-server /etc/redis/redis.conf --requirepass ${REDIS_ROOT_PASSWORD}\n\ + fi'\n" + container_name: redis + image: redis:6.2.16-alpine + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:6379 + restart: always + volumes: + - ${REDIS_ROOT_PATH}/data:/data + - ${REDIS_ROOT_PATH}/config/redis.conf:/etc/redis/redis.conf + - ${REDIS_ROOT_PATH}/logs:/logs diff --git a/dockge/redis_6_2_16/envs/default.env b/dockge/redis_6_2_16/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/redis_6_2_16/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/redis_6_2_16/envs/global.env b/dockge/redis_6_2_16/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/redis_6_2_16/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/rsshub/.env b/dockge/rsshub/.env new file mode 100644 index 00000000..172f9b1e --- /dev/null +++ b/dockge/rsshub/.env @@ -0,0 +1,30 @@ +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=1200 + +# 访问密钥 +ACCESS_KEY= + +# 缓存类型 [必填] +CACHE_TYPE=memory + +# Redis URL 地址 (仅当缓存类型为 Redis 时) +REDIS_URL=redis://127.0.0.1:6379/ + +# 最大缓存数量 (仅当缓存类型为内存时) +MEMORY_MAX=256 + +# 路由缓存过期时间 (秒) [必填] +CACHE_EXPIRE=300 + +# 内容缓存过期时间 (秒) [必填] +CACHE_CONTENT_EXPIRE=300 + +# 代理 URL 地址 +PROXY_URI= + +# 代理认证 (仅支持 Basic 认证) +PROXY_AUTH= + +# 代理 URL 正则表达式 +PROXY_URL_REGEX=.* + diff --git a/dockge/rsshub/docker-compose.yml b/dockge/rsshub/docker-compose.yml new file mode 100644 index 00000000..4793aedb --- /dev/null +++ b/dockge/rsshub/docker-compose.yml @@ -0,0 +1,67 @@ +networks: + 1panel-network: + external: true +services: + browserless: + container_name: browserless-rsshub + expose: + - 3000 + healthcheck: + interval: 30s + retries: 3 + test: + - CMD + - curl + - -f + - http://localhost:3000/pressure + timeout: 10s + image: browserless/chrome + labels: + createdBy: Apps + networks: + - 1panel-network + restart: always + ulimits: + core: + hard: 0 + soft: 0 + rsshub: + container_name: rsshub-rsshub + depends_on: + - browserless + env_file: + - ./envs/global.env + - .env + environment: + - NODE_ENV=production + - PUPPETEER_WS_ENDPOINT=ws://browserless:3000 + - PORT=1200 + - LISTEN_INADDR_ANY=1 + - REQUEST_RETRY=2 + - REQUEST_TIMEOUT=3000 + - ALLOW_ORIGIN=* + - CACHE_CONTENT_EXPIRE=360 + - CACHE_EXPIRE=300 + - MEMORY_MAX=256 + - LOGGER_LEVEL=info + - NO_LOGFILES=false + - DISALLOW_ROBOT=true + - ENABLE_CLUSTER=false + - NODE_NAME=rsshub + healthcheck: + interval: 30s + retries: 3 + test: + - CMD + - curl + - -f + - http://localhost:1200/healthz?key=${ACCESS_KEY} + timeout: 10s + image: diygod/rsshub:2024-11-28 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:1200 + restart: always diff --git a/dockge/rsshub/envs/default.env b/dockge/rsshub/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/rsshub/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/rsshub/envs/global.env b/dockge/rsshub/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/rsshub/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/sentinel/.env b/dockge/sentinel/.env new file mode 100644 index 00000000..e1ac1ba7 --- /dev/null +++ b/dockge/sentinel/.env @@ -0,0 +1,18 @@ +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8858 + +# API 端口 [必填] +PANEL_APP_PORT_API=8719 + +# 控制台 用户名 [必填] +SENTINEL_DASHBOARD_AUTH_USERNAME=sentinel + +# 控制台 密码 [必填] +SENTINEL_DASHBOARD_AUTH_PASSWORD=sentinel + +# 网络模式 [必填] +NETWORK_MODE=host + +# 启用 Feign +SENTINEL_DASHBOARD_FEIGN_ENABLED=false + diff --git a/dockge/sentinel/docker-compose.yml b/dockge/sentinel/docker-compose.yml new file mode 100644 index 00000000..9013ef18 --- /dev/null +++ b/dockge/sentinel/docker-compose.yml @@ -0,0 +1,26 @@ +networks: + 1panel-network: + external: true +services: + sentinel-dashboard: + container_name: sentinel + entrypoint: + - java + - -Djava.security.egd=file:/dev/./urandom + - -Dserver.port=8858 + - -Dcsp.sentinel.api.port=8719 + - -Dcsp.sentinel.dashboard.server=localhost:8858 + - -Dproject.name=sentinel-dashboard + - -Dsentinel.dashboard.auth.username=${SENTINEL_DASHBOARD_AUTH_USERNAME} + - -Dsentinel.dashboard.auth.password=${SENTINEL_DASHBOARD_AUTH_PASSWORD} + - -Dfeign.sentinel.enabled=${SENTINEL_DASHBOARD_FEIGN_ENABLED} + - -jar + - app.jar + image: bladex/sentinel-dashboard:1.8.8 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:8858 + - ${COMMUNICATION_PORT}:8719 + restart: always diff --git a/dockge/sentinel/envs/default.env b/dockge/sentinel/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/sentinel/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/sentinel/envs/global.env b/dockge/sentinel/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/sentinel/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/shiori/.env b/dockge/shiori/.env new file mode 100644 index 00000000..ca21d40a --- /dev/null +++ b/dockge/shiori/.env @@ -0,0 +1,18 @@ +# 数据库服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化路径 [必填] +SHIORI_ROOT_PATH=/home/shiori + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 服务模式 [必填] +SHIORI_HTTP_SERVE_WEB_UI=True + +# Web UI 密钥 [必填] +SHIORI_HTTP_SECRET_KEY= + +# 数据库链接 URL [必填] +SHIORI_DATABASE_URL= + diff --git a/dockge/shiori/docker-compose.yml b/dockge/shiori/docker-compose.yml new file mode 100644 index 00000000..d300340b --- /dev/null +++ b/dockge/shiori/docker-compose.yml @@ -0,0 +1,33 @@ +networks: + 1panel-network: + external: true +services: + shiori: + container_name: shiori + env_file: + - ./envs/global.env + - .env + environment: + - SHIORI_DIR=/srv/shiori + - SHIORI_DEVELOPMENT=False + - SHIORI_HTTP_ENABLED=True + - SHIORI_HTTP_PORT=8080 + - SHIORI_HTTP_ROOT_PATH=/ + - SHIORI_HTTP_ACCESS_LOG=True + - SHIORI_HTTP_BODY_LIMIT=1024 + - SHIORI_HTTP_READ_TIMEOUT=10s + - SHIORI_HTTP_WRITE_TIMEOUT=10s + - SHIORI_HTTP_IDLE_TIMEOUT=10s + - SHIORI_HTTP_DISABLE_KEEP_ALIVE=true + - SHIORI_HTTP_DISABLE_PARSE_MULTIPART_FORM=true + image: ghcr.io/go-shiori/shiori:v1.7.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8080 + restart: always + volumes: + - ${SHIORI_ROOT_PATH}/dev-data:/srv/shiori + - ${SHIORI_ROOT_PATH}/data:/src/shiori diff --git a/dockge/shiori/envs/default.env b/dockge/shiori/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/shiori/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/shiori/envs/global.env b/dockge/shiori/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/shiori/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/siyuan/.env b/dockge/siyuan/.env new file mode 100644 index 00000000..ba92d378 --- /dev/null +++ b/dockge/siyuan/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +SIYUAN_ROOT_PATH=/home/siyuan + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=6806 + +# 授权码 [必填] +AuthCode= + diff --git a/dockge/siyuan/docker-compose.yml b/dockge/siyuan/docker-compose.yml new file mode 100644 index 00000000..2aece297 --- /dev/null +++ b/dockge/siyuan/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + siyuan: + command: + - --workspace=/siyuan/workspace/ + - --accessAuthCode=${AuthCode} + container_name: siyuan + env_file: + - ./envs/global.env + environment: + - RUN_IN_CONTAINER=true + image: b3log/siyuan:v3.1.13 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:6806 + restart: always + user: 1000:1000 + volumes: + - ${SIYUAN_ROOT_PATH}/workspace:/siyuan/workspace diff --git a/dockge/siyuan/envs/default.env b/dockge/siyuan/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/siyuan/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/siyuan/envs/global.env b/dockge/siyuan/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/siyuan/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/slink/.env b/dockge/slink/.env new file mode 100644 index 00000000..1d6c2e5d --- /dev/null +++ b/dockge/slink/.env @@ -0,0 +1,42 @@ +# 数据持久化路径 [必填] +SLINK_ROOT_PATH=/home/slink + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# 主机域名 [必填] +ORIGIN=http://127.0.0.1:3000 + +# 用户上传图片是否需要批准 [必填] +USER_APPROVAL_REQUIRED=true + +# 允许未认证用户访问公共路由 [必填] +USER_ALLOW_UNAUTHENTICATED_ACCESS=true + +# 是否移除图片的 EXIF 元数据 [必填] +IMAGE_STRIP_EXIF_METADATA=true + +# 图片上传最大限制 (最大 50M) [必填] +IMAGE_MAX_SIZE=15M + +# 用户密码最小长度 [必填] +USER_PASSWORD_MIN_LENGTH=8 + +# 用户密码要求 [必填] +USER_PASSWORD_REQUIREMENTS=15 + +# 存储策略 [必填] +STORAGE_PROVIDER=local + +# SMB 服务器地址 +SMB_HOST= + +# SMB 用户名 +SMB_USERNAME= + +# SMB 密码 +SMB_PASSWORD= + +# SMB 共享路径 +SMB_SHARE= + diff --git a/dockge/slink/docker-compose.yml b/dockge/slink/docker-compose.yml new file mode 100644 index 00000000..b3b0c97e --- /dev/null +++ b/dockge/slink/docker-compose.yml @@ -0,0 +1,25 @@ +networks: + 1panel-network: + external: true +services: + slink: + container_name: slink + env_file: + - ./envs/global.env + - .env + environment: + - USER_PASSWORD_MIN_LENGTH=8 + - USER_PASSWORD_REQUIREMENTS=15 + - IMAGE_MAX_SIZE=15M + - STORAGE_PROVIDER=local + image: anirdev/slink:v1.2.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + restart: always + volumes: + - ${SLINK_ROOT_PATH}/data:/app/var/data + - ${SLINK_ROOT_PATH}/images:/app/slink/images diff --git a/dockge/slink/envs/default.env b/dockge/slink/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/slink/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/slink/envs/global.env b/dockge/slink/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/slink/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/sonarr/.env b/dockge/sonarr/.env new file mode 100644 index 00000000..44600fad --- /dev/null +++ b/dockge/sonarr/.env @@ -0,0 +1,15 @@ +# 数据持久化路径 [必填] +SONARR_ROOT_PATH=/home/sonarr + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8989 + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/dockge/sonarr/docker-compose.yml b/dockge/sonarr/docker-compose.yml new file mode 100644 index 00000000..d12f582e --- /dev/null +++ b/dockge/sonarr/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + sonarr: + container_name: sonarr + env_file: + - ./envs/global.env + - .env + environment: + - PUID=1000 + - PGID=1000 + - UMASK=022 + - TZ=Asia/Shanghai + image: linuxserver/sonarr:4.0.11 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8989 + restart: always + volumes: + - ${SONARR_ROOT_PATH}/config:/config + - ${SONARR_ROOT_PATH}/tv:/tv + - ${SONARR_ROOT_PATH}/downloads:/downloads + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/sonarr/envs/default.env b/dockge/sonarr/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/sonarr/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/sonarr/envs/global.env b/dockge/sonarr/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/sonarr/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/speedtest-tracker-sqlite/.env b/dockge/speedtest-tracker-sqlite/.env new file mode 100644 index 00000000..bfc89fb2 --- /dev/null +++ b/dockge/speedtest-tracker-sqlite/.env @@ -0,0 +1,57 @@ +# 数据持久化 根路径 [必填] +SPEEDTEST_TRACKER_ROOT_PATH=/home/speedtest-tracker + +# 网络模式 [必填] +NETWORK_MODE=host + +# Web 服务端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 应用密钥 (官网获取) [必填] +APP_KEY=base64:f0Ivk1nHd3QwXtR55WKC4fcc7QjrxxTnkiB02ipdl60= + +# 应用名称 [必填] +APP_NAME=SpeedTest Tracker + +# 应用访问地址 [必填] +APP_URL=http://127.0.0.1:8080 + +# 测试结果保留天数 [必填] +PRUNE_RESULTS_OLDER_THAN=0 + +# 测试计划任务 +SPEEDTEST_SCHEDULE=0 */6 * * * + +# 指定测试服务器 +SPEEDTEST_SERVERS= + +# 邮件 协议 [必填] +MAIL_MAILER=smtp + +# 邮件 主机地址 [必填] +MAIL_HOST=smtp.gmail.com + +# 邮件 主机端口 [必填] +MAIL_PORT=465 + +# 邮件 鉴权用户名 +MAIL_USERNAME= + +# 邮件 鉴权密码 +MAIL_PASSWORD= + +# 邮件 发件地址 +MAIL_FROM_ADDRESS= + +# 邮件 发件名称 [必填] +MAIL_FROM_NAME=Speedtest Tracker + +# 邮件 加密方式 [必填] +MAIL_ENCRYPTION=tls + +# Telegram 机器人令牌 +TELEGRAM_BOT_TOKEN= + +# 缓存 驱动 [必填] +CACHE_DRIVER=file + diff --git a/dockge/speedtest-tracker-sqlite/docker-compose.yml b/dockge/speedtest-tracker-sqlite/docker-compose.yml new file mode 100644 index 00000000..c3d0f52d --- /dev/null +++ b/dockge/speedtest-tracker-sqlite/docker-compose.yml @@ -0,0 +1,25 @@ +networks: + 1panel-network: + external: true +services: + speedtest-tracker: + container_name: speedtest-tracker-sqlite + env_file: + - ./envs/global.env + - .env + environment: + - PUID=1000 + - PGID=1000 + - TZ=Asia/Shanghai + - DISPLAY_TIMEZONE=Asia/Shanghai + - DB_CONNECTION=sqlite + - MAIL_MAILER=sqlite + image: linuxserver/speedtest-tracker:0.24.3 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${SPEEDTEST_TRACKER_ROOT_PATH}/config:/config diff --git a/dockge/speedtest-tracker-sqlite/envs/default.env b/dockge/speedtest-tracker-sqlite/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/speedtest-tracker-sqlite/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/speedtest-tracker-sqlite/envs/global.env b/dockge/speedtest-tracker-sqlite/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/speedtest-tracker-sqlite/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/speedtest-tracker/.env b/dockge/speedtest-tracker/.env new file mode 100644 index 00000000..b20e1f15 --- /dev/null +++ b/dockge/speedtest-tracker/.env @@ -0,0 +1,78 @@ +# 数据库 服务 (前置检查) [必填] +PANEL_DB_TYPE=postgresql + +# 数据持久化 根路径 [必填] +SPEEDTEST_TRACKER_ROOT_PATH=/home/speedtest-tracker + +# 网络模式 [必填] +NETWORK_MODE=host + +# Web 服务端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 应用密钥 (官网获取) [必填] +APP_KEY=base64:f0Ivk1nHd3QwXtR55WKC4fcc7QjrxxTnkiB02ipdl60= + +# 应用名称 [必填] +APP_NAME=SpeedTest Tracker + +# 应用访问地址 [必填] +APP_URL=http://127.0.0.1:8080 + +# 数据库 类型 [必填] +DB_CONNECTION=postgres + +# 数据库 主机地址 [必填] +DB_HOST=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 用户名 [必填] +DB_USERNAME=speedtest-tracker + +# 数据库 密码 [必填] +DB_PASSWORD= + +# 数据库 名称 [必填] +DB_DATABASE=speedtest-tracker + +# 测试结果保留天数 [必填] +PRUNE_RESULTS_OLDER_THAN=0 + +# 测试计划任务 +SPEEDTEST_SCHEDULE=0 */6 * * * + +# 指定测试服务器 +SPEEDTEST_SERVERS= + +# 邮件 协议 [必填] +MAIL_MAILER=smtp + +# 邮件 主机地址 [必填] +MAIL_HOST=smtp.gmail.com + +# 邮件 主机端口 [必填] +MAIL_PORT=465 + +# 邮件 鉴权用户名 +MAIL_USERNAME= + +# 邮件 鉴权密码 +MAIL_PASSWORD= + +# 邮件 发件地址 +MAIL_FROM_ADDRESS= + +# 邮件 发件名称 [必填] +MAIL_FROM_NAME=Speedtest Tracker + +# 邮件 加密方式 [必填] +MAIL_ENCRYPTION=tls + +# Telegram 机器人令牌 +TELEGRAM_BOT_TOKEN= + +# 缓存 驱动 [必填] +CACHE_DRIVER=file + diff --git a/dockge/speedtest-tracker/docker-compose.yml b/dockge/speedtest-tracker/docker-compose.yml new file mode 100644 index 00000000..8b5283b7 --- /dev/null +++ b/dockge/speedtest-tracker/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true +services: + speedtest-tracker: + container_name: speedtest-tracker + env_file: + - ./envs/global.env + - .env + environment: + - PUID=1000 + - PGID=1000 + - TZ=Asia/Shanghai + - DISPLAY_TIMEZONE=Asia/Shanghai + image: linuxserver/speedtest-tracker:0.24.3 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${SPEEDTEST_TRACKER_ROOT_PATH}/config:/config diff --git a/dockge/speedtest-tracker/envs/default.env b/dockge/speedtest-tracker/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/speedtest-tracker/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/speedtest-tracker/envs/global.env b/dockge/speedtest-tracker/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/speedtest-tracker/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/speedtest/.env b/dockge/speedtest/.env new file mode 100644 index 00000000..450c3948 --- /dev/null +++ b/dockge/speedtest/.env @@ -0,0 +1,33 @@ +# 数据持久化路径 [必填] +SPEED_TEST_ROOT_PATH=/home/speedtest + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2283 + +# 网页标题 [必填] +TITLE=LibreSpeed + +# 启用遥测 [必填] +TELEMETRY=false + +# 访问密码 (开启遥测) [必填] +PASSWORD= + +# ID 混淆 (开启遥测) [必填] +ENABLE_ID_OBFUSCATION=false + +# 隐藏 IP 地址 (开启遥测) [必填] +REDACT_IP_ADDRESSES=false + +# 邮箱地址 (开启遥测) +EMAIL= + +# ipinfo.io 的 API 密钥 (开启遥测) +IPINFO_APIKEY= + +# 禁用 ipinfo.io (开启遥测) [必填] +DISABLE_IPINFO=false + +# 距离单位 (km/mi) +DISTANCE=km + diff --git a/dockge/speedtest/docker-compose.yml b/dockge/speedtest/docker-compose.yml new file mode 100644 index 00000000..a0272b64 --- /dev/null +++ b/dockge/speedtest/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + speedtest: + container_name: speedtest + env_file: + - ./envs/global.env + - .env + environment: + - MODE=standalone + - WEBPORT=80 + image: ghcr.io/librespeed/speedtest:5.4.1 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + volumes: + - ${SPEED_TEST_ROOT_PATH}/database:/database diff --git a/dockge/speedtest/envs/default.env b/dockge/speedtest/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/speedtest/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/speedtest/envs/global.env b/dockge/speedtest/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/speedtest/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/stream-rec-backend/.env b/dockge/stream-rec-backend/.env new file mode 100644 index 00000000..0362943f --- /dev/null +++ b/dockge/stream-rec-backend/.env @@ -0,0 +1,12 @@ +# 数据持久化路径 [必填] +STREAM_REC_ROOT_PATH=/home/stream-rec + +# API 端口 [必填] +PANEL_APP_PORT_HTTP=12555 + +# 登录密码 (初始化) [必填] +LOGIN_SECRET=stream-rec + +# 网络代理 +HTTP_PROXY= + diff --git a/dockge/stream-rec-backend/docker-compose.yml b/dockge/stream-rec-backend/docker-compose.yml new file mode 100644 index 00000000..0d6d2566 --- /dev/null +++ b/dockge/stream-rec-backend/docker-compose.yml @@ -0,0 +1,24 @@ +networks: + 1panel-network: + external: true +services: + stream-rec-backend: + container_name: stream-rec-backend + env_file: + - ./envs/global.env + - .env + environment: + - LOG_LEVEL=INFO + - DB_PATH=/opt/records + - DOWNLOAD_PATH=/download + image: streamrec/stream-rec:v0.7.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:12555 + restart: always + volumes: + - ${STREAM_REC_ROOT_PATH}/records:/opt/records + - ${STREAM_REC_ROOT_PATH}/download:/download diff --git a/dockge/stream-rec-backend/envs/default.env b/dockge/stream-rec-backend/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/stream-rec-backend/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/stream-rec-backend/envs/global.env b/dockge/stream-rec-backend/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/stream-rec-backend/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/stream-rec-frontend/.env b/dockge/stream-rec-frontend/.env new file mode 100644 index 00000000..30b031d3 --- /dev/null +++ b/dockge/stream-rec-frontend/.env @@ -0,0 +1,18 @@ +# 数据持久化路径 [必填] +STREAM_REC_ROOT_PATH=/home/stream-rec + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=15275 + +# NextAuth 加密密钥 [必填] +NEXTAUTH_SECRET= + +# API 地址 [必填] +API_URL=http://stream-rec-backend:12555/api + +# WebSocket API 地址 [必填] +WS_API_URL=ws://stream-rec-backend:12555/live/update + +# NextAuth 服务器地址 [必填] +NEXTAUTH_URL=http://localhost:15275/ + diff --git a/dockge/stream-rec-frontend/docker-compose.yml b/dockge/stream-rec-frontend/docker-compose.yml new file mode 100644 index 00000000..1f4d4028 --- /dev/null +++ b/dockge/stream-rec-frontend/docker-compose.yml @@ -0,0 +1,17 @@ +networks: + 1panel-network: + external: true +services: + stream-rec-frontend: + container_name: stream-rec-frontend + env_file: + - ./envs/global.env + - .env + image: streamrec/stream-rec-front:v0.7.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:15275 + restart: always diff --git a/dockge/stream-rec-frontend/envs/default.env b/dockge/stream-rec-frontend/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/stream-rec-frontend/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/stream-rec-frontend/envs/global.env b/dockge/stream-rec-frontend/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/stream-rec-frontend/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/stream-rec/.env b/dockge/stream-rec/.env new file mode 100644 index 00000000..0a67f96c --- /dev/null +++ b/dockge/stream-rec/.env @@ -0,0 +1,27 @@ +# 数据持久化路径 [必填] +STREAM_REC_ROOT_PATH=/home/stream-rec + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=15275 + +# API 端口 [必填] +PANEL_APP_PORT_API=12555 + +# 登录密码 (初始化) [必填] +LOGIN_SECRET=stream-rec + +# NextAuth 加密密钥 [必填] +NEXTAUTH_SECRET= + +# NextAuth 服务器地址 [必填] +NEXTAUTH_URL=http://localhost:15275/ + +# API 地址 [必填] +API_URL=http://stream-rec-backend:12555/api + +# WebSocket API 地址 [必填] +WS_API_URL=ws://stream-rec-backend:12555/live/update + +# 网络代理 +HTTP_PROXY= + diff --git a/dockge/stream-rec/docker-compose.yml b/dockge/stream-rec/docker-compose.yml new file mode 100644 index 00000000..44a2db86 --- /dev/null +++ b/dockge/stream-rec/docker-compose.yml @@ -0,0 +1,39 @@ +networks: + 1panel-network: + external: true +services: + stream-rec-backend: + container_name: stream-rec-backend + env_file: + - ./envs/global.env + - .env + environment: + - LOG_LEVEL=INFO + - DB_PATH=/opt/records + - DOWNLOAD_PATH=/download + image: streamrec/stream-rec:v0.7.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_API}:12555 + restart: always + volumes: + - ${STREAM_REC_ROOT_PATH}/records:/opt/records + - ${STREAM_REC_ROOT_PATH}/download:/download + stream-rec-frontend: + container_name: stream-rec + depends_on: + - stream-rec-backend + env_file: + - ./envs/global.env + - .env + image: streamrec/stream-rec-front:v0.7.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:15275 + restart: always diff --git a/dockge/stream-rec/envs/default.env b/dockge/stream-rec/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/stream-rec/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/stream-rec/envs/global.env b/dockge/stream-rec/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/stream-rec/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/sun-panel/.env b/dockge/sun-panel/.env new file mode 100644 index 00000000..206987bc --- /dev/null +++ b/dockge/sun-panel/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +SUN_PANEL_ROOT_PATH=/home/sun-panel + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=3002 + diff --git a/dockge/sun-panel/docker-compose.yml b/dockge/sun-panel/docker-compose.yml new file mode 100644 index 00000000..85604478 --- /dev/null +++ b/dockge/sun-panel/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + sun-panel: + container_name: sun-panel + env_file: + - ./envs/global.env + - .env + image: hslr/sun-panel:1.6.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3002 + restart: always + volumes: + - ${SUN_PANEL_ROOT_PATH}/conf:/app/conf + - ${SUN_PANEL_ROOT_PATH}/database:/app/database + - ${SUN_PANEL_ROOT_PATH}/uploads:/app/uploads + - /var/run/docker.sock:/var/run/docker.sock diff --git a/dockge/sun-panel/envs/default.env b/dockge/sun-panel/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/sun-panel/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/sun-panel/envs/global.env b/dockge/sun-panel/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/sun-panel/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/synapse-admin/.env b/dockge/synapse-admin/.env new file mode 100644 index 00000000..3f99c497 --- /dev/null +++ b/dockge/synapse-admin/.env @@ -0,0 +1,3 @@ +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8080 + diff --git a/dockge/synapse-admin/docker-compose.yml b/dockge/synapse-admin/docker-compose.yml new file mode 100644 index 00000000..e074f2e9 --- /dev/null +++ b/dockge/synapse-admin/docker-compose.yml @@ -0,0 +1,17 @@ +networks: + 1panel-network: + external: true +services: + synapse-admin: + container_name: synapse-admin + env_file: + - ./envs/global.env + - .env + image: awesometechnologies/synapse-admin:0.10.3 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always diff --git a/dockge/synapse-admin/envs/default.env b/dockge/synapse-admin/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/synapse-admin/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/synapse-admin/envs/global.env b/dockge/synapse-admin/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/synapse-admin/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/synapse/.env b/dockge/synapse/.env new file mode 100644 index 00000000..1b19bb63 --- /dev/null +++ b/dockge/synapse/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +SYNAPSE_ROOT_PATH=/home/synapse + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8008 + +# 服务域名 [必填] +SYNAPSE_SERVER_NAME=matrix.example.com + diff --git a/dockge/synapse/docker-compose.yml b/dockge/synapse/docker-compose.yml new file mode 100644 index 00000000..80bee0a7 --- /dev/null +++ b/dockge/synapse/docker-compose.yml @@ -0,0 +1,39 @@ +networks: + 1panel-network: + external: true +services: + synapse: + container_name: synapse + depends_on: + - synapse-init + env_file: + - ./envs/global.env + - .env + image: matrixdotorg/synapse:v1.120.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8008 + restart: always + volumes: + - ${SYNAPSE_ROOT_PATH}/data:/data + synapse-init: + container_name: init-synapse + entrypoint: + - /start.py + - generate + env_file: + - ./envs/global.env + - .env + environment: + - SYNAPSE_REPORT_STATS=no + - SYNAPSE_NO_TLS=true + - SYNAPSE_HTTP_PORT=8008 + image: matrixdotorg/synapse:v1.120.0 + networks: + - 1panel-network + restart: false + volumes: + - ${SYNAPSE_ROOT_PATH}/data:/data diff --git a/dockge/synapse/envs/default.env b/dockge/synapse/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/synapse/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/synapse/envs/global.env b/dockge/synapse/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/synapse/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/tangsengdaodao/.env b/dockge/tangsengdaodao/.env new file mode 100644 index 00000000..f23fb55b --- /dev/null +++ b/dockge/tangsengdaodao/.env @@ -0,0 +1,81 @@ +# MySQL 服务 (前置检查) [必填] +PANEL_DB_TYPE=mysql + +# Redis 服务 (前置检查) [必填] +PANEL_REDIS_TYPE=redis + +# 数据持久化路径 [必填] +TANGSENGDAODAO_ROOT_PATH=/home/tangsengdaodao + +# TCP 通讯端口 [必填] +PANEL_APP_PORT_WK_TCP=5100 + +# WebSocket 通讯端口 [必填] +PANEL_APP_PORT_WK_WS=5200 + +# 悟空IM 后台监控端口 [必填] +PANEL_APP_PORT_WK_WEB_SERVER=5300 + +# 唐僧叨叨 API 端口 [必填] +PANEL_APP_PORT_TS_APP_HTTP=8090 + +# 唐僧叨叨 WEB端口 [必填] +PANEL_APP_PORT_TS_APP_WEB=80 + +# 唐僧叨叨 后台管理端口 [必填] +PANEL_APP_PORT_HTTP=80 + +# 外部访问IP [必填] +WK_EXTERNAL_IP= + +# 超级管理员 账户 [必填] +TS_ADMIN=admin + +# 超级管理员 密码 [必填] +TS_ADMINPWD=tsdd@123456 + +# 默认注册验证码 [必填] +TS_SMSCODE=123456 + +# 数据库 主机 [必填] +DB_HOST=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=3306 + +# 数据库 用户名 [必填] +DB_USERNAME=tsdd + +# 数据库 密码 [必填] +DB_PASSWORD=tsdd + +# 数据库 名称 [必填] +DB_NAME=tsdd + +# Redis 主机 [必填] +REDIS_HOST=127.0.0.1 + +# Redis 端口 [必填] +REDIS_PORT=6379 + +# Redis 连接密码 +REDIS_PASSWORD= + +# 默认头像提供地址 [必填] +TS_AVATAR_DEFAULTBASEURL=https://api.multiavatar.com/{avatar}.png + +# 应用名称 [必填] +TS_APPNAME=唐僧叨叨 + +# 欢迎消息 [必填] +TS_WELCOMEMESSAGE=欢迎使用{{appName}} + +# 手机号搜索功能 [必填] +TS_PHONESEARCHOFF=true + +# 在线状态功能 [必填] +TS_ONLINESTATUSON=true + +# 自动升级超级群组临界值 [必填] +TS_GROUPUPGRADEWHENMEMBERCOUNT=1000 + diff --git a/dockge/tangsengdaodao/docker-compose.yml b/dockge/tangsengdaodao/docker-compose.yml new file mode 100644 index 00000000..fea60edb --- /dev/null +++ b/dockge/tangsengdaodao/docker-compose.yml @@ -0,0 +1,93 @@ +networks: + 1panel-network: + external: true +services: + tsdd-manager: + container_name: tangsengdaodao-manager + env_file: + - ./envs/global.env + - .env + environment: + - API_URL=http://${WK_EXTERNAL_IP}:${PANEL_APP_PORT_TS_APP_HTTP}/ + image: registry.cn-shanghai.aliyuncs.com/wukongim/tangsengdaodaomanager:latest + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always + tsdd-server: + command: api + container_name: tangsengdaodao-server + depends_on: + - tsdd-wukongim + env_file: + - ./envs/global.env + - .env + environment: + - TS_MODE=release + - TS_WUKONGIM_APIURL=http://tsdd-wukongim:5001 + - TS_DB_MYSQLADDR=${DB_USERNAME}:${DB_PASSWORD}@tcp(${DB_HOST}:${DB_PORT})/${DB_NAME}?charset=utf8mb4&parseTime=true&loc=Local + - TS_DB_REDISADDR=${REDIS_HOST}:${REDIS_PORT} + - TS_DB_REDISPASS=${REDIS_PASSWORD} + - TS_EXTERNAL_IP=${WK_EXTERNAL_IP} + - TS_FILESERVICE=minio + - TS_MINIO_URL=http://${MINIO_HOST}:${MINIO_PORT} + - TS_MINIO_ACCESSKEYID=${MINIO_USERNAME} + - TS_MINIO_SECRETACCESSKEY=${MINIO_PASSWORD} + healthcheck: + interval: 10s + retries: 3 + test: wget -q -Y off -O /dev/null http://localhost:8090/v1/ping > /dev/null + 2>&1 + timeout: 10s + image: registry.cn-shanghai.aliyuncs.com/wukongim/tangsengdaodaoserver:v1.5 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_TS_APP_HTTP}:8090 + restart: always + volumes: + - ${TANGSENGDAODAO_ROOT_PATH}/tsdd:/home/tsdddata + tsdd-web: + container_name: tangsengdaodao-web + env_file: + - ./envs/global.env + - .env + environment: + - API_URL=http://${WK_EXTERNAL_IP}:${PANEL_APP_PORT_TS_APP_HTTP}/ + image: registry.cn-shanghai.aliyuncs.com/wukongim/tangsengdaodaoweb:latest + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_TS_APP_WEB}:80 + restart: always + tsdd-wukongim: + container_name: tangsengdaodao + env_file: + - ./envs/global.env + - .env + environment: + - WK_MODE=release + - WK_CONVERSATION_ON=true + - WK_WEBHOOK_GRPCADDR=tsdd-server:6979 + - WK_DATASOURCE_ADDR=http://tsdd-server:8090/v1/datasource + - WK_DATASOURCE_CHANNELINFOON=true + - WK_TOKENAUTHON=true + image: registry.cn-shanghai.aliyuncs.com/wukongim/wukongim:v1.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_WK_TCP}:5100 + - ${PANEL_APP_PORT_WK_WS}:5200 + - ${PANEL_APP_PORT_WK_WEB_SERVER}:5300 + restart: always + volumes: + - ${TANGSENGDAODAO_ROOT_PATH}/wukongim:/root/wukongim diff --git a/dockge/tangsengdaodao/envs/default.env b/dockge/tangsengdaodao/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/tangsengdaodao/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/tangsengdaodao/envs/global.env b/dockge/tangsengdaodao/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/tangsengdaodao/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/teemii/.env b/dockge/teemii/.env new file mode 100644 index 00000000..9d039f3a --- /dev/null +++ b/dockge/teemii/.env @@ -0,0 +1,9 @@ +# 数据持久化路径 [必填] +TEEMII_ROOT_PATH=/home/teemii + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8080 + +# 网站标题 [必填] +VITE_APP_TITLE=Teemii + diff --git a/dockge/teemii/docker-compose.yml b/dockge/teemii/docker-compose.yml new file mode 100644 index 00000000..02a7fcc9 --- /dev/null +++ b/dockge/teemii/docker-compose.yml @@ -0,0 +1,35 @@ +networks: + 1panel-network: + external: true +services: + teemii-backend: + container_name: backend-teemii + env_file: + - ./envs/global.env + - .env + environment: + - EXPRESS_PORT=3000 + - SOCKET_IO_PORT=1555 + image: dokkaner/teemii-backend:0.8.2 + labels: + createdBy: Apps + networks: + - 1panel-network + restart: always + volumes: + - ${TEEMII_ROOT_PATH}/data:/data + teemii-frontend: + container_name: frontend-teemii + env_file: + - ./envs/global.env + - .env + environment: + - VITE_APP_PORT=80 + image: dokkaner/teemii-frontend:0.8.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:80 + restart: always diff --git a/dockge/teemii/envs/default.env b/dockge/teemii/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/teemii/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/teemii/envs/global.env b/dockge/teemii/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/teemii/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/telegram-bot-api/.env b/dockge/telegram-bot-api/.env new file mode 100644 index 00000000..6b9745e3 --- /dev/null +++ b/dockge/telegram-bot-api/.env @@ -0,0 +1,18 @@ +# 数据持久化路径 [必填] +TELEGRAM_BOT_API_ROOT_PATH=/home/telegram-bot-api + +# API 端口 [必填] +PANEL_APP_PORT_HTTP=8082 + +# API 端口 (HTTPS) [必填] +PANEL_APP_PORT_HTTPS=8081 + +# Telegram Bot 应用 ID [必填] +TELEGRAM_API_ID= + +# Telegram Bot 应用 Hash [必填] +TELEGRAM_API_HASH= + +# 网络代理 +TELEGRAM_PROXY= + diff --git a/dockge/telegram-bot-api/docker-compose.yml b/dockge/telegram-bot-api/docker-compose.yml new file mode 100644 index 00000000..2b69c1ec --- /dev/null +++ b/dockge/telegram-bot-api/docker-compose.yml @@ -0,0 +1,28 @@ +networks: + 1panel-network: + external: true +services: + telegram-bot-api: + container_name: telegram-bot-api + env_file: + - ./envs/global.env + - .env + environment: + - TELEGRAM_STAT=1 + - TELEGRAM_LOCAL=1 + - TELEGRAM_VERBOSITY=1 + - TELEGRAM_MAX_WEBHOOK_CONNECTIONS=100000 + - TELEGRAM_LOG_FILE=/var/log/telegram-bot-api/telegram-bot-api.log + - TELEGRAM_MAX_CONNECTIONS=1024 + image: aiogram/telegram-bot-api:8.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTPS}:8081 + - ${PANEL_APP_PORT_HTTP}:8082 + restart: always + volumes: + - ${TELEGRAM_BOT_API_ROOT_PATH}/data:/var/lib/telegram-bot-api + - ${TELEGRAM_BOT_API_ROOT_PATH}/logs:/var/log/telegram-bot-api diff --git a/dockge/telegram-bot-api/envs/default.env b/dockge/telegram-bot-api/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/telegram-bot-api/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/telegram-bot-api/envs/global.env b/dockge/telegram-bot-api/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/telegram-bot-api/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/traccar/.env b/dockge/traccar/.env new file mode 100644 index 00000000..e95cbeff --- /dev/null +++ b/dockge/traccar/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +TRACCAR_ROOT_PATH=/home/traccar + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8082 + diff --git a/dockge/traccar/conf/traccar.xml b/dockge/traccar/conf/traccar.xml new file mode 100644 index 00000000..2b451830 --- /dev/null +++ b/dockge/traccar/conf/traccar.xml @@ -0,0 +1,12 @@ + + + + + + + org.h2.Driver + jdbc:h2:./data/database + sa + + + diff --git a/dockge/traccar/docker-compose.yml b/dockge/traccar/docker-compose.yml new file mode 100644 index 00000000..2d26b9f0 --- /dev/null +++ b/dockge/traccar/docker-compose.yml @@ -0,0 +1,21 @@ +networks: + traccar-network: + driver: bridge +services: + traccar: + container_name: traccar + env_file: + - ./envs/global.env + - .env + hostname: traccar + image: traccar/traccar:6.5 + labels: + createdBy: Apps + networks: + - traccar-network + ports: + - ${PANEL_APP_PORT_HTTP}:8082 + restart: always + volumes: + - ${TRACCAR_ROOT_PATH}/logs:/opt/traccar/logs:rw + - ${TRACCAR_ROOT_PATH}/traccar.xml:/opt/traccar/conf/traccar.xml:ro diff --git a/dockge/traccar/envs/default.env b/dockge/traccar/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/traccar/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/traccar/envs/global.env b/dockge/traccar/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/traccar/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/transmission/.env b/dockge/transmission/.env new file mode 100644 index 00000000..6a24d084 --- /dev/null +++ b/dockge/transmission/.env @@ -0,0 +1,36 @@ +# 网络模式 [必填] +NETWORK_MODE=host + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=9091 + +# Torrenting 端口 [必填] +PANEL_APP_PORT_TORRENTING=51413 + +# 数据持久化路径 [必填] +TRANSMISSION_ROOT_PATH=/home/transmission + +# 用户名 [必填] +USER=admin + +# 密码 [必填] +PASS= + +# 第三方 UI 文件夹 +TRANSMISSION_WEB_HOME= + +# IP 白名单 +WHITELIST= + +# 主机白名单 +HOST_WHITELIST= + +# 自定义挂载目录 1 +CUSTOM_MOUNT_DIRECTORY_1= + +# 自定义挂载目录 2 +CUSTOM_MOUNT_DIRECTORY_2= + +# 自定义挂载目录 3 +CUSTOM_MOUNT_DIRECTORY_3= + diff --git a/dockge/transmission/docker-compose.yml b/dockge/transmission/docker-compose.yml new file mode 100644 index 00000000..36ab4b7c --- /dev/null +++ b/dockge/transmission/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true +services: + transmission: + container_name: transmission + env_file: + - ./envs/global.env + - .env + environment: + - PUID=0 + - PGID=0 + - UMASK=022 + - PEERPORT= ${PANEL_APP_PORT_TORRENTING} + image: linuxserver/transmission:4.0.6 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:9091 + - ${PANEL_APP_PORT_TORRENTING} + - ${PANEL_APP_PORT_TORRENTING}/udp + restart: always + volumes: + - ${TRANSMISSION_ROOT_PATH}/config:/config + - ${TRANSMISSION_ROOT_PATH}/downloads:/downloads + - ${TRANSMISSION_ROOT_PATH}/watch:/watch + - ${CUSTOM_MOUNT_DIRECTORY_1:-./default_mount_1}:${CUSTOM_MOUNT_DIRECTORY_1:-/default_mount_1} + - ${CUSTOM_MOUNT_DIRECTORY_2:-./default_mount_2}:${CUSTOM_MOUNT_DIRECTORY_2:-/default_mount_2} + - ${CUSTOM_MOUNT_DIRECTORY_3:-./default_mount_3}:${CUSTOM_MOUNT_DIRECTORY_3:-/default_mount_3} diff --git a/dockge/transmission/envs/default.env b/dockge/transmission/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/transmission/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/transmission/envs/global.env b/dockge/transmission/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/transmission/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/umami-mysql/.env b/dockge/umami-mysql/.env new file mode 100644 index 00000000..eb5cbfa4 --- /dev/null +++ b/dockge/umami-mysql/.env @@ -0,0 +1,36 @@ +# MySQL 服务 (前置检查) [必填] +PANEL_DB_TYPE=mysql + +# 数据持久化路径 [必填] +UMAMI_ROOT_PATH=/home/umami + +# 连接端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# 应用密钥 +APP_SECRET= + +# 基础路径 [必填] +BASE_PATH=/ + +# 允许的 frame 地址 +ALLOWED_FRAME_URLS= + +# 禁用机器人检测 [必填] +DISABLE_BOT_CHECK=0 + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=3306 + +# 数据库 用户名 [必填] +DB_USERNAME=umami + +# 数据库 密码 [必填] +DB_PASSWORD= + +# 数据库 名称 [必填] +DB_DATABASE_NAME=umami + diff --git a/dockge/umami-mysql/docker-compose.yml b/dockge/umami-mysql/docker-compose.yml new file mode 100644 index 00000000..2bac4d26 --- /dev/null +++ b/dockge/umami-mysql/docker-compose.yml @@ -0,0 +1,23 @@ +networks: + 1panel-network: + external: true +services: + umami-mysql: + container_name: umami-mysql + env_file: + - ./envs/global.env + - .env + environment: + - DISABLE_TELEMETRY = 1 + - REMOVE_TRAILING_SLASH = 1 + - DATABASE_TYPE=mysql + - DATABASE_URL=mysql://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOSTNAME}:${DB_PORT}/${DB_DATABASE_NAME} + image: umamisoftware/umami:mysql-v2.14.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + restart: always +version: '3.8' diff --git a/dockge/umami-mysql/envs/default.env b/dockge/umami-mysql/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/umami-mysql/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/umami-mysql/envs/global.env b/dockge/umami-mysql/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/umami-mysql/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/umami/.env b/dockge/umami/.env new file mode 100644 index 00000000..4cb51bb1 --- /dev/null +++ b/dockge/umami/.env @@ -0,0 +1,36 @@ +# Postgres 服务 (前置检查) [必填] +PANEL_POSTGRES_TYPE=postgresql + +# 数据持久化路径 [必填] +UMAMI_ROOT_PATH=/home/umami + +# 连接端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# 应用密钥 +APP_SECRET= + +# 基础路径 [必填] +BASE_PATH=/ + +# 允许的 frame 地址 +ALLOWED_FRAME_URLS= + +# 禁用机器人检测 [必填] +DISABLE_BOT_CHECK=0 + +# 数据库 主机地址 [必填] +DB_HOSTNAME=127.0.0.1 + +# 数据库 端口 [必填] +DB_PORT=5432 + +# 数据库 用户名 [必填] +DB_USERNAME=umami + +# 数据库 密码 [必填] +DB_PASSWORD= + +# 数据库 名称 [必填] +DB_DATABASE_NAME=umami + diff --git a/dockge/umami/docker-compose.yml b/dockge/umami/docker-compose.yml new file mode 100644 index 00000000..1546e29e --- /dev/null +++ b/dockge/umami/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + umami: + container_name: umami + env_file: + - ./envs/global.env + - .env + environment: + - DISABLE_TELEMETRY = 1 + - REMOVE_TRAILING_SLASH = 1 + - DATABASE_TYPE=postgresql + - DATABASE_URL=postgresql://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOSTNAME}:${DB_PORT}/${DB_DATABASE_NAME} + image: umamisoftware/umami:postgresql-v2.14.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3000 + restart: always diff --git a/dockge/umami/envs/default.env b/dockge/umami/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/umami/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/umami/envs/global.env b/dockge/umami/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/umami/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/uptime-kuma/.env b/dockge/uptime-kuma/.env new file mode 100644 index 00000000..32a291fc --- /dev/null +++ b/dockge/uptime-kuma/.env @@ -0,0 +1,6 @@ +# 数据持久化路径 [必填] +UPTIME_KUMA_ROOT_PATH=/home/uptime-kuma + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3001 + diff --git a/dockge/uptime-kuma/docker-compose.yml b/dockge/uptime-kuma/docker-compose.yml new file mode 100644 index 00000000..0c3c36f4 --- /dev/null +++ b/dockge/uptime-kuma/docker-compose.yml @@ -0,0 +1,20 @@ +networks: + 1panel-network: + external: true +services: + uptime-kuma: + container_name: uptime-kuma + env_file: + - ./envs/global.env + - .env + image: louislam/uptime-kuma:2.0.0-beta.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3001 + restart: always + volumes: + - ${UPTIME_KUMA_ROOT_PATH}/data:/app/data + - /var/run/docker.sock:/var/run/docker.sock diff --git a/dockge/uptime-kuma/envs/default.env b/dockge/uptime-kuma/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/uptime-kuma/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/uptime-kuma/envs/global.env b/dockge/uptime-kuma/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/uptime-kuma/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/uptime-kuma_1_23_15/.env b/dockge/uptime-kuma_1_23_15/.env new file mode 100644 index 00000000..5fa74c15 --- /dev/null +++ b/dockge/uptime-kuma_1_23_15/.env @@ -0,0 +1,12 @@ +# 数据持久化路径 [必填] +UPTIME_KUMA_ROOT_PATH=/home/uptime-kuma + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3001 + +# Cloudflared 隧道令牌 +UPTIME_KUMA_CLOUDFLARED_TOKEN= + +# 禁用 Frame SameOrigin [必填] +UPTIME_KUMA_DISABLE_FRAME_SAMEORIGIN=false + diff --git a/dockge/uptime-kuma_1_23_15/docker-compose.yml b/dockge/uptime-kuma_1_23_15/docker-compose.yml new file mode 100644 index 00000000..f425a24b --- /dev/null +++ b/dockge/uptime-kuma_1_23_15/docker-compose.yml @@ -0,0 +1,29 @@ +networks: + 1panel-network: + external: true +services: + uptime-kuma: + container_name: uptime-kuma + env_file: + - ./envs/global.env + - .env + environment: + - PUID=0 + - PGID=0 + - UPTIME_KUMA_PORT=3001 + - UPTIME_KUMA_HOST=0.0.0.0 + - DATA_DIR=/app/data + - NODE_TLS_REJECT_UNAUTHORIZED=0 + - UPTIME_KUMA_ALLOW_ALL_CHROME_EXEC=0 + - UPTIME_KUMA_WS_ORIGIN_CHECK=cors-like + image: louislam/uptime-kuma:1.23.15 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:3001 + restart: always + volumes: + - ${UPTIME_KUMA_ROOT_PATH}/data:/app/data + - /var/run/docker.sock:/var/run/docker.sock diff --git a/dockge/uptime-kuma_1_23_15/envs/default.env b/dockge/uptime-kuma_1_23_15/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/uptime-kuma_1_23_15/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/uptime-kuma_1_23_15/envs/global.env b/dockge/uptime-kuma_1_23_15/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/uptime-kuma_1_23_15/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/watchyourlan/.env b/dockge/watchyourlan/.env new file mode 100644 index 00000000..7049202d --- /dev/null +++ b/dockge/watchyourlan/.env @@ -0,0 +1,33 @@ +# 数据持久化路径 [必填] +WATCHYOURLAN_ROOT_PATH=/home/watchyourlan + +# 访问端口 [必填] +PANEL_APP_PORT_HTTP=8840 + +# 主题 [必填] +THEME=sand + +# 颜色 [必填] +COLOR=dark + +# 通知地址 +SHOUTRRR_URL= + +# 监听网卡 (多个用逗号分隔) [必填] +IFACES=enp2s0 + +# 超时时间 (秒) [必填] +TIMEOUT=120 + +# 历史记录保留失效 (小时) [必填] +TRIM_HIST=48 + +# 历史记录存储方式 [必填] +HIST_IN_DB=false + +# 数据存储方式 [必填] +USE_DB=sqlite + +# PostgreSQL 连接地址 +PG_CONNECT= + diff --git a/dockge/watchyourlan/docker-compose.yml b/dockge/watchyourlan/docker-compose.yml new file mode 100644 index 00000000..1ca46ab4 --- /dev/null +++ b/dockge/watchyourlan/docker-compose.yml @@ -0,0 +1,22 @@ +networks: + 1panel-network: + external: true +services: + watchyourlan: + container_name: watchyourlan + env_file: + - ./envs/global.env + - .env + environment: + - HOST=0.0.0.0 + - PORT=8840 + - LOG_LEVEL=info + image: aceberg/watchyourlan:2.0.4 + labels: + createdBy: Apps + network_mode: host + ports: + - ${PANEL_APP_PORT_HTTP}:8840 + restart: always + volumes: + - ${WATCHYOURLAN_ROOT_PATH}/data:/data/WatchYourLAN diff --git a/dockge/watchyourlan/envs/default.env b/dockge/watchyourlan/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/watchyourlan/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/watchyourlan/envs/global.env b/dockge/watchyourlan/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/watchyourlan/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/windows/.env b/dockge/windows/.env new file mode 100644 index 00000000..1000ce10 --- /dev/null +++ b/dockge/windows/.env @@ -0,0 +1,39 @@ +# Windows 存储目录 [必填] +WINDOWS_STORAGE_ROOT_PATH=/home/windows + +# Windows 网上邻居共享目录 [必填] +WINDOWS_SHARE_ROOT_PATH=/home/windows + +# Windows OEM 目录 [必填] +WINDOWS_OEM_ROOT_PATH=/home/windows + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8006 + +# Windows 远程桌面 端口 [必填] +PANEL_APP_PORT_REMOTE=3389 + +# Windows 版本 [必填] +VERSION=win11 + +# 用户名 [必填] +USERNAME=Administrator + +# 密码 [必填] +PASSWORD= + +# 安装模式选择 [必填] +MANUAL=N + +# 内存大小 [必填] +RAM_SIZE=8G + +# 硬盘大小 [必填] +DISK_SIZE=64GB + +# CPU 核心数 [必填] +CPU_CORES=4 + +# Windows 语言 [必填] +LANGUAGE=CN + diff --git a/dockge/windows/docker-compose.yml b/dockge/windows/docker-compose.yml new file mode 100644 index 00000000..bc7a5090 --- /dev/null +++ b/dockge/windows/docker-compose.yml @@ -0,0 +1,33 @@ +networks: + 1panel-network: + external: true +services: + windows: + cap_add: + - NET_ADMIN + container_name: windows + devices: + - /dev/kvm:/dev/kvm + - /dev/dri:/dev/dri + env_file: + - ./envs/global.env + - .env + environment: + - REGION=en-US + - KEYBOARD=en-US + - VERSION=${VERSION} + image: dockurr/windows:4.05 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8006 + - ${PANEL_APP_PORT_REMOTE}:3389/tcp + - ${PANEL_APP_PORT_REMOTE}:3389/udp + restart: always + stop_grace_period: 2m + volumes: + - ${WINDOWS_STORAGE_ROOT_PATH}/storage:/storage + - ${WINDOWS_SHARE_ROOT_PATH}/share:/data + - ${WINDOWS_OEM_ROOT_PATH}/oem:/oem diff --git a/dockge/windows/envs/default.env b/dockge/windows/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/windows/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/windows/envs/global.env b/dockge/windows/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/windows/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/wiseflow/.env b/dockge/wiseflow/.env new file mode 100644 index 00000000..4a32b2ef --- /dev/null +++ b/dockge/wiseflow/.env @@ -0,0 +1,27 @@ +# 数据持久化路径 [必填] +WISEFLOW_ROOT_PATH=/home/wiseflow + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=8090 + +# 后端服务端口 [必填] +PANEL_APP_PORT_BACKEND=8077 + +# LLM API 地址 [必填] +LLM_API_BASE=https://api.siliconflow.cn/v1 + +# LLM API 密钥 +LLM_API_KEY= + +# PB数据库 账户密码 +PB_API_AUTH=test@example.com|1234567890 + +# 信息提炼与标签匹配任务模型 [必填] +GET_INFO_MODEL=zhipuai/glm4-9B-chat + +# 近似信息合并改写任务模型 [必填] +REWRITE_MODEL=alibaba/Qwen2-7B-Instruct + +# 网页解析模型 [必填] +HTML_PARSE_MODEL=alibaba/Qwen2-7B-Instruct + diff --git a/dockge/wiseflow/docker-compose.yml b/dockge/wiseflow/docker-compose.yml new file mode 100644 index 00000000..716217a9 --- /dev/null +++ b/dockge/wiseflow/docker-compose.yml @@ -0,0 +1,28 @@ +networks: + 1panel-network: + external: true +services: + wiseflow: + container_name: wiseflow + env_file: + - ./envs/global.env + - .env + environment: + - TZ=Asia/Shanghai + - LANG=zh_CN.UTF-8 + - LC_ALL=zh_CN.UTF-8 + - WS_LOG=verbose + image: qyg2297248353/wiseflow:v0.3.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:8090 + - ${PANEL_APP_PORT_BACKEND}:8077 + restart: always + stdin_open: true + tty: true + volumes: + - ${WISEFLOW_ROOT_PATH}/pb_data:/app/pb/pb_data + - ${WISEFLOW_ROOT_PATH}/data:/app/works_data diff --git a/dockge/wiseflow/envs/default.env b/dockge/wiseflow/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/wiseflow/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/wiseflow/envs/global.env b/dockge/wiseflow/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/wiseflow/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/wukongim/.env b/dockge/wukongim/.env new file mode 100644 index 00000000..abeb62e9 --- /dev/null +++ b/dockge/wukongim/.env @@ -0,0 +1,21 @@ +# 数据持久化路径 [必填] +WUKONGIM_ROOT_PATH=/home/wukongim + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=5300 + +# API 端口 [必填] +PANEL_APP_PORT_WK_API=5001 + +# TCP端口 [必填] +PANEL_APP_PORT_WK_TCP=5100 + +# WebSocket 端口 [必填] +PANEL_APP_PORT_WK_WS=5200 + +# 悟空IM演示端口 [必填] +PANEL_APP_PORT_WK_DEMO_SERVER=5172 + +# 服务器IP [必填] +WK_EXTERNAL_IP=127.0.0.1 + diff --git a/dockge/wukongim/docker-compose.yml b/dockge/wukongim/docker-compose.yml new file mode 100644 index 00000000..3f501295 --- /dev/null +++ b/dockge/wukongim/docker-compose.yml @@ -0,0 +1,25 @@ +networks: + 1panel-network: + external: true +services: + wukongim: + container_name: wukongim + env_file: + - ./envs/global.env + - .env + environment: + - WK_MODE=release + image: wukongim/wukongim:v1.2.6 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:5300 + - ${PANEL_APP_PORT_WK_API}:5001 + - ${PANEL_APP_PORT_WK_TCP}:5100 + - ${PANEL_APP_PORT_WK_WS}:5200 + - ${PANEL_APP_PORT_WK_DEMO_SERVER}:5172 + restart: always + volumes: + - ${WUKONGIM_ROOT_PATH}/wukongim:/root/wukongim diff --git a/dockge/wukongim/envs/default.env b/dockge/wukongim/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/wukongim/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/wukongim/envs/global.env b/dockge/wukongim/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/wukongim/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/xunlei-cnk3x/.env b/dockge/xunlei-cnk3x/.env new file mode 100644 index 00000000..a23098d6 --- /dev/null +++ b/dockge/xunlei-cnk3x/.env @@ -0,0 +1,12 @@ +# 数据持久化路径 [必填] +XUNLEI_ROOT_PATH=/home/xunlei + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=2345 + +# Web访问 用户名 [必填] +XL_DASHBOARD_USERNAME=xunlei + +# Web访问 密码 [必填] +XL_DASHBOARD_PASSWORD=xunlei- + diff --git a/dockge/xunlei-cnk3x/docker-compose.yml b/dockge/xunlei-cnk3x/docker-compose.yml new file mode 100644 index 00000000..aa97678c --- /dev/null +++ b/dockge/xunlei-cnk3x/docker-compose.yml @@ -0,0 +1,30 @@ +networks: + 1panel-network: + external: true +services: + xunlei-cnk3x: + container_name: xunlei-cnk3x + env_file: + - ./envs/global.env + - .env + environment: + - XL_UID=0 + - XL_GID=0 + - XL_DASHBOARD_PORT=2345 + - XL_DASHBOARD_IP=0.0.0.0 + - XL_DIR_DOWNLOAD=/xunlei/downloads + - XL_DIR_DATA=/xunlei/data + - XL_PREVENT_UPDATE=true + - XL_DEBUG=false + image: cnk3x/xunlei:v3.20.2 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:2345 + privileged: true + restart: always + volumes: + - ${XUNLEI_ROOT_PATH}/data:/xunlei/data + - ${XUNLEI_ROOT_PATH}/downloads:/xunlei/downloads diff --git a/dockge/xunlei-cnk3x/envs/default.env b/dockge/xunlei-cnk3x/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/xunlei-cnk3x/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/xunlei-cnk3x/envs/global.env b/dockge/xunlei-cnk3x/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/xunlei-cnk3x/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/yarr/.env b/dockge/yarr/.env new file mode 100644 index 00000000..044cd06f --- /dev/null +++ b/dockge/yarr/.env @@ -0,0 +1,6 @@ +# 端口 [必填] +PANEL_APP_PORT_HTTP=7070 + +# 数据持久化 根路径 [必填] +YARR_ROOT_PATH=/home/yarr + diff --git a/dockge/yarr/docker-compose.yml b/dockge/yarr/docker-compose.yml new file mode 100644 index 00000000..c2f0e639 --- /dev/null +++ b/dockge/yarr/docker-compose.yml @@ -0,0 +1,16 @@ +networks: + 1panel-network: + external: true +services: + bark: + container_name: yarr + image: qyg2297248353/yarr:v2.4.0 + labels: + createdBy: Apps + networks: + - 1panel-network + ports: + - ${PANEL_APP_PORT_HTTP}:7070 + restart: always + volumes: + - ${YARR_ROOT_PATH}/data:/data diff --git a/dockge/yarr/envs/default.env b/dockge/yarr/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/yarr/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/yarr/envs/global.env b/dockge/yarr/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/yarr/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/zerotier-planet/.env b/dockge/zerotier-planet/.env new file mode 100644 index 00000000..622fbac3 --- /dev/null +++ b/dockge/zerotier-planet/.env @@ -0,0 +1,21 @@ +# 数据持久化路径 [必填] +ZEROTIER_PLANET_ROOT_PATH=/home/zerotier-planet + +# 网络模式 [必填] +NETWORK_MODE=host + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3443 + +# API 端口 [必填] +PANEL_APP_PORT_API=9994 + +# 文件传输端口 [必填] +PANEL_APP_PORT_FILE=3000 + +# 公网 IPV4/IPV6 +IP_ADDR4= + +# 公网 IPV4/IPV6 +IP_ADDR6= + diff --git a/dockge/zerotier-planet/docker-compose.yml b/dockge/zerotier-planet/docker-compose.yml new file mode 100644 index 00000000..bd577770 --- /dev/null +++ b/dockge/zerotier-planet/docker-compose.yml @@ -0,0 +1,28 @@ +networks: + 1panel-network: + external: true +services: + zerotier-planet: + container_name: zerotier-planet + env_file: + - ./envs/global.env + - .env + environment: + - ZT_PORT=${PANEL_APP_PORT_ZT} + - API_PORT=${PANEL_APP_PORT_HTTP} + - FILE_SERVER_PORT=${PANEL_APP_PORT_FILE} + image: xubiaolin/zerotier-planet:1.14.2 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_ZT}:${PANEL_APP_PORT_ZT}/tcp + - ${PANEL_APP_PORT_ZT}:${PANEL_APP_PORT_ZT}/udp + - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + - ${PANEL_APP_PORT_FILE}:${PANEL_APP_PORT_FILE} + restart: always + volumes: + - ${ZEROTIER_PLANET_ROOT_PATH}/file:/app/dist + - ${ZEROTIER_PLANET_ROOT_PATH}/ztncui:/app/ztncui + - ${ZEROTIER_PLANET_ROOT_PATH}/zerotier-one:/var/lib/zerotier-one + - ${ZEROTIER_PLANET_ROOT_PATH}/config:/app/config diff --git a/dockge/zerotier-planet/envs/default.env b/dockge/zerotier-planet/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/zerotier-planet/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/zerotier-planet/envs/global.env b/dockge/zerotier-planet/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/zerotier-planet/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai diff --git a/dockge/ztncui/.env b/dockge/ztncui/.env new file mode 100644 index 00000000..a0b1f7d2 --- /dev/null +++ b/dockge/ztncui/.env @@ -0,0 +1,21 @@ +# 数据持久化路径 [必填] +ZTNCUI_ROOT_PATH=/home/ztncui + +# 网络模式 [必填] +NETWORK_MODE=host + +# WebUI 端口 [必填] +PANEL_APP_PORT_HTTP=3000 + +# API 端口 [必填] +PANEL_APP_PORT_API=9993 + +# 文件传输端口 [必填] +PANEL_APP_PORT_FILE=3180 + +# 面板管理员 密码 [必填] +ZTNCUI_PASSWD= + +# 服务器域名(IP) [必填] +MYADDR= + diff --git a/dockge/ztncui/docker-compose.yml b/dockge/ztncui/docker-compose.yml new file mode 100644 index 00000000..fb2b27f4 --- /dev/null +++ b/dockge/ztncui/docker-compose.yml @@ -0,0 +1,27 @@ +networks: + 1panel-network: + external: true +services: + ztncui: + container_name: ztncui + env_file: + - ./envs/global.env + - .env + environment: + - NODE_ENV=production + - HTTP_PORT=${PANEL_APP_PORT_HTTP} + - ZT_ADDR=localhost:${PANEL_APP_PORT_API} + - HTTP_ALL_INTERFACES=yes + image: keynetworks/ztncui:1.2.17 + labels: + createdBy: Apps + network_mode: ${NETWORK_MODE} + ports: + - ${PANEL_APP_PORT_HTTP}:${PANEL_APP_PORT_HTTP} + - ${PANEL_APP_PORT_API}:${PANEL_APP_PORT_API}/tcp + - ${PANEL_APP_PORT_API}:${PANEL_APP_PORT_API}/udp + - ${PANEL_APP_PORT_FILE}:3180 + restart: always + volumes: + - ${ZTNCUI_ROOT_PATH}/ztncui:/opt/key-networks/ztncui/etc + - ${ZTNCUI_ROOT_PATH}/zerotier-one:/var/lib/zerotier-one diff --git a/dockge/ztncui/envs/default.env b/dockge/ztncui/envs/default.env new file mode 100644 index 00000000..cd05f46e --- /dev/null +++ b/dockge/ztncui/envs/default.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +ENV_FILE=.env diff --git a/dockge/ztncui/envs/global.env b/dockge/ztncui/envs/global.env new file mode 100644 index 00000000..e10989fe --- /dev/null +++ b/dockge/ztncui/envs/global.env @@ -0,0 +1,2 @@ +# copyright© 2024 XinJiang Ms Studio +TZ=Asia/Shanghai