ngrok을 이용한 localhost 임시 deploy하는 방법

JeongYun Lee·2024년 8월 12일
0

Developing

목록 보기
3/7

최근에 chainlit이나 streamlit 등을 사용해서 간단하게 챗봇을 구현하는 작업을 진행했는데, 대부분 내 로컬에서 localhost:8080과 같이 포트를 열어서 확인했다. 이 결과물을 다른 사람들과 '임시로' 공유하고 싶은데, 마땅한 방법이 없을까 찾아보다가 ngrok을 통해서 매우! 간단하게 해결했다.

시행착오 (패스해도 됨)

chainlit에서는 9가지 정도의 방법을 제시한다. 하나씩 해봤는데, 나의 상황에서는 각각 다른 이유들로 사용할 수 없었다 😂.

Ploomber Cloud나 Replit, Fly.io, huggingface spaces 등은 업로드하는 파일의 한도가 있다. 필자는 RAG model을 사용하고 있으므로 vectorDB의 사이즈가 있어서 용량이 큰 편이라 이런 서비스들은 사용할 수 없다.

두 번째로, AWS, Google Cloud Run은 docker 기반으로 설치하는데, 하라는데로 다~~ 해도 안되더라. AWS를 사용한 과정은 다음과 같다.

  1. 이미지 생성
    docker build -t chainlit-app:latest .
  2. container 생성
    docker run -p 8081:8080 chainlit-app
    localhost:8081에서 정상적으로 실행되는지 확인하기
  3. 이미지에 태그 붙이기
    docker tag chainlit-app 022499019172.dkr.ecr.us-east-2.amazonaws.com/juso-chatbot:latest
  4. AWS에 이미지 push
    docker push 022499019172.dkr.ecr.us-east-2.amazonaws.com/juso-chatbot:latest
    여기서 no basic auth credentials 에러 발생
  5. 에러 해결 과정
  • aws 자격증명: brew install awscli 설치 (이렇게만 했을 땐 안됨)
  • 추가: aws ecr get-login-password --region us-east-2 | docker login --username AWS --password-stdin 022499019172.dkr.ecr.us-east-2.amazonaws.com
    이후 다시 docker push~~ 하니까 이제 정상적으로 실행됨
  1. elastic cluster 생성
    AWS 웹 사이트에서 들어가서 생성
  2. task 배포
    이 부분에서 계속 에러 발생함. task 생성은 되는데, 실행 부분에서 계속 에러 발생

이 과정에서 삭제하고 포트 번호 바꾸고 등등 여러가지 계속 시도했으나, 결국 포기했다.

Google Cloud Run을 테스트한 과정은 다음과 같다.

  1. 이미지 생성
    docker build -t chainlit-app:latest .
  2. 이미지에 태그 붙이기
    docker tag chainlit-app asia-northeast3-docker.pkg.dev/프로젝트이름/chainlit-app 에러 발생함
  3. 에러 해결 과정
  • brew install --cask google-cloud-sdk 설치
  • gloud auth configure-docker asia-northeast3-docker.pkg.dev 실행
    여전히 안돼서 아래 방법으로 다시 진행
  • gcloud auth login
  • gloud config set project 프로젝트이름
  • gloud auth configure-docker asia-northeast3-docker.pkg.dev
  • gcloud projects add-iam-policy-binding 프로젝트 이름 --member='user:이메일주소' --role='roles/artifactregistry.writer'
    이후 다시 이미지 태그 지정 후 푸쉬
  • `docker push asia-northeast3-docker.pkg.dev/프로젝트이름/저장소명 chainlit-app:lastest

이렇게해서 정상적으로 되는 줄 알았으나! 에러도 뜨지 않는데, url을 들어가보면 무한 로딩만 되고 실행되지 않는다. 무슨 에러인지도 모르겠어서 더 답답한...

ngrok 사용하기

그래서 그냥 내 localhost로 포트를 열고, 이 포트를 외부에서 공유만 하기로 했다. ngrok 세팅은 매우 간단했다. macOS를 기준으로 설명한다.

1. 설치하기

brew install ngrok/ngrok/ngrok

2. 실행하기

localhost로 포트를 연 다음 터미널에서 이 코드를 실행해야 한다.
ngrok http http://localhost:8000
이렇게 하면 Sesstion Status online이라는 문구와 함께 url을 제공한다. 참고로, 전원을 껐다키면 터미널이 꺼지므로 이 코드를 다시 실행해야 하고, 그럼 url이 바뀌므로 외부에 공유를 하는 상황이라면 주의해야 한다.

참고사항

  • https://ngrok.com/docs/guides/limits/
    'Inbound traffic: Unlimited Outbound traffic: 1gb per month for users on Free Tier' 한달에 트래픽이 1gb까지만 무료로 사용할 수 있는 것 같다. limit은 매달 업데이트 된다고 하는데, 사용량을 잘 체크해야 할 것 같다.

3. (Optional) 영구 사용 url 발급받기

위 과정만 하면, 48시간인가 72시간인가만 유효한 temperal url을 발급받게 된다. ngrok의 Tunnel Agent Authtoken에 들어가서 본인 token을 확인한 뒤 2번 코드를 실행하기 전에 아래 코드를 먼저 실행해준다.
ngrok config add-authtoken 본인authtoken

.
.
.

끝! 너무 간단해서 이전의 노력들이 허무했다는...

profile
궁금한 건 많지만, 천천히 알아가는 중입니다

0개의 댓글