PHP程序员学习笔记|如何学习PHP

个人总结的PHP学习方法


ngrok 安装

2017-1-25 0phpcom



卸载 自带的旧版本的git
安装最新版的git
yum remove git
yum install -y xmlto
yum install -y insgtall
yum -y install texinfo
yum install  gcc perl-ExtUtils-MakeMaker


># yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc
># yum install  gcc perl-ExtUtils-MakeMaker   
   
error: ```/utf8.c:463: undefined reference to `libiconv'```
># wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz
># tar zxvf libiconv-1.14.tar.gz 
># cd libiconv-1.14
># ./configure --prefix=/usr/local/libiconv
># make && make install


下载git2.2.1并将git添加到环境变量中

># wget https://github.com/git/git/archive/v2.2.1.tar.gz
># tar zxvf v2.2.1.tar.gz
># cd git-2.2.1
># make configure
># ./configure --prefix=/usr/local/git --with-iconv=/usr/local/libiconv
># make all doc
># make install install-doc install-html
># echo "export PATH=$PATH:/usr/local/git/bin" >> /etc/bashrc
># source /etc/bashrc

前面是安装 ngrok报错的预处理
可能会出现 gopkg.in/inconshreveable/go-update.v0 (download) 一直卡在这里用上面的办法就可以解决了

进入安装正题
4.下载golang稳定版本的压缩包(建议在usr/local文件夹):

前往golang中国下载 go1.4rc2.linux-amd64.tar.gz

            http://www.golangtc.com/download

5.解压压缩包(使用tar指令):

     tar -zxvf go1.4rc2.linux-amd64.tar.gz

6.添加环境变量:

            vi /etc/profile

            在profile中添加:

                   export GOROOT=go的安装目录

                   export GOBIN=$GOROOT/bin

                   export PATH=$PATH:$GOBIN

如下:

# Add golang eviroment
export GOROOT=/usr/local/go
export GOBIN=$GOROOT/bin
export PATH=$PATH:$GOBIN

并刷新环境变量

source /etc/profile

7.测试是否安装成功:

         go version

二、在服务器上搭建Ngrok服务

1.下载ngrok源码:

            git clone https://github.com/inconshreveable/ngrok.git

      2.在go目录解压ngrok源码

           *.tar 用 tar –xvf 解压 
           *.gz 用 gzip -d或者gunzip 解压 
           *.tar.gz和*.tgz 用 tar –xzf 解压 
           *.bz2 用 bzip2 -d或者用bunzip2 解压 
           *.tar.bz2用tar –xjf 解压 
           *.Z 用 uncompress 解压 
           *.tar.Z 用tar –xZf 解压 
           *.rar 用 unrar e解压 
           *.zip 用 unzip 解压

      3.在ngrok目录生成自签名证书

         在使用官方提供的ngrok服务时我们可以使用官方的证书,而当我们使用自己搭建的ngrok服务时则需要自生成一份证书。

         在自生成证书时需要一个解析到服务器上的主域名,现在以”abc.com”为例。

         (建议将域名泛解析到服务器上,方便让不同的本地服务通过不同的二级域名进行转发)

           openssl genrsa -out rootCA.key 2048

           openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=abc.com" -days 5000 -out rootCA.pem

           openssl genrsa -out device.key 2048

           openssl req -new -key device.key -subj "/CN=abc.com" -out device.csr

           openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000

      4.将新生成的证书,替换掉assets/client/tls下的证书

          cp rootCA.pem assets/client/tls/ngrokroot.crt
          cp device.crt assets/server/tls/snakeoil.crt
          cp device.key assets/server/tls/snakeoil.key

三:编译生成ngrokd(服务端)

         maker release-server

         在编译过程中有可能出现如下情况:

         1.

GOOS="" GOARCH="" go get github.com/jteeuwen/go-bindata/go-bindata

bin/go-bindata -nomemcopy -pkg=assets -tags=release \

                   -debug=false \

                   -o=src/ngrok/client/assets/assets_release.go \

                   assets/client/...

make: bin/go-bindata: Command not found

   make: *** [client-assets] Error 127

   解决方法:前往$GOBIN (cd $GOBIN) 找到go-bindata,将他移动到ngrok/bin下 (没有bin,可新建一个)    

         2.

         package code.google.com/p/log4go: Get https://code.google.com/p/log4go/source/checkout?repo=: dial tcp 216.58.197.110:443: i/o timeout

         因为google被墙,如果服务器不在墙外或者没有FQ则无法访问到code.google.com.

         解决方法:在 ngrok/src/ngrok/log 目录下找到 logger.go 文件,修改其中第4或5行的:

            log "code.google.com/p/log4go”为

            log "github.com/keepeye/log4go"  

        3.

         有时候在服务器上会出现下载速度极慢的情况,同时go get并不会显示进度条,所以需要耐心等待。 我在编译的时候,服务器上的速度慢得令人发指,在本机(OS X 10.10.1)中有一份已完成编译的ngrok,所以我尝试在本地已完成编译的ngrok中找到ngrok/src文件夹找到服务器中编译时卡顿的文件直接拷贝了一份上传服务器,再执行make编译后成功生成了ngrok执行文件。

 

         解决方法:先清空ngrok下src文件夹,博客园上传的文件中有个ngrok_src压缩文件解压放到src文件夹,再执行make release-server编译后成功生成了ngrok执行文件。

 

         若一切顺利,可以在ngrok/bin/ 文件夹下看到一个 ngrok 文件。

         若是没有找到可以前往$GOBIN中找到。

         这样服务器端程序就已经生成了,可以指定证书,域名,端口号来启动

            ./bin/ngrokd -tlsKey=device.key -tlsCrt=device.crt -domain="muxkou.com" -httpAddr=":8081" -httpsAddr=":8082" -tunnelAddr=":443"

            出现如下显示则说明服务已开启:

            [12/28/15 10:46:19] [INFO] [registry] [tun] No affinity cache specified

            [12/28/15 10:46:19] [INFO] [metrics] Reporting every 30 seconds

            [12/28/15 10:46:20] [INFO] Listening for public http connections on 0.0.0.0:8081

            [12/28/15 10:46:20] [INFO] Listening for public https connections on 0.0.0.0:8082

            [12/28/15 10:46:20] [INFO] Listening for control and proxy connections on 0.0.0.0:443

四:编译生成ngrok(客户端)

            ctrl+C 关闭ngrokd

            在生成客户端的可执行文件时,要利用golang的跨平台交叉编译针对不同的系统生成不同的可执行文件。      

            1.生成go跨平添编辑工具

              (1)若是客户端使用与服务器相同系统可直接使用 make release-client指令。

              (2)若是不同系统,则需要通过go中的make.bash手工编译出跨编译工具。

              在$GOROOT/src目录下找到make.bash文件

              通过设置GOOS和GOARCH来完成生成跨编译工具:

              例如:

                MAC OSX: sudo GOOS=darwin GOARCH=amd64 ./make.bash

                Windows: sudo GOOS=Windows GOARCH=386 ./make.bash

                 生成的工具可以在 $GOROOT/pkg/tool中找到      

           2.生成ngrok可执行文件

            在ngrok目录下使用

            GOOS=darwin GOARCH=amd64 make release-client

            GOOS=windows GOARCH=386 make release-client

            在ngrok/bin 或$GOBIN 中找到darwin_amd64或windwos_386文件夹。在其中可以找到ngrok或ngrok.exe 对应系统的可执行文件。     

          3.将ngrok文件下载到客户端PC(内网),同时写一个配置文件:ngrok.cfg

            server_addr: "abc.com:443"

            trust_host_root_certs: false

            【其中abc.com为主域名,443为开启服务时的tunnelAddr端口(若没有设置,默认为4443端口)】       

         4.在客户端启动ngrok:

            ngrok -subdomain=test -config=ngrok.cfg 80

            【80为想要暴露的端口】

            若Tunnel status显示online则表示隧道已打通:

            Tunnel Status                 online                                                         

            Version                         1.7/1.7                                                        

            Forwarding                    http://test.muxkou.com:8081 -> 127.0.0.1:80                    

            Forwarding                    https://test.muxkou.com:8081 -> 127.0.0.1:80                   

            Web Interface                 127.0.0.1:4040                                                 

            # Conn                        0                                                              

            Avg Conn Time                 0.00ms   

            此时可以再公网通过 http://test.abc.com:8081 访问到内网PC

            可以进入Web Interface显示的127.0.0.1:4040 查看日志                            

         5.若出现 bad certificate 的错误:

            1. 确保生成证书时的NGROK_BASE_DOMAIN和ngrok.cfg填写的domian一致。

            2.在使用自签证书时ngrok.cfg中的 trust_host_root_certs为false

        6.使用80端口:

            http://mp.weixin.qq.com/wiki/home/index.html 中可以看到公众平台接口调用仅支持80端口。

            所以若要通过ngrok服务完成微信公众号的调试,则需要使用80端口,修改ngrokd启动指令如下:

            ./bin/ngrokd -tlsKey=device.key -tlsCrt=device.crt -domain="muxkou.com" -httpAddr=":80" -httpsAddr=":8082" -tunnelAddr=":443"
« 哎 今年有没混出个人样 | 辛亥革命-北大教授的演讲»
发表评论:


订阅Rss