최근에 chainlit이나 streamlit 등을 사용해서 간단하게 챗봇을 구현하는 작업을 진행했는데, 대부분 내 로컬에서 localhost:8080과 같이 포트를 열어서 확인했다. 이 결과물을 다른 사람들과 '임시로' 공유하고 싶은데, 마땅한 방법이 없을까 찾아보다가 ngrok을 통해서 매우! 간단하게 해결했다.
chainlit에서는 9가지 정도의 방법을 제시한다. 하나씩 해봤는데, 나의 상황에서는 각각 다른 이유들로 사용할 수 없었다 😂.
Ploomber Cloud나 Replit, Fly.io, huggingface spaces 등은 업로드하는 파일의 한도가 있다. 필자는 RAG model을 사용하고 있으므로 vectorDB의 사이즈가 있어서 용량이 큰 편이라 이런 서비스들은 사용할 수 없다.
두 번째로, AWS, Google Cloud Run은 docker 기반으로 설치하는데, 하라는데로 다~~ 해도 안되더라. AWS를 사용한 과정은 다음과 같다.
- 이미지 생성
docker build -t chainlit-app:latest .
- container 생성
docker run -p 8081:8080 chainlit-app
localhost:8081에서 정상적으로 실행되는지 확인하기- 이미지에 태그 붙이기
docker tag chainlit-app 022499019172.dkr.ecr.us-east-2.amazonaws.com/juso-chatbot:latest
- AWS에 이미지 push
docker push 022499019172.dkr.ecr.us-east-2.amazonaws.com/juso-chatbot:latest
여기서 no basic auth credentials 에러 발생- 에러 해결 과정
- 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~~ 하니까 이제 정상적으로 실행됨
- elastic cluster 생성
AWS 웹 사이트에서 들어가서 생성- task 배포
이 부분에서 계속 에러 발생함. task 생성은 되는데, 실행 부분에서 계속 에러 발생
이 과정에서 삭제하고 포트 번호 바꾸고 등등 여러가지 계속 시도했으나, 결국 포기했다.
Google Cloud Run을 테스트한 과정은 다음과 같다.
- 이미지 생성
docker build -t chainlit-app:latest .
- 이미지에 태그 붙이기
docker tag chainlit-app asia-northeast3-docker.pkg.dev/프로젝트이름/chainlit-app
에러 발생함- 에러 해결 과정
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을 들어가보면 무한 로딩만 되고 실행되지 않는다. 무슨 에러인지도 모르겠어서 더 답답한...
그래서 그냥 내 localhost로 포트를 열고, 이 포트를 외부에서 공유만 하기로 했다. ngrok 세팅은 매우 간단했다. macOS를 기준으로 설명한다.
brew install ngrok/ngrok/ngrok
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은 매달 업데이트 된다고 하는데, 사용량을 잘 체크해야 할 것 같다.
위 과정만 하면, 48시간인가 72시간인가만 유효한 temperal url을 발급받게 된다. ngrok의 Tunnel Agent Authtoken에 들어가서 본인 token을 확인한 뒤 2번 코드를 실행하기 전에 아래 코드를 먼저 실행해준다.
ngrok config add-authtoken 본인authtoken
.
.
.
끝! 너무 간단해서 이전의 노력들이 허무했다는...