最近在写一个项目,通过自己的网站,直接和内网下的树莓派交互,但我又不想直接打开VPN(太麻烦)。所以,我主要是使用Frp来穿透树莓派的ssh服务,然后云服务器只要使用sshpass命令就可不使用交互模式来给树莓派下发shell命名。
但下发命令都需要一个大前提,检测树莓派在线状态!!
搭建简易的心跳接口服务器
import json
from fastapi import FastAPI
import uvicorn
# 创建FastAPI的实例对象
fastApi = FastAPI()
def server():
uvicorn.run(app=fastApi, host="127.0.0.1", port=<heart_beat_server_port>)
@fastApi.get("/heartBeat")
def heartBeat():
result={"heartBeat":True}
return json.dumps(result, ensure_ascii=False)
if __name__ == '__main__':
server()
最后将其设置为自启动服务:
vim /usr/lib/systemd/system/heartBeat.service
# 内容如下
[Unit]
Description=heartBeat
After=network.target
[Service]
Type=simple
# python执行上述的服务器脚本
ExecStart=python /root/cm/heartBeat/heartBeat.py
ExecStop=/bin/kill $MAINPID
Restart=always
RestartSec=20
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
使用服务的方式(systemctl start)启动这个服务器
systemctl daemon-reload
systemctl enable heartBeat
systemctl start heartBeat
配置Frp
此时树莓派就有了一个http接口,我们可以用Frp将该接口暴露出去
Frp服务端配置
配置服务端的frps.ini,配置完重启即可,不多赘述
[common]
# <frp_server_listen_port>之前在搭建树莓派VPN那期博客讲过了,就是监听frp服务用的
# <frp_server_listen_http_port>是frp专门用来穿透http服务的暴露端口,后续就是用这个端口在浏览器上访问接口
bind_port = <frp_server_listen_port>
vhost_http_port = <frp_server_listen_http_port>
Frp客户端配置
配置客户端的frpc.ini,配置完重启即可,不多赘述
[common]
server_addr = 159.75.26.246 # 云服务器公网ip
server_port = <frp_server_listen_port> # frp的server端监听端口
[ssh]
# 略,关于ssh服务的内网穿透
[openvpn]
# 略,关于OpenVPN服务的内网穿透
[heartBeat]
type = http # 选择http类型
local_port = <heart_beat_server_port> # 本地心跳接口服务器的监听端口
custom_domains = cmjava.ltd # 云服务器域名
测试
直接访问http://cmjava.ltd:<heart_beat_server_port>/heartBeat,成功访问!!
评论区