一、Nextcloud简介

Nextcloud是一个开源的网盘程序,它提供了服务端和客户端程序,让我们得以在自己的机器上搭建并运行网盘程序。目前国内网盘产品主要就是百度网盘、腾讯微云、115网盘、阿里网盘以及和彩云、天翼云等。而国外则主要是Google Drive、微软的One Drive,以及DropBox等产品。虽然目前商用网盘已经较为成熟,但是私有云仍然具有较大的需求和市场。出于多方面因素的考虑,有时候我们会选择自建网盘。除了Nextcloud,目前流行的网盘程序还有可道云SeafileZ-FileCloudreveDzzOffice......

​本文介绍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端口。

CentOS 7 LAMP环境安装Nextcloud

CentOS 7 LAMP环境安装Nextcloud

我们选择采用放行80端口的方法,同时也放行443端口

firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload

然后就可以访问80端口了,如果还是无法访问可以尝试清除浏览器缓存或者换个浏览器访问

CentOS 7 LAMP环境安装Nextcloud

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

CentOS 7 LAMP环境安装Nextcloud

设置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,出现此页面则说明配置好了

CentOS 7 LAMP环境安装Nextcloud

若页面显示的是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

CentOS 7 LAMP环境安装Nextcloud

yum remove mariadb*

​然后我们采用官网的方法安装最新版本

​进入https://mariadb.org/download,找到Repository Configuration tool,选择好相关信息。注意:不要选择10.6版本,目前10.6版本安装Nextcloud时会出现错误!!!

CentOS 7 LAMP环境安装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

CentOS 7 LAMP环境安装Nextcloud

然后修改配置文件,在文件中加入以下内容:

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。

CentOS 7 LAMP环境安装Nextcloud

​历史版本可以在 https://nextcloud.com/changelog/ 找到,我们选择安装Nextcloud 21

CentOS 7 LAMP环境安装Nextcloud

​下载好之后将安装包拷贝到服务器,可以用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或者域名,然后却出现了禁止访问

CentOS 7 LAMP环境安装Nextcloud

查看SELinux状态

CentOS 7 LAMP环境安装Nextcloud

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

然后刷新就可以看到安装界面了

CentOS 7 LAMP环境安装Nextcloud

如果我们安装了SSL证书,则可以在地址前加入https://, 之后的页面是这样子的

CentOS 7 LAMP环境安装Nextcloud

点击 高级-继续前往 即可

接着填写管理员的用户名和密码,然后点击存储与数据库,选择MySQL/MariaDB,填写数据库的相关信息,然后就可以点击安装。

CentOS 7 LAMP环境安装Nextcloud

安装完之后的界面如下

CentOS 7 LAMP环境安装Nextcloud

然后就可以使用了

CentOS 7 LAMP环境安装Nextcloud

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

CentOS 7 LAMP环境安装Nextcloud

可以看出,最新版的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。