
很多 NAS 用户都有过类似的体验影视资源下载完之后文件命名乱七八糟Jellyfin 或者 Plex 识别不出海报手动改名、挪目录、补刮削信息一部电影就要折腾好几分钟。如果经常囤剧、追番这个重复劳动会非常消耗耐心。nastool v2 解决的就是这条链路里的整理环节。它不是一个下载器也不是一个播放器而是一个把“下载 → 重命名 → 刮削 → 入库 → 媒体服务识别”自动串起来的自动化工具。在群晖、飞牛、极空间、绿联这些主流 NAS 上它通常以 Docker 容器的形式运行。这篇文章会从实际部署角度出发说清楚 nastool v2 的核心功能、适用场景然后分别给出它在群晖、飞牛、极空间、绿联上的部署思路和完整配置示例。如果你正准备在 NAS 上搭一套自动化的影视媒体库这篇文章可以直接作为操作参考。1. 先搞清楚nastool v2 到底帮你省掉了什么在深入部署之前有必要把 nastool v2 的定位说清楚。否则很多人会误以为它是一个资源搜索器或者是某种下载工具装上之后又觉得和预期不符。nastool v2 的核心逻辑是“订阅 自动化”。你告诉它你想要什么它根据你配置的规则去下载工具里查找任务下载完成后自动进行文件整理、重命名、刮削然后把结果同步到媒体服务中。难点在于这套流程涉及多个系统之间的数据流转订阅规则你想追某部剧或者想收藏某位导演的作品。下载器联动nastool 不负责下载它对接 qBittorrent、Transmission 等下载工具把任务交给它们执行。文件整理下载完成后文件往往在一个临时目录里nastool 按你设定的规则移动到媒体库目录并进行规范命名。元数据刮削为电影、剧集匹配海报、简介、演员、评分等元数据。媒体服务刷新Jellyfin、Plex、Emby 扫描到新文件后自动展示成漂亮的海报墙。如果没有 nastool这五步基本全靠手动。下载一部电影你要在下载器里找文件然后到文件管理器里改名再跑到媒体服务里刷新库最后发现刮削不到信息又要手动校准。一次两次还能接受资源一旦多起来效率问题就非常明显。所以这篇文章最重要的判断是nastool v2 的真正价值不是帮你找资源而是把“资源下载后的维护工作”变成自动化流水线。它适合的人群也很明确家里有 NAS、日常会下载和收藏影视内容、希望打开媒体库就能直接看的人。如果你只是偶尔下一次电影手动整理反而更快没必要引入这么复杂的工具链。2. nastool v2 核心功能拆解2.1 媒体库整理这是 nastool 最基础、也最实用的能力。它支持把下载好的电影、剧集、动漫等资源按照预设的目录结构和命名规则进行移动、复制或硬链接。这里有一个新手很容易忽略的概念整理时选择“移动”“复制”还是“硬链接”对存储空间的占用影响完全不同。移动文件从下载目录直接转移到媒体库目录不额外占空间但下载任务如果还在做种种子路径会失效。复制文件会生成一份副本磁盘占用翻倍适合不需要做种、想保留原始文件的场景。硬链接同一份数据在文件系统上建立多个目录入口目录看起来有两份文件实际只占一份空间。这份空间只有在所有链接都被删除后才真正释放。硬链接最实用的场景是既想让下载器继续做种又想让媒体库正常识别。只要下载目录和媒体库目录在同一个文件系统内例如同一个卷或同一个存储池就可以用硬链接。2.2 订阅与追更订阅功能可以理解为“你设定条件nastool 定期去检查”。比如你想追某部正在更新的剧集配置好订阅后它会周期性查询来源站点发现新的剧集条目后自动推给下载器下载完成后再走整理流程。这套机制对长期追更用户非常友好。它把“每天手动打开下载器看有没有更新”变成了自动操作。但需要特别提醒订阅依赖你配置的下载来源站点具体配置内容和使用范围需要自行确认是否符合相关平台的规则和法律法规。2.3 元数据刮削刮削是媒体库体验的关键一环。一部电影如果不刮削文件名就是一串英文或拼音刮削之后Jellyfin 里会显示海报、背景图、简介、演员列表、评分。nastool v2 在刮削层面做了较多优化能自动识别文件对应的影视作品并获取元数据。刮削失败时也能通过日志定位原因常见的失败原因是网络无法访问元数据服务或者文件命名太乱导致识别错误。2.4 多平台 Docker 适配官方对群晖、飞牛、极空间、绿联这些主流 NAS 并没有做定制化安装包而是统一采用 Docker 镜像。这就解释了为什么这套部署思路可以在不同品牌的 NAS 上打通底层都是 Linux Docker区别只在于 NAS 系统自带的 Docker 管理界面、目录挂载路径和权限模型。因此无论你用的是哪个品牌部署核心流程是一致的确认 NAS 支持 Docker。规划好配置目录、下载目录、媒体库目录。创建一个 Compose 项目或手动创建容器。配置端口映射和数据卷挂载。启动容器进入 Web UI 完成初始化配置。接下来先从通用的部署准备开始。3. 部署前的通用准备目录规划、Docker 环境与网络3.1 硬件与系统要求nastool 是轻量级应用对硬件要求不高。主流 x86 架构的 NAS 都能流畅运行。如果你用的是 ARM 架构的 NAS需要注意镜像是否提供对应架构的版本这一点在拉取镜像时就要确认否则容器会启动失败。系统层面要确保 NAS 系统版本较新且能正常安装 Docker。群晖 DSM 7.2 及以上版本已经用 Container Manager 替代了原来的 Docker 套件飞牛 fnOS、极空间 ZOS、绿联 UGOS Pro 也都内置或支持安装 Docker 应用。3.2 目录规划目录规划是部署中最容易出问题的一步。很多人在 Compose 文件里随便填了几个路径启动后才发现容器里写不进文件或者下载目录和媒体库不在同一文件系统硬链接失败。推荐按下面这套结构去规划/nas/docker/nastool/config # nastool 配置目录 /nas/docker/qbittorrent/config # 下载器配置目录 /nas/downloads # 下载临时目录 /nas/media/movies # 电影媒体库 /nas/media/tvshows # 剧集媒体库配置目录和媒体目录建议分开因为配置目录需要频繁备份媒体目录则不需要。下载目录和媒体库目录之间的位置关系很关键如果打算使用硬链接它们必须处于同一个文件系统内。群晖的不同存储空间跨卷飞牛的不同存储池也是隔离的目录规划时就要注意。3.3 镜像拉取与网络问题国内 NAS 部署 Docker 应用时经常遇到镜像拉取超时的问题。报错信息通常是error response from daemon: get https://registry-1.docker.io/v2/: net/http: request canceled while waiting for connection (client.timeout exceeded while awaiting headers)这个错误说明当前网络环境无法正常访问 Docker Hub。解决办法主要有两种一是为 Docker 配置可用的国内镜像加速地址在 NAS 的 Docker 设置里找到“镜像加速”或“Registry 镜像”配置项填入可用的加速地址二是在网络条件允许的情况下尝试其他网络出口。具体方案以你所在网络的实际可达性为准。这篇文章不展开讨论网络通道本身但镜像加速地址的配置方法是通用的。镜像加速配置完成后建议先用docker pull做一次小测试确认能正常拉取后再继续部署。3.4 用户权限PUID/PGID群晖、飞牛等 NAS 系统中的用户权限模型和 Linux 类似。以 Compose 方式创建容器时常见做法是给容器设置 PUID 和 PGID让容器内进程以指定用户身份运行避免遇到文件权限不足。在部署前先通过 SSH 登录 NAS用id命令查看当前用户的信息id输出会包含类似uid1026(yourname)和gid100(users)的信息。这两个值在后面的 Compose 文件中会用到。4. 群晖部署实操以 Compose 项目为核心4.1 安装 Container Manager在群晖 DSM 7.2 及以上版本中Docker 应用已经改名为“Container Manager”。如果还没有安装打开套件中心搜索并安装即可。DSM 7.0/7.1 时期安装的 Docker 套件也可以继续使用界面略有差异但基本功能一致。安装完成后先打开 Container Manager到“注册表”或“设置”中配置镜像加速地址避免后续拉取镜像超时。4.2 创建项目目录使用群晖 File Station 创建以下目录/volume1/docker/nastool/config /volume1/docker/qbittorrent/config /volume1/downloads /volume1/media/movies /volume1/media/tvshows其中/volume1是群晖最常见的数据卷路径实际以你机器上的卷名为准。如果存储池较多优先选择同一个卷来创建下载目录和媒体库目录这是硬链接生效的前提。4.3 编写 docker-compose.yml群晖 Container Manager 的“项目”功能支持直接导入 Compose 文件。下面提供一个包含 nastool、qBittorrent、Jellyfin 三个服务的完整 Compose 示例用一条命令即可启动整套环境。在 File Station 中进入/volume1/docker新建文件docker-compose.yml复制以下内容并保存。version: 3 services: nastool: image: nastool/nas-tools:latest container_name: nastool environment: - PUID1026 - PGID100 - TZAsia/Shanghai volumes: - /volume1/docker/nastool/config:/config - /volume1/downloads:/downloads - /volume1/media:/media ports: - 3000:3000 restart: unless-stopped qbittorrent: image: linuxserver/qbittorrent:latest container_name: qbittorrent environment: - PUID1026 - PGID100 - TZAsia/Shanghai volumes: - /volume1/docker/qbittorrent/config:/config - /volume1/downloads:/downloads ports: - 8081:8080 restart: unless-stopped jellyfin: image: jellyfin/jellyfin:latest container_name: jellyfin environment: - PUID1026 - PGID100 - TZAsia/Shanghai volumes: - /volume1/docker/jellyfin/config:/config - /volume1/media:/media ports: - 8096:8096 restart: unless-stopped几点说明image字段中的镜像名和 tag 可能会随项目版本变化。部署时建议先到 nastool 官方仓库的 Release 页面确认最新镜像信息不要盲目沿用 latest。PUID和PGID用前面id命令查到的实际值替换。下载器的 WebUI 端口映射到了宿主机的8081如果你本机端口被占用改一个未被占用的端口即可。Jellyfin 的媒体目录挂载为/medianastool 整理完成的文件会出现在这个目录下Jellyfin 扫描时直接读取同一份路径。4.4 通过 Container Manager 导入 Compose 项目在 Container Manager 左侧菜单中选择“项目”点击“新增”选择路径/volume1/docker系统会自动识别目录下的docker-compose.yml文件。确认后点击下一步Container Manager 会自动拉取镜像并启动容器。如果你的群晖系统还是旧版 Docker 套件也可以通过 SSH 进入终端在/volume1/docker目录下执行cd /volume1/docker docker compose up -d启动完成后执行docker ps可以看到三个容器的状态。4.5 群晖部署注意事项群晖部署最容易踩坑的地方是权限。如果容器启动后提示某个目录没有写入权限首先检查宿主机目录的所有者和PUID/PGID是否匹配。可以右键目录查看属性或在 SSH 里执行ls -l查看目录拥有者。另外群晖的防火墙和路由器安全策略默认比较保守如果访问不到容器端口先检查群晖“控制面板 → 安全性 → 防火墙”中是否放行了对应端口。5. 飞牛、极空间、绿联部署要点群晖是很多用户的第一台 NAS但飞牛、极空间、绿联这些年增长也很快。它们部署 nastool 的思路和群晖高度一致差异主要集中在系统路径、Docker 管理界面和权限设置上。5.1 飞牛 fnOS 部署飞牛 fnOS 基于 Debian 开发系统自带了 Docker 应用界面也比较现代。它的数据盘路径通常是/vol1或类似的卷路径具体可以在文件管理器中查看磁盘挂载信息。飞牛的 Docker 应用支持“项目”模式也就是 Compose。部署步骤安装并打开 Docker 应用。在文件管理器中创建配置目录、下载目录和媒体目录。将上文docker-compose.yml中的路径改成飞牛的实际路径例如/vol1/docker/nastool/config。在 Docker 应用的“项目”功能中导入 Compose 文件。启动后访问对应端口。飞牛的 PUID/PGID 获取方式和群晖一样SSH 登录执行id即可。需要注意飞牛系统对存储池的挂载路径有自己的规则跨存储池同样不支持硬链接媒体目录建议放在下载目录所在的存储池内。5.2 极空间部署极空间的 NAS 系统内置了 Docker 管理功能但目前不同版本对 Compose 的支持程度不完全一致。如果你使用的是较新版本的 ZOS可以在 Docker 管理界面中直接创建 Compose 项目如果界面中没有项目入口可以先手动创建容器或者通过 SSH 使用docker run命令部署。极空间的数据盘路径比较特殊通常不能直接套用群晖的/volume1。建议在极空间的文件管理器中找到存储池的实际挂载路径然后在创建容器时把对应路径映射进容器。极空间手动创建容器的关键参数镜像nastool/nas-tools:latest端口映射3000映射到宿主机的3000存储空间分别映射config、downloads、media三个目录环境变量TZAsia/Shanghai极空间对 SSH 功能的开放策略有版本差异如果无法通过 SSH 登录直接在 Docker 管理界面中创建容器也够用。5.3 绿联部署绿联 UGOS Pro 系统在较新版本中提供了 Docker 应用支持镜像管理、容器创建和 Compose 项目导入。部署时同样按照“确认路径 → 导入 Compose → 启动容器”的顺序操作。绿联的存储路径一般位于/vol或/data下具体以系统磁盘管理中显示的路径为准。如果遇到容器无法写入文件的权限问题先检查宿主机目录所有者和 PUID/PGID 是否一致再检查系统“控制面板 → 共享文件夹”中是否对当前用户开放了读写权限。绿联部分旧版系统可能不支持 Docker 的 Compose 项目入口只能手动创建容器。此时使用docker run也是一种稳妥的方案docker run -d \ --name nastool \ -p 3000:3000 \ -v /path/to/nastool/config:/config \ -v /path/to/downloads:/downloads \ -v /path/to/media:/media \ -e PUID1000 \ -e PGID1000 \ -e TZAsia/Shanghai \ nastool/nas-tools:latest其中/path/to/...需要替换为绿联系统中的实际路径。5.4 三平台部署对比平台Docker 管理方式Compose 支持路径注意点常见坑群晖Container Manager良好路径为 /volume1 或其他卷路径端口安全策略、PUID/PGID飞牛 fnOS系统自带 Docker 应用良好路径通常为 /vol1 或磁盘挂载目录跨存储池硬链接失效极空间系统内置 Docker 管理视版本而定存储池路径需在文件管理器中确认SSH 访问可能受限绿联UGOS Pro Docker 应用新版支持旧版视版本而定路径通常在 /vol 或 /data 下共享文件夹读写权限5.5 一个适用于所有平台的通用 docker run 示例如果不想使用 Compose可以用docker run依次启动三个容器。下面以 nastool 为例展示最小化启动方式。docker run -d \ --name nastool \ --restart unless-stopped \ -p 3000:3000 \ -v /path/to/nastool/config:/config \ -v /path/to/downloads:/downloads \ -v /path/to/media:/media \ -e PUID1000 \ -e PGID1000 \ -e TZAsia/Shanghai \ nastool/nas-tools:latest启动后查看容器日志docker logs -f nastool看到服务启动成功的日志后浏览器访问http://NAS_IP:3000就能进入 Web UI。6. 基础配置让 nastool、下载器、媒体服务串起来容器启动成功只是第一步。要让整套链路跑起来需要在 nastool Web UI 里完成初始化配置。6.1 首次登录与系统设置打开浏览器访问http://NAS_IP:3000。首次使用需要设置管理员账号和密码。设置完成后进入系统设置建议先确认两个地方时区设置为Asia/Shanghai避免日志时间和实际时间有偏差。文件整理模式和目录规则根据你想要的媒体库结构进行配置。6.2 添加媒体库目录在 nastool 的媒体库设置里把容器内挂载的/media/movies和/media/tvshows添加为电影库和剧集库。同时设置下载目录的映射关系让 nastool 知道/downloads下哪些目录属于临时下载区。这里要注意容器内路径和宿主机路径的区别。Compose 文件里已经把宿主机/volume1/downloads映射成了容器内的/downloads所以 nastool 配置填的都是容器内路径。6.3 配置下载器在 nastool 的下载器配置页面选择 qBittorrent填写下载器的 WebUI 地址和账号密码。由于 qBittorrent 容器和 nastool 容器在同一个 Docker 网络中地址可以直接写容器名http://qbittorrent:8080如果从宿主机局域网访问下载器也可以填写http://NAS_IP:8081然后测试连接确认能读取到下载任务。6.4 配置媒体服务如果希望 movie 下载整理完成后自动刷新 Jellyfin 媒体库需要在 nastool 中配置 Jellyfin。填写 Jellyfin 的地址、API Key然后测试连接。配置成功后nastool 整理完文件会主动通知 Jellyfin 刷新对应媒体库不用再手动扫码。6.5 启动一个最小测试任务配置完成后建议先不要立刻添加大量订阅。找一个测试资源添加一条订阅或手动触发一次下载观察整个链路是否顺畅下载器是否收到任务。下载完成后文件是否自动整理到媒体库目录。媒体服务是否刷新出了海报墙。第一次全链路跑通后再根据实际需求扩展订阅规则和目录策略。这样能避免配置错误被大量任务放大排查起来也更容易。7. 效果验证一条自动化链路如何跑通7.1 容器状态检查部署完成后先检查容器是否都处于运行状态docker ps正常输出应该能看到三个容器STATUS为Up。如果某个容器反复重启用以下命令查看日志docker logs -f nastool日志会直接暴露启动失败原因比如路径挂载错误、镜像拉取失败、权限不足等。7.2 Web UI 访问验证浏览器访问以下地址nastoolhttp://NAS_IP:3000qBittorrenthttp://NAS_IP:8081Jellyfinhttp://NAS_IP:8096如果某一个端口无法访问先确认端口是否被占用再检查防火墙策略。端口占用排查命令ss -lntp | grep -E 3000|8081|80967.3 自动化链路验证在 nastool 中添加一个测试订阅确认来源与规则无误后保存。观察日志输出应该能依次看到订阅命中创建下载任务。下载任务开始执行。下载完成后文件移动到媒体库目录。元数据刮削完成。通知 Jellyfin 刷新媒体库。每一步都有对应日志。如果某一步没有执行按失败位置去对应系统里排查。7.4 硬链接是否生效在 NAS 文件管理器里查看下载目录和媒体库目录两个目录下都有同名文件但实际磁盘空间没有翻倍说明硬链接生效。也可以用命令检查文件 inodels -li /path/to/downloads/movie.mkv ls -li /path/to/media/movies/movie.mkv两个命令输出的 inode 编号一致说明它们指向同一份磁盘数据。8. 常见问题与排查方法下面表格整理了从拉取镜像到全链路运行的典型问题按出现频率排列。问题现象可能原因排查方式解决方案拉取镜像超时报 registry-1.docker.io/v2 错误网络无法访问 Docker Hub查看报错信息检查 Docker 镜像加速配置配置可用的国内镜像加速地址再重试容器启动后反复重启路径挂载错误或镜像架构不匹配查看docker logs检查宿主机路径是否存在确认镜像支持当前架构访问不了 Web UI 端口端口映射被占用或防火墙拦截docker ps查看端口映射ss -lntp查看监听状态修改宿主机端口映射放行防火墙规则目录没有写入权限PUID/PGID 与宿主机目录所有者不一致执行id对比用户 ID查看目录ls -l将 Compose 中的 PUID/PGID 改为实际值刮削不到中文元数据网络无法访问元数据服务或文件命名太乱查看 nastool 日志中的刮削记录优化命名确认网络可正常访问元数据服务媒体库不显示新电影Jellyfin 没开启自动扫描在 Jellyfin 媒体库设置中开启定期扫描在 nastool 中配置 Jellyfin API整理后主动通知刷新硬链接失败下载目录和媒体目录不在同一个文件系统用df查看两个目录所在分区调整目录结构让两个目录位于同一个卷/存储池内容器能启动但功能异常Compose 里的镜像 tag 过旧或过新查看版本信息锁定已知稳定版本或升级到官方最新版本9. 最佳实践与工程建议9.1 目录规划要一次到位部署前先把目录结构规划好比部署后反复迁移省事得多。核心原则是配置目录独立、下载目录和媒体库目录同卷、媒体库按类型分目录。如果你有多个存储池尽量把下载和媒体库放在同一个池内否则硬链接方案无法使用只能走移动或复制做种和媒体库之间需要二选一。9.2 镜像版本要锁定不要永远跟随 latestlatest标签虽然方便但不可控。nastool 版本更新时镜像升级可能带来配置格式变化或 bug。建议在实际使用中锁定一个稳定版本号升级前先查看 Release 说明再决定是否升级。升级前备份/config目录这是所有配置和数据库的所在地一旦出现异常可以快速回滚。9.3 配置目录定期备份你花在 nastool 上的所有配置包括目录映射、订阅规则、下载器连接信息、媒体服务配置都存放在 config 目录里。这个目录不需要很大但非常关键。建议在 NAS 定时任务中设置每周增量备份或者手动打包保存一份避免意外情况下从头配置。9.4 安全边界不要把所有端口都暴露到公网很多用户部署完成后为了让外部网络能访问直接把 nastool、qBittorrent、Jellyfin 的端口映射到路由器公网。这种做法的风险很大这些服务通常没有足够完善的认证体系暴露到公网等于把 NAS 的部分能力开放给外部探测。更稳妥的做法是局域网内直接访问外网访问时优先使用 NAS 系统自带的远程访问服务而不是手动端口转发。如果一定要暴露出去至少确保服务设置了强密码、开启了二次验证并配合反向代理做好访问控制。对下载器这类服务默认情况下不要开放公网访问。9.5 日志与监控nastool 日志位于 config 目录下的 logs 文件夹。排查问题前先看日志能节省大量时间。下载器、Jellyfin 也有各自的日志路径全链路自动化的问题定位通常遵循“下载器日志 → nastool 日志 → Jellyfin 日志”的顺序。NAS 的 Docker 管理界面也提供资源占用查看如果长时间运行后容器响应变慢可以重启单体容器但升级或重启前记得先备份配置。9.6 从最小链路开始扩展不要第一次部署就把所有功能全部配满。推荐先跑通“nastool qBittorrent Jellyfin”的最小链路确认下载、整理、刮削、展示没有问题后再逐步加入订阅规则、通知推送、目录分类策略等高级功能。整个系统的复杂度会随着配置项增多而上升分阶段扩展会让问题的排查边界清晰很多。如果你在此之前已经用纯手动方式维护媒体库那么从这组容器部署开始第一次体验“下载完自动出现在海报墙”大概率会有明显的效率提升。下一步值得深入研究的方向包括目录分类规则设计、硬链接与做种共存方案、多用户权限隔离以及如何在 Jellyfin 里分享媒体库给家人使用。部署过程中如果遇到问题优先看容器日志再检查路径和权限这套思路能覆盖大部分常见的坑。