아이마스DB) Alpha v10.05.2 업데이트 내역/Django+nginx+uwsgi 삽질기

2018. 10. 7. 21:14프로젝트(완료)/아이돌DB

본 프로젝트는 ngdb.kr에 있는 아이돌생일 프로젝트를 리메이크 위한 프로젝트이며

모든 소스코드는 https://github.com/Blgada12/idolDB_Django에 공개됨을 말씀드립니다.

사진의 모든 저작권은 반다이 남코 엔터테이먼트에게 있으며 영리 목적으로 사용하지 않음을 알려드립니다.



업데이트 기간이 늘어나 10월 7일날 작성하게 되었다.


우선 참고한 사이트를 2개 작성하겠다.

https://wikidocs.net/6611

https://cjh5414.github.io/how-to-deploy-django-uwsgi-nginx-in-ubuntu/


우선 주인장이 겪은 엄청난 일들을 말해주겠다.


1. 장고 배포에선 media_url 사용 불가!


장고 공식 튜토리얼에서 하는 말이

'유저가 마음대로 추가할 수 있는 media라는 파일관리는 실제 장고 서비스를 할땐 매우 불안정해지므로 절대 쓰지 마라!'


이걸 보고 처음 들은 생각이. 아니 노가다로 다 파일 옮겨서 이름마저 옮겨요??


주인장이 해결한 방법은 좀 간단하다.

우선 

STATICFILES_DIRS = [
MEDIA_ROOT
]

이렇게 스태틱 폴더에 미디어 폴더를 추가시키고

 python manage.py collectstatic

하니까 잘 모아지더라.


이런 식으로 media에 박혀있는 많은 파일들이


그냥 스태틱 파일들과 같이 아름답게 들어간다.


근데 또 여기서 문제가 생겼다.

img 태그에서 src={{ idol.mainPicture.url }} 을 하면

ngdb.kr/media/파일이름

이렇게 넘어가서 당연히 서빙할때 안나타나신다.

그래서 한게

<img id="{{ pro.name }}" class="pro_select_img_checked" src="/static/{{ pro.logo.name }}" >

이런식으로 때려박았다.


더 좋은 방법이 있을진 모르겠지만 지금 생각할 수 있는 최적의 방법이라 바로 시도하였고, 결과는 완벽했다!


2. 도데체 config라는 모듈이 없다는게 뭔데??


사실 이 문제는 단순한 변수명 착각과 똑같지만, 변수명 착각과는 또 다른 장고 프로젝트에 대한 이해가 있어야 해결이 가능하여 주인장도 2일동안 머리를 싸매다가 해결했다.


지금 필자의 장고 프로젝트는 이런 모양이다. 디버깅과 서빙을 나누기 위해 저런 방식을 택했다.


여기서부터 중요하다

세팅에 있는 곳에선 wsgi랑 엮이기 위한

WSGI_APPLICATION = 'ngdb.wsgi.deploy.application'

라는 부분이 있고,


또한 wsgi가 있는 곳엔 세팅과 엮이기 위한

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "ngdb.settings.deploy")


이라는 부분이 있다.


두개가 서로를 잘 보고 있어야 한다.

장고 프로젝트를 실행시킬땐 세팅에 먼저 가서 wsgi를 살피지만(--settings=ngdb.settings.deploy 이런식으로)

uwsgi를 쓸때는 wsgi에 먼저 가서 엮인 세팅으로 넘어간다.


둘이 잘 연결되어있는지, 이름이 틀리지 않았는지 잘 확인해야한다.


3. 아니 왜 리프레시가 안되???


주인장은 단순히 nginx를 재시작하면 바뀐 프로젝트가 적용될거라 생각했다.

근데 그건 아니었다.


이미 있는 uwsgi 설정도 같이 바꿔줘야 하기 때문에


uwsgi --ini ngdbWeb_uwsgi.ini와

sudo systemctl restart nginx 를 쳐야

비로소 적용이 된다.


이렇게 삽질이 끝나고, 서버에 완벽하게 구동이 되어지고 있다.