ngrok服务器架设过程

需要先安装go环境
设置环境变量
12345 # 可以根据自己需要调整路径 echo 'export GOROOT=/usr/local/go' >> /etc/profileecho 'export PATH=$PATH:$GOROOT/bin' >> /etc/profileecho 'export GOPATH=$HOME/go' >> /etc/profileecho 'export GOROOT_BOOTSTRAP=/usr/local/go' >> /etc/profile
下载源码安装
由于yum安装的go版本是1.4的,后面可能会有点问题,所以这里采用源码安装(2016.03.31最新版本为1.6)的方式
123 cd ~/your_download_dirwget https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gztar -C /usr/local -xzf go1.6.linux-amd64.tar.gz
查看是否安装成功
12 go version# 正常的话会返回类似这样的信息: go version go1.6 linux/amd64
ngrok安装
git版本
如果你的git版本>=1.7.9.5,可以直接跳过git版本这一步;如果不是,需要先进行升级。
我在一台服务器上的版本是1.7.1,在ngrok安装过程中,会一直卡在某个东西的下载,我是卡在这里
1 gopkg.in/inconshreveable/go-update.v0 (download)
最好先进行一些git依赖的安装
1 yum -y install zlib-devel openssl-devel perl hg cpio expat-devel gettext-devel curl curl-devel perl-ExtUtils-MakeMaker hg wget gcc gcc-c++
然后再升级git版本,升级方法是先安装第三方源(rpmfore),再使用该源进行git的更新。
这里不再详细说明git的升级,大体可以照这篇教程弄;
唯一不同的是,因为启用了priorities,所以在最后更新git时一直查找的是base的repo,而不是rpmforge的repo,所以需要在更新时将base,updates等repo禁用(参考这篇文章),如下:
1 yum --disablerepo=base,updates --enablerepo=rpmforge-extras update git
下载ngrok源码
123 cd ~/your_download_dirgit clone https://github.com/inconshreveable/ngrok.git ngrokcd ngrok
生成证书
注意这里有个NGROK_BASE_DOMAIN;
假设最终需要提供的地址为aevit.your-domain.com,则NGROK_BASE_DOMAIN设置为your-domain.com;
假设最终需要提供的地址为aevit.ngrok.your-domain.com,则NGROK_BASE_DOMAIN设置为ngrok.your-domain.com;
下面以ngrok.your-domain.com为例:
12345 openssl genrsa -out rootCA.key 2048openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=ngrok.your-domain.com" -days 5000 -out rootCA.pemopenssl genrsa -out device.key 2048openssl req -new -key device.key -subj "/CN=ngrok.your-domain.com" -out device.csropenssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
执行完以上命令,就会在ngrok目录下新生成6个文件
123456 device.crtdevice.csrdevice.keyrootCA.keyrootCA.pemrootCA.srl
ngrok通过bindata将ngrok源码目录下的assets目录(资源文件)打包到可执行文件(ngrokd和ngrok)中 去,assets/client/tls 和 assets/server/tls 下分别存放着用于ngrok和ngrokd的默认证书文件,我们需要将它们替换成我们自己生成的:(因此这一步务必放在编译可执行文件之前)
123 cp rootCA.pem assets/client/tls/ngrokroot.crtcp device.crt assets/server/tls/snakeoil.crtcp device.key assets/server/tls/snakeoil.key
编译ngrokd和ngrok
编译linux端版本
1234 make clean# 如果是32位系统,这里 GOARCH=386GOOS=linux GOARCH=amd64 make release-server release-client
最后成功的话,会在当前目录生成一个bin文件夹,里面包含了ngrokd和ngrok文件;
其中,bin/ngrokd文件是服务端程序;
bin/ngrok文件是客户端程序(注意上面指定了GOOS为64位linux的,所以这个文件是不能在mac或win等其他平台跑的,下面将进行说明如何交叉编译)
编译mac端版本
1234 cd ~/your_download_dir/ngrok# 如果是win端版本,GOOS=windows;如果是32位系统,GOARCH=386GOOS=darwin GOARCH=amd64 make release-client
成功的话,会在./bin/darwin_amd64/下有个文件,将这个文件下载到mac上
12 # 如果服务器没装sz程序,请先安装(yum -y install lrzsz);或自行采用其他办法下载到本机 sz ./bin/darwin_amd64/ngrok
设置域名解析
1234567 # 如果最终需要的ngrok地址为: example.your-domain.com,则设置 * 记录指向服务器IP# 如果最终需要的ngrok地址为: example.ngrok.your-domain.com,则设置 *.ngrok 记录指向服务器IP# 或者不想进行泛解析,则手动添加即可,如设置example记录指向服务器IP,example.ngrok记录指向服务器IP
使用方法
服务端
nginx端口转发
由于本机的80端口已经被占用了,所以需要利用nginx进行端口的转发,加上如下配置即可:
12 # 根据自己nginx的安装路径,自动调整以下命令vim /usr/local/nginx/conf/vhost/nginx.your-domain.com.conf
内容如下:
123456789101112131415161718 upstream ngrok { server 127.0.0.1:8777; # 此处端口要跟 启动服务端ngrok 时指定的端口一致 keepalive 64;}server { listen 80; server_name *.ngrok.your-domain.com; access_log /data/wwwlogs/ngrok.your-domain.com_access.log; error_log /data/wwwlogs/ngrok.your-domain.com_error.log; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host:8777; # 此处端口要跟 启动服务端ngrok 时指定的端口一致 proxy_set_header X-Nginx-Proxy true; proxy_set_header Connection ""; proxy_pass http://ngrok; }}
重启nginx
12 nginx -tnginx -s reload
启动服务端ngrok
1234567891011 # domain填写刚才生成证书时的 NGROK_BASE_DOMAIN# http和https端口可以自己指定,这里不采用80端口,是因为其他程序已经占用了,端口转发在上面nginx已经配置完成 bin/ngrokd -domain="ngrok.your-domain.com" -httpAddr=":8777" -httpsAddr=":8778"# 如果想要后台启动,执行以下命令 nohup bin/ngrokd -domain="ngrok.your-domain.com" -httpAddr=":8777" -httpsAddr=":8778" > /dev/null 2>&1 &# 如果想要开机启动,执行以下命令vim /etc/rc.d/rc.local# 添加以下内容,具体内容请根据自己情况自行调整{your-ngrok-dir}/bin/ngrokd -domain="ngrok.your-domain.com" -httpAddr=":8777" -httpsAddr=":8778" > /var/log/ngrok.log &
客户端
确保刚才下载的mac版ngrok有执行权限
1 chmod +x ngrok
在ngrok程序的同级目录下,编写配置文件
1 vim ngrok.cfg
内容如下:
12345678910111213141516171819202122232425262728 server_addr: "ngrok.your-domain.com:4443"trust_host_root_certs: falsetunnels: example: subdomain: "example" #定义服务器分配域名前缀 proto: http: 80 #映射端口,不加ip默认本机 https: 80 web: subdomain: "web" #定义服务器分配域名前缀 proto: http: 192.168.1.100:80 #映射端口,可以通过加ip为内网任意一台映射 https: 192.168.1.100:80 web1: hostname: "ngrok.your-domain.com" proto: http: 80 web2: hostname: "your-domain.com" proto: http: 80 ssh: remote_port: 50001 #服务器分配tcp转发端口,如果不填写此项则由服务器分配 proto: tcp: 22 #映射本地的22端口 ssh1: #将由服务器分配端口 proto: tcp: 21
启动ngrok
123456789 ./ngrok -subdomain example -config=ngrok.cfg 80# 或者./ngrok -config ngrok.cfg start example# 如果出现问题连接不上,想在本地查看日志,可加上log参数# ./ngrok -log ngrok.log -config ngrok.cfg start example# 最终如果Tunnel Status显示online则表示成功了
在本地进行微信公众号的调试
接下来就可以进行微信公众号在本地的开发了,只要在本地设置好nginx(server_name要跟上文对应,如上面的example.ngrok.your-domain.com)
由于微信只允许使用80端口,所以一定要进行上面的nginx的端口转发设置才行
另外,ngrok本身提供了127.0.0.1:4040这个地址,可以查看到所有的http数据包内容(在php文件里var_dump的东西也可以看到)
遇到的问题
ngrok端口的防火墙问题
由于服务器上开启了防火墙,使用的是iptables,所以需要将上面的端口添加到白名单
(一共3个,一个是ngrok自身的4443端口,还有自定义的8777http端口,8778https端口)
1 vim /etc/sysconfig/iptables
添加以下内容
123 -A RH-Firewall-1-INPUT -m state -state NEW -m tcp -p tcp -dport 4443 -j ACCEPT -A RH-Firewall-1-INPUT -m state -state NEW -m tcp -p tcp -dport 8777 -j ACCEPT -A RH-Firewall-1-INPUT -m state -state NEW -m tcp -p tcp -dport 8778 -j ACCEPT
重启iptables
1 service iptables restart
ngrok的交叉编译
在服务器上要编译个mac端的版本时,网上说需要进行go的源码,去进行GOOS的设置:
12 cd /usr/local/go/srcGOOS=darwin GOARCH=amd64 CGO_ENABLED=0 ./make.bash
但是我拿另一台服务器测试过后,不用这样也行,直接按刚才上面说的,在ngrok目录去进行mac端版本的编译即可。
PS: 以下内容不能看也行,只是中间遇到的问题的一些记录而已
我第一次照着网上说的去go源码设置GOOS,反而会报这样的错:
123 go ./make.bash: eval: line 135: syntax error near unexpected token ( ERROR: Cannot find /root/go1.4/bin/go.Set $GOROOT_BOOTSTRAP to a working Go tree >= Go 1.4. google了下,说现在新的go都不用C编写了,而1.4之前的是C编写的,所以需要先安装1.4的,才能编译1.6的,于是便先安装了1.4,再安装1.6,步骤如下: 1234567891011121314151617181920212223242526272829303132333435 echo 'export GOROOT=/usr/local/go' >> /etc/profileecho 'export PATH=$PATH:$GOROOT/bin' >> /etc/profileecho 'export GOPATH=$HOME/go' >> /etc/profileecho 'export GOROOT_BOOTSTRAP=/usr/local/go' >> /etc/profilesource /etc/profilecd ~/your_download_dir# 先下载1.4的源码wget https://storage.googleapis.com/golang/go1.4.3.linux-amd64.tar.gztar -C /usr/local -xzf go1.4.3.linux-amd64.tar.gz#tar -xzf go1.4.3.linux-amd64.tar.gz#mv ./go /usr/local/gocd /usr/local/go/src./all.bash# 查看版本,现在是1.4.3的go version# 将1.4的源码目录名更改为go1.4,go这个目录名等下给1.6用mv /usr/local/go/ /usr/local/go1.4/vim /etc/profile# 默认的 GOROOT_BOOTSTRAP 是: $HOME/go1.4,因为我放在了/usr/local/go1.4`,所以这里要指定该值export GOROOT_BOOTSTRAP=/usr/local/go1.4cd ~/your_download_dirwget https://storage.googleapis.com/golang/go1.6.linux-amd64.tar.gztar -C /usr/local -xzf go1.6.linux-amd64.tar.gzcd /usr/local/go/src./all.bash# 查看版本,现在是1.6的go version
最后再次进行测试验证了不用先安装1.4再安装1.6这么麻烦。。
总结
中间虽然遇到了一些坑,google查了好几个钟的资料,昨晚弄到凌晨2点多,不过最终弄成功,并且验证了一些安装过程的想法,还是挺有成就感的。
还好大学时就有稍微折腾过linux,去年转后台开发时就用上了一些知识,现在服务器遇到一些基本问题最终也能解决了。
所以还是不能停止学习的脚步啊。
趁现在还年轻,多折腾。。

参照网上的编译好服务器后,这样运行
如果是openwrt的系统直接用winscp拷贝openwrt里
将ngrokc 放到 /usr/bin 下面 添加权限 (chmod +x ngrokc ) 就可以用luci 界面了

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容

  • 今天朋友叫我帮他搭建个ngrok,我自己也是个喜欢折腾的人,所以就应承下了。用了2小时左右搭建成功,中间查看各种资...
    无痕无敌阅读 3,516评论 4 5
  • 文档中的命令不要一次执行多个,防止出现不必要的错误 安装依赖 下载git 解压git 编译git 创建git软连接...
    ucfjepl阅读 2,186评论 0 53
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,099评论 18 139
  • Codis 3.2 部署配置汇总 概念总结 集群配置前需要了解架构,集群分片主要分三种: 客户端分片:这个需要自己...
    三杯水Plus阅读 5,841评论 0 11
  • 鸭子用料酒、生抽腌制,清洗干净,高压锅放入干净的鸭子,加入姜压熟捞起备用 热油锅入蒜末丁、新姜片、干辣椒、红辣椒、...
    渡把阅读 194评论 0 0