2022年6月

背景

​ 19年的时候,官网买了一个大疆RoboMaster S1机器人,本用来讨好小孩,没想到小孩子并不太喜欢。于是闲置了很久。半年前,想起来玩一下,登录进App后提示固件需要更新,我特别喜欢更新,不管是各个设备还是手机,看到就想点,总以为会有更好的功能或特性。为了保证更新不出问题,我特意把电池充满电,然后点了更新。

故障

​ 点击更新后,机器人有了反应,旋转条开始只有一格在闪,但是等了好久,依然如此。我不敢贸然断电重启,耐心等到了电池完全没电,还是没能升级好。

有种不好的预感。

​ 重新换了电池,直接无法启动了。尝试usb连接电脑,无任何反应;重置wifi,依然无果;拆下主板,想找是否有ttl接口可以进去看看系统启动情况,没找到-_-! 。彻底当了一个玩具车玩了。

转机

​ 今天想起来还是寄给大疆维修下,在官网创建了自助维修单,想了想,再测试一次。于是,充了一点电,在开机的时候,发现我之前有一个tf卡在上面,本来是用来拍照与录像的。想着是否与这个有关?果然,拔掉tf卡之后,居然开始报20% 30%...开始固件更新了。。。

修好了

​ 我只能说,这确实也是之前疏忽了,一般来说,升级或者排除故障就是尽可能去掉外围的东西嘛。希望有同样问题的朋友,能先看到我这个记号。

很久之前,准备部署一套gitlab给公司用来代码托管,同时也解决远程访问代码的需求。以为这个开销很小,结果没想到内存需求至少在4G,阿里云的4G服务器其实还是很贵的。当时公司很穷,同时也担心线上服务器被盗,数据丢失等等问题。于是想着在公司内网里面有一个群晖既可以运行gitlab,也做了raid1数据备份,只是没有公网ip,需要阿里云的公网ip来进行转发。当然,其实有公网ip,80,443端口也是不会被开放的。于是,一个隧道软件的需求就出来了。

那时候没有发现frp这个软件,自己用swoole写了一个服务端与客户端,原理都是类似,就是服务器端与客户端初始化1条或者多条tcp链接,服务器端把接收到的请求都转发给客户端,同理客户端把局域网服务器响应的内容都转发回去。当时我记得有一个问题就是大文件传输失败的概率很高,好像跟缓冲区有关系,因为局域网速度快,外网速度慢,返回的时候,客户端的缓冲区也许就会装不下了。就这样的半成品,还是勉强用了几年,总体来说效果不错。达到了省钱与可控的目的。不过,缺点是实际上传输的流量是实际的两倍,因为一来一回了,所以最终是否省钱,也是要看业务情况的。推荐做渲染,集群计算等等可以采用这个方式,那个成本节约得不是一点半点,毕竟阿里云那边只需要1核512M内存即可,1核还是弹性那种。内网自己非常个性,随便怎么搭建,数据传输还快。

整体背景介绍完了,现在就是说下具体的工具:frp,项目地址:https://github.com/fatedier/frp ,功能就是我上面所说,不过他的特点在于,监听的对外服务端口居然是由客户端动态指定的,这个倒是很有意思的一个点。具体的详细信息可以在他的项目文档中查看,在此仅仅对常规使用做一个示例:
下载来的文件中分为 frps-服务端,也就是有对外ip的机器运行端;frpc-客户端,需要映射出去的内网服务器,这个机器不一定非要是具体的业务那一台,内网用来转发的机器就可以。
frps.ini是服务器端的配置文件,frpc.ini是客户端的配置文件。配置起来也很简单,服务器端仅需指定控制端口即可,默认是7000,控制端口也就是内网客户端与服务器端的通信端口。需要注意的是,建议一定加上token字段,如 token = xxxx,以防有人直接连接上来,劫持了服务或者薅了羊毛。在此,顺便一提,在所有对外的服务中,都需要有一定的安全意识,密码强度,哪些端口是对外开放的,均需进行配置。对于特别重要的服务器,22端口还需要限定访问ip等。

[common]
bind_port = 7000 #通信绑定端口
token = helloworld #通信暗号

然后启动服务,因为程序本身并不支持以守护进程运行,推荐使用nohup命令:

nohup ./frps -c ./frps.ini 2>&1 >./server.log &

frpc.ini是客户端配置文件,客户端配置主要是指定服务器端的ip与端口,以及具体转发的内外信息:

[common]
server_addr = 1.2.3.4 #楼上外网服务器的地址
server_port = 7000 #楼上的通信端口
token = helloworld #楼上设置的口令
[web1] #这个名字可以自己取
type = tcp
local_ip = 192.168.1.2 #不一定是本机地址,本机可以访问的地址均可
local_port = 443 #内网服务对应的端口
remote_prot = 443 #外网服务器对外监听的端口

接下来依然是启动服务,

nohup ./frpc -c ./frpc.ini 2>&1 > ./client.log &

然后就可以啦,更多特性还是仔细翻看下文档。常规来说,tcp的转发就够了。希望能给初创公司或个人爱好者提供帮助。

默认情况下,安装后的Apache2的配置路径在 /etc/apache2 (ubuntu) 或者 /etc/httpd (centos)。

在此目录下,有 conf-available/enabled mods-available/enabled sites-available/enabled等目录。

仔细观察可以发现,enabled目录下的文件是软连接available目录下面的文件,apache实际加载的是enabled目录下面的配置文件。

那么,这样做的目的是什么呢?

我们经常会有这样一种场景:有A配置,B配置,C配置,偶尔要临时屏蔽一个,但是又不想删除,因为删除了之后又要重新配置生成。于是在apache这里就变成了你可以把配置都放到available目录下面,然后如果需要使用的,就在enabled里面软连接对应的文件。在这里顺便一提,软连接的命令是
ln -s /targetfile/path /newfile/path
如果暂时不需要,直接删除对应的软连接即可。
特别提示,如果新增加一个配置,别忘记在enabled目录中增加对应的链接,比如说新增https访问。

conf表示配置,mods表示模块,如ssl,rewrite等,sites表示vhost。

mods推荐采用a2enmode命令来开启,省去配置的环节。