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
|
||||
|
||||
# 设置环境变量
|
||||
# ENABLED_PLUGINS: 必须指定启用的插件,多个插件用逗号分隔
|
||||
ENV CACHE_PATH=/app/cache \
|
||||
CACHE_ENABLED=true \
|
||||
TZ=Asia/Shanghai \
|
||||
@@ -58,7 +59,8 @@ ENV CACHE_PATH=/app/cache \
|
||||
ASYNC_RESPONSE_TIMEOUT=4 \
|
||||
ASYNC_MAX_BACKGROUND_WORKERS=20 \
|
||||
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
|
||||
|
||||
@@ -95,6 +95,7 @@ cd pansou
|
||||
| **PORT** | 服务端口 | `8888` | 修改服务监听端口 |
|
||||
| **PROXY** | SOCKS5代理 | 无 | 如:`socks5://127.0.0.1:1080` |
|
||||
| **CHANNELS** | 默认搜索的TG频道 | `tgsearchers3` | 多个频道用逗号分隔 |
|
||||
| **ENABLED_PLUGINS** | 指定启用插件,多个插件用逗号分隔 | 无 | 必须显式指定 |
|
||||
|
||||
#### 🔧 高级配置(默认值即可)
|
||||
|
||||
@@ -119,7 +120,6 @@ cd pansou
|
||||
| ASYNC_MAX_BACKGROUND_TASKS | 最大后台任务数量 | 工作者数×5 |
|
||||
| ASYNC_CACHE_TTL_HOURS | 异步缓存有效期(小时) | `1` |
|
||||
| ASYNC_PLUGIN_ENABLED | 异步插件是否启用 | `true` |
|
||||
| ENABLED_PLUGINS | 指定启用插件,多个插件用逗号分隔 | 所有 |
|
||||
| HTTP_READ_TIMEOUT | HTTP读取超时(秒) | 自动计算 |
|
||||
| HTTP_WRITE_TIMEOUT | HTTP写入超时(秒) | 自动计算 |
|
||||
| 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]
|
||||
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
|
||||
directory=/home/work/pansou
|
||||
autostart=true
|
||||
|
||||
@@ -300,11 +300,20 @@ func getAsyncPluginEnabled() bool {
|
||||
return enabled != "false" && enabled != "0"
|
||||
}
|
||||
|
||||
// 从环境变量获取启用的插件列表,如果未设置则返回空切片(表示启用所有)
|
||||
// 从环境变量获取启用的插件列表
|
||||
// 返回nil表示未设置环境变量(不启用任何插件)
|
||||
// 返回[]string{}表示设置为空(不启用任何插件)
|
||||
// 返回具体列表表示启用指定插件
|
||||
func getEnabledPlugins() []string {
|
||||
plugins := os.Getenv("ENABLED_PLUGINS")
|
||||
plugins, exists := os.LookupEnv("ENABLED_PLUGINS")
|
||||
if !exists {
|
||||
// 未设置环境变量时返回nil,表示不启用任何插件
|
||||
return nil
|
||||
}
|
||||
|
||||
if plugins == "" {
|
||||
return []string{} // 空切片表示启用所有插件
|
||||
// 设置为空字符串,也表示不启用任何插件
|
||||
return []string{}
|
||||
}
|
||||
|
||||
// 按逗号分割插件名
|
||||
|
||||
@@ -10,6 +10,8 @@ services:
|
||||
environment:
|
||||
- PORT=8888
|
||||
- CHANNELS=tgsearchers3,SharePanBaidu,yunpanxunlei,tianyifc,BaiduCloudDisk
|
||||
# 必须指定启用的插件,多个插件用逗号分隔
|
||||
- ENABLED_PLUGINS=labi,zhizhen,shandian,duoduo,muou,wanou
|
||||
- CACHE_ENABLED=true
|
||||
- CACHE_PATH=/app/cache
|
||||
- CACHE_MAX_SIZE=100
|
||||
|
||||
@@ -181,7 +181,8 @@ node .\typescript\dist\index.js
|
||||
"BACKEND_STARTUP_TIMEOUT": "30000",
|
||||
"IDLE_TIMEOUT": "300000",
|
||||
"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` 替换为您项目实际的完整路径
|
||||
- 如需强制指定部署模式,可修改 `DOCKER_MODE` 和 `AUTO_START_BACKEND` 参数
|
||||
- **重要**:从当前版本开始,必须通过 `ENABLED_PLUGINS` 显式指定要启用的插件,否则不会启用任何插件
|
||||
|
||||
### 4. 启动 MCP 服务并开始使用
|
||||
|
||||
@@ -309,6 +311,7 @@ MCP 服务通过工具调用接收参数。以下是主要工具及其支持的
|
||||
| `MAX_RESULTS` | (内部使用,限制处理结果数量) | `100` |
|
||||
| `DEFAULT_CHANNELS` | 默认搜索的 Telegram 频道列表(逗号分隔)。 | `""` (使用后端默认) |
|
||||
| `DEFAULT_PLUGINS` | 默认使用的搜索插件列表(逗号分隔)。 | `""` (使用后端默认或所有) |
|
||||
| `ENABLED_PLUGINS` | 指定后端启用的插件列表(逗号分隔),必须显式指定。 | `""` (需要显式设置) |
|
||||
| `DEFAULT_CLOUD_TYPES` | 默认的网盘类型过滤器(逗号分隔)。 | `""` (无过滤) |
|
||||
| `AUTO_START_BACKEND` | 是否在 MCP 服务启动时自动尝试启动后端服务。 | `true` |
|
||||
| `DOCKER_MODE` | 部署模式控制。设置为 `true` 强制使用 Docker 模式;设置为 `false` 或未设置时启用智能检测。智能检测将自动识别 Docker 容器、源码部署或运行中的服务。 | `false` (智能检测) |
|
||||
|
||||
16
main.go
16
main.go
@@ -25,6 +25,8 @@ import (
|
||||
|
||||
// 以下是插件的空导入,用于触发各插件的init函数,实现自动注册
|
||||
// 添加新插件时,只需在此处添加对应的导入语句即可
|
||||
// _ "pansou/plugin/hdr4k"
|
||||
// _ "pansou/plugin/pan666"
|
||||
_ "pansou/plugin/hunhepan"
|
||||
_ "pansou/plugin/jikepan"
|
||||
_ "pansou/plugin/panwiki"
|
||||
@@ -60,6 +62,7 @@ import (
|
||||
_ "pansou/plugin/hdmoli"
|
||||
_ "pansou/plugin/yuhuage"
|
||||
_ "pansou/plugin/u3c3"
|
||||
_ "pansou/plugin/javdb"
|
||||
_ "pansou/plugin/clxiong"
|
||||
_ "pansou/plugin/jutoushe"
|
||||
_ "pansou/plugin/sdso"
|
||||
@@ -321,12 +324,8 @@ func printServiceInfo(port string, pluginManager *plugin.PluginManager) {
|
||||
if config.AppConfig.AsyncPluginEnabled {
|
||||
plugins := pluginManager.GetPlugins()
|
||||
if len(plugins) > 0 {
|
||||
// 显示是否有特定的插件过滤
|
||||
if len(config.AppConfig.EnabledPlugins) > 0 {
|
||||
// 根据新逻辑,只有指定了具体插件才会加载插件
|
||||
fmt.Printf("已启用指定插件 (%d个):\n", len(plugins))
|
||||
} else {
|
||||
fmt.Printf("已加载所有插件 (%d个):\n", len(plugins))
|
||||
}
|
||||
|
||||
// 按优先级排序(优先级数字越小越靠前)
|
||||
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())
|
||||
}
|
||||
} 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, ", "))
|
||||
} else {
|
||||
fmt.Println("未加载到任何插件")
|
||||
fmt.Println("插件列表为空 (ENABLED_PLUGINS=\"\"),未加载任何插件")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
"BACKEND_STARTUP_TIMEOUT": "30000",
|
||||
"IDLE_TIMEOUT": "300000",
|
||||
"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",
|
||||
"IDLE_TIMEOUT": "空闲超时时间(毫秒),默认300000(5分钟)",
|
||||
"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 注册所有全局异步插件
|
||||
func (pm *PluginManager) RegisterAllGlobalPlugins() {
|
||||
pm.RegisterGlobalPluginsWithFilter([]string{})
|
||||
}
|
||||
|
||||
// RegisterGlobalPluginsWithFilter 根据过滤器注册全局异步插件
|
||||
// enabledPlugins: 启用的插件名称列表,如果为空则启用所有插件
|
||||
func (pm *PluginManager) RegisterGlobalPluginsWithFilter(enabledPlugins []string) {
|
||||
allPlugins := GetRegisteredPlugins()
|
||||
|
||||
// 如果没有指定启用的插件,则启用所有插件
|
||||
if len(enabledPlugins) == 0 {
|
||||
for _, plugin := range allPlugins {
|
||||
pm.RegisterPlugin(plugin)
|
||||
}
|
||||
}
|
||||
|
||||
// RegisterGlobalPluginsWithFilter 根据过滤器注册全局异步插件
|
||||
// enabledPlugins: nil表示未设置(不启用任何插件),空切片表示设置为空(不启用任何插件),具体列表表示启用指定插件
|
||||
func (pm *PluginManager) RegisterGlobalPluginsWithFilter(enabledPlugins []string) {
|
||||
allPlugins := GetRegisteredPlugins()
|
||||
|
||||
// nil 表示未设置环境变量,不启用任何插件
|
||||
if enabledPlugins == nil {
|
||||
return
|
||||
}
|
||||
|
||||
// 空切片表示设置为空字符串,也不启用任何插件
|
||||
if len(enabledPlugins) == 0 {
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user