一、前言
公司的上网策略使用了mac地址白名单+mac地址绑定固定ip的方式,申请的每台公司主机需要提交对应mac addr-ip单据才能入网(策略目测是在网关做的), 并且只有公司内资产才能入内网。
作为全栈开发工程师,常常需要与前端联调代码,联调过程中我经常啥也没法干,坐等前端调试完毕(并且前端经常发一些业务batch请求再加我本地还有很多其他项目的服务,cpu吃满,卡的要死)。所以萌生了带家里的树莓派过来搭建个人项目测试服务器的想法,对接测试环境数据库,这样既缓解开发主机压力,并且能作为团队的备用测试环境
我的raspberry pi版本: raspberry pi 4B + 8G RAM + Ubuntu 20.04 mac主机 = 开发机 = 主力机 防止我混用称呼自己看不懂…
二、目标
由于pi不是公司资产,无法申请ip, 自然没法连接mac主机桥接网络 就选择使用mac搭建nat模式子网,在使用nginx的proxy_pass在我的开发机上做一个内网穿透, 例如: 主力机ip 192.168.67.150:443 映射到 => raspberry pi: 192.168.2.100:3000 那么目标就是做到在前端工程师访问192.168.67.150:443时候是默认访问树莓派的3000端口
三、MAC搭建NAT共享网络
Wifi共享:
由于一开始我的mac只有一个网口,用来接公司网络之后,没有typec->网口的情况下没法用网线再连接pi。所以一开始使用的是wifi的共享方式。 使用mac -> 系统偏好设置-> 共享,共享公司网络,用Wi-Fi方式共享,让树莓派连接。pi 4b的Wifi支持5g,所以我MAC主机设置了个5g信道进行共享,然后就遇到pi怎么都无法连接的问题,后来发现是树莓派的support channel会根据当前所选的国家/地区进行适配,选择中国后支持的信道(channel)只有1/6等几个,挺离谱的,感觉跟XSS手柄断联差不多的问题,后面虽然解决了问题,但是wifi模块经常down, 服务很不稳定。最后还是选择使用网线连接pi和mac主机进行共享的方案,对wifi共享问题感兴趣的可以看这个文章github.com/raspberrypi…
网线直连:
还是买了个type-c -> 网口的转接线(肉痛),网线连接pi与主力机之后mac会默认nat模式共享网络,网关与dns服务器都是mac主机。连接上之后,mac网络共享端口中会出现一个端口,我这边是AX88179A, 勾选并开启互联网共享。
四、raspberry-pi配置固定ip
连接上之后配置树莓派固定ip, 后面ssh连固定ip就可以了。我这边配置了192.168.2.100作为固定ip,网关及dns固定192.168.2.1。
sudo netplan apply
五、启动后端服务/nginx proxy_pass进行内网穿透
项目后端使用ror框架,配置3000端口启动 rails server -b 0.0.0.0开启
mac主机nginx配置
sudo nginx -s reload
本地访问192.168.67.150:443或者https: //192.168.67.150, 200!
六、supervisor管理服务
目前rails server -b 0.0.0.0会开启一个前台进程,一旦要开启多个不同的服务(我们项目有多个后端服务,这里文章只提供其中一个后端服务的配置作为案例),要么使用ctrl + z的方式挂起前台进程服务,要么就得再开个命令行窗口去启动其他后端服务,乱而且麻烦。
并且由于后端代码有些怪异的问题,后端服务会自己down掉。前端总是跑过来:老哥重启一下后端服务老哥重启一下后端服务老哥重启一下后端服务。。
所以决定使用supervisor管理服务,将前台进程转换为守护进程并开启一个supervisor前端服务端口,让前端自己去重启。
supervisor的原理就是在/etc/init.d的阶段启动supervisord, 所有被管控的进程都是supervisord fork出来的子进程。
Tip:(所以无论是.bash_profile还是.bashrc这个阶段根本不会执行,系统变量不会被加载,所以需要系统变量的子进程需要手动配置环境变量,具体看supervisor的doc。)
七、成果
mac主机nginx配置:
访问supervior 服务:
后续有时间再写个git 切换分支的功能开放给前端就更nice了
忙碌的Mac mini:
作者:莱昂晨
链接:
https://juejin.cn/post/7039977706032726029