With all due respect, programmers who can't even be lazy are really tired~
Some time ago, WeChat official account was developed. WeChat official account was required to configure public domain name. The local ones don't work.
Set up the ngrok little white manual
- Mapping local services to the public network
- You have to prepare these
- 1. Domain name resolution
- 2. Configure security group
- 3. Install go compilation environment
- 4.ngrok version
- Download the source code of ngrok
- Generate self signed certificate
- Compile server side
- Compile client
- Start server side
- Set up local client
- A service is developed locally, which can be used immediately by colleagues without being deployed on the server.
- The official account of WeChat is developed, and can be quickly configured to test accounts with ngrok.
It's going to cost some money.
- One server. There are 99 year old servers on Alibaba cloud and Huawei cloud. Buy one.
- Buy a domain name, dozens of dollars a year.
I opened 12020, 12021, 4443
This article takes Alibaba cloud server as an example. The server must have a public address.
Need environment git, go
aliyun comes with git
There is no requirement for go language version. You can use yum install go -y
ngrok is open source, but maintenance stopped early. You can fork one. Avoid any day when the source code is deleted.
cd ~/ mkdir ngrokService cd ngrokService git clone https://github.com/inconshreveable/ngrok.git export GOPATH=~/ngrokService/ngrok/ export NGROK_DOMAIN="tunnel.Your domain name.com" cd ngrok
There are two environment variables in export. Are they useful?
The answer is useful
To build our own ngrokd service, we need to generate our own certificate and provide the ngrok client with the certificate.
openssl genrsa -out rootCA.key 2048 openssl req -x509 -new -nodes -key rootCA.key -subj "/CN=$NGROK_DOMAIN" -days 5000 -out rootCA.pem openssl genrsa -out device.key 2048 openssl req -new -key device.key -subj "/CN=$NGROK_DOMAIN" -out device.csr openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 5000
cp rootCA.pem assets/client/tls/ngrokroot.crt
cp device.crt assets/server/tls/snakeoil.crt
cp device.key assets/server/tls/snakeoil.key
Alibaba cloud is generally 64 bit. In recent years, several are 32-bit.
GOOS=linux GOARCH=amd64 make release-server #If it is a 32-bit system, GOARCH=386
Long compilation time
There are many downloads here. That way, the compilation is successful.
bin/ngrokd -domain="$NGROK_DOMAIN" -httpAddr=":8000" -httpsAddr=":4433"
No error is reported. This is the output.
GOOS=windows GOARCH=amd64 make release-client
GOOS=darwin GOARCH=amd64 make release-client
I'm using mac. I'm using scp
If you don't make a mistake, you should see something like this
scp root @ your ECS server IP address: ~ / ngrokService/ngrok/bin/darwin_amd64/ngrok ngrok-origin
Remember to copy it out. After I copy, I use ln to access this file
ln the ngrok file from your copy /usr/local/bin/ngrok
./bin/ngrokd -tlsKey=device.key -tlsCrt=device.crt -domain="tunnel.Your domain name.com" -httpAddr=":12020" -httpsAddr=":12021"
server_addr: "tunnel.Your domain name.com:4443" trust_host_root_certs: false tunnels: abc: proto: http: 12020 subdomain: ngrok
This is mine ngrok.cfg file
Then you can do it
ngrok -subdomain=wangxueming -log=ngrok.log -config=ngrok.cfg 80
-config is the configuration file above ngrok.cfg Path to -subdomain is the prefix part of the domain name to be assigned -Log is the saving path of log 80 is the port of the local webserver, such as the port apache listens to. ngrok will map the request to the port later. It depends on your configuration. What port are you listening on.
Normal operation, you will see this situation
In the server-side log, there will be such information
If you find bad cert, please check your domain name configuration.
In this article, where the domain name and port are consistent, please configure by yourself according to the situation, but also need to be consistent.
By the end of the post, the construction of ngrok, all deleted, try again. It should be OK.