目录

  • 1、引言
  • 2 、安装步骤
    • 2.1 实验准备
    • 2.2 Docker安装
    • 2.3 aliyundrive-webdav安装
    • 2.4 Rclone挂载云盘
    • 2.5 配置Aeri2-pro和AriaNg
  • 3、运行
  • 4、完成安装

1、引言

  云端服务器的硬盘容量太小,很多存储的内容不可使用,本文给出一种云服务器挂载阿里云盘到本地的解决方案,已经可以运行通过,可以放心食用。

2 、安装步骤

2.1 实验准备

所需环境:
云服务器一台(本文采用Centos7系统)

2.2 Docker安装

  对于小白来说宝塔面板作为第一个安装的应用是比较合适的,但我的云服务器硬盘只有10G内存,安装完宝塔7.79后占了700M空间,因此这里选择不安装宝塔面板,直接进行Docker的安装,如果有文件传输的需求可以下载:
MobaXterm和tabby,这两个是shell面板管理工具,可以根据需求使用,都是比较优秀的工具。

1.官方建议Linux内核版本在3.10以上适合安装Docker,首先使用

uname -r

  查看当前系统的内核版本,后面根据这个下载docker版本。
2.使用root权限更新yum包

yum -y update

注:之前有生产环境尽量避免,会导致你的环境错乱。
yum -y update:升级所有包同时也升级软件和系统内核;​
yum -y upgrade:只升级所有包,不升级软件和系统内核

3.若之前安装过卸载旧版本

yum remove docker  docker-common docker-selinux docker-engine

4.安装Docker依赖包

yum install -y yum-utils device-mapper-persistent-data lvm2

  该步骤安装docker相关的依赖包。
5.设置yum下载源
  根据服务器地址筛选,一般都需要设置。
  二选一即可。

yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

注:
yum-config-manager –add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
yum-config-manager –add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)

6.选择Docker版本并安装
输入:

yum list docker-ce --showduplicates | sort -r

查看可用版本:
7.选择一个版本进行安装:
yum -y install docker-ce-(版本号)
  这里我安装的是18.03.1.ce版本,ce表示社区版,ee表示社区版。

yum -y install docker-ce-18.03.1.ce

出现下面界面则表示安装完毕:
武装服务器(一):云服务器配置aliyundriver-webdav以及使用Aria2和Rclone挂载阿里云盘实现离线下载器-编程知识网
8.启动Docker 并设置开机自启

systemctl start docker
systemctl enable docker

2.3 aliyundrive-webdav安装

  aliyundrive-webdav 是将云盘的存储设置为系统挂载盘的工具,同时该项目目前是采用Rust语言实现,相比Java和Go语言大大减少了体积,适用于小服务器运行。

采用Docker一键安装:

docker run -d --name=aliyundrive-webdav --restart=unless-stopped -p 8080:8080 \-v /etc/aliyundrive-webdav/:/etc/aliyundrive-webdav/ \-e REFRESH_TOKEN='******' \-e WEBDAV_AUTH_USER=admin \-e WEBDAV_AUTH_PASSWORD=admin \messense/aliyundrive-webdav

其中的主要参数如下:

  • –name=aliyundrive-webdav :容器名,可以随意起名字。
  • -p 8080:8080:映射容器端口,将容器内服务的右边8080端口映射为左边外面服务器的8080端口,若你想用1234端口访问,则更改为1234:8080
  • -v $PWD/docker/aliyundrive-webdav/:/etc/aliyundrive-webdav/:容器卷映射,简单来说Docker是一个生产环境,可以把它理解为虚拟机里的虚拟机,因此这里是将右边容器内的地址映射到左边服务器的地址,通过这个可以进行同步的增删。
  • -e WEBDAV_AUTH_USER=admin
  • -e WEBDAV_AUTH_PASSWORD=admin 这里配置你的云盘服务器的账号和密码,后续会用这个进行登录。

  输入服务器:端口,输入刚才设定的账户、密码后进入界面,若你的服务器ip地址是192.168.0.1,则在浏览器中输入192.168.0.1:8080进入挂载的webdav内。
武装服务器(一):云服务器配置aliyundriver-webdav以及使用Aria2和Rclone挂载阿里云盘实现离线下载器-编程知识网
  到这里成功的将云盘变成了自己的webdav。

2.4 Rclone挂载云盘

  因是纯净的Linux环境(啥都没有),所以会报错

None of the supported tools for extracting zip archives (unzip 7z busybox) were found. Please install one of them and try again.

  我们这里选择安装Unzip工具。

yum -y install unzip

  安装后提示报错:

Fatal error: failed to mount FUSE fs: fusermount: exec: "fusermount": executable file not found in $PATH

  安装fuse:

yum install fuse

  同时Rclone官网给出了一键安装脚本:

curl https://rclone.org/install.sh | bash

  进行Rclone配置:

rclone config

  出现第一个选项:

No remotes found, make a new one?
n) New remote
s) Set configuration password
q) Quit config
n/s/q> 

  选择新建,输入:n
  这里要输入挂载的名字,这里随便输一个名字就可以,比如这里我们输入test,后面挂载云盘就是挂载的这个名字。

Option Storage.
Type of storage to configure.
Choose a number from below, or type in your own value.1 / 1Fichier\ (fichier)2 / Akamai NetStorage\ (netstorage)3 / Alias for an existing remote\ (alias)4 / Amazon Drive\ (amazon cloud drive)5 / Amazon S3 Compliant Storage Providers including AWS, Alibaba, Ceph, China Mobile, Cloudflare, ArvanCloud, Digital Ocean, Dreamhost, Huawei OBS, IBM COS, IDrive e2, IONOS Cloud, Lyve Cloud, Minio, Netease, RackCorp, Scaleway, SeaweedFS, StackPath, Storj, Tencent COS, Qiniu and Wasabi\ (s3)6 / Backblaze B2\ (b2)7 / Better checksums for other remotes\ (hasher)8 / Box\ (box)9 / Cache a remote\ (cache)
10 / Citrix Sharefile\ (sharefile)
11 / Combine several remotes into one\ (combine)
12 / Compress a remote\ (compress)
13 / Dropbox\ (dropbox)
14 / Encrypt/Decrypt a remote\ (crypt)
15 / Enterprise File Fabric\ (filefabric)
16 / FTP\ (ftp)
17 / Google Cloud Storage (this is not Google Drive)\ (google cloud storage)
18 / Google Drive\ (drive)
19 / Google Photos\ (google photos)
20 / HTTP\ (http)
21 / Hadoop distributed file system\ (hdfs)
22 / HiDrive\ (hidrive)
23 / In memory object storage system.\ (memory)
24 / Internet Archive\ (internetarchive)
25 / Jottacloud\ (jottacloud)
26 / Koofr, Digi Storage and other Koofr-compatible storage providers\ (koofr)
27 / Local Disk\ (local)
28 / Mail.ru Cloud\ (mailru)
29 / Mega\ (mega)
30 / Microsoft Azure Blob Storage\ (azureblob)
31 / Microsoft OneDrive\ (onedrive)
32 / OpenDrive\ (opendrive)
33 / OpenStack Swift (Rackspace Cloud Files, Memset Memstore, OVH)\ (swift)
34 / Oracle Cloud Infrastructure Object Storage\ (oracleobjectstorage)
35 / Pcloud\ (pcloud)
36 / Put.io\ (putio)
37 / QingCloud Object Storage\ (qingstor)
38 / SMB / CIFS\ (smb)
39 / SSH/SFTP\ (sftp)
40 / Sia Decentralized Cloud\ (sia)
41 / Storj Decentralized Cloud Storage\ (storj)
42 / Sugarsync\ (sugarsync)
43 / Transparently chunk/split large files\ (chunker)
44 / Union merges the contents of several upstream fs\ (union)
45 / Uptobox\ (uptobox)
46 / WebDAV\ (webdav)
47 / Yandex Disk\ (yandex)
48 / Zoho\ (zoho)
49 / premiumize.me\ (premiumizeme)
50 / seafile\ (seafile)

  选择存储类型,这里选择:46。

Option url.
URL of http host to connect to.
E.g. https://example.com.
Enter a value.
url> 

  输入上一步配置的webadv服务器的地址,比如http://192.169.0.1:8080。前面的http://不能省略,后面的根据你的配置定义。

Option vendor.
Name of the WebDAV site/service/software you are using.
Choose a number from below, or type in your own value.
Press Enter to leave empty.1 / Nextcloud\ (nextcloud)2 / Owncloud\ (owncloud)3 / Sharepoint Online, authenticated by Microsoft account\ (sharepoint)4 / Sharepoint with NTLM authentication, usually self-hosted or on-premises\ (sharepoint-ntlm)5 / Other site/service or software\ (other)

  输入硬盘类型:5
  后两步是输入上面配置的webadv的登陆账户和登录密码,按提示进行输入。

Option bearer_token.
Bearer token instead of user/pass (e.g. a Macaroon).
Enter a value. Press Enter to leave empty.

  这里直接按回车进行下一步。

Edit advanced config?
y) Yes
n) No (default)
y/n> 

  按n不修改配置。
  接下来会出现你进行的设置信息,检查无误之后按y。

e) Edit existing remote
n) New remote
d) Delete remote
r) Rename remote
c) Copy remote
s) Set configuration password
q) Quit config
e/n/d/r/c/s/q> 

  这里按q退出配置。
  现在Reclone就配置好了,配置文件在

~/.config/rclone/

配置Rclone启动任务:
   – 这个不能直接复制,command哪里需要进行修改,修改点如下两行:
   – test:/:冒号前面对应的是上面rclone设置的name,冒号后面是你要挂载的网盘目录,/表示根目录。
   – /mnt/cloud:这是是你服务器的目录地址
   在执行脚本前,先进行mkdir和chmod,否则会挂载失败。

command="mount test:/ /mnt/cloud  --use-mmap --umask 000 --default-permissions --no-check-certificate --allow-other --allow-non-empty --dir-cache-time 24h --cache-dir=/tmp --vfs-cache-mode full --buffer-size 256M --vfs-read-ahead 512M --vfs-read-chunk-size 32M --vfs-read-chunk-size-limit 128M --vfs-cache-max-size 20G --low-level-retries 200 --config /root/.config/rclone/rclone.conf"
cat > /etc/systemd/system/rclone.service <<EOF
[Unit]
Description=Rclone
After=network-online.target[Service]
Type=simple
ExecStart=$(command -v rclone) ${command}
Restart=on-abort
User=root[Install]
WantedBy=default.target
EOF

   上面两个配置的完整意思为,把test这个网盘的根目录挂载到/mnt/cloud上。
   设置Rclone的启动和自启:

systemctl daemon-reload
# 设置自启 
systemctl enable rclone
# 启动服务
systemctl start rclone
# 查看运行状态
systemctl status rclone

   看到如下界面成功,使用

df -h

   命令可以看到具体挂载的硬盘。
武装服务器(一):云服务器配置aliyundriver-webdav以及使用Aria2和Rclone挂载阿里云盘实现离线下载器-编程知识网

2.5 配置Aeri2-pro和AriaNg

   选用Docker-compose进行两个服务的安装。也有使用Aria2一键安装脚本的。不过因为内存空间过小,这个方法要安装宝塔,因此没有采用。
   这里我是采用了一个文件夹主要负责DockerCompose文件的管理。

mkdir /home/DockerComposeFile && cd /home/DockerComposeFile

   下载配置文件。

wget git.io/aria2-pro.yml

   原生配置文件不太适合一键安装,要做修改。

vi aria2-pro.yml
version: "3.8"
services:Aria2-Pro:container_name: aria2-proimage: p3terx/aria2-proenvironment:- PUID=65534- PGID=65534- UMASK_SET=022- RPC_SECRET=P3TERX- RPC_PORT=6800- LISTEN_PORT=6888- DISK_CACHE=64M- IPV6_MODE=false- UPDATE_TRACKERS=true- CUSTOM_TRACKER_URL=- TZ=Asia/Shanghai- SPECIAL_MODE=rclone- RCLONE=enablevolumes:- ${PWD}/aria2-config:/config- ${PWD}/aria2-downloads:/downloads
# If you use host network mode, then no port mapping is required.
# This is the easiest way to use IPv6 networks.network_mode: host
#    network_mode: bridge
#    ports:
#      - 6800:6800
#      - 6888:6888
#      - 6888:6888/udprestart: unless-stopped
# Since Aria2 will continue to generate logs, limit the log size to 1M to prevent your hard disk from running out of space.logging:driver: json-fileoptions:max-size: 1m
# AriaNg is just a static web page, usually you only need to deploy on a single host.AriaNg:container_name: ariangimage: p3terx/ariangcommand: --port 6880 --ipv6network_mode: host
#    network_mode: bridge
#    ports:
#      - 6880:6880restart: unless-stoppedlogging:driver: json-fileoptions:max-size: 1m

   我们主要关注:

      - PUID=65534- PGID=65534

   这里要改成你的当前用户和用户组,修改为,其中UID和UID和UIDGID表示当前用户和当前用户组。

      - PUID=$UID- PGID=$GID

   否则会导致没有权限执行挂载盘中的文件,修改umask可以解决,但如果将故挂载盘的权限设置为000有隐藏问题,因此不推荐修改umask。

   下面是容器卷映射,将容器里的downloads目录和config目录映射到宿主机,则容器使用了宿主机(外面机器的数据)。注意这里的downloads目录不是直接将数据下载到挂载的云盘,而是通过rclone设置的/tmp目录进行了缓存然后再传输。

  若配置文件放在挂载云盘会有一个权限问题,使用docker logs -f aria2-pro可以看到aria2-pro容器的日志跟踪,注意到aeri2-pro出现permission denied权限不足问题,可以看到下载路径的文件权限是644,110100100,用8421码方式标注,需要执行

docker exec -it aria2-pro bash

  进入aria2-pro面板,然后使用umask查询当前系统目录的权限,注意到为022,即此时屏蔽了000010010权限,则少了— -r- -r-,其它用户无法进行写操作,此时其它用户权限为rw-r–r–。

vi /run/s6/container_environment/UMASK_SET

  来设置权限,我这里是使用R替换的方式来进行修改,vi有命令模式、输入模式、视图模式,在刚进入的时候是命令模式,使用方向键移动到你想修改的位置,输入R进入替换命令,再输入你想修改的数值就可以,这里我们把看到的022,修改为000,不过只是暂时修改,在执行

docker logs aria2-pro -f

  看容器日志发觉还是权限不足,暂时没有找到好方法,需要永久修改容器内部umask的值,建议config放在服务器内部,不要映射到执行权限为644的挂载盘中。

    volumes:- ${PWD}/aria2-config:/config- ${PWD}/aria2-downloads:/downloads

  同时这里的配置文件修改为这个:
  地址在Aria2完美配置,打开下载好后使用tabby或者MobaXterm将其中的配置传送到Linux服务器,文件名为上面:/config左面的地址,之后可以修改你下载后的aria2.conf文件和script.conf文件,这里不需要开启自动上传,在配置docker compoes的时候已经实现了。如果这里开启自动上传脚本upload.sh,会存在权限不足的情况。

    network_mode: host
#    network_mode: bridge
#    ports:
#      - 6800:6800
#      - 6888:6888
#      - 6888:6888/udp

   其中vulumes是容器卷,即把容器内部地址映射到外部,这里要把上面的\${PWD}/aria2-config和${PWD}/aria2-downloads改为你想要的地址,一般是直接更改到挂载的网络云盘。

   后面不能使用host模式,按i进入vi的输入模式,或者移动光标到要修改的地方使用r进行替换,替换完毕后按esc,然后按shift+:,在命令输入行输入wq!退出文件。

   有的使用了RPC密匙,这里可以设置,后面进入Ariang后需要输入,使用#注释掉就可以不用输入密匙,个人觉得注释掉不太安全。

      - RPC_SECRET=P3TERX

  相比官方的推荐配置添加了:

      - SPECIAL_MODE=rclone- RCLONE=enable

  支持rcclone自动上传下载的文件,同时配置下面的一键删除脚本,在服务器中缓存文件、上传云盘、删除本地

   安装docker-compose:

sudo curl -L "https://github.com/docker/compose/releases/download/v2.10.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

   给文件对应权限:

sudo chmod +x /usr/local/bin/docker-compose

  然后启动docker-compose。

docker-compose -f aria2-pro.yml up -d

  现在可以通过刚才设定的端口进行访问了。

  将Rclone脚本拷贝到

cp ~/.config/rclone/rclone.conf ${PWD}/aria2-config

  输入:

docker stop ariang && docker restart aria2-pro && docker restart ariang

  重启服务,其中ariang必须先停止,否则会有配置文件被还原的可能。

  可以通过

docker exec -it {dockername} bash

  或者

docker  exec -u root -it ID /bin/bash

  进入容器内部。

  按Ctrl+P再Ctrl+Q可以退出容器让它在后台运行。

3、运行

  登录上面配置aria2的地址,服务器:端口号,进去之后点击AriaNg设置,输入上面填写的RPC密匙,可以看到连接成功,之后下载的内容会先在服务器设置的缓存目录,这里设置的是/tmp进行缓存,上传后自动删除。
武装服务器(一):云服务器配置aliyundriver-webdav以及使用Aria2和Rclone挂载阿里云盘实现离线下载器-编程知识网
  如果出现异常,通过下面指令查看日志。

systemctl status rclone -l
docker logs aria2-pro -f

4、完成安装

  使用docker ps 命令可以看到安装后的容器,使用brige模式可以看到左边的映射端口,没有看到映射端口说明配置文件用的是host模式,不适用于在云服务器上使用,应该使用brige模式。
武装服务器(一):云服务器配置aliyundriver-webdav以及使用Aria2和Rclone挂载阿里云盘实现离线下载器-编程知识网