安装nextcloud:搭建一个自己专属的个人网盘
nextcloud
是一款开源私有云方案,GitHub开源地址:Nextcloud,也就是说,可以用nextcloud
来搭建私有同步网盘。
之前就有搭建私有网盘的需求,毕竟国外网盘容量小,速度慢,国内目前也就只有115和百度云在苟延残喘,115已是半残,百度云限速不说,还会将小姐姐变成8秒教育片,先不论这种偷窥个人网盘隐私的行为是否违法,要知道百度云删除这些东西的时候可没有告知用户,更不用说任何的提醒和交流了,把资料,特别是涉及个人隐私的资料放在百度云实在是放心不下。
总的来看目前公有网盘大都不能满足需求,也就催生了一大批开源私有网盘,nextcloud
就是其中之一。
搭建私有网盘,我一开始用的是seafile
,毕竟开源,并且是国人开发,感觉本地化工作会做得更好,中文文档也会更好读,而且企业版只要3个人以下使用就是免费的,可以说很良心了,当然了,缺点还是有的,就是界面太丑。
起初按照文档搭建seafile
,两天时间反反复复看文档查教程也没成功,最后实在没耐心放弃了。
而后准备转战owncloud
,不过在了解一番之后,发现有个owncloud
的继承者:nextcloud
,据说是owncloud
的团队脱离出来后开发的一个网盘,不过nextcloud
在很大程度上跟owncloud
很像,甚至可以说就是owncloud
了,不过按照很多人的说法,nextcloud
似乎更良心(这是看了这么多对比文章之后给我的感觉),所以就直接用上nextcloud
了。
事实上,搭建nextcloud
更好的方式是通过docker搭建,不过之前的seafile
搭建失败,很大一部分原因就是因为用了以前没接触过的docker,所以这次就直接搭建,等熟悉之后再用docker。
如果可以的话,还是推荐使用docker搭建。
环境搭建
nextcloud存在网页前端,所以可以配置lnmp环境,以启用网页前端。
MySQL
首先需要配置源,进入MariaDB官网定制MariaDB的官方源,选择合适MariaDB版本。如CentOS 7
选择:CentOS > CentOS 7 (x86_64) > 10.3 [Stable],配置源的方法在官网页面选择源之后,页面下方会显示出来。
之后将官网的配置复制下来,添加为源:
1 | # 编辑源 |
之后是设置MariaDB
此步,主要是MariaDB的安全设置,第一次安装mysql需要运行此命令:
1 | mysql_secure_installation |
因为是初次设置MariaDB,root密码是空的,所以在要求输入密码时直接回车,数据库相关设置里面直接全都输入y就行了
输出示例
1 | Setting the root password ensures that nobody can log into the MariaDB |
Php-fpm
安装php用webtatic源,更新较快,且其命名有自己的特色方式,可以避免与其他源的某些冲突
1 | # 配置PHP源 |
出现Requires: libMagickWand.so.5()(64bit)的解决办法
如果在安装过程中出现以下错误提示:
Error: Package: php-magickwand-1.0.9-6.el7.x86_64 (epel) Requires: libMagickWand.so.5()(64bit)
就去掉php扩展中的php72w-pecl-imagick
,把其他扩展先装上,然后按照以下方式安装此扩展:
1 | yum install ImageMagick ImageMagick-devel gcc |
如果装不了gcc就用这个命令:
1 | yum install gcc gcc-c++ autoconf automake |
最后再安装imagick
1 | pecl install imagick |
安装好后需要进行配置,先替换以下内容:
1 | # 编辑配置文件 |
说明
- 修改
cgi.fix_pathinfo
的值是为了避免nginx文件类型错误解析漏洞- nextcloud的运行建议使用512M以上的内存限制
使用socket方式连接php-fpm和mysql
对于php-fpm和mysql来说,相比于使用端口链接,使用socket方式连接数据库可以获得更好的性能,唯一的缺点就是使用socket连接的php-fpm和mysql必须部署在同一台主机内。
这一个配置不是必须的,酌情选择。
如果需要使用socket方式连接php-fpm和mysql,则还需要增加以下配置
1 | # 编辑配置文件 |
另外/etc/php-fpm.d/www.conf
也需要改动,改动的地方较多,就不一一列举,改动后的文件如下(已去除注释行和空行):
1 | [www] |
以上是我个人在用的配置,修改后可以通过以下命令查看生效的配置:
1 | sed '/^;\|^$/d' /etc/php-fpm.d/www.conf |
php-fpm有个很好用的插件:opcache
。opcache能极大加快php脚本的执行速度,最核心的思想就是使用缓存,关于opcache的介绍很多,这里直接搬一个现成的:
Opcache 的前生是 Optimizer+ ,它是PHP的官方公司 Zend 开发的一款闭源但可以免费使用的 PHP 优化加速组件。 Optimizer+ 将PHP代码预编译生成的脚本文件 Opcode 缓存在共享内存中供以后反复使用,从而避免了从磁盘读取代码再次编译的时间消耗。同时,它还应用了一些代码优化模式,使得代码执行更快。从而加速PHP的执行。
上面已经安装了php-opcache
,添加个配置进行启用就可以了,编辑配置文件:
1 | vim /etc/php.d/opcache.ini |
然后按照nextcloud的提示,修改opcache的配置如下:
1 | [opcache] |
然后重启php-fpm即可生效
1 | systemctl restart php-fpm |
Nginx
官方nginx有两个版本,mainline和stable,即开发版和稳定版,区别是前者引入新特性但可能有新bug,后者足够稳定。事实上,两者均比较稳定,nginx的网站总是运行在mainline版上,不过还是推荐新手选择稳定版。
1 | # 编辑repo文件 |
这时lnmp环境就安装成功了。
安装Nginx之后存在一个默认配置,只要前面配置没有错误,那么nginx启动之后就可打开默认网页。
直接用浏览器打开主机IP地址或者域名,就可以看到nginx的欢迎页面,说明nginx已经在工作了。
假设IP地址为1.2.3.4,域名为pan.wenjinyu.me ,能用域名打开的前提是已经设置了解析,不知道怎么设置解析可以移步设置域名解析:给域名设置一些实用有趣的二级域名。
此时lnmp环境就安装完成了。
安装
nextcloud可以直接从 官网 下载,只需要进行简单的配置就可以直接使用。
例如当前的最新版本是18.0.4
,则运行:
1 | mkdir /var/www |
配置
Nginx
先添加一个配置文件
1 | vim /etc/nginx/conf.d/nextcloud.conf |
然后添加下列内容
1 | upstream php-handler { |
注意要将其中的域名改成自己的域名,如果没有按照本教程的路径放置nextcloud文件夹,还需要修改网站根目录的路径,需要修改的地方已经在上面标出来了。
改完后重载nginx:
1 | nginx -s reload |
MySQL
nextcloud的数据需要使用MySQL数据库程序进行管理,所以需要在MySQL中先新建一个用户和数据库以供nextcloud使用
1 | # 进入MySQL |
Nextcloud
现在就可以用浏览器打开nextcloud了:

点击查看网站打不开的解决办法
如果网页打不开,那么有一个很简单的方法可以排查问题:
先分别运行下面三条命令,查看三个nextcloud所需要的组建的运行状态:
1 | systemctl status nginx |
如果在运行结果中都能看到绿色的active (running)
字样,例如下面这个样子

那么说明这三个组件的是没问题的,错误的地方就可能是nginx的配置文件/etc/nginx/conf.d/nextcloud.conf
,可以直接编辑:
1 | vim /etc/nginx/conf.d/nextcloud.conf |
然后跟上面的配置文件有何差别,一定要记住修改文中提示的部分,其他的都不要修改,修改完或者查看之后确定没问题,那么就运行下面命令将三个组件重启,因为也有可能是有些修改需要重启生效但是修改后忘了重启:
1 | systemctl restart nginx |
然后再确认一遍网址解析是否有误:如果直接用ip能访问,而网址不能,那么就是网址解析的问题了。
之后再打开网页看看,如果还不行可以在下面留言。
第一次登陆需要创建管理员账号
,输完之后点击存储&数据库
,接下来的配置可以参照下面的设置:

管理员密码
任意设置,数据库密码
如果是按照本教程的例子设置的,那么就是nextcloud
,需要注意的是,配置数据库
需要选择第二个MySQL/MariaDB
,至于理由也在刚登陆时显示的性能警告
中提到了。
如果配置没有什么问题就可以登陆了:

Redis
配置redis缓存能让网盘访问更快速,也能降低系统负载,对于小内存VPS来说更是效果显著,如果不进行配置,也可以在nextcloud网页版 -> 设置
-> 概览
里面看到这样的提示:
内存缓存未配置,为了提升使用体验,请尽量配置内存缓存。更多信息请参见[文档]。
1 | yum install redis php-redis |
在ubuntu/debian上安装redis
ubuntu/debian,那么安装的是 redis-server
1 | apt-get install redis-server php-redis |
将redis的连接方式从TCP改为socket可增加redis和php-fpm的连接性能,所以推荐将redis配置为socket连接方式。
关于socket
redis可以使用常规的TCP连接,也就是让redis监听127.0.0.1:6379
,这是redis默认的设置,不过,如果redis的客户端和服务端都在同一个服务器内,更推荐使用socks方式,能提升性能。
UNIX Domain Socket是在socket架构上发展起来的用于同一台主机的进程间通讯(IPC),它不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程,当用户连接到Redis通过TCP/IP连接或Unix域连接,千兆网络的典型延迟大概200us,而Unix Domain Socket可能低到30us。
打开redis配置文件:
1 | vim /etc/redis.conf |
作如下修改:
1 | # 监听端口改为0 |
最后启动生效即可
1 | # 启动redis |
安装好redis后需要在nextcloud中启用,直接在nextcloud的配置文件修改即可:
1 | vim /var/www/nextcloud/config/config.php |
在最后一行的);
上面添加配置:
1 | 'memcache.local' => '\\OC\\Memcache\\Redis', |
注意:
- 在
'redis'
里面,只有'host'
和'port'
是必须要有的,其他的都是可选项。
使用
按照上面的教程安装完nextcloud之后就可以使用了,可以在官网下载对应的客户端:https://nextcloud.com/install/#install-clients
以下以Windows客户端为例子。
安装nextcloud后打开,先输入服务器IP地址,如果设置了域名解析,那么可以直接输入网盘的域名。
域名解析设置可以参考这篇文章:设置域名解析:给域名设置一些实用有趣的二级域名。

输入服务器地址之后使用设置的用户密码登陆即可:

登陆之后选择同步文件夹,这里需要注意,如果本地需要同步的文件并不是放在一起的,例如我有些文件常用到,就放在桌面,而有些重要但又不常用到的备份文件就放在D盘,这种时候就不要选择同步服务器的所有内容
,而要选择下面的跳过文件夹设置
,否则就只能同步一个文件夹,无法添加其他文件夹。

此时进入了nextcloud,点击账户名称下面的添加文件夹
,

选择需要同步的文件夹,然后下一步
,再新建一个存放在网盘上的同步文件夹,

最后确认添加链接就可以开始同步了。
问题解决
网页版一直在登录页面循环
如果登录时输入了正确的帐号密码,url也已经是进入网盘的网址,但是却仍停留在登录页面,其实是使用php部分文件夹的时候,nginx的权限不够,运行以下命令即可解决:
1 | chown nginx:nginx /var/lib/php/session/ |
Linux客户端没有记住密码
Linux上的客户端在使用的时候,如果每次打开都需要重新输入用户名和密码进行登录,其实只是缺少一个依赖而已:
1 | dnf install libgnome-keyring |
- 参考: