swsnu / swppfall2022

Learning Software Engineering By Building Web Services
30 stars 10 forks source link

[Project] 배포 관련 질문 #196

Open diffzerg opened 1 year ago

diffzerg commented 1 year ago

image 다름이 아니라 프로젝트 관련 배포 진행을 테스트 중인데, 백엔드의 경우 도커 빌드는 잘 실행되나 run_backend.sh 파일을 찾지 못하는 상황이고 프론트엔드의 경우는 도커 빌드가 실행되는 중간에 Module Not Found Error가 발생합니다.

두 문제 모두 무언가 경로 설정의 오류로 보이는데, 혹시 동일한 현상을 겪었거나 해결하신 분 있으실까요?

jaewooMaeng commented 1 year ago

해당 문제의 경우 직접 보면서 해결해야할 것으로 보입니다. Dockerfile에서 RUN, CMDENTRYPOINT로 정의하신 부분을 제외하고 docker image를 만드신 후, image에서 container를 만들어 각 단계를 직접 입력해보시는 것을 추천드립니다. 해결에 아직 어려움을 겪고 계시다면 미리 연락을 주시고 office hour에 방문해주셔도 좋습니다.

diffzerg commented 1 year ago

일단 말씀해주신 대로 시도 후 다시 말씀드리겠습니다! 감사합니다

diffzerg commented 1 year ago

@jaewooMaeng image

현재 위에 사진에서 백엔드의 오류를 수정하였습니다. 다만 프론트엔드의 경우에는 계속 오류가 나서 조언해주신 대로 Dockerfile에서 RUN, CMD와 ENTRYPOINT 부분들을 제외하고 직접 컨테이너에서 명령어를 입력해 보았는데요, 도커 내부에 /usr/app/src/App.tsx 파일이 정상적으로 존재함에도 불구하고 import App from './App' 에서 error가 발생합니다.

무언가 경로 문제인가 싶어 ./App.tsx로 코드를 변경하니 그 부분에서 에러가 뜨지 않고, 다른 부분에서 에러가 뜨는 것을 확인했습니다. image

image

TS2691: An import path cannot end with a '.tsx' extension. Consider importing './App.js' instead.
    2 | import ReactDOM from 'react-dom/client'
    3 | import './index.css'
  > 4 | import App from './App.tsx'
      |                 ^^^^^^^^^^^

물론 저렇게 수정한다고 해도, 모든 코드를 수정하기도 힘들 뿐더러 수정하면 로컬에서는 위와 같은 오류가 떠서 현실적인 수정 방법은 아닙니다.

도커의 절대 경로와 typescript의 무언가가 충돌해서 벌어지는 일 같기는 한데, 구글링을 해보아도 딱히 나오는 결과가 없어서 다시 질문드립니다.

jaewooMaeng commented 1 year ago

@diffzerg 안녕하세요. 실행하셨을 때 tsconfig file도 docker container안에 복사가 되어있지 않아 발생한 오류일 수 있을 것 같습니다. 실습에서는 npm run build --prod --silent 도중 자동으로 typescript의 존재를 알아채고 자동으로 default tsconfig를 만들어주도록 진행되었습니다. 우선 COPY를 통해 tsconfig를 복사하고 진행을 해보고시고, 그래도 error가 난다면 조교들이 team이 사용하는 aws instance에 접근해볼 수 있도록 setting 해주시면 한번 보겠습니다. 만약 접속해볼 수 있도록 세팅하신다면 linux user의 passwd를 바꾸고 ta메일로 ip, passwd 등을 알려주세요.

gajagajago commented 1 year ago

프론트엔드 도커 빌드한 디렉토리를 기준으로 내부 서브디렉토리 구조와, 프론트엔드 도커파일 내용 첨부해주시면 도움이 될 것 같습니다

diffzerg commented 1 year ago

알려주신 대로 시도해보고 말씀드리겠습니다! 감사합니다

diffzerg commented 1 year ago

@jaewooMaeng @gajagajago 조교님들 안녕하세요... 아마 진짜 마지막 질문이 될 듯 합니다..

tsconfig.json 파일을 붙여 넣기 해 주었더니 빌드는 성공하였는데, 도커를 실행하여 보니 다음과 같이 fullchain.pem 파일을 찾지 못하는 것 같습니다. image

파일의 linking도 잘 되어 있는 것 같고, 스크립트에도 문제가 없어 보이는데 실제로 docker -it로 폴더를 확인해보면 폴더가 비어 있었습니다 (마지막 ENTRYPOINT 스크립트를 주석처리하고 실행해 보았습니다) 파일이 제대로 복사되지 않는 경우 실제로 COPY 명령어를 통해 넣어 주어야 할까요??

image image image

image

gajagajago commented 1 year ago

letsencrypt에서 만들어주는 두 파일인 fullchain과 key 파일이 들어있는 디렉토리를 chmod 하셔야 제대로 마운팅이 됩니다. 실습 ppt를 참고해주세요 (chmod -R 755)

diffzerg commented 1 year ago

chmod로 디렉토리 권한을 바꾸어 주었는데도 인식하지 못해서 스크립트를 수정했더니 올바르게 동작합니다...!

sudo docker run -d --rm \ --name "frontend" \ -p 443:443 \ -v $ENCRYPT_SSL_FULLCHAIN_PATH:$CONTAINER_SSL_FULLCHAIN_PATH \ (원래 $ENCRYPT_SSL_FULLCHAIN_PATH/:$CONTAINER_SSL_FULLCHAIN_PATH) -v $ENCRYPT_SSL_PRIVKEY_PATH:$CONTAINER_SSL_PRIVKEY_PATH \ (원래 $ENCRYPT_SSL_PRIVKEY_PATH/:$CONTAINER_SSL_PRIVKEY_PATH) frontend:latest

다음과 같이 run_frontend script를 수정하니까 되었습니다. 경로 문제였네요! (마지막에 /를 지워야 되는 듯 합니다 실습때 왜 잘 동작했는지는 잘 모르겠네요) 혹시 비슷한 문제를 겪는 수강생 분들이 있으면 참고하시면 될 듯합니다.. 조교님 끝까지 친절하게 답변해주셔서 감사합니다 ㅎㅅㅎ