介绍 {#介绍}
Nextcloud是一款开源免费的私有云存储网盘项目,可以让你快速便捷地搭建一套属于自己或团队的云同步网盘,从而实现跨平台跨设备文件同步、共享、版本控制、团队协作等功能。它的客户端覆盖了Windows、Mac、Android、iOS、Linux 等各种平台,也提供了网页端以及 WebDAV接口,所以你几乎可以在各种设备上方便地访问你的云盘。
今天我们从零开始来搭建一个Nextcloud网盘,搭建其实很简单,所以也会多介绍一些搭建完成之后,安全与设置警告报错信息的解决方法。
优点 {#优点}
- 功能丰富,社区生态丰富
- 遇到问题容易在网上找到解决方案
- 高速(直链下载速度起飞,与服务器带宽有关)
- 私密(自己全权管理所有文件)
- 稳定(不存在服务商关闭网盘服务的问题)
- 实现了PC、iPhone、iPad三端自动同步
- 可以直接编辑云端的文件(代码文件也直接查看编辑)
缺点 {#缺点}
- 不够轻量,而且比较吃服务器资源(内存等),服务器的硬盘容量通常不大(多为几十G,不适合做仓库盘)
- 后续配置比较复杂私有云盘需要自己维护(出现各种问题就很糟心)
之前搭建的网盘:告别百度网盘,安装自己的专属网盘------Cloudreve,不限制下载速度!
- 项目展示 {#1-项目展示}
GitHub项目地址:https://github.com/nextcloud
Demo:https://try.nextcloud.com
- 搭建环境 {#2-搭建环境}
- 服务器:腾讯香港轻量应用服务器24元/月VPS一台(最好是选非大陆的服务器)(购买链接)
- 系统:Debian 10(DD脚本 非必需DD用原来的系统也OK)
- 域名一枚,并做好解析到服务器上(域名购买、域名解析 视频教程)
- 【非必需】安装好Docker、Docker-compose(相关脚本)
- 安装好宝塔面板海外版本aapanel,并安装好Nginx(安装地址)
- 【非必需】安装好Nginx Proxy Manager(相关教程)
- 搭建视频 {#3-搭建视频}
YouTube:待补充
哔哩哔哩:待补充(心态发生了问题,自己已经安装好了,演示视频的时候安装一直提示"内部服务器错误",搜索了很多内容,依旧无法解决,玄学 =,=)
- 搭建方式 {#4-搭建方式}
参考------新买了一台服务器"必须"要做的6件小事:
apt update -y # 升级packages
`apt install wget #如果出现 wget:command not found,可以用这个命令安装
`
Debian宝塔海外版安装命令:
wget -O install.sh http://www.aapanel.com/script/install-ubuntu_6.0_en.sh && bash install.sh forum
遇到访问不了的情况,请在宝塔面板的防火墙和服务商的后台防火墙里打开对应端口。
在选择安装LNMP过程中,可以先去把域名解析到服务器上先~
等待半小时左右,LNMP基本都能安装完成。
Nextcloud官方下载地址:https://nextcloud.com/install/#instructions-server
- 开始搭建(以宝塔安装为例子) {#5-开始搭建以宝塔安装为例子}
不是很推荐用Docker搭建,因为Nextcloud后续配置会
远程下载:https://download.nextcloud.com/server/releases/nextcloud-23.0.2.zip
修改权限:宝塔面板------文件------找到/www/wwwroot
路径,将Nextcloud整个网站目录的权限由755修改为775(不设置打开网址会报"内部服务器错误"的问题)
- 安全与设置警告排错(重点,适用于宝塔面板) {#6-安全与设置警告排错重点适用于宝塔面板}
6.1 Nextcloud性能优化 {#61-nextcloud性能优化}
6.1.1 使用APCu和Redis内存缓存 {#611-使用apcu和redis内存缓存}
通过使用内存作为数据缓存的话,可以提高Nextcloud的性能,以加快访问速度,并且Nextcloud支持多个内存缓存后端,如APCu
、Redis
,其他的缓存后端配置请参阅:Nextcloud内存缓存优化的官方文档
[1] 安装PHP的APCu+Redis扩展
在宝塔面板的首页处,找到PHP并点开,在安装扩展处安装redis
和apcu
。
[2] 配置APCu和Redis
安装完毕后,打开/www/wwwroot/域名/config/config.php
,在其尾部添加以下代码:
'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
],
'memcache.locking' => '\OC\Memcache\Redis',
6.1.2 开启PHP OPcache {#612-开启php-opcache}
通过安装OPcache
扩展,也可以在一定程度上提升PHP的性能。
在宝塔面板的首页处,找到PHP并点开,在安装扩展处安装OPcache
。
6.1.3 官方推荐的PHP扩展 {#613-官方推荐的php扩展}
官方推荐的其他PHP扩展:fileinfo
,gmp
,imagick
,安装完上述扩展及设置后,重载PHP配置并重启PHP服务。
咕咕在自己的Netcup上出现了gmp扩展模块安装不上的情况,参考了宝塔论坛的教程,
该问题是因为操作系统未安装libgmp3-dev软件包导致,建议宝塔的自动安装脚本修复该问题,自动检测这个软件包的状态和自动安装该软件包。
具体命令是:
apt install libgmp3-dev -y
之后再到php这边点击gmp模块安装,就能安装成功了。
6.1.4 文件扫描 {#614-文件扫描}
有时候,我们直接使用Linux命令,如:wget
、curl
等命令直接下载文件到服务器内Nextcloud里的用户目录,但是用户登录Nextcloud却并没有显示,怎么办?
我们可以使用PHP配合Nextcloud命令,来自动扫描文件:
sudo -u www php occ files:scan --all
Copy
其中:
- 命令使用需要在Nextcloud根目录下
- 需要使用
sudo -u
命令提权到www用户(即:Nginx用户)
6.1.5 后台任务优化 {#615-后台任务优化}
Nextcloud的后台任务,默认是使用Ajax异步方法进行后台任务,即在每次访问Nextcloud任意页面都会通过AJAX
的方式发起定时任务的执行请求,这种方式如果没有自己的独立服务器或者VPS的话还是比较方便省心的,但官方推荐使用Cron
,和Nginx或Apache等WEB服务独立开来,互不影响:
为了使用Cron,我们需要用到Linux的定时任务。
SSH连接服务器后,输入:
crontab -e
创建一个Cron任务,并使用正则表达式:
*/5 * * * * sudo -u www php /PathToNextcloud/cron.php
保存即可。
当然,如果你用宝塔面板,也可以直接使用宝塔自带的控制面板,设置定时任务:
6.2 安全及设置警告问题排查 {#62-安全及设置警告问题排查}
打开Nextcloud的设置
------概览
------安全及设置警告
,可以看到检测出的一些问题,下面我们将对其逐一排查解决。
[1] PHP 的安装似乎不正确,无法访问系统环境变量。getenv("PATH") 函数测试返回了一个空值。
宝塔面板------首页的PHP------FPM配置文件,在其尾部添加一行:
env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/local/php/bin
注:该配置文件的位置为/www/server/php/php版本号/etc/php-fpm.conf
[2] 您的网页服务器未正确设置以解析"/.well-known/caldav"、"/.well-known/carddav、/.well-known/webfinger、/.well-known/nodeinfo"
宝塔面板
------网站
------设置
------配置文件
,在server里添加如下两行:
rewrite /.well-known/carddav /remote.php/dav permanent;
rewrite /.well-known/caldav /remote.php/dav permanent;
打开伪静态,加入这段:
location = /.well-known/webfinger {
return 301 $scheme://$host:$server_port/index.php/.well-known/webfinger;
}
location = /.well-known/nodeinfo {
return 301 $scheme://$host:$server_port/index.php/.well-known/nodeinfo;
}
之后保存即可。
[3] 数据库中的一些列由于进行长整型转换而缺失。由于在较大的数据表重改变列类型会耗费一些时间,因此程序没有自动对其更改。
Step1:临时修改一下config.php的权限,然后切换到occ的目录下(即cd /www/wwwroot/域名
)
Step2:执行以下命令即可:
sudo -u www php occ db:convert-filecache-bigint
[4] HTTP的请求头 "Strict-Transport-Security" 未设置为至少 "15552000" 秒. 为了提高安全性,建议启用HSTS
宝塔面板
------ 网站
------文件
------找到/www/server/panel/vhost/nginx/yourdomain.conf
文件------在末尾的'}'
前加入如下代码:
add_header Strict-Transport-Security "max-age=15768000;preload;";
[5] PHP configuration option output_buffering must be disabled
宝塔面板------首页的PHP------配置文件------搜索"output_buffering",在默认配置output_buffering = 4096
前加个分号(php的注释)
;output_buffering = 4096
6.3 Nextcloud常见问题 {#63-nextcloud常见问题}
6.3.1 解决大文件上传问题 {#631-解决大文件上传问题}
Step1:修改php.ini上传文件大小限制
宝塔面板------文件------打开/www/server/php/PHP版本号/etc
路径------打开php.ini
文件,搜索修改以下配置:
max_execution_time = 0 #默认是300秒,改为0,表示没有上传时间限制
post_max_size = 10800M #设定POST数据所允许的最大大小
upload_max_filesize = 10240M #表示所上传的文件的最大大小
Step2:修改nginx.conf的文件大小限制
宝塔面板------文件------打开/www/server/nginx/conf/
路径------打开nginx.conf
,修改的内容如下:
client_max_body_size 10240M;
Step3:修改连接超时时间限制(同步大文件时可能会超过默认的60s连接超时时间,导致连接关闭。报错为:Connection closed)
keepalive_timeout 3600;
Step4:重启php和nginx服务,然后进行测试,大文件可以成功上传了。
6.3.2 解决同步时423错误的问题 {#632-解决同步时423错误的问题}
问题描述:使用Nextcloud同步资料时,意外遇到了423错误,文件被锁定,怎么都传不上去。
解决办法:宝塔面板------文件------打开/www/wwwroot/域名/config
路径,找到config.php
文件,添加一句'filelocking.enabled' => false,
即可。
6.3.3 Nextcloud退出维护模式 {#633-nextcloud退出维护模式}
问题描述:升级NextCloud后一直处于维护状态,无法自动解除。
解决办法:宝塔面板------文件------打开/www/wwwroot/域名/config
路径,找到config.php
文件,把'maintenance' => true
改为 false
,或者直接删掉这句即可。
- Nextcloud基本使用 {#7-nextcloud基本使用}
7.1 Nextcloud基本设置 {#71-nextcloud基本设置}
Chrome打开https://域名
地址,进去之后点击头像下的设置,根据自己的习惯进行配置即可。
同步冲突处理:使用Everything搜索conflicted copy文件并删除(Everything可以添加书签)
7.2 Nextcloud客户端 {#72-nextcloud客户端}
全平台客户端下载:Nextcloud官网传送门(如果服务器端太老,可能会用不了新版的客户端,下载适合的版本即可)
客户端的使用和配置
- Win端:网页端授权登录,安装exe后设置开机自启、文件夹同步。
- iOS、iPadOS端:App Store直接搜索下载Nextcloud即可(点击下面的"改用旧的登录方式",输入服务器地址、用户名、密码)
7.3 Nextcloud的WebDAV功能 {#73-nextcloud的webdav功能}
NextCloud 支持 WebDAV 协议,用户可以完全通过 WebDAV 来连接并同步文件。虽然官方还是推荐 使用客户端来同步文件,不过如果要临时访问 NextCloud 上的文件,使用 WebDAV 方式还是很便捷的。
打开Nextcloud网页登录后,单击设置,复制WebDAV下的URL地址:
使用WebDAV连接时的用户名和密码就是登录Nextcloud的用户名和密码。
注:可以用WebDAV功能给一些第三方软件实现全平台同步的功能。
- 结尾 {#8-结尾}
祝大家用得开心,有问题可以去GitHub提Issues,也可以在评论区互相交流探讨。
咕咕上期还搭建了一个网盘直链程序,相比Nextcloud,它搭建更加容易(docker一条命令搞定),升级也非常简单,支持的网盘也更多,UI也非常漂亮。
相关代码都在博客里:https://blog.laoda.de/archives/docker-install-alist
参考资料 {#参考资料}
好朋友的Mintimate的博客:https://mintimate.cn/2021/02/20/deployNextcloud/
Nextcloud 21 使用笔记 - 系统要求及警告排除:https://www.cnswiz.com/3376.html
VPS搭建Nextcloud私有云盘 | Eulaの小破站:https://www.eula.club/VPS%E6%90%AD%E5%BB%BANextcloud%E7%A7%81%E6%9C%89%E4%BA%91%E7%9B%98.html
附: {#附}
1、内部错误和警告的解决方法 {#1内部错误和警告的解决方法}
一些常见Nextcloud内部错误解决方法,建议使用浏览器搜索功能进行定位
1)您的安装没有设置默认的电话区域。这对验证配置设定中没有国家代码的电话号码而言是必需的。要允许没有国家代码的电话号码,请添加带区域相应的 ISO 3166-1 code ↗ 的"默认_电话_区域"到你的配置文件中。
在网站配置文件(如:/www/wwwroot/nextcloud.laoda.de/config/config.php
)中添加如下代码后保存即可:
'default_phone_region' => 'CN',
2)通过HTTP访问网站不安全。强烈建议您将服务器设置成要求使用HTTPS协议
这个问题最好解决,同时也可能是无法解决问题:
服务器绑定域名,并配置SSL证书,域名解析到服务器即可
但是:
国内服务器需要绑定备案的域名
,若无备案域名,则只能使用IP访问Nextcloud,那么该条警告无法去除。
3)一些文件没有通过完整性检查. 了解如何解决该问题请查看我们的文档. (无效的文件列表... / 重新扫描...)
你的无效的文件列表和我的可能不一样,但是方法是一样的,打开(无效的文件列表... / 重新扫描...)
这个链接:
无效文件详情
上面提示的这些文件需要删除,所以打开nextcloud的安装地址,也就是Nginx所代理的网站更目录,删除"提示的无效文件"即可:
删除无效文件
如果你使用宝塔面板,可以进入宝塔面板后台,然后使用宝塔的图形界面删除无效文件。如果你熟悉Linux命令,可以使用rm
命令删除:
使用命令删除无效文件
4)PHP configuration option output_buffering must be disabled
其实这个很好解决,PHP默认是有4096字节缓冲的。但是Nextcloud希望你关闭。如果你是自己安装的PHP,在你安装PHP的路径下,打开PHP配置文件(php.ini),将要
output_buffering = 4096
Copy
改为:
; output_buffering = 4096
Copy
;
为PHP的注释符号
如果你是根据上文,使用宝塔安装配置的php,更简单了。在宝塔面板,依次打开:软件商店
-已安装
-PHP7.3设置
-配置文件
查找文本output_buffering
,并在前面加上;
注释:
之后,可能需要重载PHP配置或者重启PHP服务才能生效。再次查看Nextcloud概述,就没有这条警告了。
5)您的数据目录和文件可以从互联网直接访问。.htaccess文件不起作用。强烈建议您配置Web 服务器,以便数据目录不再可访问,或者您可以将数据目录移动到 Web服务器文档根目录。
这个其实是Nginx的问题,为了进一步提升安全性,我们打开Nginx网站设置:
在location内的禁止访问目录内,加入data目录。
加入data目录
6)PHP 的安装似乎不正确,无法访问系统环境变量。getenv("PATH") 函数测试返回了一个空值
这个处理方法很简单;如果你是自己安装配置的PHP,一般不会出现这个问题,当时如果是使用宝塔安装,一般都会有这个问题,解决方法很简单:
在宝塔面板,依次打开:软件商店
-已安装-PHP7.3设置
-FPM配置文件
在文末添加:
env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/local/php/bin
Copy
之后,可能需要重载PHP配置或者重启PHP服务才能生效。
7)您的网页服务器未正确设置以解析。更多信息请参见文档
这个处理方法很简单,简单地说,设置Nginx即可。如果你的Nginx是宝塔安装的,那么打开网站的Nginx:
之后追加以下内容:
rewrite /.well-known/carddav /remote.php/dav permanent;
rewrite /.well-known/caldav /remote.php/dav permanent;
Copy
打开伪静态,加入这段:
location = /.well-known/webfinger {
return 301 $scheme://$host:$server_port/index.php/.well-known/webfinger;
}
location = /.well-known/nodeinfo {
return 301 $scheme://$host:$server_port/index.php/.well-known/nodeinfo;
}
之后保存即可
2、PHP模块问题 {#2php模块问题}
PHP模块问题包括:
- 未找到PHP的"fileinfo"模块。强烈推荐启用该模块,从而获得更好的MIME类型探测结果。
- 内存缓存未配置,为了提升使用体验,请尽量配置内存缓存。更多信息请参见文档。
- PHP的OPcache模块未载入。推荐开启获得更好的性能。
咕咕在自己的Netcup上出现了gmp扩展模块安装不上的情况,参考了宝塔论坛的教程,
该问题是因为操作系统未安装libgmp3-dev软件包导致,建议宝塔的自动安装脚本修复该问题,自动检测这个软件包的状态和自动安装该软件包。
具体命令是:
apt install libgmp3-dev -y
之后再到php这边点击gmp模块安装,就能安装成功了。
同时,因为使用Redis作为缓冲,所以我们需要打开Nextcloud的配置文件,追加以下内容:
'memcache.local' => '\OC\Memcache\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
),
1、数据库丢失了一些索引。由于给大的数据表添加索引会耗费一些时间,因此程序没有自动对其进行修复
这个因为我之前修复了,所以我的警告和错误列表没有提示。如果你有报这条警告,直接运行:
php occ db:add-missing-indices
Copy
但是注意文件夹所属的用户组,比如:你Terminal上使用的是root或者Ubuntu用户,那么就需要用sudo提权
sudo -u php occ db:add-missing-indices