树梅派应用58:使用ngrok将树莓派web服务映射到公网
来源:互联网 发布:杭州盈和大数据培训 编辑:程序博客网 时间:2024/06/10 08:55
作为一个 web 开发者,有时候,你需要将你本地正在开发中的网站远程展示给别人看,例如让别人评价下你的设计,协助调试等。
之前我能想到的办法,就是在自己的 VPS 上搭建一个测试站点,将开发代码部署上去。
今天,发现了 ngrok 这个神奇,再也不用这么麻烦了!
假如,你的本地站点运行在 8000 端口。
注册 ngrok 后,你会得到一串授权码。根据提示,运行下面的命令:
ngrok -authtoken xsYgK978pmB_PDC0hWx2 8000
注意: 这个授权码只是第一次使用时需要。ngrok 会记住。下次使用时,只需要 ngrok 8000 就 OK 啦。
此时终端界面上会给你两个公网 url:
Forwarding http:
//59ea2510
.ngrok.com -> 127.0.0.1:8000
Forwarding https:
//59ea2510
.ngrok.com -> 127.0.0.1:8000
然后,你就可以选择其中一个,发送给对方,他就可以看到你的本地网站啦!
有木有觉得世界豁然开朗了起来?
具体方案:
我的树莓派接在局域网中,如果在外网对其进行访问,以前只能选择花生壳,而现在则有了开源方案 Ngrok 。Ngrok 可以选择用官网的服务,不过很可惜的是被墙了,如果不怕麻烦,也可以翻墙使用,我们这里选择自建 Ngrok 服务。Ngrok 分为服务端和客户端,服务端需安装在有独立 IP 的外网中,我用的是Ramnode KVM VPS,客户端安装在处于内网的树莓派中。
编译服务端、客户端
下载 Ngrok,准备编译环境:
sudo apt-get updatesudo apt-get install build-essential golang mercurial gitgit clone https://github.com/inconshreveable/ngrok.git ngrokcd ngrok
生成自签名 SSL 证书,example.com 替换为自己的域名:
openssl genrsa -out base.key 2048openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=example.com" -out base.pemopenssl genrsa -out server.key 2048openssl req -new -key server.key -subj "/CN=example.com" -out server.csropenssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
将原始的 ngrokroot.crt 替换为生成的 pem 文件:
cp base.pem assets/client/tls/ngrokroot.crt
编译 Ngrok 服务端:
sudo GOOS=linux GOARCH=amd64 make release-server
编译 Ngrok 客户端:
sudo GOOS=linux GOARCH=arm make release-client
将服务端和客户端分别拷贝到 VPS 和树莓派的可执行路径下。
设置域名解析
把域名 example.com 解析到 VPS 上,假如只需要一个二级域名 abc,可直接设置将其 A 记录解析到 VPS 的 IP 上,如果需要很多二级域名,可以直接把 * 解析到 IP 上。
服务端启动
从命令行启动:
./bin/ngrokd -tlsKey=server.key -tlsCrt=server.crt -domain=example.com -httpAddr=:8080 -httpsAddr=:8081
设置为开机自动启动:
sudo vim /etc/init.d/ngrokd
#!/bin/sh### BEGIN INIT INFO# Provides: ngrokd# Required-Start: $local_fs $remote_fs $network# Required-Stop: $local_fs $remote_fs $network# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: ngrokd# Description:#### END INIT INFONAME=ngrokdDAEMON=/home/user/ngrok/bin/$NAMEKEY=/home/user/ngrok/server.keyCRT=/home/user/ngrok/server.crtDOMAIN="example.com"HTTPADDR=":8080"HTTPSADDR=":8081"[ -x "$DAEMON" ] || exit 0case "$1" in start) echo "Starting $NAME..." start-stop-daemon --start --chuid seogod --exec $DAEMON --quiet --oknodo --background -- -tlsKey=$KEY -tlsCrt=$CRT -domain=$DOMAIN -httpAddr=$HTTPADDR -httpsAddr=$HTTPSADDR || return 2 ;; stop) echo "Stopping $NAME..." start-stop-daemon --stop --exec $DAEMON --quiet --oknodo --retry=TERM/30/KILL/5 || return 2 ;; restart) $0 stop && sleep 2 && $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;;esacexit 0
sudo update-rc.d ngrokd default
客户端启动
对默认设置文件 /home/pi/.ngrok
进行编辑:
server_addr: example.com:4443trust_host_root_certs: falsetunnels: web: auth: "AuthUser:AuthPassWord" proto: http: 80 ssh: remote_port: 34356 proto: tcp: 22
从命令行启动:
./bin/ngrok start web ssh
当客户端使用 http/https 协议连接,可指定一个二级域名,服务端会分配该二级域名给客户端作为入口,比如 web.example.com; 当客户端使用 tcp 协议连接,则服务端不会分配二级域名,改为监控一个随机端口,比如 example.com:12345,remote_port
可由客户端对该端口进行指定,比如 example.com:34356。
客户端和服务端建立连接后,访问 web.example.com:8080 可以穿透内网访问树莓派的 web 服务,执行 ssh -p34356 pi@example.com
可以穿透内网登陆树莓派的 ssh 服务。
设置为开机自动启动:
sudo vim /etc/init.d/ngrok
#!/bin/sh### BEGIN INIT INFO# Provides: ngrok# Required-Start: $local_fs $remote_fs $network# Required-Stop: $local_fs $remote_fs $network# Default-Start: 2 3 4 5# Default-Stop: 0 1 6# Short-Description: ngrok# Description:#### END INIT INFONAME=ngrokDAEMON=/home/pi/bin/$NAMECONFIG=/home/pi/.ngrokTUNNELS="web ssh"[ -x "$DAEMON" ] || exit 0case "$1" in start) echo "Starting $NAME..." start-stop-daemon --start --chuid pi --exec $DAEMON --quiet --oknodo --background -- -config $CONFIG start $TUNNELS || return 2 ;; stop) echo "Stopping $NAME..." start-stop-daemon --stop --exec $DAEMON --quiet --oknodo --retry=TERM/30/KILL/5 || return 2 ;; restart) $0 stop && sleep 2 && $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;;esacexit 0
sudo update-rc.d ngrok default
- 树梅派应用58:使用ngrok将树莓派web服务映射到公网
- 使用ngrok将web服务映射到公网
- 使用ngrok将web服务映射到公网
- 使用ngrok将web服务映射到公网
- 使用ngrok将web服务映射到公网
- 使用ngrok将web服务映射到公网
- 映射本地web服务到公网
- 使用ngrok暴露内网服务到公网
- 如何用ngrok将内网映射到公网
- 用ngrok将内网映射到公网上
- ngrok公网映射
- 使用ngrok快速地将本地Web服务映射到外网
- 使用ngrok快速地将本地Web服务映射到外网
- 使用ngrok快速地将本地Web服务映射到外网
- JEEWX 使用ngrok将本地Web服务映射到外网
- 使用ngrok将本地Web服务映射到外网
- mac使用ngrok将本地Web服务映射到外网
- mac使用ngrok将本地Web服务映射到外网
- 为自己
- struts2中使用ajax
- vs2015_c#_nlog配置
- Android AutoLayout全新的适配方式,最佳适配
- Domain,project,user,role,token 的概念理解
- 树梅派应用58:使用ngrok将树莓派web服务映射到公网
- 微信小程序获取高度
- -05-OpenCV程序测试【Xilinx-Petalinux学习】
- jQuery动画-隐藏和显示
- 有效解决winform界面闪烁代码
- 泛型的擦除
- 2017,我想上天
- scrapy爬虫代理——利用crawlera神器,无需再寻找代理IP
- 例14:计算某日是该年的第几天