배포 연대기 (중)

garaming·2022년 9월 28일
1

deployment

목록 보기
2/2
post-thumbnail

배포 연대기 상편에 이어서.. 접속 했더니 Nginx 500 에러를 마주했다..

500 에러.. 난감했지만 에러를 잡기 위해서는 어디서 발생한 것인지 힌트를 얻는게 중요하다고 생각한다. 그래서 에러 발생지를 찾기 위해 Nginx 에러 로그를 확인하는 법을 검색했다.

1. 에러 로그로 힌트 얻기

에러 로그는 /var/log/nginx/error.log 에 위치하고 있다. 따라서 cat 명령어로 에러 로그를 확인해보았다.

그 결과 rewrite or internal redirection cycle while internally redirecting to "/index.html"라는 오류 메시지를 찾았다.

바로 서버가 html 파일을 읽지 못하고 있었다. Nginx conf 파일을 확인해보니 root 경로가 잘못된 것이었다..! 도커 파일에서는 node 빌드를 한 후, 이것을 nginx의 디폴트 경로로 카피해줬었는데, root 경로가 이 디폴트 경로로 설정되어 있지 않았기 때문이었다.

올바르게 설정해주니 마침내 우리 서비스의 인트로 화면을 볼 수 있게 되었다..! 👏

2. 제 VM에서는 작동하는데요

배포도 마치고 서버와 정상적으로 통신하는 것도 확인했지만, 1GB의 컴팩트한 환경을 참지 못하고 더 넓은 집으로 이사 가기로 결심했다! 팀원 분의 오라클 클라우드 계정을 새로 파서 (물론 이번엔 서울 리전으로) 더 넓고 좋은 서울 집에서 새롭게 시작할 생각에 설렘도 잠시

...뜻밖의 에러 메세지를 마주했다.

🤔 : 아니, 코드도 다 똑같고 내 VM 환경에서는 잘 빌드 되는게 왜않되???
🐻 : 인프라는 이게 일상이야

실제로 바뀐 거라곤 늘어난 CPU, 메모리 그리고 Compute뿐이었다. 이전에는 암페어를 사용했다면 서울 리전에서는 AMD를 사용한 정도? 무수한 빨간줄을 읽어보니 백엔드 node_modules에서 bcrypt가 문제인거 같았다.

bcrypt 모듈 설치 오류가 생기는 이유

백엔드 node 서버 이미지를 생성하는 Dockerfile에서는 node:18-alpine3.15을 사용한다. alpine버전은 alpine linux을 기반으로 만들어진 경량화 버전인데, 여기에는 python이 설치되어 있지 않다.

그래서 python이랑은 무슨 상관?

그런데 bcrypt는 python으로 c/c++을 wrapping하여 사용한다고 한다. 따라서 python이 설치되어 있지 않은 alpine에서 빌드를 실행하니 에러가 발생한 것!

  • BcryptBcrypt.js로 변경해주니, 정상적으로 빌드가 완료되었다!

3. 이외에도.. etc

이외에도 자잘한 에러들이 즐겁게 반겨줬다.

  • 프론트-백 간의 포트번호가 달라서 생긴 network 오류
  • 구글 로그인 시 도메인 허용을 안해줘서 생긴 OAuth 에러

등...

하지만 여러 오류들을 해결하고 결국 배포에 성공하였다! 쉽지 않은 과정이었지만 피나는 구글링과 주위의 도움을 받은 뜻깊은 결실이었다! 그렇게 우리의 서비스는 몇 주간 VM에서 열심히 돌아가고 있었으나,,,

배포가 끝난지 한달 후 또 문제가 생겼다.

아직 끝나지 않은 배포 연대기.... 하편에서 to be continued...

profile
Connecting the dots

0개의 댓글