0x00 写在前面
0.1 云储存
0.1.1 为什么要使用云储存?当一个人对数据安全重视程度达到一定层次的时候,就会产生担心数据丢失的心理。例如,在2003年用数码相机拍的照片对我来说是弥足珍贵的,万一丢失就永远找不回来的。这些照片如果储存在电脑本地硬盘,会有硬盘损坏导致数据丢失的风险;如果储存在手机闪存,会有手机被盗或手机损坏而导致数据无法取回的风险,等等。因此,重要数据必须要储存在有冗余备份的设备中,例如云储存、本地硬盘Raid 1/5/6、多个移动硬盘存储同样的数据(囧rz)等等。
0.1.2 我最早在百度网盘上面认识到云储存这种技术,不过当时它是在我的电脑界面放置了一个类似盘符的图标,像进入本地磁盘那样登录网盘。那么问题来了,界面是百度网盘的界面,与操作系统的体验不同,所以就弃坑了。
0.1.3 在Windows10上线之际,我体验了一把OneDrive,和操作系统界面高度融合,只需往指定的共享文件夹放入文件,OneDrive就会把这个文件自动上传至云端,并保持多端同步。不过OneDrive服务器在国外,传输大文件耗时较长,而且自己也不太放心把数据交给外国人管理,于是开始寻找替代品。
0.1.4 通过查阅资料,得知国内的坚果云与OneDrive的操作体验相差无几,下载安装来体验一把当然是必不可少。其实,坚果云也是我白嫖时间最长的一款云储存产品,具有国内服务器、传输速率快、界面兼容好、支持多平台、个人免费版不限容量等优点。不过免费版限制流量(上传1G/月,下载3G/月),存点文本文档还行,但是想同步照片、音频、视频就歇菜了。因此,我在闲鱼买了台二手的群晖DS-916+,打算使用它提供的Synology Drive来替代坚果云。
0.1.5 虽然群晖被“誉为”买软件送硬件的品牌,但我真心觉得它的客户端软件做得不咋地。往Synology Drive Client指定的共享文件夹中放入文件,它居然不主动上传到群晖服务器,它居然要我重启软件才肯上传到群晖服务器,运行在iOS13的Moment、DS File等APP备份照片时居然会闪退……今时今日这种服务质量,怎么顺应时代发展潮流?既然群晖有套件中心,可以安装Web Station,也可以安装Docker,组建开源云储存应该就不是难事。
0.1.6 在着手之前,得明确自身需求,使得选择云储存产品时更具有针对性。需求如下:
① 可供3~5人分时非并发使用;
② 能够备份手机照片、视频,要求在外网能查看;
③ 兼容多平台,并稳定运行;
④ 有回收站功能,可恢复误删文件;
⑤ 安全、可靠、便宜、人性化(想想就好)。
0.2 云储存横向对比
0.2.1 图0.2.1为四款基于WebDAV云储存产品关键参数的横向对比,这四款产品近几年来发展得比较生猛、成熟。

图0.2.1 云储存产品横向对比
0.2.2 对照自身的需求,服务器在家里、非Docker安装、支持多平台等,最重要一点是家人要求备份手机的照片和视频,让我选择了Nextcloud。虽然搭建Nextcloud的成本并不低,但只要硬盘能撑6年以上,综合性价比是最高的,所以建议购买企业级NAS硬盘。其实,我更想说的是——买硬盘全看脸(╮( ̄▽ ̄")╭)。
0x01 设备条件
1.1 硬件设备
1.1.1 华硕路由器(RT-AC68U)一台,并安装正版固件,主要是为了SSL证书申请和自动更新,实现内网穿透。
1.1.2 群晖服务器(DS-916+)一台,使用品牌NAS提供的套件可以省去配置服务器的繁琐步骤,以后是否会写Ubuntu搭建NAS的技术帖就要看我有没有资金购买硬件了。
1.1.3 个人计算机一台,推荐安装Chrome内核网页浏览器,本人选了“让您完全掌控的浏览器 | Vivaldi”。
1.1.4 移动端设备若干,支持iOS、Android、Windows、macOS、Linux五大操作系统。
1.2 宽带网络
拥有公网IP并且上行带宽≥4Mbps的光纤宽带,其中拥有公网IP是硬性要求,而上行带宽虽然不影响私有云的搭建,但是如果上行带宽太小,外网访问内网的速度会让人抓狂的。本人使用中国电信家庭版光纤宽带,下行200Mbps,上行30Mbps,拥有动态公网IP。
0x02 搭建环境
本节重点讲述群晖服务器和华硕路由器的设置,主要是为了能在群晖服务器上运行基于PHP的Nextcloud,以及在外网使用HTTPS连接访问内网的网页服务器(内网穿透),确保数据安全。
2.1 登录群晖服务器后台管理页面,安装Web Station。
2.1.1 进入套件中心并安装以下三个套件。

图2.1.1 群晖-套件中心
2.1.2 点击Web Station进入网站服务器设置页面,常规设置的选项如图2.1.2所示,下拉选择HTTP后端服务器和PHP版本。

图2.1.2 群晖-Web Station-常规设置
2.1.3 PHP设置的选项如图2.1.3所示,“扩展名”建议全选,免得在运行时出现莫名其妙的错误。

图2.1.3 群晖-Web Station-PHP设置
2.1.4 虚拟主机的选项如图2.1.4所示,注意“文档根目录”必须是存放nextcloud文件夹的路径。

图2.1.4 群晖-Web Station-虚拟主机
2.1.5 查看Web Station的状态,确保参数配置正确。

图2.1.5 群晖-Web Station-状态
2.2 登录华硕路由器管理页面。
2.2.1 端口转发的选项如图2.2.1所示,开启路由器端口转发功能,填入Web Station的HTTP/HTTPS端口号(使用逗号分隔)以及群晖服务器的IP地址。

图2.2.1 华硕-WAN-端口转发
2.2.2 DDNS的选项如图2.2.2所示,启动DDNS客户端,填入域名并应用本页面设置,等待服务器验证并颁发SSL证书。当状态显示为“启用”时,点击【导出】,得到一个名为cert_key.tar的压缩包,内含key.pem和cert.pem两个文件。

图2.2.2 华硕-WAN-DDNS
2.3 登录群晖服务器后台管理页面,在控制面板添加SSL安全证书。
2.3.1 进入控制面板-安全性-证书-新增-添加新证书。

图2.3.1 群晖-安全性-证书-创建证书(1)
2.3.2 选择导入证书。

图2.3.2 群晖-安全性-证书-创建证书(2)
2.3.3 加载在华硕路由器中DDNS页面导出的SSL证书和私钥,证书对应cert.pem文件,私钥对应key.pem文件。

图2.3.3 群晖-安全性-证书-创建证书(3)
2.3.4 选中创建的证书,点击【配置】,为HTTPS端口号服务选择DDNS域名对应的证书。

图2.3.4 群晖-安全性-证书-配置
至此,从外网使用浏览器访问[https://DDNS域名:端口号]时就不会显示网络连接不安全了。
0x03 安装流程
激动人心的时刻即将来临,本节重点讲述Nextcloud下载、安装、配置和运行的全过程,实际操作会比0x02节简单很多。
3.1 下载
3.1.1 官网服务器端下载页面链接:https://nextcloud.com/install/,选择Server版本进行下载,如图3.1.1所示。

图3.1.1 官网-服务器端
3.1.2 下载最新稳定版。截至2020年2月16日,最新稳定版为18.0.1,果断下载即可。

图3.1.2 官网-服务器端-下载
3.1.3 下载后得到一个.zip压缩文件,解压缩后将文件夹重命名为【nextcloud】,文件夹下一级目录包含Nextcloud的源文件,如图3.1.3所示。

图3.1.3 电脑-解压nextcloud
3.2 安装
3.2.1 登录群晖服务器后台设置页面,打开控制面板-共享文件夹,在根目录下新建共享文件夹Web和Cloud,分别用于存放Nextcloud运行文件和用户个人数据。按照图3.2.1填写参数后,一直点击【下一步】,到最后一页点击【应用】即可。

图3.2.1 群晖-共享文件夹-新增
3.2.2 走完两次新建共享文件夹流程,可以看到这两个文件夹显示在共享文件夹列表中,如图3.2.2所示。

图3.2.2 群晖-共享文件夹
3.2.3 进入群晖的File Station,把步骤3.1.3解压的nextcloud文件夹复制/剪切到群晖的Web文件夹下,如图3.2.3所示。

图3.2.3 群晖-File Station
3.2.4 此时需要设置nextcloud文件夹的访问权限,http组的权限设为“读取 & 写入”,如图3.2.4所示,否则在浏览器输入地址会弹出“内部服务器错误”的提示。

图3.2.4 群晖-File Station-文件夹访问权限
3.2.5 在浏览器地址栏输入[http://IP地址:端口号]登录Nextcloud的初始化页面,输入管理员帐号和密码,数据目录填入“/volume1/Cloud”,考虑到家庭使用率不高,加之自己是个极简主义者,使用SQLite数据库刚好能满足所有要求。

图3.2.5 Nextcloud初始化
3.3 配置
3.3.1 等待安装完成后,浏览器会自动刷新,提示错误信息:您的数据目录可被其他用户读取,请更改权限为 0770 以避免其他用户查看目录。原因是管理员能够通过群晖File Station访问到Nextcloud用户数据目录,考虑到自己既是群晖管理员,也是Nextcloud的管理员,通过群晖管理Nextcloud数据又何尝不可。于是,需要在Nextcloud的配置文件中加入一条代码来关闭数据目录权限检查,配置文件存放路径:/volume1/Web/nextcloud/config/config.php,使用文档编辑器打开后,在最后一行加入以下代码:
'check_data_directory_permissions' => false,
如图3.3.1所示。

图3.3.1 Nextcloud-config.php-关闭权限检查
3.3.2 为了能够在外网连接云盘,需要在配置文件中添加信任域名。使用文档编辑器打开配置文件(路径:/volume1/Web/nextcloud/config/config.php),在如图3.3.2所示红框位置添加信任域名。其中,第一行为内网的[IP地址:HTTP端口号],不要改动;要做的就是按照第一行的语法新增一行,输入[DDNS域名:HTTPS端口号],保存文件即可。

图3.3.2 Nextcloud-config.php-添加信任域名
3.4 运行
3.4.1 使用管理员账户登录
在浏览器输入[IP地址:HTTP端口号],输入管理员帐号密码登录,如果看到图3.4.1的界面,说明Nextcloud服务器端已经成功安装并正常运行了。

图3.4.1 Nextcloud-管理页面
3.4.2 为家人新建账户
点击右上角的头像图标,选择用户,再到左上角点击【新建用户】,为新用户设置用户名和密码,最后确认即可,流程如图3.4.2所示。

图3.4.2 Nextcloud-新建用户
管理员可以修改用户的密码、配额、分组等操作,点击左下角的设置可以自定义所需显示的语言、最后登录、用户来源、存储路径等信息。用户的数据目录和管理员的数据目录在同一路径下,注意不要误删数据。
0x04 多端同步
4.1 客户端下载
Nextcloud的魅力在于能够多端同步,打个比方:用户在电脑A上对存放于Nextcloud共享文件夹中的文件进行修改,Nextcloud就会把该文件的最新版本上传至服务器,Nextcloud检测到这位用户的电脑B有连接到服务器,就会把这个文件的最新版推送到电脑B的Nextcloud共享文件夹中,多端数据保持版本最新。Nextcloud提供了Windows、macOS、Linux、Android、iOS五种操作系统平台的客户端,可谓是诚意满满,十分良心。浏览器打开官网客户端下载页面链接:https://nextcloud.com/install/,根据自己终端的操作系统下载对应的客户端,如图4.1所示。手机终端的官网页面只提供了下载安装方法,并没有提供安装文件下载链接,因此建议iOS用户在App Store安装,Android用户在各自品牌提供的应用商店安装。

图4.1 官网-客户端下载
4.2 Windows客户端
4.2.1 下载Windows客户端并安装到本地磁盘中,安装过程很简单,一直点击下一步直至安装完成即可。安装完成后直接运行,在Nextcloud链接向导点击【登录】,如图4.2.1所示。

4.2.1 Windows-链接向导-登录
4.2.2 经测试,RT-AC68U内置端口回流,在内网访问DDNS域名也可达到局域网传输速率,因此服务器地址填入[https://DDNS域名:HTTPS端口号]即可,如图4.2.2所示。

图4.2.2 Windows-链接向导-填写服务器地址
4.2.3 此时会在默认的网页浏览器弹出一个连接到帐号的页面,点击【登录】,紧接着填入管理员的登录帐号和密码,最后点击【授权访问】即可。

4.2.3 Windows-链接向导-在网页端授权访问
4.2.4 回到Nextcloud客户端界面,选择需要同步的内容以及设置本地文件夹路径,此处建议设置本地文件夹路径为本地磁盘的根目录,避免将来路径过长导致同步失败,设置如图4.2.4所示。

4.2.4 Windows-链接向导-设置本地文件夹
4.2.5 点击【连接】后,客户端就会自动与服务器同步所选的内容,如果显示图4.2.5的界面说明已经成功与服务器连接,并保持文件同步了。如果前往本地文件夹删除一个文件,服务器端也会同步删除这个文件;如果不小心误删文件,可登录Nextcloud服务器进行恢复。

图4.2.5 Windows-同步成功
4.3 macOS客户端
4.3.1 下载macOS客户端并安装到本地磁盘中,安装过程与Windows类似,点击下一步直至安装完成即可。安装完成后直接运行,在Nextcloud链接向导点击【登录】,如图4.3.1所示。

图4.3.1 macOS-链接向导-登录
4.3.2 服务器地址填入[https://DDNS域名:HTTPS端口号],如图4.3.2所示。

图4.3.2 macOS-链接向导-填写服务器地址
4.3.3 此时会在默认的网页浏览器弹出一个连接到帐号的页面,点击【登录】,紧接着填入管理员的登录帐号和密码,最后点击【授权访问】即可。

图4.3.3 macOS-链接向导-在网页端授权访问
4.3.4 返回Nextcloud客户端界面,选择需要同步的内容以及设置本地文件夹路径,如果本地文件夹有数据,请务必选择“保留本地数据”,否则Nextcloud会清空这个文件夹导致数据丢失,如图4.3.4所示。

图4.3.4 macOS-链接向导-设置本地文件夹
4.3.5 点击【连接】后,客户端就会自动与服务器同步所选的内容,如果显示图4.3.5的界面说明已经成功与服务器连接,并保持文件同步了。

图4.3.5 macOS-同步成功
4.4 Linux客户端
4.4.1 下载Linux客户端并安装到本地磁盘中,安装过程与Windows类似,点击下一步直至安装完成即可。安装完成后直接运行,在Nextcloud链接向导点击【登录】,如图4.4.1所示。

图4.4.1 Linux-链接向导-登录
4.4.2 服务器地址填入[https://DDNS域名:HTTPS端口号],如图4.4.2所示。

图4.4.2 Linux-链接向导-填入服务器地址
4.4.3 此时会在默认的网页浏览器弹出一个连接到帐号的页面,点击【登录】,紧接着填入管理员的登录帐号和密码,最后点击【授权访问】即可。

图4.4.3 Linux-链接向导-在网页端授权访问
4.4.4 返回Nextcloud客户端界面,选择需要同步的内容以及设置本地文件夹路径,如图4.4.4所示。

图4.4.4 Linux-链接向导-设置本地文件夹
4.4.5 点击【连接】后,客户端就会自动与服务器同步所选的内容,如果显示图4.2.5的界面说明已经成功与服务器连接,并保持文件同步了。

图4.4.5 Linux-同步成功
4.5 iOS客户端
4.5.1 iOS客户端在App Store搜索Nextcloud下载安装即可,设置流程也很简单,如图4.5.1所示。

图4.5.1 iOS客户端-设置流程
4.5.2 本人是苹果的钉子户,购于2015年10月的iPhone6SP,在iOS12.4.1的系统上能够稳定运行最新版本的Nextcloud;母亲用的iPhone6S已经升级到iOS13.3.1系统,使用Nextcloud备份3GB手机相册全程未报错。
4.6 Android客户端
4.6.1 由于国内无法访问GooglePlay,Android客户端建议在手机厂商提供的应用商店下载,或者前往https://download.nextcloud.com/android/nightly/下载。安装完成后运行,设置流程与iOS客户端类似,如图4.6.1所示。

图4.6.1 Android客户端-设置流程
4.6.2 本人测试用的手机是购于2014年的努比亚Z7Max,运行最新版的Nextcloud依然如如丝般顺滑,优化得十分到位。至此,五大平台的设置流程已经不厌其烦地赘述完了。问我为什么这么执着?因为我是处女座[机智]。
0x05 写在最后
总算完完整整地写完一篇技术文档,主要是为了记录新年期间宅在家里研究的成果,同时也想借“小破站”这个大平台,分享给有需要的基友们。文中所有图片都是在自己的电脑截取的,希望转载时能够说明出处,心疼本厮的劳动成果,万分感谢!