基于Rclone网盘同步的NASTOOL搭建方式(同样适用于影视备份)

[TOC]

实现的效果

  • 使用nastool自动搜索剧集
  • 使用nastool自动识别剧集
  • 上传重命名和刮削好的剧集到网盘(google drive 或者onedrive等)

搭建前必须要了解的概念

软链接

就是类似于windows的快捷方式。
比如:

源文件A,创建一个软链接B,在linux上的操作:
ln -s A B

同理windows,此时你删除源文件A,B还在,但是没用了,已经访问不了了。
这里讲软链接的目的就是方便理解硬链接。

复制

大家都了解了,不推荐,太影响性能,也占用空间。

rclone 的复制、移动和同步

推荐使用,但是不推荐在nastool中直接使用,对于使用docker版本的nastool配置比较复杂,而且最关键的一点,如果你的网速不能够实时上传到网盘里,那么本地就会有一个cache,这个cache也可能非常的大。
其实很多人想的是,我的vps硬盘很小,但是流量很足,想直接下到网盘了,这里很明确的说,这么做的效果是非常差的。rclone在move或者copy的过程中也会有cache文件,因为vps不可能和网盘是实时传输的,就会先cache到本地,然后再慢慢传。最关键的就是:nastool是在下载的瞬间就开始整理和刮削,那时候还没下完,这个时候同时在移动,非常耗费资源

rclone copy copy文件到云端,我目前是用的这种方式,因为我有pt站,需要做种
rclone sync 这种是增量备份,回删除云端的程序,不推荐
rclone move 如果你是全bt下载,我感觉这种方式就很好,bt设置下载完几分钟删除,然后move整理好之后的到云端

硬链接

推荐!很多人搭建nastool看了很多教程,教程里都是自己的机器,比如nas上面使用硬链接,但是就好奇,网盘怎么使用硬连接呢?不要急,先了解硬链接的特点:
硬连接在linux上的操作:

ln A B

源文件A,硬连接B,他们都指向了同一个文件。
但是这个文件现在有了2个别名。
此时如果删除A,B还是能够访问到的内容的,只有把A和B同时删除了,这个文件在系统中才消失了。

同时硬链接也是一种链接,不会和复制一样增加很大的储存空间(就是个别名,几乎不额外占用空间)。

简单点说就是:如果创建了一个硬链接,那么我们操作这个硬链接,比如说移动或者修改原来的内容,效果和操作源文件是一样的。上传这个硬链接,也相当于上传的源文件!

如果还是看不懂,我这里找了几个比较明白的讲解:

youtube:09 硬链接和软链接
youtube:13 软硬链接

环境搭建

为了防止出现权限问题,以下的所有安装都使用root权限

我是直接搭建在vps上的,docker的环境就行,本次使用的docker compose,无需特别的去安装docker-compose,因为docker原生就带compose。使用命令为:docker compose [后面的参数同dokcer-compose]

还有一点就是,nastool和bt下载器要放到一台机器上。

nastool中使用到的组件和理由

  • qbit:这个随自己喜欢,我使用的qbit

没了,包括索引器,字幕下载啥的,都推荐使用nastool自带的,因为那几个插件都不好用!

安装docker

无论你是什么linux发行版,使用如下命令都可以安装本次搭建的docker环境:

curl -fsSL https://get.docker.com -o get-docker.sh

sh get-docker.sh

运行完上面两个命令之后,等到安装完成即可。

安装目录结构

演示环境使用如下命令操作:


cd $home 
mkdir nastool
mkdir qbit
mkdir -p qbit/downloads  qbit/downloads/movie qbit/downloads/tv qbit/downloads/animation qbit/downloads/link  qbit/downloads/link/movie qbit/downloads/link/tv qbit/downloads/link/animation

此时的目录结构如下:

|-- nastool
|-- qbit
|   `-- downloads
|       |-- animation
|       |-- link
|       |   |-- animation
|       |   |-- movie
|       |   `-- tv
|       |-- movie
|       `-- tv
  • tv:存放电视资源
  • movie:存放电影资源
  • animation:存放动漫资源
  • link:用于硬链接的文件夹

    安装qibt

cd $home && cd qbit 来到qbit目录,创建一个docker-compose.yml 文件,复制下面内容进去。

version: "3.4"
services:
   qbittorrent:
     image: linuxserver/qbittorrent
     container_name: qbittorrent
     environment:
       - PUID=0  #PUID,使用 id 用户名 查询
       - PGID=0   #PGID,使用 id 用户名 查询
       - TZ=Asia/Shanghai # 你的时区
       - UMASK_SET=000
       - WEBUI_PORT=8081 # 将此处修改成你欲使用的 WEB 管理平台端口
     volumes:
       - ./config:/config # 绝对路径请修改为自己的config文件夹。修改”:“冒号前面的是你宿主机的文件路径;冒号后面的是docker qBittorrent目录,别改。下面这条同样道理
       - ./downloads:/downloads # 绝对路径就是要下载的路径
     ports:
       # 要使用的映射下载端口与内部下载端口,可保持默认,安装完成后在管理页面仍然可以改成其他端口。
       - 6981:6981
       - 6981:6981/udp
       # 此处WEB UI 目标端口与内部端口务必保证相同
       - 8081:8081
     restart: unless-stopped

如果全是bt下载的话,可以使用qbittorrent-ee,防吸血

version: "2"
services:
  qbittorrentee:
    image: superng6/qbittorrentee
    container_name: qbittorrentee
    environment:
      - PUID=0
      - PGID=0
      - TZ=Asia/Shanghai
      - UMASK_SET=000
      - WEBUI_PORT=8080
    volumes:
      - ./config:/config
      - ./downloads:/downloads
    ports:
      - 6981:6981
      - 6981:6981/udp
      - 8080:8080
    restart: unless-stopped

使用命令 docker compose up -d 启动qbit,先不管,等会去配置。

安装nastool

cd $home && cd nastool 进入到nastool文件夹,同样也创建一个docker-compose.yml文件,如果是和我的步骤一摸一样,复制下面的内容进去。不一样的话自己改一下。

version: "3"
services:
  nas-tools:
    image: jxxghp/nas-tools:latest
    ports:
      - 3000:3000        # 默认的webui控制端口
    volumes:
      - ./config:/config   # 冒号左边请修改为你想保存配置的路径
      - /root/qbit/downloads:/my_media   # 媒体目录,多个目录需要分别映射进来,需要满足配置文件说明中的要求
    environment:
      - PUID=0    # 想切换为哪个用户来运行程序,该用户的uid
      - PGID=0    # 想切换为哪个用户来运行程序,该用户的gid
      - UMASK=000 # 掩码权限,默认000,可以考虑设置为022
      - NASTOOL_AUTO_UPDATE=true  # 如需在启动容器时自动升级程程序请设置为true
     #- REPO_URL=https://ghproxy.com/https://github.com/jxxghp/nas-tools.git  # 当你访问github网络很差时,可以考虑解释本行注释
    restart: always
    network_mode: bridge
    hostname: nas-tools
    container_name: nas-tools

其实最关键的点就是映射了my_media目录,- /root/qbit/downloads:/my_media。因为使用硬链接不能跨盘。如果映射多个目录的话同步就会错误1,这也是在qbit目录的download目录下建立了一个link文件夹的原因。

配置qbit

更改监听端口

按照我的配置是:http://ip:8081,我的配置中把监听端口设置为了6981,因此先去设置中修改这个端口,如下图所示:

给未下载完成的项目添加一个后缀


这样只有下载完成的视频才会有比如.mkv后缀,这样才会去移动。

添加新的分类标签

在界面左边功能栏中,按下图创建新的分类

创建分类并配置好下载路径:按照我的qbit和nastool配置文件的以下都可以照着写


这样子nastool按照分类发送下载任务的时候,就可以准确的下载到指定的目录里面了。

同时可以设置自动删种,我是保种7天删除,这里随你了。

配置nastool

nastool的设置也不可能全部都设置到,就是设置了几个我感觉需要注意的点。

设置-基础设置-媒体

  • 默认文件转移方式:硬链接
  • 二级分类策略:我是直接给留空了,默认不分类 ,因为使用分类的话要去设置配置文件,我嫌麻烦
  • 刮削设置:因为我用的gd,有40w文件总数的限制,我就只保留了NFO,图片我全取消了

设置-媒体库

如下图所示:

设置的是硬链接之后的地址。

设置-目录同步

设置-下载器-下载器目录

这里配置的目录是下载器里映射的目录,最后的那个就是分类,对应的就是qbit的分类。

其他的配置就不写了 ,我把自动获取字幕也给关了。

rclone 上传到网盘

rclone 的配置,和sa的配置,我感觉有点麻烦网上教程很多,下面是我的脚本:。

这里就是简单的通过 rclone copy 命令来进行同步刮削之后的剧集。rclone的详细使用命令可以看Rclone 进阶使用教程 - 常用命令参数详解

你可以写一个定时脚本,或者 tmuxscreen一个新的窗口,没事干的时候手动去同步一下。

#!/bin/bash

COUNT=$(ps -ef |grep 'rclone copy' |grep -v "grep" |wc -l)
echo $COUNT
if [ $COUNT -eq 0 ]; then
    /usr/bin/rclone copy -v -P /root/qbit/downloads/link/ fin2:/ --transfers=32 --ignore-errors --buffer-size=200M --check-first --checkers=32
    echo "rclone now start copying"

else
    echo "rclone is runing,pass it " 
fi

我是半小时执行一次

*/30 * * * * /bin/bash /root/nastool/rclone_copy.sh >> /dev/null 2>&1 &

最关键的一点就是如何及时的清理vps的硬盘空间。我这里是2个步骤:

  • qbit 及时删种,我因为vps是10T的,设置了保种7天。但是删除了以后,因为是硬连接,所以还要去删硬连接的。
  • 脚本自动删除硬链接文件夹link中的各个大分类文件夹下,创建时间超过8天的文件夹。具体的按照天数删除的脚本可以搜一下,网上很多。

我自己的脚本:

#!/bin/bash

find /root/qbit/downloads/link/movie/ -mmin +360 -type f -name "*" -exec rm -rf {} \;
find /root/qbit/downloads/link/tv/ -mmin +360 -type f -name "*" -exec rm -rf {} \;
find /root/qbit/downloads/link/animation/ -mmin +360 -type f -name "*" -exec rm -rf {} \;

find /root/qbit/downloads/link/movie/ -type d -empty -exec rmdir {} \;
find /root/qbit/downloads/link/movie/ -type d -empty -exec rmdir {} \;
find /root/qbit/downloads/link/animation/ -type d -empty -exec rmdir {} \;

我是半小时执行一次,可以自己改一下

*/30 * * * * /bin/bash /root/nastool/unlink_file.sh >> /dev/null 2>&1 &

最后来看一下我的效果:(之前第一次同步的时候用的sync,因为我增加了pt站,现在用的是copy,如果全bt可以用move)

顺便推荐一个我自己用的过滤规则
1080p和4k的通用视频文件下载规则

eyJuYW1lIjogIlx1OWFkOFx1NmUwNVx1NTM1NVx1NjU4N1x1NGVmNiIsICJydWxlcyI6IFt7Im5hbWUiOiAiNGtcdTUzNTVcdTY1ODdcdTRlZjZcdTVlMjZcdTRlMmRcdTViNTciLCAicHJpIjogIjEiLCAiaW5jbHVkZSI6ICJbXHU0ZTJkXHU1NmZkXHU1NzBiXHU3ZTQxXHU3YjgwXSgvfFxcc3xcXFxcfFxcfCk/W1x1N2U0MVx1N2I4MFx1ODJmMVx1N2NhNF18W1x1ODJmMVx1N2I4MFx1N2U0MV0oL3xcXHN8XFxcXHxcXHwpP1tcdTRlMmRcdTdlNDFcdTdiODBdfFx1N2U0MVx1OWFkNHxcdTdiODBcdTRmNTN8W1x1NGUyZFx1NTZmZFx1NTcwYl1bXHU1YjU3XHU5MTRkXXxcdTU2ZmRcdThiZWR8XHU1NzBiXHU4YTllfFx1NGUyZFx1NjU4N1xuMjE2MHw0S3w0ayIsICJleGNsdWRlIjogIkJsdS0/UmF5LitWQy0/MXxCbHUtP1JheS4rQVZDfFVIRC4rYmx1LT9yYXkuK0hFVkN8XFxXc2RyXFxXfG1pbmliZHxbXFxXX11kaXlbXFxXX118W1xcV19dM2RbXFxXX118UkVNVVh8RFZ8Qmx1ZVJheS5IRVZDIiwgInNpemUiOiAiNDkiLCAiZnJlZSI6ICIifSwgeyJuYW1lIjogIlx1OTAxYVx1NzUyOFx1NGUwYlx1OGY3ZDRrIiwgInByaSI6ICIzIiwgImluY2x1ZGUiOiAiMjE2MHw0S3w0ayIsICJleGNsdWRlIjogIkJsdS0/UmF5LitWQy0/MXxCbHUtP1JheS4rQVZDfFVIRC4rYmx1LT9yYXkuK0hFVkN8XFxXc2RyXFxXfG1pbmliZHxbXFxXX11kaXlbXFxXX118W1xcV19dM2RbXFxXX118UkVNVVh8RFZ8Qmx1ZVJheS5IRVZDIiwgInNpemUiOiAiNDkiLCAiZnJlZSI6ICIifSwgeyJuYW1lIjogIjEwODBwXHU1MzU1XHU2NTg3XHU0ZWY2XHU1ZTI2XHU0ZTJkXHU1YjU3IiwgInByaSI6ICI1IiwgImluY2x1ZGUiOiAiW1x1NGUyZFx1NTZmZFx1NTcwYlx1N2U0MVx1N2I4MF0oL3xcXHN8XFxcXHxcXHwpP1tcdTdlNDFcdTdiODBcdTgyZjFcdTdjYTRdfFtcdTgyZjFcdTdiODBcdTdlNDFdKC98XFxzfFxcXFx8XFx8KT9bXHU0ZTJkXHU3ZTQxXHU3YjgwXXxcdTdlNDFcdTlhZDR8XHU3YjgwXHU0ZjUzfFtcdTRlMmRcdTU2ZmRcdTU3MGJdW1x1NWI1N1x1OTE0ZF18XHU1NmZkXHU4YmVkfFx1NTcwYlx1OGE5ZXxcdTRlMmRcdTY1ODdcbjEwODBbcGldIiwgImV4Y2x1ZGUiOiAiQmx1LT9SYXkuK1ZDLT8xfEJsdS0/UmF5LitBVkN8VUhELitibHUtP3JheS4rSEVWQ3xcXFdzZHJcXFd8bWluaWJkfFtcXFdfXWRpeVtcXFdfXXxbXFxXX10zZFtcXFdfXXxSRU1VWHxEVnxCbHVlUmF5LkhFVkMiLCAic2l6ZSI6ICIxOCIsICJmcmVlIjogIiJ9LCB7Im5hbWUiOiAiXHU5MDFhXHU3NTI4XHU0ZTBiXHU4ZjdkMTA4MCIsICJwcmkiOiAiNyIsICJpbmNsdWRlIjogIjEwODBbcGldIiwgImV4Y2x1ZGUiOiAiQmx1LT9SYXkuK1ZDLT8xfEJsdS0/UmF5LitBVkN8VUhELitibHUtP3JheS4rSEVWQ3xcXFdzZHJcXFd8bWluaWJkfFtcXFdfXWRpeVtcXFdfXXxbXFxXX10zZFtcXFdfXXxSRU1VWHxEVnxCbHVlUmF5LkhFVkMiLCAic2l6ZSI6ICIxNSIsICJmcmVlIjogIiJ9XX0=

下面这个是只抓4k的

eyJuYW1lIjogIlx1NjcwMFx1NjViMDRrXHU1MjY3IiwgInJ1bGVzIjogW3sibmFtZSI6ICI0a1x1NTM1NVx1NjU4N1x1NGVmNlx1NWUyNlx1NGUyZFx1NWI1NyIsICJwcmkiOiAiMSIsICJpbmNsdWRlIjogIltcdTRlMmRcdTU2ZmRcdTU3MGJcdTdlNDFcdTdiODBdKC98XFxzfFxcXFx8XFx8KT9bXHU3ZTQxXHU3YjgwXHU4MmYxXHU3Y2E0XXxbXHU4MmYxXHU3YjgwXHU3ZTQxXSgvfFxcc3xcXFxcfFxcfCk/W1x1NGUyZFx1N2U0MVx1N2I4MF18XHU3ZTQxXHU5YWQ0fFx1N2I4MFx1NGY1M3xbXHU0ZTJkXHU1NmZkXHU1NzBiXVtcdTViNTdcdTkxNGRdfFx1NTZmZFx1OGJlZHxcdTU3MGJcdThhOWV8XHU0ZTJkXHU2NTg3XG4yMTYwfDRLfDRrIiwgImV4Y2x1ZGUiOiAiQmx1LT9SYXkuK1ZDLT8xfEJsdS0/UmF5LitBVkN8VUhELitibHUtP3JheS4rSEVWQ3xcXFdzZHJcXFd8bWluaWJkfFtcXFdfXWRpeVtcXFdfXXxbXFxXX10zZFtcXFdfXXxSRU1VWHxEVnxCbHVlUmF5LkhFVkMiLCAic2l6ZSI6ICI0OSIsICJmcmVlIjogIiJ9LCB7Im5hbWUiOiAiXHU0ZTBiXHU4ZjdkIiwgInByaSI6ICIzIiwgImluY2x1ZGUiOiAiMjE2MHw0S3w0ayIsICJleGNsdWRlIjogIkJsdS0/UmF5LitWQy0/MXxCbHUtP1JheS4rQVZDfFVIRC4rYmx1LT9yYXkuK0hFVkN8XFxXc2RyXFxXfG1pbmliZHxbXFxXX11kaXlbXFxXX118W1xcV19dM2RbXFxXX118UkVNVVh8RFZ8Qmx1ZVJheS5IRVZDIiwgInNpemUiOiAiNDkiLCAiZnJlZSI6ICIifV19

一些安装nastool时候碰到的坑

目录无法监控

进入到docker容易中,运行

apk add inotify-tools

重启容器即可。