2019年3月

如今,我们需要存储的东西是越来越多,各大网盘相继关闭,留下来的又诸多限制,宽带资费是一降再降,这让搭建个人网盘有了可能。下面记录一下自己搭建的过程,既是分享,也是自己做一个笔记。

宽带&公网ip&域名

首先我们可以去注册一个域名这样方便记忆和访问,例如 http://pan.mypan.com, 免费域名我很久没有关注了,应该还有很多的,可以百度找找,或者自己花钱注册一个,一年就几十块而已,国内推荐阿里云、腾讯云,国外的首先考虑namesilo。
民用宽带运营商给你的ip很可能是nat转换后的私有ip,私有ip只能向外网访问,无法过通过外网访问本网的主机,所以我们要打电话给运营商要求给公网ip的,而且运营商限制了80端口的,所以不能很漂亮的直接访问,只能带端口号访问,例如 http://pan.mypan.com:1234, 这样显得很low是不是?还好还有https,https默认使用443端口,这样我们便能很漂亮的使用 https://pan.mypan.com 来访问了! ip.jpg

硬件选择&环境配置

既然是网盘,就必须要保持主机24小时在线,所以我买了个集成cpu低功耗的华擎J3710主板,内存条2根海力士DDR3 4G,浦科特固态做系统盘,数据盘一块西数4T,zumax flex小1U 200W电源,博世NAS机箱。考虑到管理和易用性,我安装了win系统,然后使用hyper-V开一个虚拟机安装Ubuntu sever作为网盘的操作系统。在路由器上配置好DDNS和转发规则,域名注册商那cname到DDNS地址,安装好Ubuntu Sever后,因为对Linux命令不熟悉,所以再安装一个宝塔面板方便管理和部署web环境,hardware.jpg使用宝塔面板可以很方便的部署好web环境,点点鼠标,然后喝一杯茶的功夫它就自动帮你安装好了。然后添加网站,填写域名地址,按照提示配置好SSL,我们便可以使用https来访问我们的网盘啦。
bt.jpg

网盘系统安装配置

网盘系统的话,我所知道的国内的有seafile、可道云,国外NextCloud,对比了一下觉得NextCloud比较好用。
因为是用虚拟机运行Nextcloud的。所以安装NextCloud之前我要把西数的那块4T硬盘挂载到NextCloud的数据目录,以后我们的数据就是保存在这个硬盘里面。首先我在Win系统里面把硬盘所在的分区设为共享,然后使用宝塔面板编辑/etc目录下的fstab文件实现开机自动挂载:

//192.168.199.111/cloud /www/wwwroot/pan.mypan.com/data cifs defaults,auto,username=username,password=password,rw,dir_mode=0770,file_mode=0770,gid=1001,uid=1001 0 2

https://nextcloud.com/install/#instructions-server 官网下载安装包,上传到对应的网站目录,然后访问一路下一步安装好就OK。安装好后我们登陆进去,设置→概览,这里会有NextCloud提示一些需要优化的地方以提高使用体验:

HTTP的请求头 "Strict-Transport-Security" 未设置为至少 "15552000" 秒。为了提高安全性,建议参照security tips ↗中的说明启用HSTS。

解决方法:在站点配置文件里面添加如下代码,然后重启Apache即可。

Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains; preload"

PHP 的组件 OPcache 没有正确配置。 为了提供更好的性能,我们建议在 php.ini中使用下列设置:

解决方法:按照提示在php配置文件中搜索opcache.enable=1,对应修改成:

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点击安装redis ,编辑/config下的config.php在);前加入以下代码:

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

数据库中的一些列由于进行长整型转换而缺失。

解决方法:cd到nextcloud目录,执行

sudo -u www php occ db:convert-filecache-bigint

美化URL,去除入口文件index.php

解决方法:使用config.php+OCC命令生成.htaccess。编辑/config/config.php添加规则:

'htaccess.RewriteBase' => '/',

然后使用occ命令生成.htaccess文件:

sudo -u www php occ maintenance:update:htaccess