前言

以前安装过ownCloud,因为ownCloud安卓客户端需要收费,这次更换服务器后直接采用Nextcloud。因为之前已经搭建过WordPress博客,所以本文并非完整教程,主要在已经存在的环境上搭建Nextcloud。

之前wordpress的搭建过程可以参考文章:最新阿里(腾讯)云主机LANMP搭建WordPress详细教程

搭建流程主要参考的官网文档:https://docs.nextcloud.com/server/17/admin_manual/installation/source_installation.html#example-installation-on-centos-7-server

1.下载安装包

打开官网下载最新的安装包:https://nextcloud.com/install/#

我们装的是Server端,这里选择的是最新的17.0.0版本,下载完成后上传至服务器目录。

或者直接使用下面的命令:

wget https://download.nextcloud.com/server/releases/nextcloud-17.0.0.zip

2.准备工作

官网的流程主要是安装Apache服务器,安装PHP,安装Mysql,这里因为环境都已具备,不再详述。

①安装redis

这是一个基于内存的key-value服务器,速度非常快,后面做内存缓存用。

yum -y install redis
systemctl enable redis.service
systemctl start redis.service

②安装imageMagick

主要给后面的imagick扩展用。

yum -y install ImageMagick ImageMagick-devel

3.安装

①解压:

unzip nextcloud-*.zip

②复制文件夹

因为用的是Apache服务器,可以复制到/var/www/html/

cp -R nextcloud/ /var/www/html/

③创建存放用户数据的文件夹

mkdir /var/www/html/nextcloud/data

④修改文件夹用户与用户组

chown -R apache:apache /var/www/html/nextcloud

4.配置Apache服务器

创建新的配置文件:

vim /etc/httpd/conf.d/nextcloud.conf

添加下面的内容:

<VirtualHost *:8080>
  DocumentRoot /var/www/nextcloud/
  ServerName  your.server.com

  <Directory "/var/www/nextcloud/">
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews

    <IfModule mod_dav.c>
      Dav off
    </IfModule>

  </Directory>
</VirtualHost>

需要注意的是,以为我采用的LANMP,是Nginx监听的80端口,所以这里端口号写的8080,如果没有Nginx做反向代理的话,这里直接填写80即可。

重启Apache服务器:

systemctl restart httpd

5.配置Nginx服务器

创建新的配置文件:

vim /etc/nginx/conf.d/nextcloud.conf

添加下面的内容:

server {
    listen 80;
    server_name yasin.store www.yasin.store;
    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_buffering off;
        proxy_max_temp_file_size 0;
        client_max_body_size 2048M;
        fastcgi_buffers 64 4K;
        fastcgi_request_buffering off;
    }
}

这里的server_name修改为你的云盘域名。

proxy_buffering为关闭代理缓存,收到的数据直接传给后端,因为包含用户数据,所以不应该开启缓存。

client_max_body_size这里限制了上传单个文件的最大值

重启Nginx服务器:

systemctl restart nginx

6.注意事项

我直接运行的时候发现出现了下面的错误:

内部服务器错误

服务器不能完成您的请求。

如果再次发生,请在下方将技术详情发送给服务器管理员。

更多细节可以在服务器日志中找到。

技术细节
远程地址:127.0.0.1
请求 ID:Xa111KwMtzlrOBUCTPSNXwAAAAY

原因:

文件夹权限没有设置对,上面的修改权限是chown -R apache:apache /var/www/html/nextcloud,但是我编译PHP的时候指定了运行用户为www,使用了--with-fpm-user=www参数。也就是PHP执行程序其实并没有权限,还是无法创建文件。

解决方法:

将文件夹用户修改为www

chown -R www:www /var/www/html/nextcloud

或者一开始编译的时候指定PHP执行用户为apache

--with-fpm-user=apache

7.创建数据库

上面所有步骤都正确配置后,输入我们的域名,这时候发现进入配置界面:

nextcloud_start
可以使用自带的SQLite数据库,但是只适用于人数比较少的情况,数据量大时会有性能问题。

因为我们环境已经安装Mysql,所以采用Mysql数据库。

创建数据库和用户

使用root用户登录:

mysql -u root -p 

为用户创建一个数据库(wordpress):

mysql> create database nextcloud;

创建nextcloud用户并授予上面创建的nextcloud数据库所有权限:

mysql> grant all on nextcloud.* to nextcloud@localhost Identified by "19921111Yasin#$";
mysql> flush privileges;

grant 权限 on 数据库.* to 用户名@登录主机 identified by “密码”

数据库预置完成后,在配置界面输入刚才设置的名称和信息,点击安装完成。

8.优化

这时候,一切顺利的话,我们可以使用刚才配置的用户名和密码登陆后台。

点击 设置-概览来查看当前配置的信息:

nextcloud_total

下面将依次对警告项进行优化:

①修改PHP内存限制

vim /usr/local/php/conf/php.ini

memory_limit=128M修改为memory_limit=512M

②开启HTTPS

(1)申请HTTPS证书

首先你要有HTTPS证书,可以使用Let's Encrypt,或者去阿里云或者腾讯云申请免费一年的DV证书,这里以腾讯云为例。

具体的申请流程不再详细叙述,申请完成后我们下载证书文件,解压后进入Apache文件夹,可以看到下面三个文件:

ls 
1_root_bundle.crt  2_yasin.store.crt  3_yasin.store.key

(2)安装ssl模块

如果已经安装可以跳过。

yum -y install mod_ssl

(3)修改Apache配置文件

vim /etc/httpd/conf.d/nextcloud.conf

下面是一个参考配置:

<VirtualHost *:8080>
  ServerName yasin.store
  Serveralias www.yasin.store
  Redirect permanent / https://yasin.store/

</VirtualHost>

<VirtualHost *:443>
  ServerName yasin.store
  DocumentRoot "/yasin/nextcloud"
  DirectoryIndex index.html index.php
  SSLEngine on
  SSLCertificateFile /yasin/ssl/2_yasin.store.crt
  SSLCertificateKeyFile /yasin/ssl/3_yasin.store.key
  SSLCertificateChainFile /yasin/ssl/1_root_bundle.crt

  <IfModule mod_headers.c>
      Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
  </IfModule>

  <Directory "/yasin/nextcloud/">
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews
  </Directory>

</VirtualHost>

重启Apache让配置生效:

systemctl restart httpd

这时候你再打开域名发现已经切换为https。

③开启opcache

vim /usr/local/php/conf/php.ini

找到[opcache],开启下面的配置:

[opcache]
zend_extension= opcache.so
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

重启php-fpm:

systemctl restart php-fpm

④配置内存缓存

APCu

APCu是存在于大多数Linux发现版中的一种数据缓存。下面采用编译方法安装PHP APCu扩展:

(1)下载
wget  http://pecl.php.net/get/apcu-5.1.17.tgz
(2)解压
tar -xvf apcu-5.1.17.tgz
(3)编译配置
cd  apcu-5.1.17
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
(4)编译并安装
make && make install
(5)修改配置文件php.ini
vim /usr/local/php/conf/php.ini

增加下面的内容:

[apcu]
extension = apcu.so
apc.enabled= on
apc.shm_size= 64M
apc.enable_cli = on
(6)重启php-fpm
systemctl restart php-fpm
(7)修改Nextcloud配置文件

增加下面的内容:

'memcache.local' => '\OC\Memcache\APCu',

Redis

Redis是一种出色的现代内存缓存,可用于分布式缓存,并用作事务性文件锁定的key-value存储,因为它可以确保所缓存的对象在需要时一直可用。

这里通用采用编译的方法安装PHP Redis扩展。

(1)下载
wget http://pecl.php.net/get/redis-5.0.2.tgz
(2)解压
tar -xvf redis-5.0.2.tgz
(3)编译配置
cd  redis-5.0.2
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
(4)编译并安装
make && make install
(5)修改配置文件php.ini
vim /usr/local/php/conf/php.ini

增加下面的内容:

[redis]
extension = redis.so
(6)重启php-fpm
systemctl restart php-fpm
(7)修改Nextcloud配置文件

增加下面的内容:

'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
     'host' => '127.0.0.1',
     'port' => 6379,
],

⑤添加imagick扩展

(1)下载
wget http://pecl.php.net/get/imagick-3.4.4.tgz
(2)解压
tar -xvf imagick-3.4.4.tgz
(3)编译配置
cd imagick-3.4.4
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
(4)编译并安装
make && make install
(5)修改配置文件php.ini
vim /usr/local/php/conf/php.ini

增加下面的内容:

[imagick]
extension = "imagick.so"
(6)重启php-fpm
systemctl restart php-fpm

⑥修改php-fpm配置

如果您使用的是php-fpm的默认安装,则可能已经注意到Web界面上的加载时间过长,甚至出现同步问题。

这是由于每个元素的同时请求均由单独的PHP-FPM进程处理,配置允许的情况下应该允许运行更多的进程。

下面是一个2核4G的机器的参考配置:

vim /usr/local/php/etc/php-fpm.d/www.conf

修改下面的配置:

pm = dynamic
pm.max_children = 120
pm.start_servers = 12
pm.min_spare_servers = 6
pm.max_spare_servers = 18

重启php-fpm:

systemctl restart php-fpm

好了,至此所有的优化都已完毕,这时候我们再查看概览可以发现所有建议项均已完成。

nextcloud_complete

9.添加和配置邮箱

这里建议使用腾讯企业邮箱,微信登录比较方便,也比自建邮箱服务器安全稳定的多。

首先去注册腾讯企业邮箱,然后添加邮箱域名,比如这里我使用的是yasin.store

这时候需要去域名注册商处添加MX解析,这里以阿里云为例,在域名解析处添加下面的解析:

nextcloud_mail

等验证完成后,企业邮箱就可以使用了,下面我们添加一个通知邮箱账号。

点击通讯录,新增成员,示例如下:

nextcloud_notice

添加完成后使用该邮箱登录,登录后点击账户,设置密码,设置完成后我们就可以在NextCloud中配置邮箱了。

配置示例如下:

nextcloud_smtp

凭证就是你的邮箱名和密码,设置完成后点击发送邮件。

发现提示邮箱未设置,也就是账号自己的邮箱,这里在账户设置中填入你自己的邮箱,再次点击发送。

如果一切配置正确的话,登录你自己的邮箱,这时候你就能收到发送的邮件,如下所示:

nextcloud_mail_ok

这样你的邮箱就算完成啦,这样账号的各种通知都可以通过邮箱进行发送,忘记密码也会发送到你的邮箱,所以是一个非常实用且必要的功能。

10.Enjoy

好啦,完成上面所有的步骤你就可以愉快地使用一个只属于你自己的个人云盘。

你可以安装Windows客户端,使用它的同步功能。

也可使用App Store或者Google Play下载手机客户端,自动备份你的照片和视频(百度云收费功能哦)。

还有更多有趣的功能等待你去慢慢探索!