这几天研究ngrok的使用,用谷歌的vps测试了下,发现一起正常,然后突然想到,树莓派能运行服务器端或者运行客户端呢,答案是肯定的
搭建的探索进程
按照编译的标准流程
刚开始想着按照标准的编译流程在树莓派安装环境(go、git、其他依赖),结果失败。
- 首先go语言arm架构的软件包需要自己编译,手上的树莓派型号是:树莓派3 B型的机器,架构是armv7,然后到go语言官网只找到了armv6的软件,所以安装了go1.42以上的armv6的软件包(官方文档没有找到版本要求,参考的教程里面用的是1.42版本的,所以自己想当然认为1.42的会比较好,实际上用了高于1.42的也可以),最后安装依赖的时候提示找不到软件
- 更新了阿里云的软件源,失败,看来想要在树莓派上走一遍编译流程并不行
做事情避免不了被打断,有时间中断完可能就回不来了,8号上午的文章,9号晚上来补,继续吧
接着想着不就是要一个centos的环境吗,在树莓派跑个docker,装个centos的镜像吧,结果失败
更新软件的时候都失败,看来是arm架构的软件源镜像没人管了,毕竟用的人那么少,只有闲的蛋疼的才会这么做(比如我😂😂),who cares,所以这个方法失败。
思考了一下发现解决办法(做事情,思考很重要呀)
试了👆的两个方法失败后,冷静地思考了下,发现编译的时候不是会传递架构的参数吗?GOOS=linux GOARCH=amd64 make release-server
,而且客户端和服务器认证的时候是通过证书的,所以我只要生成树莓派的证书,然后复制到ngrok的源码里面不就成了吗?结果 –> 成功。
所以把ngrok部署在树莓派(可以把树莓派当服务器,或者使用客户端)的办法就是:
- 找一台正常环境的centos,安装好编译环境(具体参考ngrok服务器搭建的文章)
然后在你的树莓派上生成证书,拷贝到编译用的centos,生成证书的代码是:
1
2
3
4
5openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem
openssl genrsa -out server.key 2048
openssl req -new -key server.key -subj "/CN=$NGROK_DOMAIN" -out server.csr
openssl x509 -req -in server.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out server.crt -days 5000替代好证书后,就是编译了,编译服务器的时候架构选择arm就行了(把ngrok的服务器部署在树莓派上),如果不知道参数就用
go env
查看下,前提是你得安装好go语言环境了1
2
3
4cd /usr/local/go/src
GOOS=linux GOARCH=arm ./make.bash #就是GOARCH这里改成arm64或者arm
cd /usr/local/ngrok/
GOOS=linux GOARCH=arm make release-server #这是编译arm上的服务器的
所以同样的道理,如果你想把你的ngrok放在mac上或者windows上,只要相对应的改成编译的参数就好了。
最后只要编译生成的服务器端(主要是服务器端,客户端当然也可以)运行在树莓派上就可以了,运行参数
1 | #ngrok服务端启动命令 |