Nextcloud私有云盘的搭建与使用

6/8/2021 NextcloudWebDAV私有云盘

# 1. Nextcloud简介

# 1.1 Nextcloud是什么

  • Nextcloud是一套用于创建网络硬盘的客户端-服务器软件。其功能与Dropbox相近,但Nextcloud是自由及开放源代码软件,每个人都可以在私人服务器上安装并运行它。

  • 与Dropbox等专有服务相比,Nextcloud的开放架构让用户可以利用应用程序的方式在服务器上新增额外的功能,并让用户可以完全掌控自己的数据。

  • 项目地址:https://github.com/nextcloud/server (opens new window)

  • 官方文档:https://docs.nextcloud.com/ (opens new window)

# 1.2 优势与不足

  • **优势:**高速(直链下载速度起飞,与服务器带宽有关);私密(自己全权管理所有文件);稳定(不存在服务商关闭网盘服务的问题);实现了PC、iPhone、iPad三端自动同步;可以直接编辑云端的文件(代码文件也直接查看编辑)

  • **不足:**私有云盘需要自己维护(出现各种问题就很糟心);服务器的硬盘容量通常不大(多为几十G,不适合做仓库盘)

# 2. 搭建前的环境准备

以下我将采用Nginx+Docker部署的方式进行搭建,VPS系统用的是Debian 11 x86_64。VPS的购买及配置、域名解析、Docker的概念及使用...这些基本的就不再赘述了,如果不会的话见我的其他博客:VPS基本部署环境的搭建与配置 (opens new window)Docker容器化及项目环境管理 (opens new window)

# 2.1 使用Speedtest测速

建议VPS的带宽不要太低,不然用起来糟心,存储容量够用即可,可以使用Speedtest测试服务器到国内的速度。

wget https://raw.githubusercontent.com/oooldking/script/master/superspeed.sh && chmod +x superspeed.sh && ./superspeed.sh
1

Speedtest测速

说明:被测速服务器的带宽是1Gigabit,即理论速度125MB/s,实际有一定的损耗,故测试结果如此。

# 2.2 Docker环境搭建

$ apt-get update -y && apt-get install curl -y  # 安装curl
$ curl https://get.docker.com | sh -   # 安装docker
$ sudo systemctl start docker  # 启动docker服务
$ docker version # 查看docker版本(客户端要与服务端一致)
1
2
3
4

# 2.3 Docker-MySQL环境搭建

# 2.3.1 拉取镜像创建实例容器并运行

$ docker pull mysql:5.7
$ docker run -p 3306:3306 --name mysql \
-e TZ=Asia/Shanghai \
-v /mydocker/mysql/conf:/etc/mysql/conf.d \
-v /mydocker/mysql/logs:/var/log/mysql \
-v /mydocker/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=[password] \
-d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
$ docker update mysql --restart=always
1
2
3
4
5
6
7
8
9

命令解释说明:

-p 3306:3306:将主机的3306端口映射到docker容器的3306端口。
--name mysql:运行服务名字
-e TZ=Asia/Shanghai:时区是使用了世界标准时间(UTC)。因为在中国使用,所以需要把时区改成东八区的。
-e MYSQL_ROOT_PASSWORD=[password]:初始化 root 用户的密码。
-d mysql:5.7 : 后台程序运行mysql5.7
--character-set-server=utf8mb4 :设置字符集
--collation-server=utf8mb4_unicode_ci:设置校对集
1
2
3
4
5
6
7

说明:如果是挂载已有的其他服务器数据,可能会出现用户权限问题,如果网络是通的,建议使用Navicat的数据传输功能(工具——数据传输——配置源与目标链接——选择需要传输的数据表即可),数据传输速度很快。

# 2.3.2 创建数据库及用户

在本地使用Navicat工具使用root用户连接上该数据库,使用如下四条命令创建数据库及用户。

--创建新的数据库,并设置数据库编码
$ CREATE DATABASE 你的数据库名 DEFAULT CHARSET=utf8 DEFAULT COLLATE utf8_unicode_ci;

--创建新的用户
$ CREATE USER '你的用户名'@'你的服务器IP' IDENTIFIED BY '你的密码';

--把数据库的管理权限给予刚刚创建的MySQL用户
$ GRANT ALL PRIVILEGES ON *.* TO '你的用户名'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;

--刷新权限,使用设置生效
$ FLUSH PRIVILEGES;
1
2
3
4
5
6
7
8
9
10
11

注:如果连接数据库时出现Access denied for user '用户名'@'某IP' (using password: YES)问题,则是第三句授权出了问题,你的本地外网IP被拦截了,那个'%'代表的是访问IP不受限制。

# 2.4 搭建Nginx并进行配置

这里使用OneinStack搭建Nginx并进行配置,具体操作步骤此处不再赘述。

# 3. 搭建Nextcloud云盘

# 3.1 搭建Nextcloud服务

# 3.1.1 拉取镜像并创建容器

$ docker run -d --restart=always --name nextcloud -p 8888:80 nextcloud:latest
1

# 3.1.2 完成Nextcloud的初始化

用Chrome打开http://IP地址,出现以下界面,在此创建管理员账号及设置数据库(强烈建议不要使用自带的SQLite数据库),取消勾选“安装推荐的应用”,然后点击“安装完成”按钮,等待安装完成后便会进入登录页面。

Nextcloud初始化

注:SQLite虽然方便,但性能较差,不建议使用(官方描述:如果您使用文件同步客户端,强烈不建议使用SQLite)。

# 3.1.3 添加反向代理并开启 HTTPS

通用的创建网站开启HTTPS并配置反向代理见本文2.4节(Nextcloud所用的配置与通用配置有些地方不一致,下面会提到)

这时我们用域名访问Nextcloud时会出现“通过不被信任的域名访问”错误,

通过不被信任的域名访问

我们还需要进行如下配置,配置完后就可以用域名访问了。

$ docker exec -it nextcloud /bin/bash
$ apt-get update && apt-get install vim -y      
$ vim /var/www/html/config/config.php   
1
2
3

trusted_domains处添加已解析的域名

  'trusted_domains' => 
  array (
          0 => 'www.demo.com'
  ),
 'overwriteprotocol' => 'https',
1
2
3
4
5

注:此时只能使用域名的https地址访问了,这样可以保证安全性。

# 3.1.4 Nextcloud 文件列表页空白问题

问题描述:使用nginx反向代理之后,打开Nextcloud文件列表页出现空白,无法上传文件,也不显示文件列表。

问题原因:JavaScript (.js) 或 CSS (.css) 文件未正确提供。

解决办法:注释掉nginx配置里的 location ~ .*\.(js|css)?$ 代码块。

#  location ~ .*\.(js|css)?$ {
#    proxy_pass http://nextcloud;
#    expires 7d;
#    access_log off;
#  }
1
2
3
4
5

# 3.1.5 Nextcloud 文件上传失败问题

问题描述:使用nginx反向代理之后,图片文件无法上传,而其他格式可以上传成功。

解决办法:注释掉nginx配置里的location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md)location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ 代码块。

#  location ~ /(\.user\.ini|\.ht|\.git|\.svn|\.project|LICENSE|README\.md) {
#    deny all;
#  }
#  location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp4|ico)$ {
#    proxy_pass http://nextcloud;
#    expires 30d;
#    access_log off;
#  }
1
2
3
4
5
6
7
8

# 3.3 Nextcloud性能优化及安全问题排查

# 3.3.1 查看PHP安装位置及插件

后面的优化与配置会对PHP配置文件进行修改,因此首先需要找到安装路径。

$ php -m                           # 查看安装的扩展
$ php -i|grep 'Configure Command'  # 查看php安装路径(/usr/local/etc/php)
1
2

# 3.3.3 使用APCu和Redis内存缓存

通过使用内存作为数据缓存的话,可以提高Nextcloud的性能,以加快访问速度,并且Nextcloud支持多个内存缓存后端,如APCuRedis,其他的缓存后端配置请参阅:Nextcloud内存缓存优化的官方文档 (opens new window)

# 3.3.3 安全及设置警告问题排查

打开Nextcloud的设置——概览——安全及设置警告,可以看到检测出的一些问题,下面我们将对其逐一排查解决。

[1] 您的网页服务器未正确设置以解析“/.well-known/caldav”、“/.well-known/carddav”

打开Nginx配置文件,在server模块添加如下两行,然后使用 nginx -s reload 命令重载配置。

    rewrite /.well-known/carddav /remote.php/dav permanent;
    rewrite /.well-known/caldav /remote.php/dav permanent;
1
2

[2] 数据库中的一些列由于进行长整型转换而缺失。由于在较大的数据表重改变列类型会耗费一些时间,因此程序没有自动对其更改。

Step1:临时修改一下config.php的权限,然后切换到occ的目录下(即cd /var/www/html)

Step2:执行以下命令即可:

$ sudo -u www php occ db:convert-filecache-bigint
1

[3] HTTP的请求头 "Strict-Transport-Security" 未设置为至少 "15552000" 秒. 为了提高安全性,建议启用HSTS

打开Nginx配置文件,在末尾的‘}’前加入如下代码:

add_header Strict-Transport-Security "max-age=15768000;preload;";
1

[4] PHP configuration option output_buffering must be disabled

打开容器内的/usr/local/etc/php目录里的配置文件,搜索“output_buffering”,在默认配置output_buffering = 4096前加个分号(分号是php的注释)

;output_buffering = 4096
1

# 3.5 Nextcloud常见问题

# 3.5.1 解决大文件上传413问题

Step1:修改php.ini上传文件大小限制

打开容器内的/usr/local/etc/php目录里的配置文件,搜索修改以下配置:

max_execution_time = 0        #改为0,表示没有上传时间限制
post_max_size = 10800M        #设定POST数据所允许的最大大小
upload_max_filesize = 10240M  #表示所上传的文件的最大大小
1
2
3

Step2:修改nginx.conf的文件大小限制

打开/usr/local/nginx/conf路径,修改Nginx主配置文件nginx.conf,修改的内容如下:

client_max_body_size 10240M;    
1

Step3:修改连接超时时间限制(同步大文件时可能会超过默认的60s连接超时时间,导致连接关闭。报错为:Connection closed)

打开/usr/local/nginx/conf路径,修改Nginx主配置文件nginx.conf,修改的内容如下:

keepalive_timeout 3600;
1

Step4:重启php和nginx服务,然后进行测试,大文件可以成功上传了。

# 3.5.2 解决同步时423错误的问题

问题描述:使用Nextcloud同步资料时,意外遇到了423错误,文件被锁定,怎么都传不上去。

解决办法:打开容器内/var/www/html/config/config.php文件,添加一句'filelocking.enabled' => false,即可。

注意事项:修改这个设置之后,会出现“事务文件锁被禁用,这可能导致并发争用相关的问题”的警告。

# 3.5.3 Nextcloud退出维护模式

问题描述:升级NextCloud后一直处于维护状态,无法自动解除。

解决办法:打开容器内/var/www/html/config/config.php文件,把'maintenance' => true改为 false,或者直接删掉这句即可。

# 3.5.4 Nextcloud自动清理回收站

问题描述:Nextcloud默认回收站不会自动清理,长此以往没有清理的话,会在占据了大量服务器存储空间。

解决办法:打开容器内/var/www/html/config/config.php文件,在 $CONFIG = array () 之间插入如下配置即可:

  'trashbin_retention_obligation' => 'auto,7',
  'versions_retention_obligation' => 'auto,7',
1
2

# 3.5.5 Nextcloud删除文件时出错

问题描述及原因:Nextcloud 删除文件时,一直提示删除出错,原因是文件被锁住了。

解决方法:连接Nextcloud的数据库,清空 oc_file_locks表。

# 4. Nextcloud基本使用

# 4.1 Nextcloud基本设置

Chrome打开https://域名地址,进去之后点击头像下的设置,根据自己的习惯进行配置即可。

Nextcloud用户界面

同步冲突处理:使用Everything搜索conflicted copy文件并删除(Everything可以添加书签)

# 4.2 Nextcloud客户端

全平台客户端下载:Nextcloud官网传送门 (opens new window)(如果服务器端太老,可能会用不了新版的客户端,下载适合的版本即可)

客户端的使用和配置

  • Win端:网页端授权登录,安装exe后设置开机自启、文件夹同步。
  • iOS、iPadOS端:App Store直接搜索下载Nextcloud即可(点击下面的“改用旧的登录方式”,输入服务器地址、用户名、密码)

# 4.3 Nextcloud的WebDAV功能

NextCloud 支持 WebDAV 协议,用户可以完全通过 WebDAV 来连接并同步文件。虽然官方还是推荐 使用客户端来同步文件,不过如果要临时访问 NextCloud 上的文件,使用 WebDAV 方式还是很便捷的。

打开Nextcloud网页登录后,单击设置,复制WebDAV下的URL地址:

Nextcloud的WebDAV

使用WebDAV连接时的用户名和密码就是登录Nextcloud的用户名和密码。

注:可以用WebDAV功能给一些第三方软件实现全平台同步的功能。

# 5. 参考资料

[1] 使用NextCloud搭建私有网盘、并结合Redis优化性能 from Rat's Blog (opens new window)

[2] VPS 完美搭建 Nextcloud 私有云盘图文教程 from Go 2 Think (opens new window)

[3] SuperSpeed.sh 一键测试服务器到国内的速度 from 老鬼的博客 (opens new window)

[4] 解决NextCloud文件太大无法上传的问题 from 伍文龙的小木屋 (opens new window)

[5] 安装和服务器配置-nginx配置 from Nextcloud官方文档 (opens new window)

[6] NextCloud 解决 OCP\Lock\LockedException: "files/ 官方永久解决方案 from 心中有梦 (opens new window)

[7] Debian安装Docker_from 简书 (opens new window)

[8] Nextcloud打开缓慢\卡顿的一些优化 from Bug侠 (opens new window)

[9] Nextcloud服务器性能调优 from Nextcloud官方文档 (opens new window)

[10] Nextcloud性能优化-后台任务Cron from 谦学网 (opens new window)

[11] Nextcloud内存缓存优化 from Nextcloud官方文档 (opens new window)

[12] HTTP2和HTTPS之间的关系和区别 from 数安时代 (opens new window)

[13] 宝塔面板部署Nextcloud后解决后台安全错误及设置警告 from 腾讯云 (opens new window)

[14] 宝塔面板部署NextCloud逐一解决后台安全及设置警告 from Bug侠 (opens new window)

[15] NextCloud一直处于维护状态解决方法 from CSDN (opens new window)

[16] Nextcloud更换数据库类型 from 官方文档 (opens new window)

[17] Nextcloud上的一些常见报错及解决方案 from 橙叶博客 (opens new window)

[18] 修复伪静态Rewrite规则导致SSL证书无法更新问题 from 咸鱼先锋 (opens new window)

[19] Nextcloud警告"HTTP的请求头 "Strict-Transport-Security" 未设置为至少 "15552000" 秒" from Just for fun (opens new window)

[20] php-fpm 启动参数及重要配置详解 from 简书 (opens new window)

[21] 宝塔面板部署Nextcloud后解决后台安全错误及设置警告 from 腾讯云 (opens new window)

[22] 通过 WebDAV 连接 NextCloud from orcy (opens new window)

[23] NextCloud 设置自动清理回收站和过期版本 from huangzz (opens new window)

[24] 怎样查看PHP的安装目录和详细信息 from docsxyz (opens new window)

[25] Docker 搭建 Nextcloud from 腾讯云 (opens new window)

[26] 解决Docker build时 Sending build context to Docker daemon 过大的问题 from CSDN (opens new window)

[27] Nextcloud 删除文件xxx时出错的解决方法 from 千古八方的博客 (opens new window)

Last Updated: 10/6/2024, 5:51:58 PM