ngrok 사용하기

목차

  1. ngrok이란?
  2. ngrok설치
  3. 도메인 받아서 실행하기
  4. Boot될때 ngrok이 자동으로 켜지도록 설정

ngrok이란?

ngrok 홈페이지에 가보면 이렇게 나와있다.

  1. Public URLs for building webhook integrations
  2. Public URLs for sending previews to clients
  3. Public URLs for exposing your local web server
  4. Public URLs for SSH access to your Raspberry Pi

쉽게 설명하면, 내 라즈베리파이를 마치 외부 서버처럼 쓸 수 있게 해준다는 말이다. IP주소도 주고 도메인도 준다! 돈내면 고정 도메인도 쓸 수 있게 해준다. 너무 좋다!
(다만, 당연히 라즈베리파이는 인터넷에 연결되어있어야 한다)

ngrok 설치

ngrok을 쓰려면 라즈베리파이에 ngrok을 설치해줘야한다. 이 프로그램이 해외에있는 ngrok회사의 서버와 계속 통신을 해야 하기 때문이다(아마도..).


  1. ngrok download page 에서 Linux(ARM)버전을 다운받는다.
  2. 라즈베리파이에 달려있는 SD카드를 뽑아서 노트북에 연결한 다음에 다운로드 받은 파일을 넣는다. 맥북에서는 SD카드를 꽂아도 home이라던지 이런 폴더를 볼 수가없다. 파일 시스템 구조가 다르기 때문이다. 근데 당황하지 말고 그냥 boot안에 넣으면 된다.
  3. SD카드를 다시 라즈베리파이에 꼽고 전원을 연결해서 구동시킨다.
  4. cd /boot 으로 ngrok.zip이 있는 폴더로 이동한다.
  5. /usr/bin폴더로 ngrok.zip을 이동시킨다(mv ngrok.zip /usr/bin ).
  6. /usr/bin폴더에 압축을 해제한다($ unzip ngrok.zip). 해당 폴더에 압축을 해제하면 ngrok help 등의 ngrok관련 명령어를 사용할때, ngrok 실행 파일의 path를 길게 입력하지 않아도 알아서 /usr/bin폴더에서 찾기 때문에 편하다.
  7. 이제 테스트로 ngrok help를 실행해본다. 만약에 cannot execute binary file... 에러가 뜨면 가지고 있는 라즈베리파이에 맞지 않는 ngrok을 다운받은 것이다. ngrok download page에서 Linux계열의 다른걸로 다운받아서 해보면 해결될것이다. 만약 어쩌고 저쩌고 VERSION까지 다 나오면 잘 설치가 된것이다.

이걸로 ngrok 설치를 완료했다. 사실 이상태로 ngrok을 실행시켜서 임시 도메인을 얻어가지고 쓸 수도 있지만, 그러면 ngrok을 킬때마다 webhook에 event를 보낼 도메인을 계속 바꿔줘야 하니까 귀찮기 때문에 유료계정으로 전환해서 고정 도메인을 배정받아 사용하는게 더 편할것이다.(하지만 필수는 아니다!!)

도메인 받아서 실행하기

계정 업그레이드

여기서 가격을 보고 적당한걸로 업그레이드 한다. 개인적으로 1년치를 한꺼번에 결제하는건 부담스러워서 Pro의 1달에 10달러 하는걸로 결제했다(매달 결제되는건 Pro밖에 없다…Basic은 년결제만 가능 ㅠㅠ).

도메인 생성

데쉬보드 -> Reserved에서 도메인을 생성한다.

도메인을 생성하면 저렇게 Address란에 내 도메인이 나온다(사용 중인 도메인이라 약간씩 안보이게 지웠다).

계정에 연결하기

우선은 내가 계정과 라즈베리파이에 설치된 ngrok을 연결시켜줘야한다. 그래야 내가 Pro를 사용하는지 Basic을 사용하는지 ngrok이 알 수 있기 때문이다.

저기에는 ./ngrok authtoken <내 계정의 토큰> 이렇게 되어있는데 우리는 이미 ngrok을 /usr/bin에 풀었기 때문에 ./은 안써도 된다. 아무튼 핵심은 저렇게 내 토큰을 넣어서 인증을 거쳐야 ngrok을 사용할 수 있다는 것이다.

라즈베리파이에서 ngrok실행

설명에 나와있듯이 우리가 아까 설정한 subdomain으로 ngrok을 실행시키기 위해서는 단순히 $ ngrok http -subdomain=my_custom_subdomain 8080 이렇게 해주면 된다. 8080은 포트번호이다. 그러면 http://my_custom_subdomain.ngrok.io로 들어오는 HTTP Request는 내 라즈베리파이에서 실행되는 서버로 Forwarding된다.

만약에 ngrok이 자꾸 reconnecting… 이런 에러를 뿜으면, 라즈베리파이가 인터넷에 잘 연결되어있는지를 확인해 보자. 아니면, 라즈베리파이와 내 노트북이 Lan선으로 연결되어 있는지 확인한다. 이렇게 연결되어 있으면 ngrok이 ping을 못날려서 작동을 안한다.

잘 됬으면 아래와 같이 뜰것이다.

Boot될때 ngrok이 자동으로 켜지도록 설정

라즈베리파이를 킬때마다 ngrok을 실행하는건 귀찮다. 그래서 라즈베리파이가 켜질때 자동으로 ngrok도 같이 실행되도록 해야한다.

ngrok.yml

ngrok 명령어를 사용할때 뒤에 옵션으로 subdomain이라던지 port같은거를 덕지덕지 붙이는것 보다 깔끔하게 설정 파일을 만드는게 좋다.

sudo nano /home/pi/.ngrok2/ngrok.yml

ngrok.yml파일 안에 아래와 같이 적어준다.

authtoken: my_authtoken
tunnels:
  custom_tunnel_name:
    proto: http
    addr: 8080
    subdomain: my_subdomain
  1. authtoken : ngrok dashboard에서 확인 가능
  2. custom_tunnel_name: 원하는 글자 아무거나 넣어도 됨(myServer 이런식으로)
  3. my_subdomain : ngrok에서 발급받은 서브 도메인 을 넣어야함

ngrok start myServer이렇게 해주면 알아서 .ngrok2/ngrok.yml을 참고해서 실행한다.

ngrok.service

/home/pi/ngrok.service 파일을 하나 만들고 아래와 같이 써준다.

[Unit]
Description=ngrok
After=network.target

[Service]
ExecStart=/usr/bin/ngrok start --all --config /home/pi/.ngrok2/ngrok.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
IgnoreSIGPIPE=true
Restart=always
RestartSec=3
Type=simple

[Install]
WantedBy=multi-user.target

나도 잘은 모르지만, 어떤 프로그램을 background process에서 돌리거나 처음에 booting되자마자 실행되는 프로그램을 service라고 하는것 같다.

이제 ngrok.service파일을 /lib/systemd/system/안으로 옮긴다.

sudo mv ngrok.service /lib/systemd/system/

그리고 아래와 같이 ngrok.service를 service프로그램에 등록시키고 실행한다.

sudo systemctl enable ngrok.service
sudo systemctl start ngrok.service

(참고로 저는 이 오픈소스를 보고 이 글의 문맥에 맞게 고쳐쓴것이니, 자세한 내용이 궁금하면 저걸 확인하길 바랍니다.)

이제 라즈베리파이를 껏다 키고(sudo reboot), 잠시후에 ngrok사이트에 들어가서 Status를 확인해 보면 아래와 같이 나올것이다.

참고

  1. https://github.com/inconshreveable/ngrok/issues/345
  2. https://github.com/vincenthsu/systemd-ngrok

마지막으로

긴 글 읽어주셔서 감사하고, 어려운점이나 잘못된 내용이 있으면 댓글로 남겨주시기 바랍니다.

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다

Up Next:

Ping이 작동 안할때

Ping이 작동 안할때