当前网盘市场可谓风云变幻,一个个网盘倒下,目前国内可以流畅使用的也就剩下百度云、坚果云了.前者空间很大,但是下载速度实在是让人抓狂,想下载过必须要开通会员,而网上流传的不限速客户端又不安全;后者提供无限制存储容量,但是每个月上传下载都有流量限制,只适合工作或者私人小文件使用,不适合大规模文件分享。

所以很有必要搭建一套自己的私有云盘,至少很安全。目前私有云盘的解决方案有owncloud、nextcloud、seafile以及国产的可道云。
之前试用过可道云,UI很漂亮,但是不知道是我安装的问题还是什么原因,整个数据文件夹的权限全变了,为了安全起见,还是卸载了;通过多方面评估后选择了NextCloud,至少没那么商业化

一.程序安装

1.安装web服务器、数据库、php等相关基础服务

不赘述,推荐试用lnmp一键安装包,方便快捷

2.上传NextCloud程序

官方下载地址: https://nextcloud.com/install/#instructions-server

3.安装NextCloud

打开网站地址,自动跳到安装页面,此时会发现页面有报错,

PHP 被设置为移除内联块, 这将导致多个核心应用无法访问.
这可能由缓存/加速器导致的, 例如 Zend OPcache 或 eAccelerator.

这是由于Opcache参数设置问题,修改php.ini就可以了,我用的是Oneinstack,它的参数全部拆分出来了,位置在

 /usr/local/php/etc/php.d/ext-opcache.ini 
 opcache.save_comments=1     //默认是0,修改成1,即可

重启php-fpm

service php-fpm restart

重启后继续打开网站主页,发现报错已经消失,填写管理员账户及数据库相关信息

点击安装完成

程序安装完成后,并没有转到首页,依然报错了.

No input file specified.

需要配置伪静态,打开网站所在的配置文件,添加或修改一下内容

#(可选)添加如下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:/dev/shm/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服务,然后刷新刚才的错误页,就可以进入正常的页面了

二、程序配置

1.优化
配置Redis缓存,打开NextCloud配置文件,添加以下:

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

这是后台设置的安全警告就没有提示了。

还可以进行主题、插件等的优化,参考官方文档,这里不赘述了。

至此NetxtCloud安装完成。

后续:由于服务器配置并不是特别高,加上NetxCloud的ios客户端体验很差,偶尔会出现问题,UI虽然漂亮点,综合考虑云盘使用了半个月后下线了,后期可能会使用h5ai。