centosの下にngrokサーバを自分で架設する(イントラネットテスト神器)
シーンの使用
開発を行うにはgitサーバや何かを同期して外部接続のテストを行う必要があることが多いため、更新するたびにpushを遠位端にしなければならない.また、コードが正式に書き終わるとは限らないこともある.gitの提出に影響を与えるだけでなく、面倒なのでngrokのイントラネットが貫通すると神威が現れる.ネット上ではngrokの国内サービスがありますが、時々不安定なので私と一緒に自分のngrokサービスを架けましょう.
必要な品目
クラウドサーバまたはvps
例えば:アリクラウドなどのクラウドサーバーが一番いいですが、アリクラウドは登録ドメイン名を覚えていますよ.
ドメイン名
クラウドサーバまたはvpsに解析されたip(myngrok.comなど)は、以下のテストでサブドメイン名の自動配置が開始されたため、ドメイン名を汎用解析する必要があります.CNAMEは「*」を記入してクラウドサーバのipに解析します.
環境準備
centosのインフラストラクチャ
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
go言語環境
// go centos 6.8 64
wget https://storage.googleapis.com/golang/go1.8.3.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.8.3.linux-amd64.tar.gz
vim /etc/profile
// :
export PATH=$PATH:/usr/local/go/bin
source /etc/profile
// go
go version
サーバのインストール
ngrokソースパッケージのダウンロード
mkdir /ngrok
cd /ngrok
git clone https://github.com/inconshreveable/ngrok.git
証明書の生成
cd /ngrok
mkdir cert
cd cert
openssl genrsa -out rootCA.key 2048
openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=myngork.com" -days 5000 -out rootCA.pem
openssl genrsa -out device.key 2048
openssl req -new -key device.key -subj "/CN=myngork.com" -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
元の証明書を上書き
yes|cp rootCA.pem /ngrok/ngrok/assets/client/tls/ngrokroot.crt
yes|cp device.crt /ngrok/ngrok/assets/server/tls/snakeoil.crt
yes|cp device.key /ngrok/ngrok/assets/server/tls/snakeoil.key
コンパイル生成ngrok
go env //
GOOS=linux GOARCH=amd64 make release-server
テストの実行
./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="myngrok.com" -httpAddr=":8081" -httpsAddr=":8082" -tunnelAddr=":8083"
# :
#-domain ngrok
#-httpAddr http 80
#-httpsAddr https 443 ( https )
#-tunnelAddr 4443
バックグラウンド運転
cd /ngrok/ngrok
setsid ./bin/ngrokd -tlsKey="assets/server/tls/snakeoil.key" -tlsCrt="assets/server/tls/snakeoil.crt" -domain="myngrok" -httpAddr=":8081" -httpsAddr=":8082" -tunnelAddr=":8083"
クライアントのコンパイルと使用
コンパイル生成win 64ビットクライアント(その他の自己コンパイルテスト)
GOOS=windows GOARCH=amd64 make release-client
# ngrok/bin/ windows_amd64 ngrok.exe
#Linux 32 :GOOS=linux GOARCH=386
#Linux 64 :GOOS=linux GOARCH=amd64
#Windows 32 :GOOS=windows GOARCH=386
#Windows 64 :GOOS=windows GOARCH=amd64
#MAC 32 :GOOS=darwin GOARCH=386
#MAC 64 :GOOS=darwin GOARCH=amd64
#ARM :GOOS=linux GOARCH=arm
簡単な構成ngrok.cfg
server_addr: "myngrok.com:8083"
trust_host_root_certs: false
リンクテストの使用
ngrok -config=ngrok.cfg -subdomain=test 80
// :
ngrok
Tunnel Status online
Version 1.7/1.7
Forwarding http://test.myngrok.com:8081 -> 127.0.0.1:80
Forwarding https://test.myngrok.com:8081 -> 127.0.0.1:80
Web Interface 127.0.0.1:4040
# Conn 0
Avg Conn Time 0.00ms
複雑な構成ngrok.cfg
server_addr: "myngrok.com:8083"
trust_host_root_certs: false
tunnels:
http:
subdomain: "www"
proto:
http: "8081"
https:
subdomain: "www"
proto:
https: "8082"
web:
proto:
http: "8050"
tcp:
proto:
tcp: "8001"
remote_port: 5555
ssh:
remote_port: 2222
proto:
tcp: "22"
サービスの開始
ngrok -config=ngrok.cfg start web # web
ngrok -config=ngrok.cfg start tcp # tcp
ngrok -config=ngrok.cfg start web tcp #
ngrok -config=ngrok.cfg start-all #
// :
ngrok
Tunnel Status online
Version 1.7/1.7
Forwarding http://web.myngrok.com:8081 -> 127.0.0.1:8050
Forwarding tcp://myngrok.com:5555 -> 127.0.0.1:8001
Web Interface 127.0.0.1:4040
# Conn 0
Avg Conn Time 0.00ms
batを添付し、異なる自動起動サブドメイン名を配置できます。
@echo OFF
color 0a
Title ngrok
Mode con cols=109 lines=30
:START
ECHO.
Echo ==========================================================================
ECHO.
Echo ngrok
ECHO.
Echo : https://segmentfault.com/u/object
ECHO.
Echo ==========================================================================
Echo.
echo.
echo.
:TUNNEL
Echo , “test” , :“test.myngrok.com”
ECHO.
ECHO.
ECHO.
set /p clientid= :
echo.
ngrok -config=ngrok.cfg -subdomain=%clientid% 80
PAUSE
goto TUNNEL
まとめ
何もまとめることはありませんが、ngrokクライアントコマンドラインをもっと検討してください.
ふろく
コンパイル中に次のことが起こります.
質問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
解決方法:goインストールディレクトリのbinディレクトリの下に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:
GOOS="" GOARCH="" go get github.com/jteeuwen/go-bindata/go-bindata
# github.com/jteeuwen/go-bindata
src/github.com/jteeuwen/go-bindata/toc.go:47: function ends without a return statement
make: *** [bin/go-bindata] Error 2
: https://github.com/inconshreveable/ngrok/issues/237