7分钟部署自己的ngrok

偶尔善良 提交于 2020-01-17 11:29:06

7分钟部署自己的ngrok

文章背景

最近因为要做微信公众号的开发, 需要用到外网ip. 然而, 网上的免费版不是速度慢就是定期更换ip,烦不胜烦, 故决定使用linux服务器和域名自己部署一个ngrok
注: 后面看钉钉开发文档发现他有提供内网穿透工具, 不过我已经部署了自己的ngrok, 没有域名的小伙伴可以在评论告诉我下好用吗钉钉内网穿透工具

前置准备

Linux 服务器一台(已安装Nginx)
域名一个(测试可直接修改电脑的hosts文件c:\windows\system32\drivers\etc)

此处测试我直接把域名: ngrok.test.comwx.ngrok.test.com指向了我服务器ip
如果ngrok域名指向了ngrok.test.com, 后续可以指定任意前缀, 例如wx, 则最终域名指向为 wx.ngrok.test.com

安装软件

首先进入/usr/local/ 目录, 后续操作均在此目录

  1. 安装git和go

    yum install gcc -y
    yum install git -y
    yum install mercurial git bzr subversion golang golang-pkg-windows-amd64 golang-pkg-windows-386 -y
    yum install epel-release -y
    yum install golang -y
    
  2. 安装ngrok

    git clone https://github.com/tutumcloud/ngrok.git ngrok
    
  3. 生成文件并覆盖原先证书

    cd ngrok
    
    openssl genrsa -out base.key 2048
    
    openssl req -new -x509 -nodes -key base.key -days 10000 -subj "/CN=ngrok.test.com" -out base.pem
    
    openssl genrsa -out server.key 2048
    
    openssl req -new -key server.key -subj "/CN=ngrok.test.com" -out server.csr
    
    openssl x509 -req -in server.csr -CA base.pem -CAkey base.key -CAcreateserial -days 10000 -out server.crt
    

    替换文件(全部需要输y进行确认覆盖操作)

    cp base.pem /usr/local/ngrok/assets/client/tls/ngrokroot.crt
    
    cp server.crt /usr/local/ngrok/assets/server/tls/snakeoil.crt
    
    cp server.key /usr/local/ngrok/assets/server/tls/snakeoil.key
    
  4. 生成服务端(编译时间较久, 请耐心等待)

    make release-server
    
  5. 按需生成客户端(客户端生成路径/ngrok/bin/xxx(对应版本), 注意, 如果生成linux64位, 则是/ngrok/bin/ngrok)
    注: 如果后续修改域名, 需要重新生成新的服务端和客户端

    GOOS=windows GOARCH=amd64 make release-client
    #编译成功后会在ngrok/bin/下面生成一个windows_amd64目录下面有ngrok.exe(按需生成)
     
    #Linux 平台 32 位系统:
    GOOS=linux GOARCH=386 make release-client
    #Linux 平台 64 位系统:
    GOOS=linux GOARCH=amd64 make release-client
    #Windows 平台 32 位系统:
    GOOS=windows GOARCH=386 make release-client
    #Windows 平台 64 位系统:
    GOOS=windows GOARCH=amd64 make release-client
    #MAC 平台 32 位系统:
    GOOS=darwin GOARCH=386 make release-client
    #MAC 平台 64 位系统:
    GOOS=darwin GOARCH=amd64 make release-client
    #ARM 平台:
    GOOS=linux GOARCH=arm make release-client
    
  6. 后台启动服务端(3个端口号都可以任意指定)

    setsid ./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="ngrok.test.com"  -httpAddr=":8001" -httpsAddr=":8002" -tunnelAddr=":4443"
    

    查看服务端是否正常启动

    netstat -tunple | grep 4443
    
  7. 修改nginx配置文件并重启

        server{
    		listen 80;
            server_name *.ngrok.test.com;
           
            location / {
                  proxy_pass  http://127.0.0.1:8001;
                  proxy_redirect off;
                  proxy_set_header   Host $http_host:8001;
                  #proxy_set_header   Host             $host:8001;
                  proxy_set_header   X-Real-IP        $remote_addr;
                  #proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                  proxy_connect_timeout 1; 
                  proxy_send_timeout 120; 
                  proxy_read_timeout 120;
            }
           
    	}
    
  8. 启动客户端(注意云服务器的安全组策略和防火墙是否有拦截上述3个端口)

    1. 下载客户端并新增配置文件
      将服务器的客户端文件下载/ngrok/bin到本地, 并在同级目录新增配置文件ngrok.cfg

      server_addr: ngrok.test.com:4443
      trust_host_root_certs: false
      
    2. cmd进入当前目录启动

      如果可以正常启动可不指定日志文件记录, 其中subdomain为指定任意指定前缀
      整个命令是: 指定前缀wx, 将本地80端口映射, 日志文件保存到同级目录ngrok.log

      ngrok -config=./ngrok.cfg -log=./ngrok.log -subdomain=wx 80
      
    3. 访问网址: wx.ngrok.test.com, 正常访问即可

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!