一、Nextcloud简介
Nextcloud是一个开源的网盘程序,它提供了服务端和客户端程序,让我们得以在自己的机器上搭建并运行网盘程序。目前国内网盘产品主要就是百度网盘、腾讯微云、115网盘、阿里网盘以及和彩云、天翼云等。而国外则主要是Google Drive、微软的One Drive,以及DropBox等产品。虽然目前商用网盘已经较为成熟,但是私有云仍然具有较大的需求和市场。出于多方面因素的考虑,有时候我们会选择自建网盘。除了Nextcloud,目前流行的网盘程序还有可道云、Seafile、Z-File、Cloudreve、DzzOffice......
本文介绍Nextcloud的安装,使用的服务器环境是CentOS 7.6,采用LAMP(Linux + Apache + MariaDB + PHP)架构。
二、服务端安装
有很多软件位于 EPEL 仓库中,而默认情况下安装的 CentOS 中没有该仓库,因此需要我们自己手动添加。
yum install epel-release
1.Apache
首先安装Apache,启动服务并将其设置为开机自动运行
yum install httpd
systemctl start httpd
systemctl enable httpd
安装并启动Apache之后可以尝试访问服务器IP来测试,若结果是如下所示,则说明连接被防火墙阻断,我们可以先关闭防火墙(不推荐)或者放行80端口。
我们选择采用放行80端口的方法,同时也放行443端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload
然后就可以访问80端口了,如果还是无法访问可以尝试清除浏览器缓存或者换个浏览器访问
2.PHP 7
CentOS官方仓库中的PHP版本是5,而Nextcloud要求至少是7,因此需要安装第三方源来安装PHP 7,本文使用PHP 7.4
若系统中已存在PHP 5,需要先卸载
查看系统是否安装PHP
yum list installed | grep php
若系统中安装了PHP,则需要先卸载系统中的PHP
yum remove php* php-common
#添加第三方源
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
#安装php74及相关模块
yum install php74-php-fpm php74-php-cli php74-php-bcmath php74-php-gd php74-php-json php74-php-mbstring php74-php-mcrypt php74-php-mysqlnd php74-php-opcache php74-php-pdo php74-php-pecl-crypto php74-php-pecl-mcrypt php74-php-pecl-geoip php74-php-recode php74-php-snmp php74-php-soap php74-php-xml php74-php-imagick php74-php-pecl-zip php74-php-intl php74-php-process php74-php-gmp
安装好后查看相关信息:
php74 -v
设置php-fpm自启动并启动进程
systemctl start php74-php-fpm
systemctl enable php74-php-fpm
然后在Apache模块配置中增加php-fpm配置文件
vim /etc/httpd/conf.d/php.conf
写入以下内容
<FilesMatch \.php$>
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
然后创建php文件来测试配置是否成功
vim /var/www/html/info.php
写入以下内容
<?php
phpinfo();
?>
然后重启Apache
systemctl restart httpd
访问info.php,出现此页面则说明配置好了
若页面显示的是php文件的内容则说明php-fpm未被正确配置
为Nextcloud建立一个Apache配置文件,
vim /etc/httpd/conf.d/nextcloud.conf
写入以下内容
<VirtualHost *:80>
ServerName files.example.com
ServerAdmin admin@example.com
DocumentRoot /var/www/html/nextcloud
<Directory /var/www/html/nextcloud>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
SetEnv HOME /var/www/html/nextcloud
SetEnv HTTP_HOME /var/www/html/nextcloud
</Directory>
</VirtualHost>
其中ServerName 和 ServerAdmin根据实际情况来填写,ServerName可以填写自己的域名或者IP,写localhost也可以;ServerAdmin则无所谓,DocumentRoot是Nextcloud的路径,后面Nextcloud的存放路径要与此一致
3.MariaDB
通常CentOS中会自带MariaDB 5.5或者相关的库,因此我们需要先卸载
yum list installed | grep mariadb
yum remove mariadb*
然后我们采用官网的方法安装最新版本
进入https://mariadb.org/download,找到Repository Configuration tool,选择好相关信息。注意:不要选择10.6版本,目前10.6版本安装Nextcloud时会出现错误!!!
然后创建文件
vim /etc/yum.repos.d/MariaDB.repo
把页面的内容粘贴进去
# MariaDB 10.5 CentOS repository list - created 2021-07-07 17:26 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.5/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
然后安装MariaDB
yum install MariaDB-server MariaDB-client
安装好之后启动它并设为开机自动运行,接着进行初始化工作
systemctl enable mariadb
systemctl start mariadb
mariadb-secure-installation
由于是新安装,所以第一步输入密码直接回车即可,后面设置都建议设置为是,也可以按需设置
Enter current password for root (enter for none):
Switch to unix_socket authentication [Y/n] Y
Change the root password? [Y/n] Y
New password:
Re-enter new password:
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y
接着使用命令行工具建立相关数据库
mysql -u root -p
输入以下SQL语句
create database nextcloud_db;
create user nextcloud@localhost identified by '新用户的密码';
grant all privileges on nextcloud_db.* to nextcloud@localhost identified by '新用户的密码';
flush privileges;
exit;
4.安装SSL证书(可选)
使用http也可以正常使用Nextcloud,但是出于安全考虑,尤其是服务运行在公网上时,使用https可以给我们多一份保障。使用https需要证书,如果我们有自己的域名,我们可以在域名服务提供商上下载证书或者使用Let's Encrypt生成证书,若是没有域名或者证书获取不方便,我们可以使用自签名证书。此处使用自签名证书。
yum install mod_ssl
mkdir /etc/httpd/cert/
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/httpd/cert/apache.key -out /etc/httpd/cert/apache.crt
然后修改配置文件,在文件中加入以下内容:
vim /etc/httpd/conf.d/nextcloud.conf
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName files.example.com
ServerAdmin admin@example.com
DocumentRoot /var/www/html/nextcloud
<directory /var/www/html/nextcloud>
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
SetEnv HOME /var/www/html/nextcloud
SetEnv HTTP_HOME /var/www/html/nextcloud
</directory>
SSLEngine on
SSLCertificateFile /etc/httpd/cert/apache.crt
SSLCertificateKeyFile /etc/httpd/cert/apache.key
</VirtualHost>
</IfModule>
重启Apache
systemctl restart httpd
5. 下载安装Nextcloud
Nextcloud服务端下载页面地址为 https://nextcloud.com/install/#instructions-server,本文撰写时最新版本为22。
历史版本可以在 https://nextcloud.com/changelog/ 找到,我们选择安装Nextcloud 21
下载好之后将安装包拷贝到服务器,可以用pscp或者WinScp;也可以直接在服务器上使用wget、curl等工具直接从官网下载文件
然后解压文件,放到web服务器的对应目录下,若是没有解压工具则先安装unzip
yum install unzip
unzip nextcloud-21.0.3.zip
mv nextcloud /var/www/html/
mkdir /var/www/html/data
chown -R apache:apache /var/www/html/nextcloud
然后打开浏览器输入我们的ip或者域名,然后却出现了禁止访问
查看SELinux状态
SELinux启用了,运行以下命令可以解决该问题
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/data'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/3rdparty(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/nextcloud/.user.ini'
restorecon -Rv '/var/www/html/nextcloud/'
不过最简单的还是直接关闭SELinux
然后刷新就可以看到安装界面了
如果我们安装了SSL证书,则可以在地址前加入https://, 之后的页面是这样子的
点击 高级-继续前往 即可
接着填写管理员的用户名和密码,然后点击存储与数据库,选择MySQL/MariaDB,填写数据库的相关信息,然后就可以点击安装。
安装完之后的界面如下
然后就可以使用了
6.性能优化(可选)
在我们安装好Nextcloud之后,使用时可能会发现在某些时候运行速度不太理想,因此我们可以采取一些方法来优化访问速度。
Apcu是数据缓存工具,使用它可以加快访问速度
yum install php74-php-pecl-apcu
安装并启用Redis
yum install https://repo.ius.io/ius-release-el7.rpm https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install redis5 php74-php-pecl-redis5
systemctl enable redis
systemctl start redis
修改Nextcloud的配置文件
vim /var/www/html/nextcloud/config/config.php
在末尾上一行加入
'memcache.local' => '\OC\Memcache\APCu',
'memcache.locking' => '\OC\Memcache\Redis',
'memcache.distributed' => '\OC\Memcache\Redis',
'redis' => array(
'host' => '127.0.0.1',
'port' => 6379,
),
设置SELinux
setsebool -P httpd_can_network_connect 1
PHP默认内存限制值是128M,我们将其改为512M
vim /etc/opt/remi/php74/php.ini
找到 memory_limit = 128M,将128修改为512,重启服务
systemctl restart httpd
systemctl restart php74-php-fpm
出于安全性考虑,我们可以开启HTTP Strict Transport Security
编辑Nextcloud的APache配置文件
vim /etc/httpd/conf.d/nextcloud.conf
在<VirtualHost *:443> 的下面添加
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
</IfModule>
同时我们还可以将http重定向到https,只需在<VirtualHost *:80> 里面添加一句即可
Redirect permanent / https:/ip或者域名/
然后重启Apache
systemctl restart httpd
至此,Nextcloud服务端配置完毕!
三、Nextcloud客户端安装
Nextcloud客户端对于操作系统的支持可以说是相当完善了,除了可以通过Web端访问外,还可以通过客户端的方法来访问,而且客户端还具有自动同步的功能,对于多人协作来说可以说是非常方便。在PC端,Nextcloud客户端支持Mac、Linux和Windows三大主流桌面操作系统,在移动端支持Android和iOS。
Nextcloud PC端程序可以从其官网下载,链接为https://nextcloud.com/install/#install-clients
可以看出,最新版的WIndows客户端仅支持Windows 10,可以说是相当不友好。历史版本可在 https://download.nextcloud.com/desktop/releases/ 或者https://github.com/nextcloud/desktop/releases 找到。需要说明的是,2.5.3是最后一个支持32位Windows操作系统的版本,之后的版本不再支持32位,3.0开始只支持Windows 10。