Yuk Hosting Sendiri ngrok-mu
Siapa sih yang ga kenal ngrok? aku rasa semua developer khususnya web dev baik itu frontend atau backend pasti pernah menggunakan ngrok atau service semacamnya.
Singkatnya ngrok itu adalah service tunnel yang mana mampu meng-expose service dari local komputer (device) kita ke internet. sehingga kita bisa mengakses service kita dari manapun dan kapanpun asalkan ada jaringan internet.
Biasanya service semacam ini kita gunakan untuk demo app atau service ke client sehingga client bisa langsung mencoba sendiri tanpa kita harus ribet deploy app kita ke VPS.
ngrok sendiri sebenarnya mempunyai fitur gratis yang kita bisa gunakan dengan mudah, tetapi seperti halnya service gratis lainnya ngrok gratis mempunyai beberapa limitasi seperti diantaranya, kita tidak bisa mengganti domain name, subdomain akan dipilih secara random, 1 online process, maksimal 4 tunnel, serta 40 connections per minutes.
Kalau untuk 1 service saja sih masih oke lah, tapi kalau kita ada banyak service gimana?
Eits, santuy brader. Kita bisa self hosted sendiri ngrok kita, walaupun kita harus agak effort dan modal dikit sih. tapi worth it sih menurutku. Oke langsung saja ya ke bahan-bahan yang kita perlukan.
- VM (Saran saya gunakan OS ubuntu, karena tutorial ini untuk OS ubuntu ya ... hehe)
- Domain (bisa daftar domain gratis di freenom, kemudian transfer domain tersebut ke cloudflare ya biar mudah manage DNS-nya)
- Kopi (Opsional sih, kalau aku teh tjatoet anget tawar hehe)
- Niat
Setelah semua bahan-bahan tersebut kalian siapkan, langsung saja kalian masuk ke VM kalian melalui ssh (as root) lalu lakukan update dan upgrade package ya
apt update && apt upgrade -y
install beberapa package penunjang
apt install git make automake autoconf gcc wget software-properties-common -y
download dan install golang
wget https://dl.google.com/go/go1.13.8.linux-amd64.tar.gz &&\
tar -C /usr/local -xzf go1.13.8.linux-amd64.tar.gz &&\
echo 'export PATH=$PATH:/usr/local/go/bin' >> $HOME/.profile &&\
source $HOME/.profile && mkdir -p $HOME/go
masuk ke DNS management kalian (saranku di cloudflare), lalu tambahkan dua record type A (@ dan *) lalu pointing ke IP address VM kalian ya

setelah itu, kita install certbot untuk membuat sertifikat SSL kita.
add-apt-repository universe
add-apt-repository ppa:certbot/certbot # untuk ubuntu dibawah 21.04
apt update && apt install certbot -y
setelah terinstal certbot yuk kita generate setifikatnya
certbot -d tunnel.domain-saya.com -d *.tunnel.domain-saya.com --manual --preferred-challenges dns certonly
ganti domain-saya.com
dengan domain kalian sendiri ya. Nanti kalian akan diminta untuk memverifikasi dengan menambahkan new record di DNS kalian dengan type TXT
dan value isi dengan yang muncul di terminal kalian ya.

Jika sudah ditambahkan di DNS, lalu klik enter di terminal guys.
Jika benar, maka file sertifikat kalian akan berada di /etc/letsencrypt/live/<domain-saya.com>/
Sekarang kita build binary ngrok untuk server yuk guys.
git clone https://github.com/inconshreveable/ngrok.git &&\
cd ngrok && make release-server &&\
cp bin/ngrokd /usr/local/bin &&\
cd .. && rm -rf ngrok
Oke sekarang binary ngrok server (`ngrokd`) udah ada di /usr/local/bin
, selanjutnya kita buat service yuk biar ngrok server nya autostart ketika VM kita restart
cat <<EOF >> /etc/systemd/system/ngrokd.service
[Unit]
Description=ngrokd service
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/usr/local/bin/ngrokd -tlsKey="/etc/letsencrypt/live/domain-saya.com/privkey.pem" -tlsCrt="/etc/letsencrypt/live/domain-saya.com/fullchain.pem" -domain="domain-saya.com"
[Install]
WantedBy=multi-user.target
EOF
jangan lupa ganti domain-saya.com
ya. setelah itu tinggal kita start dan enable deh
systemctl start ngrokd
systemctl enable ngrokd
Sampai disini ngrok server kita sudah running. terakhir kita tinggal build ngrok client di local komputer kita guys
git clone https://github.com/inconshreveable/ngrok.git &&\
cd ngrok/assets/client/tls &&\
wget https://letsencrypt.org/certs/trustid-x3-root.pem.txt &&\
echo $(cat trustid-x3-root.pem.txt) > ngrokroot.crt &&\
cd ../../../ &&\
make release-client
nah kalian akan temukan file binary ngrok client (`ngrok`) di dalam folder bin
. kalian copy ke path sesuai env kalian ya. karena aku pakai linux aku copy ke /usr/local/bin
lalu buat executable chmod +x /usr/local/bin/ngrok
setelah itu kita buat file config untuk ngrok ya
cat <<EOF >> $HOME/.ngrok
server_addr: domain-saya.com:4443
trust_host_root_certs: true
EOF
terakhir tinggal kita gunakan deh ngroknya, misal kita mau expose service kita di port 3000 ke contoh-backend.tunnel.domain-saya.com
ngrok -subdomain contoh-backend 3000