飞牛 NAS 部署 PanSou + 代理配置完整教程

一、部署前准备 飞牛 NAS 要求:Docker 功能已启用,SSH 可登录(后续排查需要用到)。在文件管理中创建一个文件夹用于存放 compose 文件,例如 /vol1/1000/Docker/pansou/。 镜像说明:ghcr.io/fish2018/pansou-web:latest 是前

一、部署前准备

飞牛 NAS 要求:Docker 功能已启用,SSH 可登录(后续排查需要用到)。在文件管理中创建一个文件夹用于存放 compose 文件,例如 /vol1/1000/Docker/pansou/。

镜像说明:ghcr.io/fish2018/pansou-web:latest 是前后端集成版,开箱即用,支持 linux/amd64 和 linux/arm64 架构。

二、docker-compose.yml 完整配置

在飞牛 Docker 面板中,点击 Compose → 新增项目,输入项目名称 pansou,路径选择前面创建的文件夹,将以下内容粘贴到 docker-compose.yml:

yaml

services:
  pansou:
    image: ghcr.io/fish2018/pansou-web:latest
    container_name: pansou-app
    labels:
      - "autoheal=true"
    ports:
      - "8088:80"
    dns:
      - 223.5.5.5
      - 114.114.114.114
    environment:
      # 基础配置
      - DOMAIN=localhost
      - PANSOU_PORT=8888
      - PANSOU_HOST=127.0.0.1

      # 数据目录配置
      - CACHE_PATH=/app/data/cache
      - LOG_PATH=/app/data/logs

      # 插件配置(必须显式指定,否则不加载任何插件)
      - ENABLED_PLUGINS=dyyjpro,duoduo,djgou,feikuai,gaoqing888,gying,hdmoli,haitunsou,hunhepan,ikantv,jutoushe,kkv,dy4k,libvio,lingjisp,lou1,melost,meitizy,miosou,nyaa,ouge,panlian,pansearch,qqpd,quark4k,quarksoo,quarktv,qupanshe,sousou,thepiratebay,ting77,wanou,weibo,xb6v,xiaokupan,xiaozhang,xiaoyu,yingso,yulinshufa,yunso,yunsou,zlxapp,zxzj

      # 代理配置(国内网络必须配置,IP填宿主机局域网IP,不能写127.0.0.1)
      # - PROXY=socks5://192.168.1.x:7890

      # 健康检查配置
      - HEALTH_CHECK_INTERVAL=30
      - HEALTH_CHECK_TIMEOUT=10
      - HEALTH_CHECK_RETRIES=3

    volumes:
      - pansou-data:/app/data
    restart: unless-stopped

  autoheal:
    image: willfarrell/autoheal:latest
    container_name: pansou-autoheal
    restart: always
    environment:
      - AUTOHEAL_CONTAINER_LABEL=autoheal
      - AUTOHEAL_INTERVAL=30
      - AUTOHEAL_START_PERIOD=60
      - AUTOHEAL_DEFAULT_STOP_TIMEOUT=10
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

volumes:
  pansou-data:
    driver: local

关键配置说明:

ENABLED_PLUGINS:从当前版本开始,必须通过此变量显式指定要启用的插件,否则不会启用任何插件。以上列表是官方最新默认列表,包含 42 个插件。不要手动添加已失效的插件(如 hdr4k、pan666),也不要遗漏新增插件。

CHANNELS:不建议手动配置。镜像已内置数十个最新的 Telegram 频道,开箱即用。手动覆盖反而可能引入已失效的频道。

PROXY:国内网络必须配置,格式为 socks5://宿主机局域网IP:端口。IP 必须是宿主机在局域网中的实际地址(如 192.168.1.x),不能写 127.0.0.1 或 localhost,因为容器内的 127.0.0.1 指向容器自身而非宿主机。

三、代理配置(以 OpenWrt Nikki 为例)

3.1 开启 Nikki 的混合端口

登录 OpenWrt 管理后台(如 192.168.1.3),进入 服务 → Nikki → 混入配置 → 入站配置,进行以下设置:

  • 允许局域网访问:设为 启用

  • 混合端口:填入一个端口号,如 7890

混合端口同时兼容 HTTP 和 SOCKS5 协议,是 Pansou 最推荐使用的代理类型。

3.2 配置 PROXY 环境变量

回到 docker-compose.yml,取消 PROXY 行的注释并修改为:

yaml

- PROXY=socks5://192.168.1.3:7890

3.3 如果 Nikki 开启了身份验证

如果在 Nikki 的入站配置中启用了身份验证(底部有用户名和密码),PROXY 需要带上账号密码:

yaml

- PROXY=socks5://用户名:密码@192.168.1.3:7890

如果密码包含特殊字符(如 @、:),需要先进行 URL 编码(如 @ 变为 %40)。局域网内一般不需要额外鉴权,可考虑关闭 Nikki 的身份验证以简化配置。

四、启动与验证

4.1 启动容器

在飞牛 Docker 面板中点击“完成”构建,或通过 SSH 执行:

bash

cd ~/docker/pansou
sudo docker compose up -d

4.2 验证健康状态

在飞牛宿主机上执行(注意端口是宿主机映射的 8088,而非容器内的 80):

bash

curl http://localhost:8088/api/health

关键字段解读:

json

{
  "plugin_count": 42,
  "channels_count": 111,
  "plugins_enabled": true,
  "status": "ok",
  "tg": {
    "reachable": true,
    "fail_streak": 0,
    "reason": "探测 https://t.me/s/tgsearchers7 返回 HTTP 200"
  }
}
  • plugin_count:应约为 42。如果远低于此值,说明 ENABLED_PLUGINS 配置有误或未生效。

  • channels_count:应约为 111(内置频道数量),随时间可能因项目更新而变化。

  • tg.reachable:必须是 true。如果为 false,说明容器无法访问 Telegram,代理配置有问题。

  • tg.fail_streak:连续失败次数,正常应为 0。

4.3 访问 Web 界面

浏览器打开 http://飞牛IP:8088,用热门关键词(如电影名、剧名)测试搜索。

五、常见问题排查

问题 1:tg.reachable 为 false

原因:容器无法访问 Telegram,通常是代理未配置或配置错误。

排查步骤:

在容器内部手动测试代理连通性:

bash

sudo docker exec -it pansou-app sh
curl -x socks5://192.168.1.3:7890 -I https://t.me/s/tgsearchers7

返回 HTTP/2 200 说明代理链路通畅。如果失败,检查:

  • Nikki 的“允许局域网访问”是否开启

  • PROXY 中的 IP 是否为宿主机局域网 IP(不是 127.0.0.1)

  • 端口号是否正确

问题 2:插件数量只有 6 个或极少

原因:ENABLED_PLUGINS 未配置或配置错误。旧版本可能默认加载所有插件,新版本强制要求显式指定。

解决:检查 docker-compose.yml 中的 ENABLED_PLUGINS 是否非空且格式正确(逗号分隔,无空格)。

问题 3:容器内部 curl 报 Failed to connect to localhost:8088

原因:在容器内部访问时端口写错了。容器内部监听的是 80,宿主机的 8088 映射到容器内部的 80。

正确做法:容器内部用 curl http://localhost:80/api/health,宿主机上用 curl http://localhost:8088/api/health。

问题 4:搜索时部分插件无结果

原因:上游插件源站可能临时不可用,这是正常现象。42 个插件中只要大部分能返回结果即可。liveness 字段中的 zero_yield 表示无报错但本轮未产出,不代表插件已失效,其内容通常经后台补齐进入缓存,不要据此删除插件。

六、日常维护

镜像更新:PanSou 更新较频繁,建议定期更新镜像并重建容器:

bash

cd ~/docker/pansou
docker compose pull
docker compose down
docker compose up -d

健康检查入口:http://飞牛IP:8088/api/health 是排查问题的第一入口,重点关注 tg.reachable、plugin_count、channels_count 三个字段。

代理是命脉:只要 OpenWrt 上的 Nikki 停止运行或更换端口,Pansou 搜索会立即失效。如果某天突然搜不到资源,先检查 tg.reachable 是否为 false。

附:本次部署问题速查表

现象

根因

解决

搜不到资源,日志无报错

容器无法访问 Telegram

配置 PROXY 指向 Nikki 混合端口

插件数量只有 22 个

ENABLED_PLUGINS 列表过期

替换为官方最新插件列表

手动配置的 CHANNELS 干扰

覆盖了镜像内置的最新频道

删除 CHANNELS 配置,使用内置频道

容器内 curl 8088 失败

端口写错

容器内用 80,宿主机用 8088

PROXY 写 127.0.0.1 无效

容器内 127.0.0.1 指向容器自身

改为宿主机局域网 IP

评论