在工作和生活中,我们每个人都有大量的照片、电子书籍、设计素材、源代码等等资料需要去保存,几乎每个人都有过至少一次丢失永远无法找回的痛苦记录,同时这些资料中大部分都跟个人隐私相关,对互联网提供的公有云存储服务,我们越来越没有信心,随着各种云盘的关闭,我们都在考虑能否自己来妥善管理好自己的全部资料,再也不用担心个人隐私的泄露。以下介绍我正在使用的一套私有云服务供大家参考。
宽带速度支持
目前家庭百兆宽带都已经普及,通过在线访问 https://speedtest.net 站点测试能得到上下行速度一般都能达到上行 5M,下行 100M 以上,这个上行速度实际上比云服务商提供的基础版本云主机的 2M 要大2倍以上,所以将服务放在家庭内网中通过外网访问速度完全能满足要求。
安装服务器
一听到服务器,总感觉很大,很耗电,很吵。这个是对商用服务器的印象,我们家庭使用的只需要一台小型电脑就可以。比如推荐 Intel 的 NUC 系列(树莓派的性能还是有点低,多个服务跑起来吃力),体积小,没有声音,耗电底(根据我的测试,一年不停运转的电费为:0.040kw × 24h × 365d × 0.5 元 = 175.20 元),推荐安装 linux 操作系统(ubuntu 16.04),无需显示器,远程接入各种操作。安装完成后需要设置好固定的内网 IP 地址,有两种方法:一是直接设置静态 IP 地址,另一个是在路由器上使用地址保留,服务器如下图:
在路由器上设置 DMZ
服务器安装完成后,我们的服务器通过外网是无法访问的,因为服务器的 IP 地址是内网 IP ,DMZ 主机能将所有路由器上分配到的公网 IP 地址所有流量转发到内网服务器上,这样我们只要访问路由器上得到的公网IP地址,就是直接访问内网的服务器了。
在路由器上设置 DDNS 服务
至此我们可以通过路由器的公网 IP 来访问我们自己的服务器上的服务了,但是因为家庭宽带没有固定公网 IP,每次拨号后都会改变,我们总不能每次都记住这些 IP,所以我们就需要一个动态域名服务来做这件事,只要路由器公网IP变了,就把新IP发到 DDNS 服务商,服务商来负责解析,DDNS 服务一般集成到了路由器内部,比如我这台网件的 Nightawk R7000 路由器就内置了 www.3322.org, NOIP.com 等 DDNS 服务,在国内使用第一个解析速度和联通性比较靠谱,以下以公云DDNS服务 为例来说明如何设置。完成后,路由器就会在公网 IP 变更后自动将新的 IP 地址发送给服务商,这样你注册的这个域名就会时刻跟你个人宽带路由器获得的最新公网 IP 进行绑定。使用 ping 命令就可以看到你的公网 IP。现在使用这个域名就可以访问到内部服务了。
- 到 http://www.pubyun.com 注册一个账号并登录
- 创建一个动态域名,免费用户只能注册一个
- 将你的域名,用户名,密码填写到路由器上的 DDNS 设置页面上保存
注册个人域名(可选)
DDNS 服务商注册的这个域名的后缀都是服务商提供的,不是你个人的域名,不太友好也不便于记忆,一般我们会有自己的个人域名,我们可以通过在域名注册服务商(腾讯云、阿里云万网)注册好一个个人域名(一般年费大概100.00左右)同时在域名解析管理中添加一条 cname 解析记录来转换,如下图,我将:home.freemanke.com 域名通过 cname 解析到 freemanke.f3322.net 上,这样以后我就不用记录这个 fremanke.f3322.net 域名,只需要使用我自己的域名。
安装部署私有云服务
- 私有云盘服务 Seafile,百度云、dropbox等公有云有的功能都有而且更加强大和方便。很多大学机构,科研院所都在使用该套文件管理系统。
至此我们的私有云服务上的所有服务都可以通过自己的域名来实现访问,但是因为各个运营商对 80 和 443 端口的屏蔽,我们需要使用自定义端口来暴露我们的 web 等服务才能访问。这个推荐大家在个人服务器上使用 nginx 服务器来做反向代理将所有的服务使用 1024 以上的端口暴露到公网。
比如:
####################################################################
## seafile service
## https://home.freemanke.com:28000
server {
listen 28000;
server_name home.freemanke.com;
ssl on;
ssl_certificate /home/freeman/home.freemanke.com/ssl/home.freemanke.com.crt;
ssl_certificate_key /home/freeman/home.freemanke.com/ssl/home.freemanke.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers "HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES";
ssl_prefer_server_ciphers on;
client_max_body_size 1000M;
location / {
proxy_pass http://127.0.0.1:8000/;
proxy_redirect default;
}
location /seafhttp {
rewrite ^/seafhttp(.*)$ $1 break;
proxy_pass http://127.0.0.1:8082;
client_max_body_size 0;
proxy_connect_timeout 36000s;
proxy_read_timeout 36000s;
proxy_send_timeout 36000s;
send_timeout 36000s;
}
location /media {
root /home/freeman/haiwen/seafile-server-latest/seahub;
}
}