mirror of
https://github.com/fish2018/pansou.git
synced 2025-11-25 03:14:59 +08:00
必须ENABLED_PLUGINS显式启用插件
This commit is contained in:
@@ -51,6 +51,7 @@ WORKDIR /app
|
|||||||
EXPOSE 8888
|
EXPOSE 8888
|
||||||
|
|
||||||
# 设置环境变量
|
# 设置环境变量
|
||||||
|
# ENABLED_PLUGINS: 必须指定启用的插件,多个插件用逗号分隔
|
||||||
ENV CACHE_PATH=/app/cache \
|
ENV CACHE_PATH=/app/cache \
|
||||||
CACHE_ENABLED=true \
|
CACHE_ENABLED=true \
|
||||||
TZ=Asia/Shanghai \
|
TZ=Asia/Shanghai \
|
||||||
@@ -58,7 +59,8 @@ ENV CACHE_PATH=/app/cache \
|
|||||||
ASYNC_RESPONSE_TIMEOUT=4 \
|
ASYNC_RESPONSE_TIMEOUT=4 \
|
||||||
ASYNC_MAX_BACKGROUND_WORKERS=20 \
|
ASYNC_MAX_BACKGROUND_WORKERS=20 \
|
||||||
ASYNC_MAX_BACKGROUND_TASKS=100 \
|
ASYNC_MAX_BACKGROUND_TASKS=100 \
|
||||||
ASYNC_CACHE_TTL_HOURS=1
|
ASYNC_CACHE_TTL_HOURS=1 \
|
||||||
|
ENABLED_PLUGINS=labi,zhizhen,shandian,duoduo,muou,wanou
|
||||||
|
|
||||||
# 构建参数
|
# 构建参数
|
||||||
ARG VERSION=dev
|
ARG VERSION=dev
|
||||||
|
|||||||
@@ -95,6 +95,7 @@ cd pansou
|
|||||||
| **PORT** | 服务端口 | `8888` | 修改服务监听端口 |
|
| **PORT** | 服务端口 | `8888` | 修改服务监听端口 |
|
||||||
| **PROXY** | SOCKS5代理 | 无 | 如:`socks5://127.0.0.1:1080` |
|
| **PROXY** | SOCKS5代理 | 无 | 如:`socks5://127.0.0.1:1080` |
|
||||||
| **CHANNELS** | 默认搜索的TG频道 | `tgsearchers3` | 多个频道用逗号分隔 |
|
| **CHANNELS** | 默认搜索的TG频道 | `tgsearchers3` | 多个频道用逗号分隔 |
|
||||||
|
| **ENABLED_PLUGINS** | 指定启用插件,多个插件用逗号分隔 | 无 | 必须显式指定 |
|
||||||
|
|
||||||
#### 🔧 高级配置(默认值即可)
|
#### 🔧 高级配置(默认值即可)
|
||||||
|
|
||||||
@@ -119,7 +120,6 @@ cd pansou
|
|||||||
| ASYNC_MAX_BACKGROUND_TASKS | 最大后台任务数量 | 工作者数×5 |
|
| ASYNC_MAX_BACKGROUND_TASKS | 最大后台任务数量 | 工作者数×5 |
|
||||||
| ASYNC_CACHE_TTL_HOURS | 异步缓存有效期(小时) | `1` |
|
| ASYNC_CACHE_TTL_HOURS | 异步缓存有效期(小时) | `1` |
|
||||||
| ASYNC_PLUGIN_ENABLED | 异步插件是否启用 | `true` |
|
| ASYNC_PLUGIN_ENABLED | 异步插件是否启用 | `true` |
|
||||||
| ENABLED_PLUGINS | 指定启用插件,多个插件用逗号分隔 | 所有 |
|
|
||||||
| HTTP_READ_TIMEOUT | HTTP读取超时(秒) | 自动计算 |
|
| HTTP_READ_TIMEOUT | HTTP读取超时(秒) | 自动计算 |
|
||||||
| HTTP_WRITE_TIMEOUT | HTTP写入超时(秒) | 自动计算 |
|
| HTTP_WRITE_TIMEOUT | HTTP写入超时(秒) | 自动计算 |
|
||||||
| HTTP_IDLE_TIMEOUT | HTTP空闲超时(秒) | `120` |
|
| HTTP_IDLE_TIMEOUT | HTTP空闲超时(秒) | `120` |
|
||||||
@@ -146,7 +146,7 @@ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -ldflags="-s -w -extldflags '-sta
|
|||||||
|
|
||||||
```
|
```
|
||||||
[program:pansou]
|
[program:pansou]
|
||||||
environment=PORT=8888,CHANNELS="tgsearchers3,yunpanxunlei,tianyifc,BaiduCloudDisk,txtyzy,peccxinpd,gotopan,xingqiump4,yunpanqk,PanjClub,kkxlzy,baicaoZY,MCPH01,share_aliyun,bdwpzhpd,ysxb48,jdjdn1111,yggpan,MCPH086,zaihuayun,Q66Share,NewAliPan,ypquark,Oscar_4Kmovies,ucwpzy,alyp_TV,alyp_4K_Movies,shareAliyun,alyp_1,dianyingshare,Quark_Movies,XiangxiuNBB,NewQuark,ydypzyfx,kuakeyun,ucquark,xx123pan,yingshifenxiang123,zyfb123,tyypzhpd,tianyirigeng,cloudtianyi,hdhhd21,Lsp115,oneonefivewpfx,Maidanglaocom,qixingzhenren,taoxgzy,tgsearchers115,Channel_Shares_115,tyysypzypd,vip115hot,wp123zy,yunpan139,yunpan189,yunpanuc,yydf_hzl,alyp_Animation,alyp_JLP,leoziyuan"
|
environment=PORT=8888,CHANNELS="tgsearchers3,yunpanxunlei,tianyifc,BaiduCloudDisk,txtyzy,peccxinpd,gotopan,xingqiump4,yunpanqk,PanjClub,kkxlzy,baicaoZY,MCPH01,share_aliyun,bdwpzhpd,ysxb48,jdjdn1111,yggpan,MCPH086,zaihuayun,Q66Share,NewAliPan,ypquark,Oscar_4Kmovies,ucwpzy,alyp_TV,alyp_4K_Movies,shareAliyun,alyp_1,dianyingshare,Quark_Movies,XiangxiuNBB,NewQuark,ydypzyfx,kuakeyun,ucquark,xx123pan,yingshifenxiang123,zyfb123,tyypzhpd,tianyirigeng,cloudtianyi,hdhhd21,Lsp115,oneonefivewpfx,Maidanglaocom,qixingzhenren,taoxgzy,tgsearchers115,Channel_Shares_115,tyysypzypd,vip115hot,wp123zy,yunpan139,yunpan189,yunpanuc,yydf_hzl,alyp_Animation,alyp_JLP,leoziyuan",ENABLED_PLUGINS="labi,zhizhen,shandian,duoduo,muou"
|
||||||
command=/home/work/pansou/pansou
|
command=/home/work/pansou/pansou
|
||||||
directory=/home/work/pansou
|
directory=/home/work/pansou
|
||||||
autostart=true
|
autostart=true
|
||||||
|
|||||||
@@ -300,11 +300,20 @@ func getAsyncPluginEnabled() bool {
|
|||||||
return enabled != "false" && enabled != "0"
|
return enabled != "false" && enabled != "0"
|
||||||
}
|
}
|
||||||
|
|
||||||
// 从环境变量获取启用的插件列表,如果未设置则返回空切片(表示启用所有)
|
// 从环境变量获取启用的插件列表
|
||||||
|
// 返回nil表示未设置环境变量(不启用任何插件)
|
||||||
|
// 返回[]string{}表示设置为空(不启用任何插件)
|
||||||
|
// 返回具体列表表示启用指定插件
|
||||||
func getEnabledPlugins() []string {
|
func getEnabledPlugins() []string {
|
||||||
plugins := os.Getenv("ENABLED_PLUGINS")
|
plugins, exists := os.LookupEnv("ENABLED_PLUGINS")
|
||||||
|
if !exists {
|
||||||
|
// 未设置环境变量时返回nil,表示不启用任何插件
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
if plugins == "" {
|
if plugins == "" {
|
||||||
return []string{} // 空切片表示启用所有插件
|
// 设置为空字符串,也表示不启用任何插件
|
||||||
|
return []string{}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 按逗号分割插件名
|
// 按逗号分割插件名
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- PORT=8888
|
- PORT=8888
|
||||||
- CHANNELS=tgsearchers3,SharePanBaidu,yunpanxunlei,tianyifc,BaiduCloudDisk
|
- CHANNELS=tgsearchers3,SharePanBaidu,yunpanxunlei,tianyifc,BaiduCloudDisk
|
||||||
|
# 必须指定启用的插件,多个插件用逗号分隔
|
||||||
|
- ENABLED_PLUGINS=labi,zhizhen,shandian,duoduo,muou,wanou
|
||||||
- CACHE_ENABLED=true
|
- CACHE_ENABLED=true
|
||||||
- CACHE_PATH=/app/cache
|
- CACHE_PATH=/app/cache
|
||||||
- CACHE_MAX_SIZE=100
|
- CACHE_MAX_SIZE=100
|
||||||
|
|||||||
@@ -181,7 +181,8 @@ node .\typescript\dist\index.js
|
|||||||
"BACKEND_STARTUP_TIMEOUT": "30000",
|
"BACKEND_STARTUP_TIMEOUT": "30000",
|
||||||
"IDLE_TIMEOUT": "300000",
|
"IDLE_TIMEOUT": "300000",
|
||||||
"ENABLE_IDLE_SHUTDOWN": "true",
|
"ENABLE_IDLE_SHUTDOWN": "true",
|
||||||
"PROJECT_ROOT_PATH": "C:\\full\\path\\to\\your\\project"
|
"PROJECT_ROOT_PATH": "C:\\full\\path\\to\\your\\project",
|
||||||
|
"ENABLED_PLUGINS": "labi,zhizhen,shandian,duoduo,muou,wanou"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -191,6 +192,7 @@ node .\typescript\dist\index.js
|
|||||||
**注意**:
|
**注意**:
|
||||||
- 请将 `C:\\full\\path\\to\\your\\project` 替换为您项目实际的完整路径
|
- 请将 `C:\\full\\path\\to\\your\\project` 替换为您项目实际的完整路径
|
||||||
- 如需强制指定部署模式,可修改 `DOCKER_MODE` 和 `AUTO_START_BACKEND` 参数
|
- 如需强制指定部署模式,可修改 `DOCKER_MODE` 和 `AUTO_START_BACKEND` 参数
|
||||||
|
- **重要**:从当前版本开始,必须通过 `ENABLED_PLUGINS` 显式指定要启用的插件,否则不会启用任何插件
|
||||||
|
|
||||||
### 4. 启动 MCP 服务并开始使用
|
### 4. 启动 MCP 服务并开始使用
|
||||||
|
|
||||||
@@ -309,6 +311,7 @@ MCP 服务通过工具调用接收参数。以下是主要工具及其支持的
|
|||||||
| `MAX_RESULTS` | (内部使用,限制处理结果数量) | `100` |
|
| `MAX_RESULTS` | (内部使用,限制处理结果数量) | `100` |
|
||||||
| `DEFAULT_CHANNELS` | 默认搜索的 Telegram 频道列表(逗号分隔)。 | `""` (使用后端默认) |
|
| `DEFAULT_CHANNELS` | 默认搜索的 Telegram 频道列表(逗号分隔)。 | `""` (使用后端默认) |
|
||||||
| `DEFAULT_PLUGINS` | 默认使用的搜索插件列表(逗号分隔)。 | `""` (使用后端默认或所有) |
|
| `DEFAULT_PLUGINS` | 默认使用的搜索插件列表(逗号分隔)。 | `""` (使用后端默认或所有) |
|
||||||
|
| `ENABLED_PLUGINS` | 指定后端启用的插件列表(逗号分隔),必须显式指定。 | `""` (需要显式设置) |
|
||||||
| `DEFAULT_CLOUD_TYPES` | 默认的网盘类型过滤器(逗号分隔)。 | `""` (无过滤) |
|
| `DEFAULT_CLOUD_TYPES` | 默认的网盘类型过滤器(逗号分隔)。 | `""` (无过滤) |
|
||||||
| `AUTO_START_BACKEND` | 是否在 MCP 服务启动时自动尝试启动后端服务。 | `true` |
|
| `AUTO_START_BACKEND` | 是否在 MCP 服务启动时自动尝试启动后端服务。 | `true` |
|
||||||
| `DOCKER_MODE` | 部署模式控制。设置为 `true` 强制使用 Docker 模式;设置为 `false` 或未设置时启用智能检测。智能检测将自动识别 Docker 容器、源码部署或运行中的服务。 | `false` (智能检测) |
|
| `DOCKER_MODE` | 部署模式控制。设置为 `true` 强制使用 Docker 模式;设置为 `false` 或未设置时启用智能检测。智能检测将自动识别 Docker 容器、源码部署或运行中的服务。 | `false` (智能检测) |
|
||||||
|
|||||||
18
main.go
18
main.go
@@ -25,6 +25,8 @@ import (
|
|||||||
|
|
||||||
// 以下是插件的空导入,用于触发各插件的init函数,实现自动注册
|
// 以下是插件的空导入,用于触发各插件的init函数,实现自动注册
|
||||||
// 添加新插件时,只需在此处添加对应的导入语句即可
|
// 添加新插件时,只需在此处添加对应的导入语句即可
|
||||||
|
// _ "pansou/plugin/hdr4k"
|
||||||
|
// _ "pansou/plugin/pan666"
|
||||||
_ "pansou/plugin/hunhepan"
|
_ "pansou/plugin/hunhepan"
|
||||||
_ "pansou/plugin/jikepan"
|
_ "pansou/plugin/jikepan"
|
||||||
_ "pansou/plugin/panwiki"
|
_ "pansou/plugin/panwiki"
|
||||||
@@ -60,6 +62,7 @@ import (
|
|||||||
_ "pansou/plugin/hdmoli"
|
_ "pansou/plugin/hdmoli"
|
||||||
_ "pansou/plugin/yuhuage"
|
_ "pansou/plugin/yuhuage"
|
||||||
_ "pansou/plugin/u3c3"
|
_ "pansou/plugin/u3c3"
|
||||||
|
_ "pansou/plugin/javdb"
|
||||||
_ "pansou/plugin/clxiong"
|
_ "pansou/plugin/clxiong"
|
||||||
_ "pansou/plugin/jutoushe"
|
_ "pansou/plugin/jutoushe"
|
||||||
_ "pansou/plugin/sdso"
|
_ "pansou/plugin/sdso"
|
||||||
@@ -321,12 +324,8 @@ func printServiceInfo(port string, pluginManager *plugin.PluginManager) {
|
|||||||
if config.AppConfig.AsyncPluginEnabled {
|
if config.AppConfig.AsyncPluginEnabled {
|
||||||
plugins := pluginManager.GetPlugins()
|
plugins := pluginManager.GetPlugins()
|
||||||
if len(plugins) > 0 {
|
if len(plugins) > 0 {
|
||||||
// 显示是否有特定的插件过滤
|
// 根据新逻辑,只有指定了具体插件才会加载插件
|
||||||
if len(config.AppConfig.EnabledPlugins) > 0 {
|
fmt.Printf("已启用指定插件 (%d个):\n", len(plugins))
|
||||||
fmt.Printf("已启用指定插件 (%d个):\n", len(plugins))
|
|
||||||
} else {
|
|
||||||
fmt.Printf("已加载所有插件 (%d个):\n", len(plugins))
|
|
||||||
}
|
|
||||||
|
|
||||||
// 按优先级排序(优先级数字越小越靠前)
|
// 按优先级排序(优先级数字越小越靠前)
|
||||||
sort.Slice(plugins, func(i, j int) bool {
|
sort.Slice(plugins, func(i, j int) bool {
|
||||||
@@ -341,10 +340,13 @@ func printServiceInfo(port string, pluginManager *plugin.PluginManager) {
|
|||||||
fmt.Printf(" - %s (优先级: %d)\n", p.Name(), p.Priority())
|
fmt.Printf(" - %s (优先级: %d)\n", p.Name(), p.Priority())
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if len(config.AppConfig.EnabledPlugins) > 0 {
|
// 区分不同的情况
|
||||||
|
if config.AppConfig.EnabledPlugins == nil {
|
||||||
|
fmt.Println("未设置插件列表 (ENABLED_PLUGINS),未加载任何插件")
|
||||||
|
} else if len(config.AppConfig.EnabledPlugins) > 0 {
|
||||||
fmt.Printf("未找到指定的插件: %s\n", strings.Join(config.AppConfig.EnabledPlugins, ", "))
|
fmt.Printf("未找到指定的插件: %s\n", strings.Join(config.AppConfig.EnabledPlugins, ", "))
|
||||||
} else {
|
} else {
|
||||||
fmt.Println("未加载到任何插件")
|
fmt.Println("插件列表为空 (ENABLED_PLUGINS=\"\"),未加载任何插件")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,8 @@
|
|||||||
"BACKEND_STARTUP_TIMEOUT": "30000",
|
"BACKEND_STARTUP_TIMEOUT": "30000",
|
||||||
"IDLE_TIMEOUT": "300000",
|
"IDLE_TIMEOUT": "300000",
|
||||||
"ENABLE_IDLE_SHUTDOWN": "true",
|
"ENABLE_IDLE_SHUTDOWN": "true",
|
||||||
"PROJECT_ROOT_PATH": "C:\\full\\path\\to\\your\\project"
|
"PROJECT_ROOT_PATH": "C:\\full\\path\\to\\your\\project",
|
||||||
|
"ENABLED_PLUGINS": "labi,zhizhen,shandian,duoduo,muou,wanou"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -43,7 +44,8 @@
|
|||||||
"BACKEND_STARTUP_TIMEOUT": "后端服务启动超时(毫秒),默认30000",
|
"BACKEND_STARTUP_TIMEOUT": "后端服务启动超时(毫秒),默认30000",
|
||||||
"IDLE_TIMEOUT": "空闲超时时间(毫秒),默认300000(5分钟)",
|
"IDLE_TIMEOUT": "空闲超时时间(毫秒),默认300000(5分钟)",
|
||||||
"ENABLE_IDLE_SHUTDOWN": "是否启用空闲自动关闭,默认true",
|
"ENABLE_IDLE_SHUTDOWN": "是否启用空闲自动关闭,默认true",
|
||||||
"PROJECT_ROOT_PATH": "项目根目录路径,用于查找Go可执行文件"
|
"PROJECT_ROOT_PATH": "项目根目录路径,用于查找Go可执行文件",
|
||||||
|
"ENABLED_PLUGINS": "指定启用的插件列表,多个插件用逗号分隔,必须显式指定"
|
||||||
},
|
},
|
||||||
"使用示例": {
|
"使用示例": {
|
||||||
"自动模式": "默认配置,自动检测部署方式",
|
"自动模式": "默认配置,自动检测部署方式",
|
||||||
|
|||||||
@@ -97,19 +97,24 @@ func (pm *PluginManager) RegisterPlugin(plugin AsyncSearchPlugin) {
|
|||||||
|
|
||||||
// RegisterAllGlobalPlugins 注册所有全局异步插件
|
// RegisterAllGlobalPlugins 注册所有全局异步插件
|
||||||
func (pm *PluginManager) RegisterAllGlobalPlugins() {
|
func (pm *PluginManager) RegisterAllGlobalPlugins() {
|
||||||
pm.RegisterGlobalPluginsWithFilter([]string{})
|
allPlugins := GetRegisteredPlugins()
|
||||||
|
for _, plugin := range allPlugins {
|
||||||
|
pm.RegisterPlugin(plugin)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// RegisterGlobalPluginsWithFilter 根据过滤器注册全局异步插件
|
// RegisterGlobalPluginsWithFilter 根据过滤器注册全局异步插件
|
||||||
// enabledPlugins: 启用的插件名称列表,如果为空则启用所有插件
|
// enabledPlugins: nil表示未设置(不启用任何插件),空切片表示设置为空(不启用任何插件),具体列表表示启用指定插件
|
||||||
func (pm *PluginManager) RegisterGlobalPluginsWithFilter(enabledPlugins []string) {
|
func (pm *PluginManager) RegisterGlobalPluginsWithFilter(enabledPlugins []string) {
|
||||||
allPlugins := GetRegisteredPlugins()
|
allPlugins := GetRegisteredPlugins()
|
||||||
|
|
||||||
// 如果没有指定启用的插件,则启用所有插件
|
// nil 表示未设置环境变量,不启用任何插件
|
||||||
|
if enabledPlugins == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 空切片表示设置为空字符串,也不启用任何插件
|
||||||
if len(enabledPlugins) == 0 {
|
if len(enabledPlugins) == 0 {
|
||||||
for _, plugin := range allPlugins {
|
|
||||||
pm.RegisterPlugin(plugin)
|
|
||||||
}
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user