背景

又是突发奇想…

前几天想起家里还有个闲置的树莓派 (Raspberry Pi) 3B ,应该是之前想拿来学 Python 还有物联网啥的而购入的,之后因为时间问题、学习考试之类的一直闲置。中途好像是有尝试过安装 LNMP 搭建网站服务器来着,但貌似是因为嫌折腾内网穿透麻烦(主要是家里宽带管理员密码遗失了,加之家里人使用网络过于频繁导致没有时间重置(并且怕重置后无法恢复))又再次闲置了…

这次是因为看到了 B 站 UP 主 翼王 搭建公司 NAS 的视频,又想折腾折腾自己的家庭 NAS 来玩了…

过程

我闲置的这块树莓派型号是 3B。虽然不是古董但硬件配置与目前最新的树莓派 4 差距还是很明显的。特别其在对于 NAS 系统 的使用来说比较重要的硬件基础 —— 网络连接方面,3B 板载的是最高传输速度 100 Mbps 的网卡… 而 3B+ 代是 300 Mbps,4 代是 1000 Mbps… 同时,3B 代仅提供 4 个 USB 2.0 接口,加之树莓派没有提供 SATA 或 m.2 硬盘接口,外接硬盘数据传输速度将受到巨大的限制…

Raspberry Pi 3B 配置

但这并不可以阻止我搭建牛逼闪闪的家庭 NAS 的决心… 因为需求这东西是异常随机的,很多时候一个小小的文件转移发送操作也能变得十分困扰。想像你有只有一台 MacBook,没有聊天工具、没有数据线和存储工具,你该怎么传输一个大文件到另一台 Windows 电脑上呢?远在天边近在咫尺?!!

蓝牙太慢、AirDrop 不能用… 只能在线上传、下载了,用 Firefox Send 网络连接太慢,用其他平台上传文件大小有限制…

咋办,NAS 来凑(前提是折腾好了内网穿透)… (硬编出个需求)

系统安装

首先是操作系统,本来准备使用 Raspbian 系统然后搭建 LNMP 安装 NextCloud 的,但是看到官方专门为树莓派开发了 NextCloudPi 系统,简洁高效,整上吧。下载时使用迅雷能得到加成,有许多人贡献了速度。

BalenaEtcher

使用 Etcher 将系统刷入 TF 卡,操作简单,完成后将 TF 卡插入树莓派、连接 HDMI 到显示器、插入网线后插入电源开机。

开机后开始滚动代码,一段时间后会有树莓派被分配到的局域网 IP 地址显示,形如:192.168.1.10x,之后的控制面板与网盘地址也就是它了

最后会显示输入账户与密码 login / password,初始账户密码是:

  • login : pi
  • password : raspberry

之后会显示出一个蓝色的 NextCloudPi Logo,安装完成。

NextCloudPi 安装完成

输入 sudo raspi-config => Interface Configuration 开启 ssh 服务,就可以「远程」操作树莓派了。至此,可以断开 HDMI 回到电脑上 SSH 连接树莓派进行接下来的操作了,登录用户同上,但 pi 用户没有管理员权限,为了方便可以先获取 root 权限:

sudo su

初始化控制台

连接上树莓派后输入 sudo ncp-config => config => nc-webui 开启在线控制面板,即可进入 192.168.1.10x:4443 进行初始化,端口注意是 4443。

初始密码与用户名

正常的过程会展示 Control Panel 与 网盘 Panel 的密码与用户名,如果没有出现即使用默认账户密码:

  • login : ncp
  • password : ownyourbits

NextCloudPi 默认使用的是 HTTPS,证书是自签发的所以在访问时需要选择 继续前往不安全的网站,但 macOS 最新版 Chrome 仍是无法访问的,需要使用 Safari 浏览器访问并信任证书。

https://192.168.1.10x 就是网盘中心地址了,其管理员的登录信息展示在了初始化界面中。

首次访问挂载

NextCloudPi 提供一个快捷配置的程序,帮助你挂载外接储存设备:硬盘、U 盘等,之后如果你在路由器上配置好了 DDNS,做好了内网穿透的准备,也可以再次运行该程序引导完成配置。挂载的储存设备会被清除数据并格式化为 BTRFS 格式,此处需要被格式化磁盘最大可为 2TB 并且只能有一个… (也许可以多个,我没有折腾出来)。

NextCloud First Run

硬盘选配方面可以选择适用于 NAS 的机械硬盘,如西部数码红盘(NAS 专用),黑盘(企业盘、监控盘)、希捷等,也可以按照需求和个人条件使用固态硬盘、移动硬盘。我选择的是淘宝上便宜的 2TB 西部数码黑盘 64MB 缓存,需要注意的是谨慎购买 SMR 硬盘,通常这种硬盘缓存都比较瞩目。这里有一个 B 站指南: https://www.bilibili.com/video/av74863123。当然,就算是机械硬盘在 USB 2.0 下也无法发挥它的全部实力。我使用的是绿联的 USB 转 SATA 的转接线来实现硬盘挂载。

配置与更新

在控制面板你可以看到许多选项,和内网穿透有关的按照需求去折腾吧,我暂时还没做…(我高三诶!!呸…)

NextCloud 控制面板

然后你可以看到有 NextCloud 自动更新、NextCloud Panel 自动更新的选项,并且控制面板上方你也可能可以看到醒目的更新提示。鉴于国内环境问题,不论你是登录到网盘中心去更新 NextCloud Panel 还是在控制中心去更新 NextCloud,都会下载失败。但只要将这里的自动更新打开,第二天系统在后台就能帮你自动更新了… 

体验优化

使用管理员账户登录网盘中心,在头像下拉栏中可以管理应用、用户等。鉴于我使用的是性能掉渣的树莓派 3B,为了在网盘基础的访问、上传/下载、同步中得到必须的服务保障,我选择关闭自带的许多应用:如 Notes、Activity 等。并且不使用任何加密措施,保证性能。

NextCloud 应用

直接在网盘中心上传文件时默认无法展示上传文件进度(已上传/总大小等),需要修改 JavaScript 文件来实现。如果你像我一样,不知道如何以 root 用户登录树莓派 SFTP 的话,你可能需要面临使用 Linux 操作系统命令行进行文件操作了。

ssh 登录树莓派,进入 /var/www/nextcloud/apps/files/js 目录,也就是:

cd /var/www/nextcloud/apps/files/js

然后先重命名 file-upload.js 文件:

mv file-upload.js file-upload.js.bk

然后从我的博客服务器上下载修改好的 js 文件到当前目录:

wget https://www.ouorz.com/1file-upload.js

重命名该文件为 file-upload.js:

mv 1file-upload.js file-upload.js

完成操作。

客户端选择

你可以使用 NextCloud 官方客户端。在安卓系统上使用是正常的,但是在 macOS 与 Windows 上,其客户端的运行策略是「同步」,也就是本地和云端同步的逻辑。这…网盘不就失去了网盘的意义了吗,你不可以借助网盘腾出本地储存空间了…

我搜索了一下 NextCloud 的 Github,发现他们确实有考虑到这个问题,但目前他们只做出了 Windows 版「挂载」客户端(而且还是预览版),但是由于本地使用了不可信的证书,登录授权方面仍然存在问题所以也基本属于不可用状态…

好在 NextCloud 支持通过 WebDav 协议访问和读写文件,目前我搜集到的比较好用且免费(当然我是鼓励支持正版)的 WebDav 客户端:

CloudMounter 可以在这里下载:https://www.lanzous.com/i7h03if ,在 macOS Catalina 运行正常。



结束

我还在某宝上购置了树莓派微型 UPS, 一块 4000 mAh 的电池,能在意外停电时支撑着我手动备份数据,可能之后会写个脚本自动备份到云端之类的吧。

对了,我外接的是一块 3.5 英寸的机械硬盘,使用 USB 转 SATA 线的时候需要外接 12V2A 供电,而且一定要使用绿联官方电源适配器才行… 上面提到的 UPS 只支持 5V1A 的输出自然是不可以了,但是只要确保不在读取写入过程中断电就不会损坏硬盘。