自建云盘系列——NextCloud (OwnCloud继任者)

文章目录[隐藏]

 

唔,想了想,我好像在OwnCloud还是6.x版本的时候就在用了,现在是10.x了,而NextCloud是12.x,为什么要把两者放在一起提呢?这个的话,明眼人一看就觉得两者从很多方面来说都很像,甚至……连官方的安装下载页面都几乎一样。这是因为两者本就是同根而生的,NextCloud的主要开发者都是OwnCloud的开发者(曾经的),这个也算当初开源界的一个大事件了,OwnCloud的部分元老级员工离开创建了NextCloud,而OwnCloud则突然宣告破产并成立了新公司,原因众说纷纭,但是真正是什么个情况我们就不得而知了。

说实在话无论是NextCloud还是OwnCloud,在安装上其实是不难的,特别如果是用Apache的情况下,由于存在.htaccess文件,所以不用额外配置Rewrite规则,不过嘛,我这次当然得挑Nginx的环境来说咯,毕竟我常用的就是Nginx,而且顺便记录下伪静态规则,方便以后拿来用。对了,我还会在文末提下一些额外的调优以及一个曾经碰到过的疑难杂症的解决方法。

一.安装

安装的话我选择的是OneInStack的LNMP环境,官方推荐的环境如下

(当然,其实OwnCloud有个通过各系统软件仓库安装的办法,貌似NextCloud没搞,但是除非你这台机器不作他用,不然这样的方法太"dirty"了)

  • Red Hat Enterprise Linux 7 / Ubuntu 16.04 LTS
  • MySQL/MariaDB
  • PHP 7.0 +
  • Apache 2.4 with mod_php

不过我们今天要用的可不是Apache,需要注意下,强烈建议使用PHP7,性能提高了很多(因为NextCloud的前身OwnCloud在我之前的使用中来说,PHP5.6下跑是真的好慢_(:з」∠)_)

这边有个小坑,在官方文档中也有说明,那就是对MySQL的配置有所要求,原文如下

翻译一下,就是要修改或者关闭二进制日志,启用InnoDB(不能用MyISAM哦,我之前有次没注意,然后就在安装向导那各种报错),第三个是对事务隔离级别有所要求 (OneInStack这边默认就满足了)

安装的话基础的就不说了,利用vhost.sh来创建网站,然后我们可以选择下载Archive File或者Web Installer

https://download.nextcloud.com/server/releases/nextcloud-12.0.0.zip

https://download.nextcloud.com/server/installer/setup-nextcloud.php

两者其实都行,不过如果你的机器在国内的话我建议前者,甚至最好先下载到本地然后上传上去,不然以国内机器的网络情况来说,在线下载很容易出问题的

解压到你创建网站时提示的目录,然后修改下所有者,OneInStack这边是www:www ,所以在网站目录chown -R www:www * 就行,接着访问你之前配置的域名(前提得是你解析好了)

全中文,自己填,为了安全建议数据目录和网站目录分开,当然请记得把数据目录的所有者改了,不然会无法写入

然后,安装完成,是的,你会看到"No input file specified." 2333,这是因为我们没有配置伪静态,下面我们就修改下Nginx的vhost配置,配置文件路径在创建网站时会告诉你

#(可选)添加如下header主要为了安全
add_header X-Content-Type-Options nosniff;
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
#(可选)为了支持user_webfinger app
rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
 
#这儿是为了支持日历和联系人,建议加上
location = /.well-known/carddav {
 return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
 return 301 $scheme://$host/remote.php/dav;
}
#设置上传文件的最大大小(还和php里的那个设置有关)
client_max_body_size 512M;
fastcgi_buffers 64 4K;
#最主要的,将所有请求转发到index.php上
location / {
 rewrite ^ /index.php$uri;
}
#安全设置,禁止访问部分敏感内容
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
 deny all;
}
 location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
 deny all;
}
 
#这部分吧,默认就有,不过有所不同,所以我合并了下,替换原来的就行
location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) {
 fastcgi_split_path_info ^(.+\.php)(/.*)$;
 fastcgi_param PATH_INFO $fastcgi_path_info;
 fastcgi_param modHeadersAvailable true;
 fastcgi_param front_controller_active true;
 fastcgi_pass unix:/var/run/php-cgi.sock; #这边我改过,参照原来的
 fastcgi_intercept_errors on;
 fastcgi_request_buffering off;
 include fastcgi.conf;
}
 
#安全设置,禁止访问部分敏感内容
location ~ ^/(?:updater|ocs-provider)(?:$|/) {
 try_files $uri/ =404;
 index index.php;
}
 
location ~ \.(?:css|js|woff|svg|gif)$ {
 try_files $uri /index.php$uri$is_args$args;
 add_header Cache-Control "public, max-age=15778463";
 add_header X-Content-Type-Options nosniff;
 add_header X-XSS-Protection "1; mode=block";
 add_header X-Robots-Tag none;
 add_header X-Download-Options noopen;
 add_header X-Permitted-Cross-Domain-Policies none;
 access_log off;
}
location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
 try_files $uri /index.php$uri$is_args$args;
 access_log off;
}

把这儿配置完,重启Nginx,然后刷新刚才的错误页,我们就能进入正常的页面了

到这儿基础的安装其实已经结束了,下面是部分调优和疑难杂症老中医

二.优化

点击右上角齿轮进入管理界面,默认情况下我们会看到这些(在OneInStack环境下,且没选择开启Opcache),我的建议是缺啥补啥,但是,安装完Opcache后它又会报错

PHP 被设置为移除内联块, 这将导致多个核心应用无法访问.

这可能由缓存/加速器导致的, 例如 Zend OPcache 或 eAccelerator.

这是因为我们还要对php.ini中Opcache的参数进行修改,改成下方的就行(OneInStack的相关参数被拆分出来了,在/usr/local/php/etc/php.d/ext-opcache.ini 中)其它可以不用改,主要是那个opcache.save_comments=1 ,因为默认是0,改完重启php-fpm就行

顺手把fileinfo模块装了(用addon.sh就行),然后我们还需要配置下内存缓存,这个的话NextCloud支持的种类还是不少的,有APU、Memcached以及Redis

具体说明——>传送门

其实吧,官方推荐APU或者Redis,最方便的是APU了,至于你们喜欢啥那随意咯,下面给出一些配置的栗子,都需要修改config目录中的config.php才行

①APU

在配置文件中添加如下

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

②Memcached

在配置文件中添加如下,这个是多个Memcached实例,单个自己改 (因为这货不能数据持久化,所以真的不推荐

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Memcached',
'memcached_servers' => array(
     array('localhost', 11211),
     array('server1.example.com', 11211),
     array('server2.example.com', 11211),
     ),

③Redis

在配置文件中添加如下,这个是通过TCP连接的

'memcache.local' => '\OC\Memcache\Redis',
'redis' => array(
     'host' => 'localhost',
     'port' => 6379,
      ),

还有性能更好的UNIX连接

'memcache.local' => '\OC\Memcache\Redis',
'redis' => array(
     'host' => '/var/run/redis/redis.sock',
     'port' => 0,
     'dbindex' => 0,
     'password' => 'secret',
     'timeout' => 1.5,
      ),

同时,官方还推荐加入如下,来用于存储文件锁

'memcache.locking' => '\OC\Memcache\Redis',

还有个要改的地方就是Cron了,默认的Cron是AJAX的,效率不行,建议改成系统Cron任务

#-u是用于指定这个crontab是www用户的
crontab -u www -e
#这儿建议php使用完整路径,另外要改下cron.php的路径为你自己的
*/15  *  *  *  * php -f /var/www/nextcloud/cron.php

搞到这儿,那真的是差不多了,唯一一个要提的是

请记得在解压NextCloud程序并转移文件的时候注意.htaccess .user.ini这俩,前者在Nginx下倒是不重要,后者请务必注意,因为这个是用于覆盖php.ini配置的,便于OwnCloud调整上传文件的大小,如果没有这个,在之前的Nginx部分你修改了那个最大大小是没有用的,还是会被php.ini中的限制住

声明:本文为原创,作者为 Svlik,转载时请保留本声明及附带文章链接:http://www.svlik.com/2457.html