인프런 커뮤니티 질문&답변

mnmndevlol님의 프로필 이미지

작성한 질문수

작정하고 장고! Django로 Pinterest 따라만들기 : 바닥부터 배포까지

52강까지 아주 힘들게 성공했는데 문의 드립니다.

작성

·

262

0

아래와 같은 에러가 났는데 정말 너무 힘들게 고쳤습니다.

너무 간단한 문제였는데 문제를 수정후 서버에 반영하는 명확한 방법을 몰라서 포기하기 직전까지 갔었던 것 같아서 문의드립니다.

Invalid HTTP_HOST header: '아이피주소:8000'. You may need to add '아이피주소:8000' to ALLOWED_HOSTS.

너무 당황했는데 어떻게 해야할줄 모르고 정말 오래 검색을 하면서 이것저것 해봤는데 계속 똑같은 에러가 났어요.

vultr로 가서 서버도 재시작 해보고..
포테이너에서컨테이너며 이미지며 다 껐다켰다 해보고
아예 포테이너까지 다 지웠다가 다시 설치 해보고 또 다시해보고..
쿠키도 다 삭제해보고 난리를 쳐도 안되더라구요.
끝까지 저렇게 저 해당 에러가 계속 뜨는거에요..

그렇게 그냥 여기까지 와서 강의를 포기하기 직전이었는데.. 지금 방금 "마지막이다" 하며 또 다 지우고 다시 하니까 갑자기 됐습니다.

제가 궁금한건..

Dockerfile을 수정하면 어떻게 적용을하나요?
그리고, 깃허브에 새로 푸쉬하면 그건 어떻게 적용시키는건가요?

서버가 실행중이니까 당연히 그냥 FTP로 파일 하나 덮어씌워 올리는 것 처럼
깃 푸쉬 하면 그냥 바로 적용되는 그런 개념인줄 알았는데.. 

분명 셋팅스에서 설정을 바꿨는데도 바로 적용이 안된것이..

원래 서버에 적용되는데 오래걸리는건지..
원래 뭐 하나 올리면 이미지를 다시 만들거나 컨테이너를 다시 만들거나 해야하는지..
대체 왜 안되는건지 모르겠어서 계속 서버를 껐다켰다 지웠다 새로만었다 하면서 너무 고통스럽더라구요.
제가 뭘 만져도 안된다고 여기게 돼서 포기하기 직전까지 갔던 원인인 것 같습니다.

제가 제 사이트에 접속 안되는걸 발견한 후에 그 상태로부터 만진건 결국
셋팅스의 ALLOWED_HOSTS = ['*'] 별표시가  안되어있었고..
그리고, 배포시에 DEBUG = False 로 해야한다는거 어렴풋이 기억나서 그것도 해봤는데요.
(해야하나요? 지금 확신없이 막 어떻게든 해보다가 False로 되어있긴 한데  이거 또 만지면 어떻게 적용시는지 잘 모르겠어서요. 이번에 또 에러나면 어떻게 적용할 수 있는지 모르고 또 그럴까봐 못만지겠네요)

일단 그래서 
ALLOWED_HOSTS 부분 *표로 치고 서버에 올리기 전에 관련된 작업을 하는 강좌가 몇강인지 찾아보고 싶어서 나름 질문 안하고 해보려고 찾아봤는데 도무지 못찾아서 이점도 문의드리고 싶습니다.
46강부터 52강까지 계속 열심히 보긴 봤는데 좀 정확하게 서버에 올리기 전에 하는 작업들에 대한 강의가 몇강인지 알려주시면 다시 공부해보고 싶습니다. 

(혹시 모바일 접속시에 * 해놨던게 지금까지 유지됐었던가 싶기도 하네요 저는 그강좌 해보고 무서워서 *을 바로 삭제해가지고..)

감사합니다!

답변 3

1

mnmndevlol님의 프로필 이미지
mnmndevlol
질문자

바로 다음강의에서도 막혔었는데 답변해주신 설명 완벽히 이해하고 잘 넘어갑니다! 알고보니 알려주신게 정말 꿀팁이네요! 

1

Hyong Sok Park님의 프로필 이미지
Hyong Sok Park
지식공유자

안녕하세요!
질문 확인했습니다.

아무래도 이 부분에 있어서 어려움을 갖는 분이 종종 있으신 듯 하여
관련한 영상을 하나 따로 찍어 올리는 것도 생각해봐야 할 것 같습니다.

제가 강좌 내에서 

RUN echo 'testing'

과 같은 의미없는 명령을 하나 섞어주어야 git 의 변경사항이 반영된다고 
말씀을 드리긴 했지만, 지금 다시 보면 그렇게 중요하게 강조하면서 짚지는 않았습니다.

그러니까, 질문자님이 주신

Dockerfile을 수정하면 어떻게 적용을하나요?
그리고, 깃허브에 새로 푸쉬하면 그건 어떻게 적용시키는건가요?

라는 질문에 답하자면, 
Dockerfile을 수정했다면, 해당 Dockerfile을 기반으로 새로운 이미지를 만들어야합니다.

그리고 깃헙에 새로 푸쉬된 소스를 해당 이미지에 적용시키는 것도
새로운 이미지를 만듦으로써 적용이 가능합니다.

저희가 강좌에서 소스가 조금씩 바뀔때마다 이미지를 새로 만든것 처럼요.

그런데, 아무래도 질문자님의 경우에는 변경된 git 소스가 제대로 이미지에 반영이 되지 않았던 것 같습니다.

물론 제가 생각하는 이유가 틀렸을 수도 있지만, 
제가 추측하는 문제를 알려드리겠습니다.


Docker 시스템에서 이미지를 만들때에는, 
이미지를 완전 새로 만들지 않습니다.

기존에 만들었던 이미지가 있다면, 
해당 Dockfile 파일 내에서 바뀐 부분부터 새로 이미지를 생성합니다.

예를 들어보겠습니다.


FROM
python:3.9.0

WORKDIR /home/

RUN echo "testing1234"

RUN git clone https://github.com/noeul1114/pragmatic.git

WORKDIR /home/pragmatic/

RUN pip install -r requirements.txt

위의 소스가 기존의 dockerfile 이고,


FROM
python:3.9.0

WORKDIR /home/

RUN echo "testing1234"

RUN git clone https://github.com/noeul1114/pragmatic.git

WORKDIR /home/pragmatic/

RUN pip install -r requirements_deploy.txt

위의 소스가 새로운 소스코드라고 생각해보겠습니다.

그리고 새로운 Dockerfile을 기반으로 이미지를 만들기 이전에
기존의 Dockerfile 기반으로도 이미지를 만들었다는 상황이라고 생각하겠습니다.

그렇다면 Docker는 어떻게 이미지를 만들까요?

Docker는 RUN pip install -r requirements_deploy.txt  명령부터 새로운 이미지를 만듭니다.
그러니까, 기존 Dockerfile 과 비교해서 변경된 명령어부터 이미지를 만든다는거죠.

그 말인즉슨, WORKDIR /home/pragmatic/ 까지의 코드는 새로운 이미지에 반영이 되지 않습니다. 

이는 Docker가 이미지를 만들면서
캐쉬 이미지를 저장하기 때문입니다.

왜 캐쉬이미지를 만드냐는 의문에는,
빌드과정을 모두 다시 하는것보다 변경된 부분만 새로 빌드하는게 더 효율적이라 그렇게 만든거라고 추측이 됩니다.

그리고 이 캐쉬 이미지는 명령어 하나하나씩 모두 생깁니다.
그렇기 때문에 바뀐 Dockerfile 명령어부터 새로이 이미지가 만들어지는거죠.


FROM
python:3.9.0

WORKDIR /home/

RUN echo "testing1234"

RUN git clone https://github.com/noeul1114/pragmatic.git


WORKDIR /home/pragmatic/

RUN pip install -r requirements_deploy.txt

그렇게 된다고 이해하고서 다시 위의 코드를 보게되면,
새로 이미지를 만들때,
저희가 django 소스코드를 가져오는 git clone 부분 또한 캐쉬되어
Github 에 반영된 최신 소스코드 기반으로 이미지를 만드는 것이 아니라
기존의 구 소스코드 기반으로 이미지가 만들어지게 됩니다.

그래서 

...

RUN echo "testing1234623"

...

와 같은 의미없는 명령어를 조금 변경하라고 말씀을 드린거죠.

그래야 git clone 에 해당하는 부분도 다시 빌드되어,
최신 git 소스를 반영할 수 있습니다.


CLI 환경에서 docker 명령어를 사용하게 되면,

docker image build -t <image_name>:<tag> --nocache .

이런식으로 캐쉬 없이 완전 새로운 이미지를 빌드하는 옵션을 사용할 수 있지만,
Portainer 환경에서 해당 기능이 아직 지원되지 않아서 
echo 와 같은 명령어 변경을 통해 이미지를 새로 만드는 방법을 사용하였습니다.

아무튼 문제 해결과 이해에 도움이 되셨으면 좋겠습니다.
답변으로도 의문점이 해결되지 않는다면,

계속 질문 남겨주시길 바랍니다.

감사합니다-

0

mnmndevlol님의 프로필 이미지
mnmndevlol
질문자

와 정말 너무 감사드립니다. 한글자한글자 완전 감사히 읽으면서 오늘내일도 완전 열심히 달리겠습니다!