Merge branch 'patch/add-apps' into localApps
|
|
@ -0,0 +1,133 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
- child:
|
||||
default: ""
|
||||
envKey: PANEL_DB_HOST
|
||||
required: true
|
||||
type: service
|
||||
default: mysql
|
||||
envKey: PANEL_DB_TYPE
|
||||
labelEn: Database Service
|
||||
labelZh: 数据库服务
|
||||
label:
|
||||
en: Database Service
|
||||
ja: データベースサービス
|
||||
ms: Perkhidmatan Pangkalan Data
|
||||
pt-br: Serviço de Banco de Dados
|
||||
ru: Сервис базы данных
|
||||
ko: 데이터베이스 서비스
|
||||
zh: 数据库服务
|
||||
zh-Hant: 數據庫 服務
|
||||
required: true
|
||||
type: apps
|
||||
values:
|
||||
- label: MySQL
|
||||
value: mysql
|
||||
- label: MariaDB
|
||||
value: mariadb
|
||||
- label: PostgreSQL
|
||||
value: postgres
|
||||
- default: anheyu
|
||||
envKey: PANEL_DB_NAME
|
||||
labelEn: Database Name
|
||||
labelZh: 数据库名
|
||||
label:
|
||||
en: Database Name
|
||||
ja: データベース
|
||||
ms: Pangkalan Data
|
||||
pt-br: Banco de Dados
|
||||
ru: База данных
|
||||
ko: 데이터베이스
|
||||
zh: 数据库名
|
||||
zh-Hant: 數據庫名
|
||||
random: true
|
||||
required: true
|
||||
rule: paramCommon
|
||||
type: text
|
||||
- default: anheyu
|
||||
envKey: PANEL_DB_USER
|
||||
labelEn: Database User
|
||||
labelZh: 数据库用户
|
||||
label:
|
||||
en: Database User
|
||||
ja: ユーザー
|
||||
ms: Pengguna
|
||||
pt-br: Usuário
|
||||
ru: Пользователь
|
||||
ko: 사용자
|
||||
zh: 数据库用户
|
||||
zh-Hant: 數據庫用戶
|
||||
random: true
|
||||
required: true
|
||||
rule: paramCommon
|
||||
type: text
|
||||
- default: anheyu
|
||||
envKey: PANEL_DB_USER_PASSWORD
|
||||
labelEn: Database User Password
|
||||
labelZh: 数据库用户密码
|
||||
label:
|
||||
en: Database User Password
|
||||
ja: パスワード
|
||||
ms: Kata Laluan
|
||||
pt-br: Senha
|
||||
ru: Пароль
|
||||
ko: 비밀번호
|
||||
zh: 数据库用户密码
|
||||
zh-Hant: 數據庫用戶密碼
|
||||
random: true
|
||||
required: true
|
||||
type: password
|
||||
- default: ""
|
||||
envKey: PANEL_REDIS_HOST
|
||||
key: redis
|
||||
labelEn: Redis Service
|
||||
labelZh: redis 服务
|
||||
required: true
|
||||
type: service
|
||||
label:
|
||||
en: Redis Service
|
||||
ja: Redisサービス
|
||||
ms: Perkhidmatan Redis
|
||||
pt-br: Serviço Redis
|
||||
ru: Сервис Redis
|
||||
ko: Redis 서비스
|
||||
zh: redis 服务
|
||||
zh-Hant: redis 服务
|
||||
- default: ""
|
||||
envKey: PANEL_REDIS_ROOT_PASSWORD
|
||||
labelEn: Redis Service Password
|
||||
labelZh: 缓存服务服务密码
|
||||
required: false
|
||||
type: password
|
||||
# 验证密钥
|
||||
- default: ""
|
||||
envKey: PANEL_LICENSE_KEY
|
||||
labelEn: License Key
|
||||
labelZh: 授权密钥
|
||||
label:
|
||||
en: License Key
|
||||
ja: ライセンスキー
|
||||
ms: Kunci Lesen
|
||||
pt-br: Chave de Licença
|
||||
ru: Лицензионный ключ
|
||||
ko: 라이선스 키
|
||||
zh: 授权密钥
|
||||
zh-Hant: 授權密鑰
|
||||
required: true
|
||||
type: password
|
||||
- default: 37826
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: HTTP 端口
|
||||
label:
|
||||
en: Port
|
||||
ja: ポート
|
||||
ms: Port
|
||||
pt-br: Porta
|
||||
ru: Порт
|
||||
ko: 포트
|
||||
zh: HTTP 端口
|
||||
zh-Hant: HTTP連接埠
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
services:
|
||||
anheyu:
|
||||
image: anheyu/pro:1.5.2
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:8091
|
||||
environment:
|
||||
ANHEYU_DATABASE_TYPE: ${PANEL_DB_TYPE}
|
||||
ANHEYU_DATABASE_HOST: ${PANEL_DB_HOST}
|
||||
ANHEYU_DATABASE_USER: ${PANEL_DB_USER}
|
||||
ANHEYU_DATABASE_NAME: ${PANEL_DB_NAME}
|
||||
ANHEYU_DATABASE_PORT: ${PANEL_DB_PORT}
|
||||
ANHEYU_DATABASE_PASSWORD: ${PANEL_DB_USER_PASSWORD}
|
||||
ANHEYU_REDIS_ADDR: ${PANEL_REDIS_HOST}:6379
|
||||
ANHEYU_REDIS_PASSWORD: ${PANEL_REDIS_ROOT_PASSWORD}
|
||||
ANHEYU_REDIS_DB: 10
|
||||
ANHEYU_LICENSE_KEY: ${PANEL_LICENSE_KEY}
|
||||
networks:
|
||||
- 1panel-network
|
||||
|
||||
volumes:
|
||||
- ./data/data:/anheyu/data
|
||||
- ./data/themes:/anheyu/themes
|
||||
- ./data/static:/anheyu/static
|
||||
- ./data/backup:/anheyu/backup
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
BASE_DIR="./data"
|
||||
TEMP_DIR="./data_temp"
|
||||
CONF_FILE_OLD="$BASE_DIR/conf.ini"
|
||||
CONF_FILE_NEW="$BASE_DIR/data/conf.ini"
|
||||
|
||||
# 1. 如果 data_temp 存在,直接删除
|
||||
if [ -d "$TEMP_DIR" ]; then
|
||||
echo "发现 $TEMP_DIR,正在删除..."
|
||||
rm -rf "$TEMP_DIR"
|
||||
fi
|
||||
|
||||
# 2. 判断当前结构
|
||||
if [ -f "$CONF_FILE_NEW" ]; then
|
||||
echo "检测到新结构 ($CONF_FILE_NEW 存在),无需迁移。"
|
||||
exit 0
|
||||
elif [ -f "$CONF_FILE_OLD" ]; then
|
||||
echo "检测到旧结构 ($CONF_FILE_OLD 存在),开始迁移..."
|
||||
|
||||
# 2.1 将 data 重命名为 data_temp
|
||||
mv "$BASE_DIR" "$TEMP_DIR"
|
||||
|
||||
# 2.2 创建新的目录结构
|
||||
mkdir -p "$BASE_DIR/data" "$BASE_DIR/themes" "$BASE_DIR/static" "$BASE_DIR/backup"
|
||||
|
||||
# 2.3 把旧数据移到新的 data 目录
|
||||
cp -a "$TEMP_DIR"/* "$BASE_DIR/data/" 2>/dev/null || true
|
||||
cp -a "$TEMP_DIR"/.[!.]* "$BASE_DIR/data/" 2>/dev/null || true
|
||||
|
||||
echo "迁移完成!旧数据已移入 $BASE_DIR/data/ 下。"
|
||||
echo "请检查无误后再次运行脚本,以彻底删除 $TEMP_DIR"
|
||||
else
|
||||
echo "未找到 $CONF_FILE_OLD 或 $CONF_FILE_NEW,无法确认目录结构,退出。"
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -0,0 +1,81 @@
|
|||
# 🌈 Anheyu Blog Pro
|
||||
|
||||
## ❕ 注意必看
|
||||
|
||||
> 该版本需要**密钥**方可运行,如果尚未得到Pro授权请使用社区版本
|
||||
> 如果后台添加域名,密钥会变动,请跳转到目录,直接修改.env文件中的授权密钥即可!
|
||||
|
||||
如果能给我一个 **Star ⭐**,那将是对我莫大的鼓励。
|
||||
|
||||
在使用本应用前请注意:
|
||||
它是一个 **独立应用**,需要服务器环境才能运行。推荐使用 **Docker 部署**,可大大减少环境配置带来的问题。
|
||||
|
||||
由 **安知鱼** 负责开发与维护。
|
||||
|
||||
* GitHub: [https://github.com/anzhiyu-c/anheyu-app](https://github.com/anzhiyu-c/anheyu-app)
|
||||
* 预览: 👍 AnZhiYu | 🤞 AnZhiYu
|
||||
* 文档: 📖 AnHeYu Docs
|
||||
|
||||
---
|
||||
|
||||
## 🌟 系统简介
|
||||
|
||||
**Anheyu Blog** 是一个基于 **Go + Vue3** 的现代化博客与内容管理系统。
|
||||
后端使用 **Go** 提供高性能 API,前端采用 **Vue3 + Element Plus** 打造美观易用的用户界面。
|
||||
|
||||
---
|
||||
|
||||
## ✨ 功能特性
|
||||
|
||||
* ✅ Markdown 编辑 & 富文本预览
|
||||
* ✅ 图片上传、管理与懒加载
|
||||
* ✅ 分类 & 标签管理
|
||||
* ✅ 外部链接收集与分享
|
||||
* ✅ 内置评论系统,支持用户互动
|
||||
* ✅ 文件管理与缩略图优化
|
||||
* ✅ 多种数据库支持(MySQL/PostgreSQL/SQLite)
|
||||
* ✅ 灵活存储配置
|
||||
* ✅ 暗黑模式 / 沉浸式状态栏
|
||||
* ✅ LaTeX 数学公式 & Mermaid 流程图
|
||||
* ✅ 广告挂载 & Inject 自定义扩展
|
||||
* ✅ AI 摘要(Pro)
|
||||
* ✅ PWA 渐进式应用 & 高速缓存
|
||||
* ✅ 优秀的隐私协议支持
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ 技术栈
|
||||
|
||||
* **后端**: Go + Ent
|
||||
* **前端**: Vue3 + Element Plus
|
||||
* **数据库**: MySQL / PostgreSQL / SQLite
|
||||
|
||||
---
|
||||
|
||||
## 🤝 贡献
|
||||
|
||||
欢迎提交 **Issue / PR** 帮助改进项目!
|
||||
|
||||
---
|
||||
|
||||
## 📄 开源协议
|
||||
|
||||
本项目基于 **GPL-3.0 License** 开源。
|
||||
|
||||
---
|
||||
|
||||
## 👨💻 作者
|
||||
|
||||
* **安知鱼**(项目维护者)
|
||||
|
||||
---
|
||||
|
||||
## 🙏 致谢
|
||||
|
||||
感谢所有为本项目贡献的开发者与用户!
|
||||
|
||||
---
|
||||
|
||||
## 📢 社区
|
||||
|
||||
* QQ 群组:**464636182**
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
name: Anheyu Blog Pro
|
||||
tags:
|
||||
- 建站
|
||||
title: 【赞助版】一个基于 Go + Vue3 的现代化博客与内容管理系统
|
||||
description: 【赞助版】基于 Go 语言后端与 Vue3 前端构建的高性能博客与内容管理平台
|
||||
additionalProperties:
|
||||
key: anheyu-blog-pro
|
||||
name: Anheyu Blog Pro
|
||||
tags:
|
||||
- website
|
||||
shortDescZh: 一个基于 Go + Vue3 的现代化博客与内容管理系统
|
||||
shortDescEn: A modern blog and content management system built with Go and Vue3
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
website: https://anheyu.com/
|
||||
github: https://github.com/anzhiyu-c/anheyu-app
|
||||
document: https://dev.anheyu.com/docs/getting-started/
|
||||
description:
|
||||
en: A modern blog and content management system built with Go backend and Vue3 frontend.
|
||||
zh: 一个基于 Go 语言后端与 Vue3 前端构建的现代化博客与内容管理系统。
|
||||
zh-Hant: 一個基於 Go 語言後端與 Vue3 前端構建的現代化部落格與內容管理系統。
|
||||
ja: Go バックエンドと Vue3 フロントエンドで構築されたモダンなブログ・コンテンツ管理システム。
|
||||
ms: Sistem blog dan pengurusan kandungan moden dibina dengan Go backend dan Vue3 frontend.
|
||||
pt-br: Um sistema moderno de blog e gerenciamento de conteúdo construído com Go e Vue3.
|
||||
ru: Современная система ведения блогов и управления контентом, построенная на Go и Vue3.
|
||||
ko: Go 백엔드와 Vue3 프론트엔드로 구축된 현대적인 블로그 및 콘텐츠 관리 시스템.
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
|
After Width: | Height: | Size: 7.4 KiB |
|
|
@ -0,0 +1,117 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
- child:
|
||||
default: ""
|
||||
envKey: PANEL_DB_HOST
|
||||
required: true
|
||||
type: service
|
||||
default: mysql
|
||||
envKey: PANEL_DB_TYPE
|
||||
labelEn: Database Service
|
||||
labelZh: 数据库服务
|
||||
label:
|
||||
en: Database Service
|
||||
ja: データベースサービス
|
||||
ms: Perkhidmatan Pangkalan Data
|
||||
pt-br: Serviço de Banco de Dados
|
||||
ru: Сервис базы данных
|
||||
ko: 데이터베이스 서비스
|
||||
zh: 数据库服务
|
||||
zh-Hant: 數據庫 服務
|
||||
required: true
|
||||
type: apps
|
||||
values:
|
||||
- label: MySQL
|
||||
value: mysql
|
||||
- label: MariaDB
|
||||
value: mariadb
|
||||
- label: PostgreSQL
|
||||
value: postgres
|
||||
- default: anheyu
|
||||
envKey: PANEL_DB_NAME
|
||||
labelEn: Database Name
|
||||
labelZh: 数据库名
|
||||
label:
|
||||
en: Database Name
|
||||
ja: データベース
|
||||
ms: Pangkalan Data
|
||||
pt-br: Banco de Dados
|
||||
ru: База данных
|
||||
ko: 데이터베이스
|
||||
zh: 数据库名
|
||||
zh-Hant: 數據庫名
|
||||
random: true
|
||||
required: true
|
||||
rule: paramCommon
|
||||
type: text
|
||||
- default: anheyu
|
||||
envKey: PANEL_DB_USER
|
||||
labelEn: Database User
|
||||
labelZh: 数据库用户
|
||||
label:
|
||||
en: Database User
|
||||
ja: ユーザー
|
||||
ms: Pengguna
|
||||
pt-br: Usuário
|
||||
ru: Пользователь
|
||||
ko: 사용자
|
||||
zh: 数据库用户
|
||||
zh-Hant: 數據庫用戶
|
||||
random: true
|
||||
required: true
|
||||
rule: paramCommon
|
||||
type: text
|
||||
- default: anheyu
|
||||
envKey: PANEL_DB_USER_PASSWORD
|
||||
labelEn: Database User Password
|
||||
labelZh: 数据库用户密码
|
||||
label:
|
||||
en: Database User Password
|
||||
ja: パスワード
|
||||
ms: Kata Laluan
|
||||
pt-br: Senha
|
||||
ru: Пароль
|
||||
ko: 비밀번호
|
||||
zh: 数据库用户密码
|
||||
zh-Hant: 數據庫用戶密碼
|
||||
random: true
|
||||
required: true
|
||||
type: password
|
||||
- default: ""
|
||||
envKey: PANEL_REDIS_HOST
|
||||
key: redis
|
||||
labelEn: Redis Service
|
||||
labelZh: redis 服务
|
||||
required: true
|
||||
type: service
|
||||
label:
|
||||
en: Redis Service
|
||||
ja: Redisサービス
|
||||
ms: Perkhidmatan Redis
|
||||
pt-br: Serviço Redis
|
||||
ru: Сервис Redis
|
||||
ko: Redis 서비스
|
||||
zh: redis 服务
|
||||
zh-Hant: redis 服务
|
||||
- default: ""
|
||||
envKey: PANEL_REDIS_ROOT_PASSWORD
|
||||
labelEn: Redis Service Password
|
||||
labelZh: 缓存服务服务密码
|
||||
required: false
|
||||
type: password
|
||||
- default: 37826
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: HTTP 端口
|
||||
label:
|
||||
en: Port
|
||||
ja: ポート
|
||||
ms: Port
|
||||
pt-br: Porta
|
||||
ru: Порт
|
||||
ko: 포트
|
||||
zh: HTTP 端口
|
||||
zh-Hant: HTTP連接埠
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
services:
|
||||
anheyu:
|
||||
image: anheyu/anheyu-backend:1.5.2
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:8091
|
||||
environment:
|
||||
ANHEYU_DATABASE_TYPE: ${PANEL_DB_TYPE}
|
||||
ANHEYU_DATABASE_HOST: ${PANEL_DB_HOST}
|
||||
ANHEYU_DATABASE_USER: ${PANEL_DB_USER}
|
||||
ANHEYU_DATABASE_NAME: ${PANEL_DB_NAME}
|
||||
ANHEYU_DATABASE_PORT: ${PANEL_DB_PORT}
|
||||
ANHEYU_DATABASE_PASSWORD: ${PANEL_DB_USER_PASSWORD}
|
||||
ANHEYU_REDIS_ADDR: ${PANEL_REDIS_HOST}:6379
|
||||
ANHEYU_REDIS_PASSWORD: ${PANEL_REDIS_ROOT_PASSWORD}
|
||||
ANHEYU_REDIS_DB: 10
|
||||
networks:
|
||||
- 1panel-network
|
||||
volumes:
|
||||
- ./data/data:/anheyu/data
|
||||
- ./data/themes:/anheyu/themes
|
||||
- ./data/static:/anheyu/static
|
||||
- ./data/backup:/anheyu/backup
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
BASE_DIR="./data"
|
||||
TEMP_DIR="./data_temp"
|
||||
CONF_FILE_OLD="$BASE_DIR/conf.ini"
|
||||
CONF_FILE_NEW="$BASE_DIR/data/conf.ini"
|
||||
|
||||
# 1. 如果 data_temp 存在,直接删除
|
||||
if [ -d "$TEMP_DIR" ]; then
|
||||
echo "发现 $TEMP_DIR,正在删除..."
|
||||
rm -rf "$TEMP_DIR"
|
||||
fi
|
||||
|
||||
# 2. 判断当前结构
|
||||
if [ -f "$CONF_FILE_NEW" ]; then
|
||||
echo "检测到新结构 ($CONF_FILE_NEW 存在),无需迁移。"
|
||||
exit 0
|
||||
elif [ -f "$CONF_FILE_OLD" ]; then
|
||||
echo "检测到旧结构 ($CONF_FILE_OLD 存在),开始迁移..."
|
||||
|
||||
# 2.1 将 data 重命名为 data_temp
|
||||
mv "$BASE_DIR" "$TEMP_DIR"
|
||||
|
||||
# 2.2 创建新的目录结构
|
||||
mkdir -p "$BASE_DIR/data" "$BASE_DIR/themes" "$BASE_DIR/static" "$BASE_DIR/backup"
|
||||
|
||||
# 2.3 把旧数据移到新的 data 目录
|
||||
cp -a "$TEMP_DIR"/* "$BASE_DIR/data/" 2>/dev/null || true
|
||||
cp -a "$TEMP_DIR"/.[!.]* "$BASE_DIR/data/" 2>/dev/null || true
|
||||
|
||||
echo "迁移完成!旧数据已移入 $BASE_DIR/data/ 下。"
|
||||
echo "请检查无误后再次运行脚本,以彻底删除 $TEMP_DIR"
|
||||
else
|
||||
echo "未找到 $CONF_FILE_OLD 或 $CONF_FILE_NEW,无法确认目录结构,退出。"
|
||||
exit 1
|
||||
fi
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
# 🌈 Anheyu Blog
|
||||
|
||||
如果能给我一个 **Star ⭐**,那将是对我莫大的鼓励。
|
||||
|
||||
在使用本应用前请注意:
|
||||
它是一个 **独立应用**,需要服务器环境才能运行。推荐使用 **Docker 部署**,可大大减少环境配置带来的问题。
|
||||
|
||||
由 **安知鱼** 负责开发与维护。
|
||||
|
||||
* GitHub: [https://github.com/anzhiyu-c/anheyu-app](https://github.com/anzhiyu-c/anheyu-app)
|
||||
* 预览: 👍 AnZhiYu | 🤞 AnZhiYu
|
||||
* 文档: 📖 AnHeYu Docs
|
||||
|
||||
---
|
||||
|
||||
## 🌟 系统简介
|
||||
|
||||
**Anheyu Blog** 是一个基于 **Go + Vue3** 的现代化博客与内容管理系统。
|
||||
后端使用 **Go** 提供高性能 API,前端采用 **Vue3 + Element Plus** 打造美观易用的用户界面。
|
||||
|
||||
---
|
||||
|
||||
## ✨ 功能特性
|
||||
|
||||
* ✅ Markdown 编辑 & 富文本预览
|
||||
* ✅ 图片上传、管理与懒加载
|
||||
* ✅ 分类 & 标签管理
|
||||
* ✅ 外部链接收集与分享
|
||||
* ✅ 内置评论系统,支持用户互动
|
||||
* ✅ 文件管理与缩略图优化
|
||||
* ✅ 多种数据库支持(MySQL/PostgreSQL/SQLite)
|
||||
* ✅ 灵活存储配置
|
||||
* ✅ 暗黑模式 / 沉浸式状态栏
|
||||
* ✅ LaTeX 数学公式 & Mermaid 流程图
|
||||
* ✅ 广告挂载 & Inject 自定义扩展
|
||||
* ✅ AI 摘要(Pro)
|
||||
* ✅ PWA 渐进式应用 & 高速缓存
|
||||
* ✅ 优秀的隐私协议支持
|
||||
|
||||
---
|
||||
|
||||
## 🏗️ 技术栈
|
||||
|
||||
* **后端**: Go + Ent
|
||||
* **前端**: Vue3 + Element Plus
|
||||
* **数据库**: MySQL / PostgreSQL / SQLite
|
||||
|
||||
---
|
||||
|
||||
## 🤝 贡献
|
||||
|
||||
欢迎提交 **Issue / PR** 帮助改进项目!
|
||||
|
||||
---
|
||||
|
||||
## 📄 开源协议
|
||||
|
||||
本项目基于 **GPL-3.0 License** 开源。
|
||||
|
||||
---
|
||||
|
||||
## 👨💻 作者
|
||||
|
||||
* **安知鱼**(项目维护者)
|
||||
|
||||
---
|
||||
|
||||
## 🙏 致谢
|
||||
|
||||
感谢所有为本项目贡献的开发者与用户!
|
||||
|
||||
---
|
||||
|
||||
## 📢 社区
|
||||
|
||||
* QQ 群组:**464636182**
|
||||
|
|
@ -0,0 +1,30 @@
|
|||
name: Anheyu Blog
|
||||
tags:
|
||||
- 建站
|
||||
title: 一个基于 Go + Vue3 的现代化博客与内容管理系统
|
||||
description: 基于 Go 语言后端与 Vue3 前端构建的高性能博客与内容管理平台
|
||||
additionalProperties:
|
||||
key: anheyu-blog
|
||||
name: Anheyu Blog
|
||||
tags:
|
||||
- website
|
||||
shortDescZh: 一个基于 Go + Vue3 的现代化博客与内容管理系统
|
||||
shortDescEn: A modern blog and content management system built with Go and Vue3
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
website: https://anheyu.com/
|
||||
github: https://github.com/anzhiyu-c/anheyu-app
|
||||
document: https://dev.anheyu.com/docs/getting-started/
|
||||
description:
|
||||
en: A modern blog and content management system built with Go backend and Vue3 frontend.
|
||||
zh: 一个基于 Go 语言后端与 Vue3 前端构建的现代化博客与内容管理系统。
|
||||
zh-Hant: 一個基於 Go 語言後端與 Vue3 前端構建的現代化部落格與內容管理系統。
|
||||
ja: Go バックエンドと Vue3 フロントエンドで構築されたモダンなブログ・コンテンツ管理システム。
|
||||
ms: Sistem blog dan pengurusan kandungan moden dibina dengan Go backend dan Vue3 frontend.
|
||||
pt-br: Um sistema moderno de blog e gerenciamento de conteúdo construído com Go e Vue3.
|
||||
ru: Современная система ведения блогов и управления контентом, построенная на Go и Vue3.
|
||||
ko: Go 백엔드와 Vue3 프론트엔드로 구축된 현대적인 블로그 및 콘텐츠 관리 시스템.
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
|
After Width: | Height: | Size: 7.6 KiB |
|
|
@ -0,0 +1,20 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
# HTTP 端口
|
||||
- default: 9834
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: HTTP Port
|
||||
labelZh: HTTP 端口
|
||||
label:
|
||||
en: HTTP Port
|
||||
ja: HTTPポート
|
||||
ms: Port HTTP
|
||||
pt-br: Porta HTTP
|
||||
ru: HTTP порт
|
||||
ko: HTTP 포트
|
||||
zh: HTTP 端口
|
||||
zh-Hant: HTTP 連接埠
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
services:
|
||||
moontv:
|
||||
image: bestrui/bestsub:v1.6.3
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:8080
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
networks:
|
||||
- 1panel-network
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
|
@ -0,0 +1,160 @@
|
|||
# BestSub
|
||||
|
||||
BestSub 是一个高性能的节点检测,订阅转换服务,基于 Go 语言开发。该项目提供了完整的 Web 界面和 API 接口,支持多种检测项目,多种订阅格式转换,为用户提供便捷的订阅管理解决方案。
|
||||
|
||||
## ✨ 主要特性
|
||||
|
||||
- 🎨 **现代的 WebUI**: 提供现代化的 Web 管理界面,完善的 API 文档,方便用户自定义开发
|
||||
- ⚡ **高性能**: 并发处理,低 CPU 占用,低内存消耗,优化的资源利用率
|
||||
- 🌍 **多架构**: 支持多种系统架构和操作系统,广泛的兼容性
|
||||
- 🗂️ **节点池**: 可持久化保存历史节点,智能淘汰质量低下的节点,确保最佳体验
|
||||
- 🔄 **内置 Subconverter**: 支持各种订阅格式的输入输出转换
|
||||
- 🔧 **扩展**: 模块化设计,支持 PR 扩展新功能,仅需创建单个文件即可添加新的通知、保存或检测方式
|
||||
- 📢 **通知**: 支持多样化的通知方式和自定义通知模板,满足不同场景的消息推送需求
|
||||
- 💾 **保存**: 支持多样化的数据保存方式,灵活的数据持久化选择
|
||||
- 🔍 **检测**: 支持多样化的节点检测方式,全面的质量评估体系
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### 方式一:直接运行
|
||||
|
||||
1. 从 [Releases](https://github.com/bestruirui/BestSub/releases/latest) 页面下载适合您系统架构的可执行文件
|
||||
2. 直接运行程序,系统将自动:
|
||||
- 创建必要的配置文件
|
||||
- 下载 WebUI
|
||||
- 下载 Subconverter
|
||||
|
||||
### 方式二:Docker
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name bestsub \
|
||||
--restart unless-stopped \
|
||||
-v /path/to/data:/app/data \
|
||||
-p 8080:8080 \
|
||||
ghcr.io/bestruirui/bestsub
|
||||
```
|
||||
|
||||
**参数说明:**
|
||||
- `--name bestsub`: 设置容器名称
|
||||
- `--restart unless-stopped`: 容器自动重启策略
|
||||
- `-v /path/to/data:/app/data`: 数据持久化挂载(请将 `/path/to/data` 替换为您的实际路径)
|
||||
- `-p 8080:8080`: 端口映射,访问地址为 `http://localhost:8080`
|
||||
|
||||
### 方式三:Docker Compose
|
||||
|
||||
创建 `docker-compose.yml` 文件:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
bestsub:
|
||||
image: ghcr.io/bestruirui/bestsub:latest
|
||||
container_name: bestsub
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8080:8080"
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
```
|
||||
|
||||
启动服务:
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## 📁 目录结构
|
||||
|
||||
程序运行后将创建以下目录结构:
|
||||
|
||||
```
|
||||
bestsub/
|
||||
├── config.json # 主配置文件
|
||||
├── data/ # 数据目录
|
||||
│ └── bestsub.db # SQLite 数据库文件
|
||||
├── log/ # 日志文件目录
|
||||
├── session/ # 会话数据目录
|
||||
│ └── bestsub.session # 会话文件
|
||||
├── subconverter/ # 订阅转换器目录
|
||||
│ ├── base/ # 转换规则基础配置
|
||||
│ │ └── base/
|
||||
│ │ └── all_base.tpl
|
||||
│ ├── pref.yml # 转换器配置文件
|
||||
│ └── subconverter # 转换器可执行文件
|
||||
└── ui/ # Web 界面文件
|
||||
├── index.html # 主页面
|
||||
└── ... # 其他静态资源
|
||||
```
|
||||
|
||||
## 🛠️ 手动部署
|
||||
|
||||
当自动下载失败时,请按以下步骤手动部署:
|
||||
|
||||
1. **下载 WebUI 组件**
|
||||
- 访问 [BestSubOrg/Front](https://github.com/BestSubOrg/Front/releases/latest)
|
||||
- 下载最新版本并解压到 `ui` 目录
|
||||
|
||||
2. **下载 Subconverter 组件**
|
||||
- 访问 [BestSubOrg/subconverter](https://github.com/BestSubOrg/subconverter/releases/latest)
|
||||
- 下载对应系统架构的版本并解压到 `subconverter` 目录
|
||||
|
||||
3. **验证部署**
|
||||
- 确保目录结构与上述 [目录结构](#-目录结构) 章节一致
|
||||
- 重新启动程序
|
||||
|
||||
## 🔗 版本历史
|
||||
|
||||
### 当前版本 (v1.x)
|
||||
- 全新的 Web 界面
|
||||
- 增强的性能和稳定性
|
||||
- 完整的容器化支持
|
||||
|
||||
### 经典版本 (v0.3.5)
|
||||
- **命令行界面版本**
|
||||
- **[📖 查看文档](https://github.com/bestruirui/BestSub/blob/legacy/doc/README_zh.md)**
|
||||
- **[⬇️ 下载应用](https://github.com/bestruirui/BestSub/releases/tag/v0.3.5)**
|
||||
|
||||
|
||||
## 🤝 贡献指南
|
||||
|
||||
我们欢迎任何形式的贡献!
|
||||
|
||||
### 项目图标
|
||||
- **格式要求**: SVG 格式
|
||||
- **用途**: 项目 Logo 和品牌标识
|
||||
- **提交方式**: 创建 Issue 或 Pull Request
|
||||
|
||||
### 更多功能
|
||||
|
||||
- 新的节点检测项目
|
||||
- 新的储存渠道
|
||||
- 新的通知渠道
|
||||
|
||||
### 其他贡献方式
|
||||
- 🐛 报告 Bug
|
||||
- 💡 提出新功能建议
|
||||
- 📝 改进文档
|
||||
- 🧪 编写测试用例
|
||||
|
||||
## ⚠️ 免责声明
|
||||
|
||||
本项目仅供学习和研究使用。使用本软件时,请您:
|
||||
|
||||
- ✅ 遵守当地法律法规和相关政策
|
||||
- ✅ 尊重网络服务提供商的使用条款
|
||||
- ✅ 承担使用本软件可能产生的一切后果和责任
|
||||
- ⚠️ 理解作者不对使用本软件造成的任何损失承担责任
|
||||
|
||||
**请在合法合规的前提下使用本软件。如果您不同意上述条款,请勿使用本软件。**
|
||||
|
||||
## ❤️ 支持项目
|
||||
|
||||
如果这个项目对您有帮助,请考虑:
|
||||
|
||||
- ⭐ 给项目点个 Star
|
||||
- 🍴 Fork 项目并参与开发
|
||||
- 📢 向朋友推荐本项目
|
||||
- 💬 在社区中分享使用体验
|
||||
|
||||
## 📊 项目统计
|
||||
|
||||

|
||||
|
|
@ -0,0 +1,32 @@
|
|||
name: BestSub
|
||||
tags:
|
||||
- 网络工具
|
||||
title: 高性能的节点检测与订阅转换服务
|
||||
description: ⚡ BestSub 是一个基于 Go 语言开发的高性能节点检测与订阅转换服务,支持现代 WebUI、API、节点池管理、内置 Subconverter、多样化检测与通知方式等功能。
|
||||
additionalProperties:
|
||||
key: bestsub
|
||||
name: BestSub
|
||||
tags:
|
||||
- Tool
|
||||
shortDescZh: 高性能的节点检测与订阅转换服务
|
||||
shortDescEn: High-performance node detection and subscription conversion service
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
recommend: 0
|
||||
website: https://github.com/bestruirui/BestSub
|
||||
github: https://github.com/bestruirui/BestSub
|
||||
document: https://github.com/bestruirui/BestSub
|
||||
description:
|
||||
en: ⚡ BestSub is a high-performance node detection and subscription conversion service built with Go. It provides a modern Web UI and complete API, supports multiple detection methods, subscription format conversions, persistent node pools, extensible modules, and flexible notification and storage options.
|
||||
zh: ⚡ BestSub 是一个高性能的节点检测与订阅转换服务,基于 Go 语言开发。它提供现代化的 Web 管理界面与完整的 API,支持多种检测方式、订阅格式转换、节点池持久化、模块化扩展,以及灵活的通知与存储方案。
|
||||
zh-Hant: ⚡ BestSub 是一個高效能的節點檢測與訂閱轉換服務,基於 Go 語言開發。提供現代化的 Web 管理介面與完整的 API,支援多種檢測方式、訂閱格式轉換、節點池持久化、模組化擴展,以及靈活的通知與存儲方案。
|
||||
ja: ⚡ BestSub は Go で開発された高性能ノード検出およびサブスクリプション変換サービスです。最新の Web 管理画面と完全な API を提供し、複数の検出方式、サブスクリプション形式変換、ノードプールの永続化、モジュール拡張、柔軟な通知と保存方法をサポートします。
|
||||
ms: ⚡ BestSub ialah perkhidmatan pengesanan nod berprestasi tinggi dan penukaran langganan yang dibangunkan dengan Go. Ia menyediakan antara muka pengurusan Web moden dan API lengkap, menyokong pelbagai kaedah pengesanan, penukaran format langganan, kolam nod berterusan, modul boleh diperluas, serta pilihan notifikasi dan simpanan yang fleksibel.
|
||||
pt-br: ⚡ BestSub é um serviço de detecção de nós e conversão de assinaturas de alto desempenho, desenvolvido em Go. Ele fornece uma interface Web moderna e API completa, suporta vários métodos de detecção, conversões de formato de assinatura, pool de nós persistente, módulos extensíveis e opções flexíveis de notificação e armazenamento.
|
||||
ru: ⚡ BestSub — это высокопроизводительный сервис для проверки узлов и преобразования подписок, разработанный на Go. Он предоставляет современный веб-интерфейс и полный API, поддерживает различные методы проверки, преобразование форматов подписок, постоянные пулы узлов, модульные расширения, а также гибкие варианты уведомлений и хранения данных.
|
||||
ko: ⚡ BestSub는 Go로 개발된 고성능 노드 감지 및 구독 변환 서비스입니다. 현대적인 웹 UI와 완전한 API를 제공하며, 다양한 감지 방식, 구독 형식 변환, 노드 풀 영속화, 모듈 확장, 유연한 알림 및 저장 옵션을 지원합니다.
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
- arm/v7
|
||||
|
After Width: | Height: | Size: 6.9 KiB |
|
|
@ -0,0 +1,15 @@
|
|||
# 彩虹聚合DNS管理系统
|
||||
|
||||
彩虹聚合DNS管理系统是一款基于ThinkPHP开发的网站程序,可实现在单一网站内管理多个平台的域名解析,目前已支持的域名解析平台有:阿里云、腾讯云、华为云、百度云、西部数码、火山引擎、DNSLA、CloudFlare、Namesilo、PowerDNS。
|
||||
|
||||
## ✨ 特性
|
||||
- **多平台统一管理**:在一个面板内集中管理阿里云、腾讯云、华为云等10+主流解析商
|
||||
- **多用户权限体系**:可为每个用户分配不同的域名解析权限,支持分级管理
|
||||
- **容灾智能切换**:支持ping、tcp、http(s)检测协议,故障自动暂停/修改解析并发送通知
|
||||
- **定时任务策略**:支持在指定时间/周期自动修改/开启/暂停/删除解析记录
|
||||
- **CF优选IP**:自动获取最新Cloudflare优选IP并批量更新到解析记录
|
||||
- **SSL证书全自动化**:一键从Let's Encrypt等渠道申请证书并自动部署到面板、云厂商、服务器
|
||||
- **全渠道通知**:邮件、微信公众号、Telegram、钉钉、飞书、企业微信等消息实时触达
|
||||
|
||||
## 🛠 支持的DNS服务商
|
||||
阿里云、腾讯云、华为云、百度云、西部数码、火山引擎、DNSLA、CloudFlare、Namesilo、PowerDNS
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
name: dnsmgr
|
||||
tags:
|
||||
- DNS
|
||||
- 聚合
|
||||
- 管理
|
||||
- 自托管
|
||||
title: 轻量级多上游 DNS 聚合管理系统
|
||||
description: 彩虹聚合DNS管理系统是一个支持多上游 DNS 聚合、智能分流、缓存加速与可视化管理的轻量级 DNS 管理方案,支持 DoH/DoT/DoQ 等现代协议。
|
||||
additionalProperties:
|
||||
key: dnsmgr
|
||||
name: dnsmgr
|
||||
tags:
|
||||
- WebSite
|
||||
- Tool
|
||||
shortDescZh: 轻量级多上游 DNS 聚合管理系统
|
||||
shortDescEn: Lightweight multi-upstream DNS aggregation management system
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
website: https://github.com/netcccyun/dnsmgr
|
||||
github: https://github.com/netcccyun/dnsmgr
|
||||
document: https://github.com/netcccyun/dnsmgr
|
||||
description:
|
||||
en: Lightweight multi-upstream DNS aggregation management system with intelligent routing, cache acceleration, and visual management, supporting DoH/DoT/DoQ.
|
||||
zh: 轻量级多上游 DNS 聚合管理系统,支持智能分流、缓存加速与可视化管理,兼容 DoH/DoT/DoQ 等现代协议。
|
||||
zh-Hant: 輕量化多上游 DNS 聚合管理系統,支援智慧分流、快取加速與可視化管理,相容 DoH/DoT/DoQ 等現代協議。
|
||||
ja: 軽量なマルチアップストリームDNS集約管理システムで、インテリジェントルーティング、キャッシュ加速、ビジュアル管理をサポートし、DoH/DoT/DoQなどの最新プロトコルに対応。
|
||||
ms: Sistem pengurusan agregasi DNS multi-upstream ringan dengan penghalaan pintar, pecutan cache, dan pengurusan visual, menyokong protokol moden DoH/DoT/DoQ.
|
||||
pt-br: Sistema de gerenciamento de agregação DNS multi-upstream leve com roteamento inteligente, aceleração de cache e gerenciamento visual, suportando protocolos modernos como DoH/DoT/DoQ.
|
||||
ru: Лёгкая система управления агрегацией DNS с несколькими upstream-серверами, поддерживающая интеллектуальную маршрутизацию, кеширование и визуальное управление, а также современные протоколы DoH/DoT/DoQ.
|
||||
ko: 다중 업스트림 DNS 집합 관리 시스템으로, 지능형 라우팅, 캐시 가속 및 시각적 관리를 지원하며 DoH/DoT/DoQ 등 최신 프로토콜을 지원합니다.
|
||||
architectures:
|
||||
- amd64
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
- default: 13489
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: HTTP Port
|
||||
labelZh: HTTP 端口
|
||||
label:
|
||||
en: HTTP Port
|
||||
ja: ポート
|
||||
ms: Port
|
||||
pt-br: Porta
|
||||
ru: Порт
|
||||
ko: 포트
|
||||
zh: HTTP 端口
|
||||
zh-Hant: HTTP 連接埠
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
|
||||
|
|
@ -0,0 +1,17 @@
|
|||
services:
|
||||
dnsmgr:
|
||||
image: netcccyun/dnsmgr:latest
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:80"
|
||||
volumes:
|
||||
- ./data:/app/www
|
||||
networks:
|
||||
- 1panel-network
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
After Width: | Height: | Size: 30 KiB |
|
|
@ -0,0 +1,239 @@
|
|||
# HubProxy
|
||||
|
||||
🚀 **Docker 和 GitHub 加速代理服务器**
|
||||
|
||||
一个轻量级、高性能的多功能代理服务,提供 Docker 镜像加速、GitHub 文件加速、下载离线镜像、在线搜索 Docker 镜像等功能。
|
||||
|
||||
## ✨ 特性
|
||||
|
||||
- 🐳 **Docker 镜像加速** - 支持 Docker Hub、GHCR、Quay 等多个镜像仓库加速,流式传输优化拉取速度。
|
||||
- 🐳 **离线镜像包** - 支持下载离线镜像包,流式传输加防抖设计。
|
||||
- 📁 **GitHub 文件加速** - 加速 GitHub Release、Raw 文件下载,支持`api.github.com`,脚本嵌套加速等等
|
||||
- 🤖 **AI 模型库支持** - 支持 Hugging Face 模型下载加速
|
||||
- 🛡️ **智能限流** - IP 限流保护,防止滥用
|
||||
- 🚫 **仓库审计** - 强大的自定义黑名单,白名单,同时审计镜像仓库,和GitHub仓库
|
||||
- 🔍 **镜像搜索** - 在线搜索 Docker 镜像
|
||||
- ⚡ **轻量高效** - 基于 Go 语言,单二进制文件运行,资源占用低。
|
||||
- 🔧 **统一配置** - 统一配置管理,便于维护。
|
||||
- 🛡️ **完全自托管** - 避免依赖免费第三方服务的不稳定性,例如`cloudflare`等等。
|
||||
- 🚀 **多服务统一加速** - 单个程序即可统一加速 Docker、GitHub、Hugging Face 等多种服务,简化部署与管理。
|
||||
|
||||
|
||||
## 🚀 快速开始
|
||||
|
||||
### Docker部署(推荐)
|
||||
```
|
||||
docker run -d \
|
||||
--name hubproxy \
|
||||
-p 5000:5000 \
|
||||
--restart always \
|
||||
ghcr.io/sky22333/hubproxy
|
||||
```
|
||||
|
||||
|
||||
|
||||
### 一键脚本安装
|
||||
|
||||
```bash
|
||||
curl -fsSL https://raw.githubusercontent.com/sky22333/hubproxy/main/install.sh | sudo bash
|
||||
```
|
||||
|
||||
也可以直接下载二进制文件执行`./hubproxy`使用,无需配置文件即可启动,内置默认配置,支持所有功能。
|
||||
|
||||
这个脚本会:
|
||||
- 🔍 自动检测系统架构(AMD64/ARM64)
|
||||
- 📥 从 GitHub Releases 下载最新版本
|
||||
- ⚙️ 自动配置系统服务
|
||||
- 🔄 保留现有配置(升级时)
|
||||
|
||||
|
||||
|
||||
## 📖 使用方法
|
||||
|
||||
### Docker 镜像加速
|
||||
|
||||
```bash
|
||||
# 原命令
|
||||
docker pull nginx
|
||||
|
||||
# 使用加速
|
||||
docker pull yourdomain.com/nginx
|
||||
|
||||
# ghcr加速
|
||||
docker pull yourdomain.com/ghcr.io/sky22333/hubproxy
|
||||
|
||||
# 符合Docker Registry API v2标准的仓库都支持
|
||||
```
|
||||
|
||||
当然也支持配置为全局镜像加速,在主机上新建(或编辑)`/etc/docker/daemon.json`
|
||||
|
||||
在 `"registry-mirrors"` 中加入域名:
|
||||
|
||||
```json
|
||||
{
|
||||
"registry-mirrors": [
|
||||
"https://yourdomain.com"
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
若已设置其他加速地址,直接并列添加后保存,再执行 `sudo systemctl restart docker` 重启docker服务让配置生效。
|
||||
|
||||
### GitHub 文件加速
|
||||
|
||||
```bash
|
||||
# 原链接
|
||||
https://github.com/user/repo/releases/download/v1.0.0/file.tar.gz
|
||||
|
||||
# 加速链接
|
||||
https://yourdomain.com/https://github.com/user/repo/releases/download/v1.0.0/file.tar.gz
|
||||
|
||||
# 加速下载仓库
|
||||
git clone https://yourdomain.com/https://github.com/sky22333/hubproxy.git
|
||||
```
|
||||
|
||||
## ⚙️ 配置
|
||||
|
||||
<details>
|
||||
<summary>config.toml 配置说明</summary>
|
||||
|
||||
*此配置是默认配置,已经内置在程序中了*
|
||||
|
||||
```
|
||||
[server]
|
||||
host = "0.0.0.0"
|
||||
# 监听端口
|
||||
port = 5000
|
||||
# Github文件大小限制(字节),默认2GB
|
||||
fileSize = 2147483648
|
||||
# HTTP/2 多路复用,提升下载速度
|
||||
enableH2C = false
|
||||
|
||||
[rateLimit]
|
||||
# 每个IP每周期允许的请求数(注意Docker镜像会有多个层,会消耗多个次数)
|
||||
requestLimit = 500
|
||||
# 限流周期(小时)
|
||||
periodHours = 3.0
|
||||
|
||||
[security]
|
||||
# IP白名单,支持单个IP或IP段
|
||||
# 白名单中的IP不受限流限制
|
||||
whiteList = [
|
||||
"127.0.0.1",
|
||||
"172.17.0.0/16",
|
||||
"192.168.1.0/24"
|
||||
]
|
||||
|
||||
# IP黑名单,支持单个IP或IP段
|
||||
# 黑名单中的IP将被直接拒绝访问
|
||||
blackList = [
|
||||
"192.168.100.1",
|
||||
"192.168.100.0/24"
|
||||
]
|
||||
|
||||
[access]
|
||||
# 代理服务白名单(支持GitHub仓库和Docker镜像,支持通配符)
|
||||
# 只允许访问白名单中的仓库/镜像,为空时不限制
|
||||
whiteList = []
|
||||
|
||||
# 代理服务黑名单(支持GitHub仓库和Docker镜像,支持通配符)
|
||||
# 禁止访问黑名单中的仓库/镜像
|
||||
blackList = [
|
||||
"baduser/malicious-repo",
|
||||
"*/malicious-repo",
|
||||
"baduser/*"
|
||||
]
|
||||
|
||||
# 代理配置,支持有用户名/密码认证和无认证模式
|
||||
# 无认证: socks5://127.0.0.1:1080
|
||||
# 有认证: socks5://username:password@127.0.0.1:1080
|
||||
# 留空不使用代理
|
||||
proxy = ""
|
||||
|
||||
[download]
|
||||
# 批量下载离线镜像数量限制
|
||||
maxImages = 10
|
||||
|
||||
# Registry映射配置,支持多种镜像仓库上游
|
||||
[registries]
|
||||
|
||||
# GitHub Container Registry
|
||||
[registries."ghcr.io"]
|
||||
upstream = "ghcr.io"
|
||||
authHost = "ghcr.io/token"
|
||||
authType = "github"
|
||||
enabled = true
|
||||
|
||||
# Google Container Registry
|
||||
[registries."gcr.io"]
|
||||
upstream = "gcr.io"
|
||||
authHost = "gcr.io/v2/token"
|
||||
authType = "google"
|
||||
enabled = true
|
||||
|
||||
# Quay.io Container Registry
|
||||
[registries."quay.io"]
|
||||
upstream = "quay.io"
|
||||
authHost = "quay.io/v2/auth"
|
||||
authType = "quay"
|
||||
enabled = true
|
||||
|
||||
# Kubernetes Container Registry
|
||||
[registries."registry.k8s.io"]
|
||||
upstream = "registry.k8s.io"
|
||||
authHost = "registry.k8s.io"
|
||||
authType = "anonymous"
|
||||
enabled = true
|
||||
|
||||
[tokenCache]
|
||||
# 是否启用缓存(同时控制Token和Manifest缓存)显著提升性能
|
||||
enabled = true
|
||||
# 默认缓存时间(分钟)
|
||||
defaultTTL = "20m"
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
容器内的配置文件位于 `/root/config.toml`
|
||||
|
||||
脚本部署配置文件位于 `/opt/hubproxy/config.toml`
|
||||
|
||||
为了IP限流能够正常运行,反向代理需要传递IP头用来获取访客真实IP,以caddy为例:
|
||||
```
|
||||
example.com {
|
||||
reverse_proxy {
|
||||
to 127.0.0.1:5000
|
||||
header_up X-Real-IP {remote}
|
||||
header_up X-Forwarded-For {remote}
|
||||
header_up X-Forwarded-Proto {scheme}
|
||||
}
|
||||
}
|
||||
```
|
||||
cloudflare CDN:
|
||||
```
|
||||
example.com {
|
||||
reverse_proxy 127.0.0.1:5000 {
|
||||
header_up X-Forwarded-For {http.request.header.CF-Connecting-IP}
|
||||
header_up X-Real-IP {http.request.header.CF-Connecting-IP}
|
||||
header_up X-Forwarded-Proto https
|
||||
header_up X-Forwarded-Host {host}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
> 对于使用nginx反代的用户,Github加速提示`无效输入`的问题可以参见[issues/62](https://github.com/sky22333/hubproxy/issues/62#issuecomment-3219572440)
|
||||
|
||||
|
||||
## ⚠️ 免责声明
|
||||
|
||||
- 本程序仅供学习交流使用,请勿用于非法用途
|
||||
- 使用本程序需遵守当地法律法规
|
||||
- 作者不对使用者的任何行为承担责任
|
||||
|
||||
---
|
||||
|
||||
<div align="center">
|
||||
|
||||
**⭐ 如果这个项目对你有帮助,请给个 Star!⭐**
|
||||
|
||||
</div>
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
name: HubProxy
|
||||
tags:
|
||||
- Proxy
|
||||
- Docker
|
||||
- GitHub
|
||||
- DevOps
|
||||
- 加速
|
||||
title: 🚀 Docker 和 GitHub 加速代理服务器
|
||||
description: 一个轻量级、高性能的多功能代理服务,提供 Docker 镜像加速、GitHub 文件加速、离线镜像下载、AI 模型加速、智能限流等功能。
|
||||
additionalProperties:
|
||||
key: hubproxy
|
||||
name: HubProxy
|
||||
tags:
|
||||
- Tool
|
||||
- DevOps
|
||||
- Proxy
|
||||
shortDescZh: Docker & GitHub 镜像加速代理服务器,支持多功能加速与离线镜像
|
||||
shortDescEn: Lightweight proxy server for accelerating Docker, GitHub, and AI model downloads
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
website: https://github.com/sky22333/hubproxy
|
||||
github: https://github.com/sky22333/hubproxy
|
||||
document: https://github.com/sky22333/hubproxy
|
||||
description:
|
||||
en: A lightweight, high-performance proxy server for accelerating Docker images, GitHub files, Hugging Face models, and more. Supports offline image packages, intelligent rate limiting, and unified configuration.
|
||||
zh: 一个轻量级、高性能的多功能代理服务,支持 Docker 镜像加速、GitHub 文件加速、Hugging Face 模型下载、离线镜像包、智能限流等功能。
|
||||
zh-Hant: 輕量級高效能多功能代理服務,支援 Docker 鏡像加速、GitHub 檔案加速、Hugging Face 模型下載、離線鏡像包、智慧限流等功能。
|
||||
ja: 軽量で高性能な多機能プロキシサーバー。Docker イメージや GitHub ファイル、Hugging Face モデルの加速、オフラインイメージパッケージ、インテリジェントレート制限などをサポート。
|
||||
ms: Pelayan proksi ringan dan berprestasi tinggi untuk mempercepat imej Docker, fail GitHub, model Hugging Face, serta menyokong pakej imej luar talian dan had kadar pintar.
|
||||
pt-br: Servidor proxy leve e de alto desempenho para acelerar imagens Docker, arquivos do GitHub, modelos Hugging Face e muito mais. Suporta pacotes de imagens offline, limitação de taxa inteligente e configuração unificada.
|
||||
ru: Легковесный высокопроизводительный прокси-сервер для ускорения загрузки Docker-образов, файлов GitHub, моделей Hugging Face и др. Поддерживает офлайн-пакеты, интеллектуальное ограничение скорости и унифицированную конфигурацию.
|
||||
ko: 가볍고 고성능의 다기능 프록시 서버로 Docker 이미지, GitHub 파일, Hugging Face 모델 가속을 지원하며 오프라인 이미지 패키지, 지능형 속도 제한, 통합 설정을 제공합니다.
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
|
|
@ -0,0 +1,18 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
- default: 13485
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: HTTP Port
|
||||
labelZh: HTTP 端口
|
||||
label:
|
||||
en: HTTP Port
|
||||
ja: ポート
|
||||
ms: Port
|
||||
pt-br: Porta
|
||||
ru: Порт
|
||||
ko: 포트
|
||||
zh: HTTP 端口
|
||||
zh-Hant: HTTP 連接埠
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
|
|
@ -0,0 +1,90 @@
|
|||
[server]
|
||||
host = "0.0.0.0"
|
||||
# 监听端口
|
||||
port = 5000
|
||||
# Github文件大小限制(字节),默认2GB
|
||||
fileSize = 2147483648
|
||||
# HTTP/2 多路复用,提升下载速度
|
||||
enableH2C = false
|
||||
|
||||
[rateLimit]
|
||||
# 每个IP每周期允许的请求数(注意Docker镜像会有多个层,会消耗多个次数)
|
||||
requestLimit = 500
|
||||
# 限流周期(小时)
|
||||
periodHours = 3.0
|
||||
|
||||
[security]
|
||||
# IP白名单,支持单个IP或IP段
|
||||
# 白名单中的IP不受限流限制
|
||||
whiteList = [
|
||||
"127.0.0.1",
|
||||
"172.17.0.0/16",
|
||||
"192.168.1.0/24"
|
||||
]
|
||||
|
||||
# IP黑名单,支持单个IP或IP段
|
||||
# 黑名单中的IP将被直接拒绝访问
|
||||
blackList = [
|
||||
"192.168.100.1",
|
||||
"192.168.100.0/24"
|
||||
]
|
||||
|
||||
[access]
|
||||
# 代理服务白名单(支持GitHub仓库和Docker镜像,支持通配符)
|
||||
# 只允许访问白名单中的仓库/镜像,为空时不限制
|
||||
whiteList = []
|
||||
|
||||
# 代理服务黑名单(支持GitHub仓库和Docker镜像,支持通配符)
|
||||
# 禁止访问黑名单中的仓库/镜像
|
||||
blackList = [
|
||||
"baduser/malicious-repo",
|
||||
"*/malicious-repo",
|
||||
"baduser/*"
|
||||
]
|
||||
|
||||
# 代理配置,支持有用户名/密码认证和无认证模式
|
||||
# 无认证: socks5://127.0.0.1:1080
|
||||
# 有认证: socks5://username:password@127.0.0.1:1080
|
||||
# 留空不使用代理
|
||||
proxy = ""
|
||||
|
||||
[download]
|
||||
# 批量下载离线镜像数量限制
|
||||
maxImages = 10
|
||||
|
||||
# Registry映射配置,支持多种镜像仓库上游
|
||||
[registries]
|
||||
|
||||
# GitHub Container Registry
|
||||
[registries."ghcr.io"]
|
||||
upstream = "ghcr.io"
|
||||
authHost = "ghcr.io/token"
|
||||
authType = "github"
|
||||
enabled = true
|
||||
|
||||
# Google Container Registry
|
||||
[registries."gcr.io"]
|
||||
upstream = "gcr.io"
|
||||
authHost = "gcr.io/v2/token"
|
||||
authType = "google"
|
||||
enabled = true
|
||||
|
||||
# Quay.io Container Registry
|
||||
[registries."quay.io"]
|
||||
upstream = "quay.io"
|
||||
authHost = "quay.io/v2/auth"
|
||||
authType = "quay"
|
||||
enabled = true
|
||||
|
||||
# Kubernetes Container Registry
|
||||
[registries."registry.k8s.io"]
|
||||
upstream = "registry.k8s.io"
|
||||
authHost = "registry.k8s.io"
|
||||
authType = "anonymous"
|
||||
enabled = true
|
||||
|
||||
[tokenCache]
|
||||
# 是否启用缓存(同时控制Token和Manifest缓存)显著提升性能
|
||||
enabled = true
|
||||
# 默认缓存时间(分钟)
|
||||
defaultTTL = "20m"
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
services:
|
||||
hubproxy:
|
||||
image: ghcr.io/sky22333/hubproxy:latest
|
||||
container_name: ${CONTAINER_NAME}
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:5000"
|
||||
volumes:
|
||||
- ./data/config.toml:/root/config.toml
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: "1g"
|
||||
max-file: "2"
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
networks:
|
||||
- 1panel-network
|
||||
restart: always
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
After Width: | Height: | Size: 21 KiB |
|
|
@ -0,0 +1,193 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
- default: 23847
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: HTTP Port
|
||||
labelZh: HTTP 端口
|
||||
label:
|
||||
en: HTTP Port
|
||||
ja: ポート
|
||||
ms: Port
|
||||
pt-br: Porta
|
||||
ru: Порт
|
||||
ko: 포트
|
||||
zh: HTTP 端口
|
||||
zh-Hant: HTTP 連接埠
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
|
||||
- default: oidc
|
||||
envKey: PANEL_OAUTH2_PROXY_PROVIDER
|
||||
labelEn: Provider
|
||||
labelZh: 身份提供商
|
||||
label:
|
||||
en: Provider
|
||||
ja: プロバイダー
|
||||
ms: Penyedia
|
||||
pt-br: Provedor
|
||||
ru: Провайдер
|
||||
ko: 제공자
|
||||
zh: 身份提供商
|
||||
zh-Hant: 身份提供商
|
||||
required: true
|
||||
type: text
|
||||
|
||||
- default: ""
|
||||
envKey: PANEL_OAUTH2_PROXY_CLIENT_ID
|
||||
labelEn: Client ID
|
||||
labelZh: 客户端ID
|
||||
label:
|
||||
en: Client ID
|
||||
ja: クライアントID
|
||||
ms: ID Klien
|
||||
pt-br: ID do Cliente
|
||||
ru: ID клиента
|
||||
ko: 클라이언트 ID
|
||||
zh: 客户端ID
|
||||
zh-Hant: 客戶端ID
|
||||
required: true
|
||||
type: text
|
||||
|
||||
- default: ""
|
||||
envKey: PANEL_OAUTH2_PROXY_CLIENT_SECRET
|
||||
labelEn: Client Secret
|
||||
labelZh: 客户端密钥
|
||||
label:
|
||||
en: Client Secret
|
||||
ja: クライアントシークレット
|
||||
ms: Rahsia Klien
|
||||
pt-br: Segredo do Cliente
|
||||
ru: Секрет клиента
|
||||
ko: 클라이언트 비밀
|
||||
zh: 客户端密钥
|
||||
zh-Hant: 客戶端密鑰
|
||||
required: true
|
||||
type: password
|
||||
|
||||
- default: "https://example.com/oauth2/callback"
|
||||
envKey: PANEL_OAUTH2_PROXY_REDIRECT_URL
|
||||
labelEn: Redirect URL
|
||||
labelZh: 回调地址
|
||||
label:
|
||||
en: Redirect URL
|
||||
ja: リダイレクトURL
|
||||
ms: URL Pengalihan
|
||||
pt-br: URL de Redirecionamento
|
||||
ru: URL перенаправления
|
||||
ko: 리디렉션 URL
|
||||
zh: 回调地址
|
||||
zh-Hant: 回調地址
|
||||
required: true
|
||||
type: text
|
||||
|
||||
- default: "https://keycloak.example.com/realms/master"
|
||||
envKey: PANEL_OAUTH2_PROXY_OIDC_ISSUER_URL
|
||||
labelEn: OIDC Issuer URL
|
||||
labelZh: OIDC 颁发者地址
|
||||
label:
|
||||
en: OIDC Issuer URL
|
||||
ja: OIDC発行者URL
|
||||
ms: URL Pengeluar OIDC
|
||||
pt-br: URL do emissor OIDC
|
||||
ru: URL издателя OIDC
|
||||
ko: OIDC 발급자 URL
|
||||
zh: OIDC 颁发者地址
|
||||
zh-Hant: OIDC 頒發者地址
|
||||
required: true
|
||||
type: text
|
||||
|
||||
- default: ""
|
||||
envKey: PANEL_OAUTH2_PROXY_COOKIE_SECRET
|
||||
labelEn: Cookie Secret
|
||||
labelZh: Cookie 密钥
|
||||
label:
|
||||
en: Cookie Secret
|
||||
ja: Cookieシークレット
|
||||
ms: Rahsia Cookie
|
||||
pt-br: Segredo do Cookie
|
||||
ru: Секрет Cookie
|
||||
ko: 쿠키 비밀
|
||||
zh: Cookie 密钥
|
||||
zh-Hant: Cookie 密鑰
|
||||
required: true
|
||||
type: password
|
||||
|
||||
- default: "*"
|
||||
envKey: PANEL_OAUTH2_PROXY_EMAIL_DOMAINS
|
||||
labelEn: Email Domains
|
||||
labelZh: 邮箱域名
|
||||
label:
|
||||
en: Email Domains
|
||||
ja: メールドメイン
|
||||
ms: Domain E-mel
|
||||
pt-br: Domínios de Email
|
||||
ru: Домены электронной почты
|
||||
ko: 이메일 도메인
|
||||
zh: 邮箱域名
|
||||
zh-Hant: 郵箱域名
|
||||
required: true
|
||||
type: text
|
||||
|
||||
- default: "false"
|
||||
envKey: PANEL_OAUTH2_PROXY_INSECURE_OIDC_ALLOW_UNVERIFIED_EMAIL
|
||||
labelEn: Allow Unverified Email
|
||||
labelZh: 允许未验证邮箱
|
||||
label:
|
||||
en: Allow Unverified Email
|
||||
ja: 未確認メールを許可
|
||||
ms: Benarkan E-mel Tidak Disahkan
|
||||
pt-br: Permitir Email Não Verificado
|
||||
ru: Разрешить неподтвержденную почту
|
||||
ko: 확인되지 않은 이메일 허용
|
||||
zh: 允许未验证邮箱
|
||||
zh-Hant: 允許未驗證郵箱
|
||||
required: false
|
||||
type: select
|
||||
values:
|
||||
- label: 启用
|
||||
value: "true"
|
||||
- label: 禁用
|
||||
value: "false"
|
||||
|
||||
- default: "S256"
|
||||
envKey: PANEL_OAUTH2_PROXY_CODE_CHALLENGE_METHOD
|
||||
labelEn: Code Challenge Method
|
||||
labelZh: 代码挑战方法
|
||||
label:
|
||||
en: Code Challenge Method
|
||||
ja: コードチャレンジ方式
|
||||
ms: Kaedah Cabaran Kod
|
||||
pt-br: Método de Desafio de Código
|
||||
ru: Метод проверки кода
|
||||
ko: 코드 챌린지 방법
|
||||
zh: 代码挑战方法
|
||||
zh-Hant: 代碼挑戰方法
|
||||
required: false
|
||||
type: select
|
||||
values:
|
||||
- label: S256
|
||||
value: S256
|
||||
- label: plain
|
||||
value: plain
|
||||
|
||||
- default: "true"
|
||||
envKey: PANEL_OAUTH2_PROXY_REVERSE_PROXY
|
||||
labelEn: Reverse Proxy
|
||||
labelZh: 启用反向代理
|
||||
label:
|
||||
en: Reverse Proxy
|
||||
ja: リバースプロキシ
|
||||
ms: Proksi Songsang
|
||||
pt-br: Proxy Reverso
|
||||
ru: Обратный прокси
|
||||
ko: 리버스 프록시
|
||||
zh: 启用反向代理
|
||||
zh-Hant: 啟用反向代理
|
||||
required: false
|
||||
type: select
|
||||
values:
|
||||
- label: 启用
|
||||
value: "true"
|
||||
- label: 禁用
|
||||
value: "false"
|
||||
|
|
@ -0,0 +1,27 @@
|
|||
services:
|
||||
oauth2_proxy:
|
||||
image: quay.io/oauth2-proxy/oauth2-proxy:v7.12.0
|
||||
container_name: ${CONTAINER_NAME}
|
||||
environment:
|
||||
- OAUTH2_PROXY_PROVIDER=${PANEL_OAUTH2_PROXY_PROVIDER}
|
||||
- OAUTH2_PROXY_CLIENT_ID=${PANEL_OAUTH2_PROXY_CLIENT_ID}
|
||||
- OAUTH2_PROXY_CLIENT_SECRET=${PANEL_OAUTH2_PROXY_CLIENT_SECRET}
|
||||
- OAUTH2_PROXY_REDIRECT_URL=${PANEL_OAUTH2_PROXY_REDIRECT_URL}
|
||||
- OAUTH2_PROXY_OIDC_ISSUER_URL=${PANEL_OAUTH2_PROXY_OIDC_ISSUER_URL}
|
||||
- OAUTH2_PROXY_COOKIE_SECRET=${PANEL_OAUTH2_PROXY_COOKIE_SECRET}
|
||||
- OAUTH2_PROXY_EMAIL_DOMAINS=${PANEL_OAUTH2_PROXY_EMAIL_DOMAINS}
|
||||
- OAUTH2_PROXY_INSECURE_OIDC_ALLOW_UNVERIFIED_EMAIL=${PANEL_OAUTH2_PROXY_INSECURE_OIDC_ALLOW_UNVERIFIED_EMAIL}
|
||||
- OAUTH2_PROXY_CODE_CHALLENGE_METHOD=${PANEL_OAUTH2_PROXY_CODE_CHALLENGE_METHOD}
|
||||
- OAUTH2_PROXY_REVERSE_PROXY=${PANEL_OAUTH2_PROXY_REVERSE_PROXY}
|
||||
- OAUTH2_PROXY_HTTP_ADDRESS=0.0.0.0:4180
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:4180"
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
networks:
|
||||
- 1panel-network
|
||||
restart: always
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
|
@ -0,0 +1,106 @@
|
|||
# OAuth2 Proxy
|
||||
|
||||
[OAuth2 Proxy](https://oauth2-proxy.github.io/oauth2-proxy/) 是一个反向代理与认证中间件,支持通过 Google、GitHub、GitLab、Keycloak、OIDC 等多种身份提供商进行 OAuth2 认证。常用于在已有 Web 服务前增加统一登录认证。
|
||||
|
||||
---
|
||||
|
||||
## 功能特性
|
||||
|
||||
* 支持 OAuth2 和 OpenID Connect (OIDC) 协议
|
||||
* 多身份提供商支持(Google、GitHub、GitLab、Microsoft、Keycloak 等)
|
||||
* 提供登录保护(适用于内部应用、管理面板等)
|
||||
* 支持将认证信息传递给后端应用(Header / Cookie)
|
||||
* 可与 Nginx、Traefik、Envoy 等反向代理协作使用
|
||||
|
||||
---
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 使用 Docker
|
||||
|
||||
```bash
|
||||
docker run -p 4180:4180 \
|
||||
-e OAUTH2_PROXY_PROVIDER=google \
|
||||
-e OAUTH2_PROXY_CLIENT_ID=<client-id> \
|
||||
-e OAUTH2_PROXY_CLIENT_SECRET=<client-secret> \
|
||||
-e OAUTH2_PROXY_COOKIE_SECRET=$(openssl rand -base64 32 | head -c 32 | base64) \
|
||||
-e OAUTH2_PROXY_REDIRECT_URL=https://your.domain.com/oauth2/callback \
|
||||
-e OAUTH2_PROXY_EMAIL_DOMAINS=* \
|
||||
quay.io/oauth2-proxy/oauth2-proxy:latest
|
||||
```
|
||||
|
||||
容器启动后,访问 `http://localhost:4180` 即会跳转到 OAuth2 提供商登录。
|
||||
|
||||
---
|
||||
|
||||
### 使用 Helm (Kubernetes)
|
||||
|
||||
```bash
|
||||
helm repo add oauth2-proxy https://oauth2-proxy.github.io/manifests
|
||||
helm repo update
|
||||
helm install oauth2-proxy/oauth2-proxy \
|
||||
--generate-name \
|
||||
--set config.clientID=<client-id> \
|
||||
--set config.clientSecret=<client-secret> \
|
||||
--set config.cookieSecret=$(openssl rand -base64 32 | head -c 32 | base64) \
|
||||
--set config.provider=google
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 配置示例
|
||||
|
||||
### 基本配置文件 `oauth2-proxy.cfg`
|
||||
|
||||
```ini
|
||||
provider = "oidc"
|
||||
client_id = "your-client-id"
|
||||
client_secret = "your-client-secret"
|
||||
redirect_url = "https://your.domain.com/oauth2/callback"
|
||||
oidc_issuer_url = "https://accounts.example.com"
|
||||
email_domains = ["*"]
|
||||
cookie_secret = "random-cookie-secret"
|
||||
```
|
||||
|
||||
运行:
|
||||
|
||||
```bash
|
||||
oauth2-proxy --config ./oauth2-proxy.cfg
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Nginx 反向代理示例
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 443 ssl;
|
||||
server_name app.example.com;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:4180;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 常用环境变量
|
||||
|
||||
| 变量名 | 说明 |
|
||||
| ---------------------------- | ---------------------------------- |
|
||||
| `OAUTH2_PROXY_PROVIDER` | 身份提供商类型,如 `google`、`github`、`oidc` |
|
||||
| `OAUTH2_PROXY_CLIENT_ID` | OAuth2 客户端 ID |
|
||||
| `OAUTH2_PROXY_CLIENT_SECRET` | OAuth2 客户端密钥 |
|
||||
| `OAUTH2_PROXY_COOKIE_SECRET` | 随机字符串,用于加密 Cookie |
|
||||
| `OAUTH2_PROXY_REDIRECT_URL` | 回调地址 |
|
||||
| `OAUTH2_PROXY_EMAIL_DOMAINS` | 允许的邮箱域,`*` 表示允许所有 |
|
||||
|
||||
---
|
||||
|
||||
## 参考资料
|
||||
|
||||
* [官方文档](https://oauth2-proxy.github.io/oauth2-proxy/)
|
||||
* [GitHub 仓库](https://github.com/oauth2-proxy/oauth2-proxy)
|
||||
|
|
@ -0,0 +1,35 @@
|
|||
name: OAuth2 Proxy
|
||||
tags:
|
||||
- 开发工具
|
||||
- 安全
|
||||
title: OAuth2身份认证代理,支持多种身份提供商的统一登录解决方案
|
||||
description: 一个支持多种OAuth2和OIDC身份提供商的认证代理工具,常用于在现有Web服务前添加统一登录认证。
|
||||
additionalProperties:
|
||||
key: oauth2-proxy
|
||||
name: OAuth2 Proxy
|
||||
tags:
|
||||
- DevTool
|
||||
- Security
|
||||
shortDescZh: OAuth2认证代理,支持多身份提供商的一站式登录认证解决方案
|
||||
shortDescEn: OAuth2 authentication proxy with multi-provider SSO support
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
website: https://oauth2-proxy.github.io/oauth2-proxy/
|
||||
github: https://github.com/oauth2-proxy/oauth2-proxy
|
||||
document: https://oauth2-proxy.github.io/oauth2-proxy/
|
||||
description:
|
||||
en: A reverse proxy and authentication provider that provides login using OAuth2 and OpenID Connect providers, suitable for securing existing web services with SSO.
|
||||
zh: 一个反向代理和认证中间件,支持多种OAuth2和OIDC身份提供商,为现有Web服务提供统一登录保护。
|
||||
zh-Hant: 一個反向代理與認證中介軟體,支援多種OAuth2和OIDC身份提供商,為既有Web服務提供單一登入保護。
|
||||
ja: 複数のOAuth2およびOIDCプロバイダーに対応した認証プロキシで、既存のWebサービスにSSO保護を追加可能。
|
||||
ms: Proksi pengesahan yang menyokong penyedia OAuth2 dan OIDC pelbagai, sesuai untuk melindungi perkhidmatan web sedia ada dengan SSO.
|
||||
pt-br: Proxy de autenticação que suporta múltiplos provedores OAuth2 e OIDC, adequado para proteger serviços web existentes com SSO.
|
||||
ru: Обратный прокси и провайдер аутентификации, поддерживающий OAuth2 и OIDC, обеспечивающий единую точку входа для существующих веб-сервисов.
|
||||
ko: 다양한 OAuth2 및 OIDC 제공자를 지원하는 인증 프록시로, 기존 웹 서비스에 단일 로그인 보호를 제공합니다.
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
- ppc64le
|
||||
- arm/v7
|
||||
- s390x
|
||||
|
After Width: | Height: | Size: 8.9 KiB |
|
|
@ -0,0 +1,21 @@
|
|||
# Termix
|
||||
|
||||
🖥️ **Termix** 是一个跨平台的多功能终端工具,支持多种终端协议和插件扩展,帮助开发者更高效地管理和使用命令行环境。
|
||||
|
||||
## 特性
|
||||
|
||||
- 支持多平台(Linux / macOS / Windows)
|
||||
- 多终端协议兼容
|
||||
- 插件化扩展,满足不同场景需求
|
||||
- 界面简洁,使用方便
|
||||
|
||||
## 快速开始
|
||||
|
||||
1. 部署应用后,访问服务地址即可开始使用。
|
||||
2. 根据需要安装或启用插件,扩展更多功能。
|
||||
3. 在配置文件中自定义参数,以适配个人工作流。
|
||||
|
||||
## 项目地址
|
||||
|
||||
- GitHub: [https://github.com/LukeGus/Termix](https://github.com/LukeGus/Termix)
|
||||
- 文档: [https://github.com/LukeGus/Termix#readme](https://github.com/LukeGus/Termix#readme)
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
name: Termix
|
||||
tags:
|
||||
- 工具
|
||||
- 终端
|
||||
title: 多功能跨平台终端工具
|
||||
description: 🖥️ Termix 是一个跨平台的终端工具,支持多种终端协议和插件扩展,帮助开发者更高效地管理和使用命令行环境。
|
||||
additionalProperties:
|
||||
key: termix
|
||||
name: Termix
|
||||
tags:
|
||||
- Tool
|
||||
- Terminal
|
||||
shortDescZh: 多功能跨平台终端工具
|
||||
shortDescEn: A versatile cross-platform terminal tool
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
recommend: 0
|
||||
website: https://github.com/LukeGus/Termix
|
||||
github: https://github.com/LukeGus/Termix
|
||||
document: https://github.com/LukeGus/Termix
|
||||
description:
|
||||
en: 🖥️ Termix is a versatile cross-platform terminal tool that supports multiple terminal protocols, plugins, and customizations, making it easier to manage and enhance your command-line experience.
|
||||
zh: 🖥️ Termix 是一个多功能的跨平台终端工具,支持多种终端协议、插件与个性化扩展,帮助开发者更高效地管理和优化命令行体验。
|
||||
zh-Hant: 🖥️ Termix 是一個多功能的跨平台終端工具,支援多種終端協議、外掛與自訂擴展,幫助開發者更高效地管理和優化命令列體驗。
|
||||
ja: 🖥️ Termix は、多くのターミナルプロトコルやプラグイン、カスタマイズに対応した多機能クロスプラットフォームターミナルツールで、コマンドライン体験を効率的に管理・向上させます。
|
||||
ms: 🖥️ Termix ialah alat terminal merentas platform yang serba boleh, menyokong pelbagai protokol terminal, pemalam dan penyesuaian untuk memudahkan pengurusan serta meningkatkan pengalaman baris perintah.
|
||||
pt-br: 🖥️ Termix é uma ferramenta de terminal multiplataforma versátil, com suporte a vários protocolos, plugins e personalizações, tornando a experiência de linha de comando mais eficiente.
|
||||
ru: 🖥️ Termix — это многофункциональный кроссплатформенный терминал, поддерживающий различные протоколы, плагины и кастомизации, упрощающий работу с командной строкой.
|
||||
ko: 🖥️ Termix는 다양한 터미널 프로토콜, 플러그인 및 사용자 정의를 지원하는 다기능 크로스플랫폼 터미널 도구로, 명령줄 경험을 보다 효율적으로 관리하고 향상시킬 수 있습니다.
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
|
After Width: | Height: | Size: 7.4 KiB |
|
|
@ -0,0 +1,21 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
# HTTP 端口
|
||||
- default: 28324
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: HTTP Port
|
||||
labelZh: HTTP 端口
|
||||
label:
|
||||
en: HTTP Port
|
||||
ja: HTTPポート
|
||||
ms: Port HTTP
|
||||
pt-br: Porta HTTP
|
||||
ru: HTTP порт
|
||||
ko: HTTP 포트
|
||||
zh: HTTP 端口
|
||||
zh-Hant: HTTP 連接埠
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
services:
|
||||
termix:
|
||||
image: ghcr.io/lukegus/termix:release-1.7.3
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:8080
|
||||
|
||||
networks:
|
||||
- 1panel-network
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
environment:
|
||||
PORT: "8080"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
|
@ -0,0 +1,185 @@
|
|||
additionalProperties:
|
||||
formFields:
|
||||
- default: 14389
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: HTTP Port
|
||||
labelZh: HTTP 端口
|
||||
label:
|
||||
en: HTTP Port
|
||||
ja: ポート
|
||||
ms: Port
|
||||
pt-br: Porta
|
||||
ru: Порт
|
||||
ko: 포트
|
||||
zh: HTTP 端口
|
||||
zh-Hant: HTTP 連接埠
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
|
||||
- default: "https://sso.example.com"
|
||||
envKey: PANEL_TINYAUTH_APP_URL
|
||||
labelEn: App URL
|
||||
labelZh: 应用地址(结尾不要添加斜杠)
|
||||
label:
|
||||
en: App URL
|
||||
ja: アプリURL
|
||||
ms: URL Aplikasi
|
||||
pt-br: URL do Aplicativo
|
||||
ru: URL приложения
|
||||
ko: 앱 URL
|
||||
zh: 应用地址(结尾不要添加斜杠)
|
||||
zh-Hant: 應用地址
|
||||
required: false
|
||||
type: text
|
||||
|
||||
- default: ""
|
||||
envKey: PANEL_TINYAUTH_SECRET
|
||||
labelEn: Secret
|
||||
labelZh: 密钥
|
||||
label:
|
||||
en: Secret
|
||||
ja: シークレット
|
||||
ms: Rahsia
|
||||
pt-br: Segredo
|
||||
ru: Секрет
|
||||
ko: 비밀
|
||||
zh: 密钥
|
||||
zh-Hant: 密鑰
|
||||
required: false
|
||||
type: password
|
||||
|
||||
- default: "86400"
|
||||
envKey: PANEL_TINYAUTH_SESSION_EXPIRY
|
||||
labelEn: Session Expiry (seconds)
|
||||
labelZh: 会话过期时间(秒)
|
||||
label:
|
||||
en: Session Expiry (seconds)
|
||||
ja: セッション有効期限(秒)
|
||||
ms: Tamat Sesi (saat)
|
||||
pt-br: Expiração da Sessão (segundos)
|
||||
ru: Время жизни сессии (секунды)
|
||||
ko: 세션 만료 (초)
|
||||
zh: 会话过期时间(秒)
|
||||
zh-Hant: 會話過期時間(秒)
|
||||
required: false
|
||||
type: number
|
||||
|
||||
- default: "TinyAuth"
|
||||
envKey: PANEL_TINYAUTH_APP_TITLE
|
||||
labelEn: App Title
|
||||
labelZh: 应用标题
|
||||
label:
|
||||
en: App Title
|
||||
ja: アプリタイトル
|
||||
ms: Tajuk Aplikasi
|
||||
pt-br: Título do Aplicativo
|
||||
ru: Заголовок приложения
|
||||
ko: 앱 제목
|
||||
zh: 应用标题
|
||||
zh-Hant: 應用標題
|
||||
required: false
|
||||
type: text
|
||||
|
||||
- default: ""
|
||||
envKey: PANEL_TINYAUTH_OAUTH_AUTO_REDIRECT
|
||||
labelEn: Auto Redirect Provider
|
||||
labelZh: 自动跳转到登录页面
|
||||
label:
|
||||
en: Auto Redirect Provider
|
||||
ja: 自動リダイレクトプロバイダー
|
||||
ms: Penyedia Pengalihan Automatik
|
||||
pt-br: Provedor de Redirecionamento Automático
|
||||
ru: Автоматический редирект провайдера
|
||||
ko: 자동 리디렉션 제공자
|
||||
zh: 自动跳转到登录页面
|
||||
zh-Hant: 自動跳轉到登錄頁面
|
||||
required: false
|
||||
type: select
|
||||
values:
|
||||
- label: "关闭"
|
||||
value: "none"
|
||||
- label: "开启"
|
||||
value: "PROVIDER_ID_PLACEHOLDER" # 后面会替换掉为对应的提供商
|
||||
|
||||
- default: ""
|
||||
envKey: PANEL_TINYAUTH_BACKGROUND_IMAGE
|
||||
labelEn: Background Image
|
||||
labelZh: 背景图片
|
||||
label:
|
||||
en: Background Image
|
||||
ja: 背景画像
|
||||
ms: Imej Latar Belakang
|
||||
pt-br: Imagem de Fundo
|
||||
ru: Фоновое изображение
|
||||
ko: 배경 이미지
|
||||
zh: 背景图片
|
||||
zh-Hant: 背景圖片
|
||||
required: false
|
||||
type: text
|
||||
|
||||
- default: "github"
|
||||
envKey: PANEL_TINYAUTH_PROVIDER_ID
|
||||
labelEn: Provider ID
|
||||
labelZh: 提供商ID(仅填写一个,名称任意,如果为github或google,后面参数仅需要填写client_id和client_secret)
|
||||
label:
|
||||
en: Provider ID
|
||||
ja: プロバイダーID
|
||||
ms: ID Penyedia
|
||||
pt-br: ID do Provedor
|
||||
ru: ID провайдера
|
||||
ko: 자동 리디렉션 제공자
|
||||
zh: 提供商ID(仅填写一个,名称任意,如果为github或google,后面参数仅需要填写client_id和client_secret)
|
||||
zh-Hant: 供應商ID(僅填寫一個,名稱任意,如果為github或google,後面參數僅需要填寫client_id和client_secret)
|
||||
required: True
|
||||
type: text
|
||||
|
||||
# Generic
|
||||
- default: ""
|
||||
envKey: PANEL_TINYAUTH_GENERIC_CLIENT_ID
|
||||
labelEn: Generic Client ID
|
||||
labelZh: 通用客户端ID
|
||||
required: true
|
||||
type: text
|
||||
|
||||
- default: ""
|
||||
envKey: PANEL_TINYAUTH_GENERIC_CLIENT_SECRET
|
||||
labelEn: Generic Client Secret
|
||||
labelZh: 通用客户端密钥
|
||||
required: true
|
||||
type: password
|
||||
|
||||
- default: ""
|
||||
envKey: PANEL_TINYAUTH_GENERIC_NAME
|
||||
labelEn: Generic Provider Name
|
||||
labelZh: 通用提供商名称
|
||||
required: false
|
||||
type: text
|
||||
|
||||
- default: ""
|
||||
envKey: PANEL_TINYAUTH_GENERIC_AUTH_URL
|
||||
labelEn: Generic Auth URL
|
||||
labelZh: 通用认证地址
|
||||
required: false
|
||||
type: text
|
||||
|
||||
- default: ""
|
||||
envKey: PANEL_TINYAUTH_GENERIC_TOKEN_URL
|
||||
labelEn: Generic Token URL
|
||||
labelZh: 通用令牌地址
|
||||
required: false
|
||||
type: text
|
||||
|
||||
- default: ""
|
||||
envKey: PANEL_TINYAUTH_GENERIC_USER_INFO_URL
|
||||
labelEn: Generic User Info URL
|
||||
labelZh: 通用用户信息地址
|
||||
required: false
|
||||
type: text
|
||||
|
||||
- default: ""
|
||||
envKey: PANEL_TINYAUTH_GENERIC_SCOPES
|
||||
labelEn: Generic Scopes
|
||||
labelZh: 通用范围
|
||||
required: false
|
||||
type: text
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
services:
|
||||
tinyauth:
|
||||
image: ghcr.io/steveiliop56/tinyauth:v4.0.1
|
||||
container_name: ${CONTAINER_NAME}
|
||||
environment:
|
||||
# ---- 通用配置 ----
|
||||
- APP_URL=${PANEL_TINYAUTH_APP_URL}
|
||||
- SECRET=${PANEL_TINYAUTH_SECRET}
|
||||
- SESSION_EXPIRY=${PANEL_TINYAUTH_SESSION_EXPIRY}
|
||||
- APP_TITLE=${PANEL_TINYAUTH_APP_TITLE}
|
||||
- OAUTH_AUTO_REDIRECT=${PANEL_TINYAUTH_OAUTH_AUTO_REDIRECT}
|
||||
- BACKGROUND_IMAGE=${PANEL_TINYAUTH_BACKGROUND_IMAGE}
|
||||
|
||||
# ---- Generic (示例 Linux.Do) ----
|
||||
- PROVIDERS_PLACEHOLDER_CLIENT_ID=${PANEL_TINYAUTH_GENERIC_CLIENT_ID}
|
||||
- PROVIDERS_PLACEHOLDER_CLIENT_SECRET=${PANEL_TINYAUTH_GENERIC_CLIENT_SECRET}
|
||||
- PROVIDERS_PLACEHOLDER_NAME=${PANEL_TINYAUTH_GENERIC_NAME}
|
||||
- PROVIDERS_PLACEHOLDER_AUTH_URL=${PANEL_TINYAUTH_GENERIC_AUTH_URL}
|
||||
- PROVIDERS_PLACEHOLDER_TOKEN_URL=${PANEL_TINYAUTH_GENERIC_TOKEN_URL}
|
||||
- PROVIDERS_PLACEHOLDER_USER_INFO_URL=${PANEL_TINYAUTH_GENERIC_USER_INFO_URL}
|
||||
- PROVIDERS_PLACEHOLDER_REDIRECT_URL=${PANEL_TINYAUTH_APP_URL}/api/oauth/callback/${PANEL_TINYAUTH_PROVIDER_ID}
|
||||
- PROVIDERS_PLACEHOLDER_SCOPES=${PANEL_TINYAUTH_GENERIC_SCOPES}
|
||||
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:3000"
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
networks:
|
||||
- 1panel-network
|
||||
restart: always
|
||||
volumes:
|
||||
- ./data:/data
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
|
@ -0,0 +1,37 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# 确保.env存在
|
||||
if [ ! -f ".env" ]; then
|
||||
echo "❌ 未找到 .env 文件"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 读取 PANEL_TINYAUTH_PROVIDER_ID 变量
|
||||
PANEL_TINYAUTH_PROVIDER_ID=$(grep '^PANEL_TINYAUTH_PROVIDER_ID=' .env | cut -d '=' -f2- | tr -d '"')
|
||||
# 去掉 PANEL_TINYAUTH_PROVIDER_ID 中存在的单引号或者双引号
|
||||
PANEL_TINYAUTH_PROVIDER_ID=$(echo "$PANEL_TINYAUTH_PROVIDER_ID" | tr -d '"' | tr -d "'")
|
||||
|
||||
if [ -z "$PANEL_TINYAUTH_PROVIDER_ID" ]; then
|
||||
echo "❌ 未在 .env 中找到 PANEL_TINYAUTH_PROVIDER_ID"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 生成大写版本
|
||||
UPPER_ID=$(echo "$PANEL_TINYAUTH_PROVIDER_ID" | tr '[:lower:]' '[:upper:]')
|
||||
|
||||
# 替换 .env 中的 PROVIDER_ID_PLACEHOLDER
|
||||
echo "🧩 替换 .env 文件中的 PROVIDER_ID_PLACEHOLDER → $PANEL_TINYAUTH_PROVIDER_ID"
|
||||
sed -i "s/PROVIDER_ID_PLACEHOLDER/${PANEL_TINYAUTH_PROVIDER_ID}/g" .env
|
||||
|
||||
# 替换 docker-compose.yml 中的 PROVIDERS_PLACEHOLDER
|
||||
if [ ! -f "docker-compose.yml" ]; then
|
||||
echo "❌ 未找到 docker-compose.yml 文件"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "🧩 替换 docker-compose.yml 文件中的 PROVIDERS_PLACEHOLDER → PROVIDERS_${UPPER_ID}"
|
||||
sed -i "s/PROVIDERS_PLACEHOLDER/PROVIDERS_${UPPER_ID}/g" docker-compose.yml
|
||||
|
||||
# 6️⃣ 提示完成
|
||||
echo "✅ 替换完成!"
|
||||
|
|
@ -0,0 +1,33 @@
|
|||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
# 确保.env存在
|
||||
if [ ! -f ".env" ]; then
|
||||
echo "❌ 未找到 .env 文件"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 读取 PANEL_TINYAUTH_PROVIDER_ID 变量
|
||||
PANEL_TINYAUTH_PROVIDER_ID=$(grep '^PANEL_TINYAUTH_PROVIDER_ID=' .env | cut -d '=' -f2- | tr -d '"')
|
||||
# 去掉 PANEL_TINYAUTH_PROVIDER_ID 中存在的单引号或者双引号
|
||||
PANEL_TINYAUTH_PROVIDER_ID=$(echo "$PANEL_TINYAUTH_PROVIDER_ID" | tr -d '"' | tr -d "'")
|
||||
|
||||
if [ -z "$PANEL_TINYAUTH_PROVIDER_ID" ]; then
|
||||
echo "❌ 未在 .env 中找到 PANEL_TINYAUTH_PROVIDER_ID"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 生成大写版本
|
||||
UPPER_ID=$(echo "$PANEL_TINYAUTH_PROVIDER_ID" | tr '[:lower:]' '[:upper:]')
|
||||
|
||||
# 替换 docker-compose.yml 中的 PROVIDERS_PLACEHOLDER
|
||||
if [ ! -f "docker-compose.yml" ]; then
|
||||
echo "❌ 未找到 docker-compose.yml 文件"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "🧩 替换 docker-compose.yml 文件中的 PROVIDERS_PLACEHOLDER → PROVIDERS_${UPPER_ID}"
|
||||
sed -i "s/PROVIDERS_PLACEHOLDER/PROVIDERS_${UPPER_ID}/g" docker-compose.yml
|
||||
|
||||
# 提示完成
|
||||
echo "✅ 替换完成!"
|
||||
|
|
@ -0,0 +1,78 @@
|
|||
# TinyAuth
|
||||
|
||||
TinyAuth 是一个轻量级的 OAuth2 / OIDC 认证代理,适合为已有的 Web 应用、面板或服务添加登录保护。你可以将它部署在应用之前,通过标准的身份提供商(如 Casdoor、Keycloak、Auth0 等)实现单点登录(SSO)。
|
||||
|
||||
## 功能特性
|
||||
|
||||
* 支持 OAuth2 / OpenID Connect 协议
|
||||
* 支持多身份提供商配置
|
||||
* 可保护现有 Web 服务(无需修改应用本身)
|
||||
* 简单的反向代理模式
|
||||
* 支持多种回调和重定向策略
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 1. 部署 TinyAuth
|
||||
|
||||
使用 Docker 运行:
|
||||
|
||||
```bash
|
||||
docker run -d \
|
||||
--name=tinyauth \
|
||||
-p 8080:8080 \
|
||||
-v $(pwd)/config.yml:/app/config.yml \
|
||||
ghcr.io/tinyauth/tinyauth:latest
|
||||
```
|
||||
|
||||
### 2. 配置示例
|
||||
|
||||
在 `config.yml` 中配置认证提供商(例如 Casdoor):
|
||||
|
||||
```yaml
|
||||
server:
|
||||
port: 8080
|
||||
|
||||
providers:
|
||||
- id: casdoor
|
||||
name: Casdoor
|
||||
client_id: your-client-id
|
||||
client_secret: your-client-secret
|
||||
issuer: https://auth.example.com
|
||||
redirect_url: https://tinyauth.example.com/callback
|
||||
```
|
||||
|
||||
### 3. Nginx 反向代理示例
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
server_name app.example.com;
|
||||
|
||||
location / {
|
||||
proxy_pass http://127.0.0.1:8080;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 4. 登录流程
|
||||
|
||||
1. 访问受保护的应用(如 `app.example.com`)
|
||||
2. TinyAuth 会跳转到认证提供商(如 Casdoor)登录
|
||||
3. 登录成功后跳转回应用
|
||||
|
||||
## 配置参数
|
||||
|
||||
常见参数:
|
||||
|
||||
| 参数 | 描述 |
|
||||
| --------------- | ----------------- |
|
||||
| `client_id` | OAuth2 客户端 ID |
|
||||
| `client_secret` | OAuth2 客户端密钥 |
|
||||
| `issuer` | 身份提供商地址(OIDC 发行者) |
|
||||
| `redirect_url` | 登录成功后的回调地址 |
|
||||
|
||||
## 参考链接
|
||||
|
||||
* [TinyAuth 文档](https://tinyauth.app/docs)
|
||||
* [OAuth2 Proxy](https://oauth2-proxy.github.io/oauth2-proxy/)(类似工具)
|
||||
* [Casdoor](https://casdoor.org/)(身份提供商示例)
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
name: TinyAuth
|
||||
tags:
|
||||
- 开发工具
|
||||
- 安全
|
||||
title: 轻量级OAuth2/OIDC认证代理,支持多身份提供商的统一登录解决方案
|
||||
description: 一个轻量级的OAuth2和OIDC认证代理工具,常用于在现有Web服务前添加统一登录认证。
|
||||
additionalProperties:
|
||||
key: tinyauth
|
||||
name: TinyAuth
|
||||
tags:
|
||||
- DevTool
|
||||
- Security
|
||||
shortDescZh: 轻量级OAuth2/OIDC认证代理,支持多身份提供商的一站式登录认证
|
||||
shortDescEn: Lightweight OAuth2/OIDC authentication proxy with multi-provider SSO support
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
website: https://tinyauth.app/
|
||||
github: https://github.com/tinyauth/tinyauth
|
||||
document: https://tinyauth.app/docs/
|
||||
description:
|
||||
en: A lightweight reverse proxy and authentication middleware supporting multiple OAuth2 and OpenID Connect providers, ideal for securing existing web services with SSO.
|
||||
zh: 一个轻量级的反向代理与认证中间件,支持多种OAuth2和OIDC身份提供商,为现有Web服务提供统一登录保护。
|
||||
zh-Hant: 一個輕量級的反向代理與認證中介軟體,支援多種OAuth2和OIDC身份提供商,為既有Web服務提供單一登入保護。
|
||||
ja: 複数のOAuth2およびOIDCプロバイダーに対応した軽量認証プロキシで、既存のWebサービスにSSO保護を追加可能。
|
||||
ms: Proksi pengesahan ringan yang menyokong penyedia OAuth2 dan OIDC pelbagai, sesuai untuk melindungi perkhidmatan web sedia ada dengan SSO.
|
||||
pt-br: Proxy de autenticação leve que suporta múltiplos provedores OAuth2 e OIDC, adequado para proteger serviços web existentes com SSO.
|
||||
ru: Легковесный обратный прокси и провайдер аутентификации, поддерживающий OAuth2 и OIDC, обеспечивающий единую точку входа для существующих веб-сервисов.
|
||||
ko: 다양한 OAuth2 및 OIDC 제공자를 지원하는 경량 인증 프록시로, 기존 웹 서비스에 단일 로그인 보호를 제공합니다.
|
||||
architectures:
|
||||
- amd64
|
||||
- arm64
|
||||
|
After Width: | Height: | Size: 18 KiB |