如何使用服务器快速给自己搭建Nextcloud私人网盘?

本文最后更新于 2023年9月17日 上午

前言

有时候,我们需要团队合作一同处理文件;虽然有腾讯文档之类的在线写作平台,但是如果我们想协同处理视频该怎么办?又或者,我们只想建立一个家庭私有云,存一些生活点滴照片,且不希望被限速?也许,你可以试试自己搭建Nextcloud网盘,尤其是自己有台服务器,想充分利用的情况下。
本篇教程,同步发布于:

什么是NextCloud

Nextcloudowncloud的一个分支版本,同样基于PHP语言构建,相对于owncloud,Nextcloud提供更多个性化,当然也会相对更占用一些资源。Nextcloud主要提供的功能:

  • 多人协同合作
  • 云盘存储,支持密码和设置分享失效时间
  • 多平台App支持(iOS、Android等)

分享文件夹或文件
设置分享功能
同时,你也可以用Nextcloud建立直接的家庭影院,比如:
使用Nextcloud配合Nplayer

基础前提

首先,Nextcloud是搭建在自己个人服务器上(当然,你也可以搭建在本地树莓派设备,方法差不多,本文讲部署在轻量级服务器),所以需要一台服务器。

如果你并没有Linux设备,需要一个Linux设备来练手,强烈推荐:

另外,为大家争取到优惠*(੭ˊᵕˋ)੭ଘ:

另外,为大家争取到与我们合作的云服务器:
萤光云服务器(如果需要高带宽,建议购买):
点击图片跳转哦

软件方面支持,考虑到大部分人用Linux少,网站环境LEMP配置不方便,所以本文使用宝塔面板部署

视频教程

和以前一样,我们觉得有用、有必要录个视频的内容,我们还是会花时间做个视频:

感觉有用,可以给视频投个币么?( ´▽`):视频原链接

服务器搭建宝塔面板

虽然腾讯云有提供宝塔面板版本系统镜像,但是还是推荐系统选择Debian/Ubuntu或者Centos这样大众化的Linux镜像:

SSH连接服务器Linux服务器

在你本地SSH连接服务器后,本地访问宝塔官网,根据自己服务器系统,即可安装宝塔面板

我的服务器是Debian系统,所以选择……

之后,你还需要做:

  • 腾讯云轻量服务器后台放行宝塔端口(默认:8888)
  • 更改宝塔面板密码和账号(终端输入bt即可更改)

另外,建议腾讯云轻量服务器后台端口放行全部端口,因为宝塔也自带防火墙。

安装LAMP环境

安装好并打开宝塔后,即可安装LEMP(Linux、Nginx、Mysql和PHP),但是如果你想安装高版本Nextcloud,需要:

  • Mysql选择8.0以上版本
  • PHP选择7.2以上版本

本文安装的Nextcloud版本为最新版本(v20),所以使用Mysql8.0+PHP7.3
Mysql8.0安装高占内存,如果你的内存,并没有4G,且CPU性能不是很强劲。可以试试适当增加snap虚拟内存,来临时提升内存。

添加/创建网站

添加网站

其中:

  • 数据库选择Mysql(也就是刚刚安装的Mysql8.0+)
  • PHP版本选择非静态(也就是选择刚刚安装的PHP7.2+)
  • 如果没域名解析到服务器,可以填IP
  • 大陆服务器要绑定域名记得域名备案

安装Nextcloud

之后,我们进入Nextcloud的下载页面下载Nextcloud的打包文件:Nextcloud下载地址

并上传到网站根目录:

上传到网站更目录

之后,我们使用宝塔面板自带的解压功能,解压文件并移动至网站根目录:

移动至网站更目录

初始化Nextcloud

之后,根据前文所设置的域名或IP端口,浏览器访问即可进入Nextcloud初始化页面,设置管理员用户和之前创建的数据库信息即可:
初始化
初始化完成,即可使用Nextcloud了:
Demo
如果你的初始化频繁出现502 Nginx错误,且刷新网站后,有让你重新输入用户名和密码、数据库信息来初始化,一般是因为PHP连接超时(CPU处理过慢,导致连接时间过长,PHP以为程序未响应提前中断连接导致Nextcloud建立数据库表未完全)。解决办法:

  1. 删除已经创建的数据库表
  2. 到PHP设置内,将超时限制调大(默认是100秒就超时断开连接);并重载PHP配置
  3. 重新初始化

如果你是宝塔面板安装的PHP,超时限制可以在这里进行调整:
设置超时

但是接下来进入设置查看:
错误和警告
错误和警告
这些是Nextcloud的自检,可以不用处理,但是为了提升体验和安全性,最好处理一下。

内部错误和警告的解决方法

一些常见Nextcloud内部错误解决方法,建议使用浏览器搜索功能进行定位

通过HTTP访问网站不安全。强烈建议您将服务器设置成要求使用HTTPS协议

这个问题最好解决,同时也可能是无法解决问题:
服务器绑定域名,并配置SSL证书,域名解析到服务器即可
但是:
国内服务器需要绑定备案的域名,若无备案域名,则只能使用IP访问Nextcloud,那么该条警告无法去除。

一些文件没有通过完整性检查. 了解如何解决该问题请查看我们的文档. (无效的文件列表… / 重新扫描…)

无效文件
你的无效的文件列表和我的可能不一样,但是方法是一样的,打开(无效的文件列表… / 重新扫描…)这个链接:
无效文件详情
上面提示的这些文件需要删除,所以打开nextcloud的安装地址,也就是Nginx所代理的网站更目录,删除“提示的无效文件“即可:
删除无效文件
如果你使用宝塔面板,可以进入宝塔面板后台,然后使用宝塔的图形界面删除无效文件。如果你熟悉Linux命令,可以使用rm命令删除:
使用命令删除无效文件

PHP configuration option output_buffering must be disabled

其实这个很好解决,PHP默认是有4096字节缓冲的。但是Nextcloud希望你关闭。如果你是自己安装的PHP,在你安装PHP的路径下,打开PHP配置文件(php.ini),将要

1
output_buffering = 4096

改为:

1
; output_buffering = 4096

;为PHP的注释符号
如果你是根据上文,使用宝塔安装配置的php,更简单了。在宝塔面板,依次打开:软件商店-已安装-PHP7.3设置-配置文件
查找文本output_buffering,并在前面加上;注释:
加上注释
之后,可能需要重载PHP配置或者重启PHP服务才能生效。再次查看Nextcloud概述,就没有这条警告了。

您的数据目录和文件可以从互联网直接访问。.htaccess文件不起作用。强烈建议您配置Web 服务器,以便数据目录不再可访问,或者您可以将数据目录移动到 Web服务器文档根目录。

这个其实是Nginx的问题,为了进一步提升安全性,我们打开Nginx网站设置:
宝塔内网站Nginx设置
在location内的禁止访问目录内,加入data目录。
加入data目录

PHP 的安装似乎不正确,无法访问系统环境变量。getenv(“PATH”) 函数测试返回了一个空值

这个处理方法很简单;如果你是自己安装配置的PHP,一般不会出现这个问题,当时如果是使用宝塔安装,一般都会有这个问题,解决方法很简单:
在宝塔面板,依次打开:软件商店-已安装-PHP7.3设置-FPM配置文件
在文末添加:

1
env[PATH] = /usr/local/bin:/usr/bin:/bin:/usr/local/php/bin

添加配置
之后,可能需要重载PHP配置或者重启PHP服务才能生效。

您的网页服务器未正确设置以解析****。更多信息请参见文档

这个处理方法很简单,简单地说,设置Nginx即可。如果你的Nginx是宝塔安装的,那么打开网站的Nginx:
打开Nginx设置
之后追加以下内容:

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

追加内容
之后保存即可

PHP模块问题

PHP模块问题包括:

  1. 未找到PHP的”fileinfo”模块。强烈推荐启用该模块,从而获得更好的MIME类型探测结果。
  2. 内存缓存未配置,为了提升使用体验,请尽量配置内存缓存。更多信息请参见文档。
  3. PHP的OPcache模块未载入。推荐开启获得更好的性能。

PHP模块问题
安装如下模块:
安装的模块-01
安装的模块-02
同时,因为使用Redis作为缓冲,所以我们需要打开Nextcloud的配置文件,追加以下内容:

1
2
3
4
5
'memcache.local' => '\OC\Memcache\Redis',
'redis' => array(
'host' => 'localhost',
'port' => 6379,
),

数据库丢失了一些索引。由于给大的数据表添加索引会耗费一些时间,因此程序没有自动对其进行修复

这个因为我之前修复了,所以我的警告和错误列表没有提示。如果你有报这条警告,直接运行:

1
php occ db:add-missing-indices

但是注意文件夹所属的用户组,比如:你Terminal上使用的是root或者Ubuntu用户,那么就需要用sudo提权

1
sudo -u php occ db:add-missing-indices

sudo提权运行

优化内容

文件扫描

有时候,我们直接使用Linux命令,如:wgetcurl等命令直接下载文件到服务器内Nextcloud里的用户目录,但是用户登录Nextcloud却并没有显示,怎么办?
我们可以使用PHP配合Nextcloud命令,来自动扫描文件:

1
sudo -u www php occ files:scan --all

其中:

  • 命令使用需要在Nextcloud根目录下
  • 需要使用sudo -u命令提权到www用户(即:Nginx用户)

扫描文件夹

后台任务优化

Nextcloud的后台任务,默认是使用Ajax异步方法进行后台任务:
即在每次访问Nextcloud任意页面都会通过AJAX的方式发起定时任务的执行请求,这种方式如果没有自己的独立服务器或者VPS的话还是比较方便省心的
但官方推荐使用Cron和Nginx或Apache等WEB服务独立开来,互不影响
后台任务
为了使用Cron,我们需要用到Linux的定时任务。
SSH连接服务器后,输入:

1
crontab -e

创建一个Cron任务,并使用正则表达式:

1
*/5 * * * * sudo -u www php /PathToNextcloud/cron.php

保存即可。
当然,如果你用宝塔面板,也可以直接使用宝塔自带的控制面板,设置定时任务:
宝塔设置定时任务



如何使用服务器快速给自己搭建Nextcloud私人网盘?
https://www.mintimate.cn/2021/02/20/deployNextcloud/
作者
Mintimate
发布于
2021年2月20日
许可协议