因某些不可描述的原因,老师要求把实验室电脑的东西全部清理掉。看了看自己的计算数据,实在是装不下了。决定买一个移动硬盘来装以前的照片和资料。据说,师兄的某个计算数据有 1.5T :surprised: 。在网上看移动硬盘的价格,然后发现若是买一个 1T 的移动硬盘,感觉放照片有点大材小用啊,想着要不把全家的照片都放进去吧,最好是能随时访问的。
掉进了 NAS 的坑。
当然是不可能买群辉的,这辈子都不可能买群辉。
这边给出的解决方案是斐讯 K3 + 移动硬盘。
让我们开始吧。

1. onmp环境配置

1.1 硬盘准备

准备一个移动硬盘,用 diskgenius 格式化成 ext4 格式(不是说 NTSF 不能用,而是其在 linux 系统下读写速度很难看)。

1.2 K3设置

准备一个斐讯K3路由器(官改 V2.1D),在高级设置开启ssh,并且在启动任务写入以下代码:

sleep 30
mount -t ext4 /dev/sda1 /opt/
exit 0

这么做是因为 linux 需要把空间挂载到系统目录下才能使用,而且 mount 命令只能临时挂载,因此每次路由器启动需要重新挂载。(主要是我不会在 K3 里用永久挂载的命令)

1.3 安装软件中心

插上移动硬盘,在功能设置里安装软件中心。(这是为了装 Entware, 之后能用 opkg 命令)

1.4 配置onmp环境

ssh 进路由器,输入以下代码:

opkg update
cd /opt
opkg install wget unzip
wget --no-check-certificate -O /opt/onmp.zip https://github.com/xzhih/ONMP/archive/master.zip
unzip /opt/onmp.zip
cd /opt/ONMP-master
chmod +x ./onmp.sh
./onmp.sh

然后就会出现 onmp 配置的选项,选 1 安装,等待。
你可以出去喝杯咖啡,听一会儿 hanser 的歌,望一望远处的风景。或者,你可以什么都不做。
然后会跳出来问你是否安装扩展库,选 y 安装,等待。
你又可以出去喝杯咖啡,听一会儿 hanser 的歌,望一望远处的风景。或者,你可以什么都不做。
(PS:等待的时间取决于你是否会低调上网)
然后它会显示:

onmp 正在启动
nginx 启动成功
php-fpm 启动失败
mysqld 启动成功
onmp启动失败

不要慌。继续输入命令:

./onmp.sh

选 9,开启 swap。
选 1,开启 swap。

1.5 新建Nginx用户

继续输入:

adduser www

自己设置个密码,虽然目前为止这个密码我没用到过。

1.6 安装vim

安装 vim,这是为了后续可以修改文件:

opkg install vim
vim /opt/etc/php7-fpm.d/www.conf

按 i 进入修改模式,将 user = nobody 改成 user = www 。
按 esc,输入 :wq,回车。

1.7 雅黑探针测试

将 wwwroot 的文件夹的权限提升到 777。

chmod -R 777 /opt/wwwroot 

用 ftp 把微软雅黑探针(tz.php)放进移动硬盘的/sda1/wwwroot/default 路径。
继续 ssh,

cd /opt/ONMP-master
./onmp.sh

这个时候应该就会显示全部成功了。
然后打开浏览器,输入 http://192.168.2.1:81,出现这个就算成功了。

1.8 启动任务设置

记得把 onmp 启动添加到启动任务中!

sleep 30
mount -t ext4 /dev/sda1 /opt/
onmp start
exit 0

2. 安装PHP-gd 扩展模块

不知道为什么,在以上安装过程中并没有安装 php-gd 扩展模块,提示是 libgd.so, libgd.so.3, libgd.so.3.0.5 已存在。所以我们要去 /opt/lib 下把以上的三个文件删除,然后重新安装 gd 扩展。

cd /opt/lib
rm libgd.so
rm libgd.so.3
rm libgd.so.3.0.5
opkg install php7-mod-gd

OK,这是最大的坑,我踩完了。 :spray:
如果不放心的话,你可以再去微软雅黑探针那里看看,最下面的php已编译模块里面有没有 gd 扩展。

3. 建站

ssh进路由器,输入:

cd /opt/ONMP-master
./onmp.sh

选建站,然后因为我这边主要是想分享照片,所以用的是 Lychee 相册。全部默认即可。
完成后在浏览器输入 http://192.168.2.1:86,让你填写数据库管理用户和密码。默认的为 root/123456。
其他的建站类似,放飞自我吧。

4. frp内网穿透

外网访问内网有很多种方法,使用比较多的是 动态域名解析(ddns)和 快速反向代理(frp)。但是由于国内运营商 IP 资源稀缺,大部分家庭和企业的带宽都是运营商的虚拟局域网(此处点名批评一下移动网),我们用的 IP 都是内网的,这时 ddns 就没有用了。而且即使像电信网络可以申请公网 IP,也会限制 80 和 443 端口的使用,外网访问十分麻烦。所以一般都推荐使用 frp 内网穿透技术。frp 需要一台云服务器,如果没有,也可以去网上找找提供 frp 服务的平台,比如 Sakura Frp
这边使用的是自己的云服务器,步骤如下。

4.1 服务器端设置

在GitHub的 frp 项目上下载适合自己服务器的压缩包,比如我用的是 Linux amd64 版本的。还需注意的是要下载和 K3 的 frp 服务相同的版本,比如官改 V2.1D 的是 0.22.0 版本的,这个可以去自己路由器的 frp 服务中看。将下载的文件上传到服务器的根目录并解压缩(小白建议使用宝塔面板操作),打开 frps.ini 文件,将原代码覆盖并保存:

[common]
bind_port = 14295 #监听端口,1~65535都可,建议10000以上,否则阿里云服务器好像不太行
vhost_http_port = 11223 #web网站端口,建议同上,但不能相同
token = frptest #服务器端与路由器端的密钥需设置相同

再去自己的云服务器商那里把自己的实例安全组规则中添加上面用到的两个端口。
然后打开云服务器 ssh,输入

cd /frp #这边需改成你解压出来的frp文件夹名
nohup ./frps -c frps.ini

显示成功即可。

4.2 路由器端设置

打开路由器功能设置-Frp内网穿透,在 frp 配置文件中覆盖写入以下并保存:

[common]
server_addr = x.x.x.x #云服务器的外网 ip 地址
server_port = 14295 #与服务器端的监听端口一致
token = frptest

[web]
type = http
local_port = 86 #本地网站的端口号,Lychee网站默认为86
local_ip = 192.168.2.1 #K3 的本地 ip,默认为此
custom_domains = xxx.lanceir.com #二级域名,用来外网访问的,也可以使用云服务器 IP 地址

到自己的域名商处把 xxx.lanceir.com解析到自己的云服务器( A 解析)。
下面的运行日志显示 web proxy success,则成功。
至此,你可以用上面设置的二级域名加 web 网站端口(e.g. xxx.lanceir.com:11223)来访问在路由器上布置的 web 应用了。
如果没有什么特殊要求,到这步就可以结束了。

5.Nginx反向代理

每次在访问内网时都需要在网址后加上端口号,很是麻烦。于是这边利用 Nginx 反向代理,使得我们可以用 80 端口访问。如下。
在宝塔面板中新建一个网站,举例为 test1.lanceir.com。然后打开网站设置,找到反向代理。添加反向代理,随便取一个代理名称,目标 URL 设置为 http://xxx.lanceir.com:11223,发送域名设置为 xxx.lanceir.com,保存。到自己的域名商处把 test1.lanceir.com 解析到自己的云服务器( A 解析)。
然后可以尝试一下用 test1.lanceir.com 来访问你的路由器资源啦。

6.CDN加速

由于这边用的是阿里云 1M 小水管,frp 内网穿透访问速度挺慢的,仿佛又回到了 2G 时代。因此决定用腾讯云免费赠送的 CDN 流量来做全站加速。
打开腾讯云内容分发网络管理界面,域名管理-添加域名,域名设置为 test1.lanceir.com,源站地址为云服务器 IP 地址。缓存配置-添加规则,我这边主要是图片,所以添加 .jpg;.jpeg,刷新时间为 30 天,其余都改成 0 天,确认提交。然后它会提示你需要将它给的加速域名 CNAME 解析到你的域名。那就去你的域名商 CNAME解析一下即可。
为了防止家人访问下载过度,CDN 费用蹭蹭的加。可以在高级设置中设置带宽封顶。
至此,万事 OK!
Congratulations!

7. 参考文献

(1)斐讯K3官改,安装onmp教程,回馈社区
(2)UP主自建公益FRP内网穿透服务器……
(3)ONMP安装教程
(4)A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet.
(5)简单搭建FRP内网穿透利用反代frp和Nginx共用80端口实现外网访问内网