以前安装过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
2020/05/24更新:
docker搭建Nextcloud教程,操作更简单:使用docker-compose搭建Nextcloud个人云盘并开启https教程
打开官网下载最新的安装包:https://nextcloud.com/install/#
我们装的是Server端,这里选择的是最新的17.0.0版本,下载完成后上传至服务器目录。
或者直接使用下面的命令:
wget https://download.nextcloud.com/server/releases/nextcloud-17.0.0.zip
官网的流程主要是安装Apache服务器,安装PHP,安装Mysql,这里因为环境都已具备,不再详述。
这是一个基于内存的key-value服务器,速度非常快,后面做内存缓存用。
yum -y install redis
systemctl enable redis.service
systemctl start redis.service
主要给后面的imagick扩展用。
yum -y install ImageMagick ImageMagick-devel
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
创建新的配置文件:
vim /etc/httpd/conf.d/nextcloud.conf
添加下面的内容:
DocumentRoot /var/www/nextcloud/
ServerName your.server.com
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
Dav off
需要注意的是,以为我采用的LANMP,是Nginx监听的80端口,所以这里端口号写的8080,如果没有Nginx做反向代理的话,这里直接填写80即可。
重启Apache服务器:
systemctl restart httpd
创建新的配置文件:
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
我直接运行的时候发现出现了下面的错误:
内部服务器错误
服务器不能完成您的请求。
如果再次发生,请在下方将技术详情发送给服务器管理员。
更多细节可以在服务器日志中找到。
技术细节
远程地址: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
上面所有步骤都正确配置后,输入我们的域名,这时候发现进入配置界面:
可以使用自带的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 “密码”
数据库预置完成后,在配置界面输入刚才设置的名称和信息,点击安装完成。
这时候,一切顺利的话,我们可以使用刚才配置的用户名和密码登陆后台。
点击 设置-概览
来查看当前配置的信息:
下面将依次对警告项进行优化:
vim /usr/local/php/conf/php.ini
将memory_limit=128M
修改为memory_limit=512M
首先你要有HTTPS证书,可以使用Let's Encrypt
,或者去阿里云或者腾讯云申请免费一年的DV证书,这里以腾讯云为例。
具体的申请流程不再详细叙述,申请完成后我们下载证书文件,解压后进入Apache文件夹,可以看到下面三个文件:
ls
1_root_bundle.crt 2_yasin.store.crt 3_yasin.store.key
如果已经安装可以跳过。
yum -y install mod_ssl
vim /etc/httpd/conf.d/nextcloud.conf
下面是一个参考配置:
ServerName yasin.store
Serveralias www.yasin.store
Redirect permanent / https://yasin.store/
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
Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains"
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
重启Apache让配置生效:
systemctl restart httpd
这时候你再打开域名发现已经切换为https。
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是存在于大多数Linux发现版中的一种数据缓存。下面采用编译方法安装PHP APCu扩展:
wget http://pecl.php.net/get/apcu-5.1.17.tgz
tar -xvf apcu-5.1.17.tgz
cd apcu-5.1.17
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
vim /usr/local/php/conf/php.ini
增加下面的内容:
[apcu]
extension = apcu.so
apc.enabled= on
apc.shm_size= 64M
apc.enable_cli = on
systemctl restart php-fpm
增加下面的内容:
'memcache.local' => '\OC\Memcache\APCu',
Redis是一种出色的现代内存缓存,可用于分布式缓存,并用作事务性文件锁定的key-value存储,因为它可以确保所缓存的对象在需要时一直可用。
这里通用采用编译的方法安装PHP Redis扩展。
wget http://pecl.php.net/get/redis-5.0.2.tgz
tar -xvf redis-5.0.2.tgz
cd redis-5.0.2
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
vim /usr/local/php/conf/php.ini
增加下面的内容:
[redis]
extension = redis.so
systemctl restart php-fpm
增加下面的内容:
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
'host' => '127.0.0.1',
'port' => 6379,
],
wget http://pecl.php.net/get/imagick-3.4.4.tgz
tar -xvf imagick-3.4.4.tgz
cd imagick-3.4.4
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config
make && make install
vim /usr/local/php/conf/php.ini
增加下面的内容:
[imagick]
extension = "imagick.so"
systemctl restart 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
好了,至此所有的优化都已完毕,这时候我们再查看概览可以发现所有建议项均已完成。
这里建议使用腾讯企业邮箱,微信登录比较方便,也比自建邮箱服务器安全稳定的多。
首先去注册腾讯企业邮箱,然后添加邮箱域名,比如这里我使用的是yasin.store
。
这时候需要去域名注册商处添加MX解析,这里以阿里云为例,在域名解析处添加下面的解析:
等验证完成后,企业邮箱就可以使用了,下面我们添加一个通知邮箱账号。
点击通讯录,新增成员,示例如下:
添加完成后使用该邮箱登录,登录后点击账户,设置密码,设置完成后我们就可以在NextCloud中配置邮箱了。
配置示例如下:
凭证就是你的邮箱名和密码,设置完成后点击发送邮件。
发现提示邮箱未设置,也就是账号自己的邮箱,这里在账户设置中填入你自己的邮箱,再次点击发送。
如果一切配置正确的话,登录你自己的邮箱,这时候你就能收到发送的邮件,如下所示:
这样你的邮箱就算完成啦,这样账号的各种通知都可以通过邮箱进行发送,忘记密码也会发送到你的邮箱,所以是一个非常实用且必要的功能。
好啦,完成上面所有的步骤你就可以愉快地使用一个只属于你自己的个人云盘。
你可以安装Windows客户端,使用它的同步功能。
也可使用App Store或者Google Play下载手机客户端,自动备份你的照片和视频(百度云收费功能哦)。
还有更多有趣的功能等待你去慢慢探索!