内容简介:这次机器升级带来的服务大迁移过程中,我发现之前设定给 Npm 仓库、Docker 仓库专用的代理服务失效了。之前这台专供仓库使用的代理服务,是跑在一台古老的群晖设备(DS115j)上的,当我探寻问题登录设备之后,发现了一件事:不光是代理程序进程消失了、守护进程管理软件也消失了,这大概率是群晖系统自动升级造成的。考虑服务稳定性和维护成本,我决定把代理服务从群晖中剥离,正巧前一阵收拾屋子,发现还有一台“MTK7621”的迅雷下载宝,决定废物利用一下,做一台稳定性更高的代理服务设备。
这次机器升级带来的服务大迁移过程中,我发现之前设定给 Npm 仓库、 Docker 仓库专用的代理服务失效了。
之前这台专供仓库使用的代理服务,是跑在一台古老的群晖设备(DS115j)上的,当我探寻问题登录设备之后,发现了一件事:不光是代理程序进程消失了、守护进程管理软件也消失了,这大概率是群晖系统自动升级造成的。
考虑服务稳定性和维护成本,我决定把代理服务从群晖中剥离,正巧前一阵收拾屋子,发现还有一台“MTK7621”的迅雷下载宝,决定废物利用一下,做一台稳定性更高的代理服务设备。
如果你有闲置路由器或者下载宝,也有类似需求,那么下面的内容,应该可以帮到你。
更换服务载体的考虑
为什么选择类路由设备的下载宝作为服务载体呢,主要是考虑以下几个角度:
-
稳定的白盒环境:
- 相比较在低端群晖中使用(非 Docker 容器运行),会受到不确定的系统环境变化影响,开源的 OpenWRT 更值得信赖,从配置到应用软件,全部都敞开在你的面前。
- 路由器文件系统多数只读,保障了环境的稳定。
-
相对够用的资源:
- 性能足够,发热量低。
- 下载宝支持通过 USB 进行储存扩展,当然,使用机身自带的 SD / MMC 卡槽扩展的容量也足够我们使用了。
-
安静却不失小巧:
- 如果说 DS115j 几乎静音,下载宝、多数路由无风扇设计的设备则是绝对静音。
- 相比较一本大部头书厚的 DS115j 来说,下载宝和小米充电宝差不多的体积,极大的节省空间。
初始化设备
编译固件,网上讲的太多了,这里就不赘述了,教程在 GitHub 和一些个人博主的日志上都有,如果实在懒得编译可以使用网上的固件,寻找你信任的作者的三方固件也不是不可以。
我这里会着重写一些和常规路由器不同的地方。
由于下载宝只有一个 RJ45 接口,所以他只能作为单臂路由或者普通的网络客户端使用,这里我们为了更少的性能损耗和维护成本,会将设备作为网络客户端使用。
选择 BootLoader
在进行固件刷新之前,考虑到有可能出现固件刷新失败造成无法启动、无法再次刷入,建议先了解并刷入一个稳定可靠的 BootLoader ,普遍的选择是:
- breed
- uboot
我这里推荐使用 Breed
,如果你使用的设备也是下载宝,那么可以使用下面的地址:
html
当你将 Bootloader 刷入设备之后,下载宝启动进入 Breed
和其他的设备不同,需要长按的不是 Reset
按键,而是位于 Reset
按键小孔上方的硬盘弹出按钮。
断开设备电源,长按硬盘弹出按钮,给设备供电,等待设备启动完毕,访问 http://192.168.1.1/
即可打开 Breed
的管理界面。
在进行刷机过程中,除了选择你的固件文件之外,其他一切保持默认值即可。
默认鉴权
如果你使用的官方配置编译出的固件,默认账号一般是 root
, 密码为 admin
。
在登录管理界面之后,需要对 Dropbear
提供的 SSH
访问功能中添加你的 SSH
密钥, 以方便后面的操作。
时间相关设置
有的代理软件考虑重放攻击,所以会涉及到“当前执行环境时间”这个因素。
为了保障这类软件的正常使用,我们需要先设置靠谱的 NTP 服务器,从网上可以找到大量资源,比如:
1.cn.pool.ntp.org ntp1.aliyun.com
选择你觉得靠谱的,进行设置就好了。
清理无用软件
考虑到我们只是要一个稳定可靠的代理服务,所以官方固件、三方固件中包含的许多内容是可以直接清理掉的,比如我们不需要文件共享服务等。
bash
可以看到,如果你想连锅端一些软件,可以使用 --force-removal-of-dependent-packages
这个参数,但是这个参数不是万能的,对于 CLI 软件和管理面板脱离的安装包,还需要额外进行卸载操作。
另外,如果你对 luci-*
软件包进行了卸载,必须进行重启,才能够将管理后台上的菜单完全干掉。
准备软件存储空间
前面提过,路由类设备的文件系统多数被设定为了只读类型,一旦重启将会把所有修改打回原形,除非执行了一些特殊的命令,将改动同步到设备中。
并且多数设备可用闪存的空间都非常有限,这里要外储存器进行一些操作,来扩展可用空间。
在进行空间扩展之前,需要先了解哪个设备该被“安排”,使用 fdisk
命令:
bash
这里名为 /dev/mmcblk0
的设备就是外置储存卡了,使用 mkfs.ext4
命令可以对其进行格式化。
bash
当设备格式化完成之后,我们并不能够真正的开始使用。
如果你熟悉操作 fstab
的话,直接编辑 fstab
文件可以把刚刚格式化好的分区进行挂载点分配,如果不熟悉,OpenWRT 管理界面有专门针对挂载点进行设置的页面。
我这里将刚刚的储存卡使用 ext4
文件系统挂载到了 /data
目录。
将设备设置为网络客户端
将电脑和下载宝使用网线连接,因为我们不需要将它当路由使用,所以可以在管理界面将 DHCP 服务先进行关闭。
然后打开接口管理界面,将唯一的接口的网络协议设置为 DHCP 客户端
,这里需要注意,当你点击保存后,新版的控制台会先进行尝试配置,这个配置是 肯定会失败
的,所以会提示你是否要进行 回滚操作
还是继续进行 强制应用
,当然是后者。
在你点击强制应用之后,便可以将下载宝和电脑断开连接,将下载宝和路由器进行连接,然后直接访问路由器分配的IP即可继续进行管理操作。
因为是在内网进行服务,所以可以继续在接口配置中,将 IPV6 关闭。
安装OpenWRT离线软件包
通过 SCP
等命令,我们可以将下载好的软件安装包传送到下载宝上,但是当你使用 opkg
命令进行安装的时候,很可能会遇到下面的情况:
bash
解决方案其实很简单,先通过 opkg
命令查看你支持的软件包。
bash
可以看到,下载宝支持的软件包架构是 mipsel 24kc
。
而如果你要查找一些软件的话,可以从官方的软件仓库中获取: http://archive.openwrt.org/releases/18.06.0/packages/
配置代理软件
代理软件有许多种,所以这里不对具体的软件进行配置,只是聊一下一些通用的处理。
自动启动
使用命令行启动代理软件很容易,但是如果想达到“判断程序没有运行再执行启动命令”就需要借助脚本来实现了。
; then echo 'Start new proxy client.' /data/软件名称 & fi] bash
将脚本保存到一个固定的位置,比如上文中提到的外置储存器中 /data/check.sh
,然后配置“计划任务”(crontab) ,然系统每分钟自动检查是否应该启动代理软件,避免代理软件崩溃后无法提供服务。
bash
重启进程
非商业级产品,在长时间运行的过程中,难免出现内存泄露等问题,导致资源越用越多,但是提供的服务却越来越差,甚至完全不提供服务,变成一个僵尸进程。
为了解决这个问题,我们可以使用自动重启软件的策略,但是同样的,这里也需要编写一个简单的脚本:
; then echo "restart client" echo ${EXIST} | awk 'NR==1{print $1}' | xargs kill -9 /data/软件名称 & fi] bash
同样的,在计划任务中添加一个新的脚本,可以做到让程序每小时自动重启,避免潜在的资源占用过多却不去释放的问题。
bash
最后
如果你认为你的虚拟机同样稳定、或者路由器有大量的冗余资源,也可以将这个功能放在他们上面,但是个人建议是做成 “单一职责”、“简单可依赖” 的服务,不搞巨无霸。
—EOF
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
锋利的jQuery
单东林、张晓菲、魏然 / 人民邮电出版社 / 2009-6 / 39.00元
《锋利的jQuery》循序渐进地对jQuery的各种函数和方法调用进行了介绍,读者可以系统地掌握jQuery的DOM操作、事件监听和动画、表单操作、AJAX以及插件方面等知识点,并结合每个章节后面的案例演示进行练习,达到掌握核心知识点的目的。为使读者更好地进行开发实践,《锋利的jQuery》的最后一章将前7章讲解的知识点和效果进行了整合,打造出一个非常有个性的网站,并从案例研究、网站材料、网站结构......一起来看看 《锋利的jQuery》 这本书的介绍吧!