搭建nextcloud私人云盘


现在市面上的网盘,不是太小就是太贵,而且有些还很恶心,点名百度网盘,自己搭建一个更隐私,随心所欲,自由度大,还可作为离线下载服务器。起初我用过最简单的filebrowser,就是一个远程文件管理吧,但是性能不行,功能有限。然后用了seafile,但是免费版功能有限,而且不能在服务端手动添加文件,要企业版才行,遂放弃,后来我用了nextcloud,免费开源的,界面也好看,插件也多,功能不愁不够,而且能够服务端手动添加文件,可以与aria2配合起来作为离线下载服务器用。


环境搭建

docker搭建

图省事,使用docker,采用的镜像是rootlogin/nextcloud,该镜像小巧并且使用的是nginx而不是apache。使用mariadb做数据库,同样使用docker,然后将两者连接起来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#安装docker并启动
wget -qO- https://get.docker.com/ | sh
sudo systemctl enable docker
sudo systemctl start docker
#拉取nextcloud和mariadb的镜像
docker pull rootlogin/nextcloud:latest mariadb:10
#配置数据库用户名和密码,/xxx/xxxxx填数据库文件夹路径,如/root/nextcloud_db
docker run -d --name nextcloud_db -v /xxx/xxxxx:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=rootpassword -e MYSQL_DATABASE=nextcloud -e \
MYSQL_USER=user -e MYSQL_PASSWORD=userpassword mariadb:10
#/xxx/xxxxx填nextcloud文件夹路径,如/root/nextcloud_data
#将容器80端口映射到宿主机的8081端口,容器名字nextcloud,数据库名字仍是nextcloud_db
docker run -d --name nextcloud --link nextcloud_db:nextcloud_db \
-p 8081:80 -v /xxx/xxxxx:/data rootlogin/nextcloud:latest
docker start nextcloud

至此,nextcloud已经搭建好了,接下来需要在宿主机安装nginx,用以代理容器。不过也可以在上一步中,将容器80端口映射到宿主机80端口,这样就不必再在宿主机使用nginx代理了。安装nginx的具体步骤网上都有。


nginx配置

安装好nginx后,进入/etc/nginx/conf.d目录,创建nextcloud.conf文件,并写入以下内容保存。

1
2
3
4
5
6
7
8
9
10
11
12
13
server {
listen 80;
server_name xxxx; #修改这里为自己的server_name
location / {
proxy_pass http://127.0.0.1:8081;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
client_max_body_size 0;
directio 10m;
aio on;
}
}

nextcloud配置

启动nginx,至此大功告成,打开网页输入目标地址即可打开,打开后需要创建管理员账号,数据库选择这里有坑,选择数据库不要选择sqlite,应选择mariadb/mysql,输入数据库用户名和密码,数据库名字就是上面创建数据库容器时的名字nextcloud_db,数据库地址这里,因为使用的是docker,不能填localhost,因为我们将两个容器连接起来了,数据库容器指向了nextcloud容器,因此数据库地址这里应该填nextcloud容器的名字,即nextcloud


配置aria2

进入/xxx/xxxxx/data/user/files//xxx/xxxxx为nextcloud文件夹路径,user为自己用户名字

1
2
3
4
5
mkdir Downloads
#更改用户和组,这样才能有权限在nextcloud中上传和修改
sudo chown 1501:1501 Downloads
#执行完这一步后先将该目录加入到数据库中
docker exec -i nextcloud bash -c 'occ files:scan user'

每次下载完都这样做的话非常低效,有必要使用脚本来完成。在aria2配置文件中,将下载保存目录更改为上述Downloads的路径,并且在配置文件中加入on-download-complete=/xxx/xxx,和on-bt-download-complete=/xxx/xxx。第一个参数能在任务下载完以后自动执行命令,后一个参数能在bt下载完成后自动执行命令,不用等待上传完成。修改完配置文件需要重启aria2使配置文件生效。


自动执行脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/bin/bash

echo $1 $2 $3
path=$3
#aria2下载保存的目录
downloadpath='/xxx/xxxx'
if [ $2 -eq 0 ]
then
exit 0
fi
#提取下载文件根路径,如把/data/a/b/c/d.jpg变成/data/a
while true;do
filepath=$path
path=${path%/*};
if [ "$path" = "$downloadpath" ] && [ $2 -eq 1 ] #如果下载的是单个文件
then
echo 1 $path $filepath
chown -R 1501:1501 "$filepath"
break
elif [ "$path" = "$downloadpath" ] #文件夹
then
echo 2 $path $filepath
chown -R 1501:1501 "$filepath"
break
fi
done

docker exec -i nextcloud bash -c 'occ files:scan user'

保存为/xxx/xxxx,即上面on-download-complete参数后面的值,赋予可执行权限。至此,完工。

-------------THE END-------------
0%