Django 배포 (Deployment)
디버그 모드 (Debug Mode)
디버그 모드는 에러가 발생했을 때 자세한 에러 페이지를 표시한 것이다.
기본적으로 Django 프로젝트를 생성하면 settings.py에 디버그 모드가 켜져 있는 상태로 만들어진다.
# settings.py
...
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
...
디버그 모드가 켜져 있으면 웹 브라우저에 우리 프로젝트에 대한 자세한 로그를 보여 주는데 개발 중에는 에러가 발생했을 때 쉽게 수정할 수 있게 도와주는 기능이지만
배포 시에는 이와 같은 자세한 로그가 프로젝트의 소스 코드와 여러 설정 값을 노출해서 보안 이슈로 이어지기 때문에 꼭 디버그 모드를 꺼주어야 한다.
그리고 디버그 모드를 끄게 되면 실제로 ALLOWED_HOSTS에 있는 호스트(hosts) 외에는 접속이 차단 되어 더이상 내 컴퓨터에서도 접속이 되지 않는다.
그래서 DEBUG 모드를 끄게 되면 호스트를 꼭 적어줘야 한다.
호스트 설정 (Allowed Hosts)
호스트(Host)란 쉽게 말하면 네트워크상의 컴퓨터를 말한다.
요청하는 호스트가 바로 클라이언트고 요청에 대해 응답을 하는 호스트가 서버이다.
우리가 ALLOWED_HOSTS에 적는 호스트는 우리가 만든 Django 프로젝트로 들어오는 요청에 대해 응답을 할 수 있는 호스트 즉, 서버의 주소를 적어 주는 것이다.
처음에는 이렇게 비어있는 상태로 생성된다.
# settings.py
...
ALLOWED_HOSTS = []
...
이렇게 비어있는 호스트이면서 디버그 모드가 켜져 있는 경우에는 [ 'localhost', '127.0.0.1', '[::1]' ]과 같은 의미가 되어
로컬 호스트(localhost).. 즉 내 컴퓨터에서 접속이 가능한 상태가 된다.
그런데 디버그 모드를 끄게 되면 ALLOWED_HOSTS에 적혀있는 호스트 외에는 일체 접속이 차단되기 때문에 심지어 내 컴퓨터에서도 접속이 안됨!
그래서 우리가 배포할 서버와 내 컴퓨터에 대해 허용해주기 위해 ALLOWED_HOSTS 리스트에 호스트를 추가해주는 것이 필요하다.
우리는 pythonanywhere를 사용할 것이기 때문에 '.pythonanywhere.com' 을 넣어줄 것이다.
정적 파일 관리 (Static Files)
프로젝트를 개발할 때는 각 앱 별로 정적 파일을 위한 디렉토리를 두고 관리하겠지만 배포 후 실 서버에서는 정적 파일을 하나의 경로 안에 두고 사용하게 된다.
그래서 흩어져있는 정적 파일들을 하나의 경로로 모두 모아 주어야 한다.
settings.py에 STATIC_URL이라는게 있는데 얘는 프로젝트 내부를 기준으로 한 정적파일 경로이고
그 밑에 STATIC_ROOT라는 것을 만들 것이다.
여기가 실제로 정적 파일이 모아지는 경로이고, 장고 프로젝트에서 사용하는 모든 정적 파일이 이 경로에 복사된다.
STATIC_ROOT = os.path.join(BASE_DIR, 'static') 라고 적어줄 것이다.
이건 base 아래에 static이라는 정적 파일을 두고 그곳에 모든 정적 파일을 두겠다고 명시해준 것이다.
이제 정적 파일을 한곳에 모아야 하는데
이 때 collectstatic 라는 명령어를 사용하면 흩어져 있는 정적 파일을 settings.py에 명시되어 있는 STATIC_ROOT 경로로 복사해서 모아 준다.
이제 프로젝트 디렉토리 아래를 보면 static이라는 폴더가 생성되어 있고 안에 이쁘게 정리되어 있다.
여기서 admin은 장고에서 기본적으로 제공하는 관리자 앱에 대한 정적 파일이다.
STATIC_URL과 STATIC_ROOT의 차이
STATIC_URL은 실제 존재하는 경로가 아니라 웹 페이지에서 사용할 정적 파일에 대한 URL이다.
쉽게 말해서 정적 파일들에 붙여 놓는 하나의 태그 같은.. 느낌이다.
예를 들어 STATIC_URL='/static_files/' 라고 하면 정적 파일에 대한 URL은~/static_files/정적 파일의 형태로 할당이 된다.
반면에 STATIC_ROOT는 실제 존재하는 경로로 Django 프로젝트에서 사용하는 모든 정적 파일이 이 경로에 존재하고
웹 서버가 정적 파일을 찾기 위해 참조하는 실제 경로이다.
프로젝트 디렉토리 전체 압축
압축했고 바탕화면에 빼줬다.
pythonanywhere 접속해서 설정하기
https://www.pythonanywhere.com/
홈페이지로 들어가서 sign up 해준다.
Files 들어가서 Upload a file 눌러서 아까 만든 zip 파일 업로드한다. 그러고 Open Bash Console here 누르삼
들어갔으면 ls로 zip 파일이 있는지 확인하고 unzip 해준다.
이 다음부턴 걍 코드만 쓰겠음..
virtualenv --python=python3.7 django-envs
ls 로 django-envs가 있는지 확인
cd django-envs/
source bin/activate
pip install django==2.2
파이썬이나 장고 버전은 알아서..
그러고 오른쪽 삼지창 눌러서 Web 으로 들어간다.
Add해서.. 여기서 맨 밑에 manual 저거 누르고 파이썬 버전 선택하면 된다.
생성이 되었다면
Code 부분으로 가서 Source code에 /home/{만든 id}/{프로젝트명} 을 입력해준다.
나같은 경우 /home/seo/costaurant
그리고 미밑에 WSGI configuration file을 누른다
밑에 DJANGO 부분 주석 해제하고 path 아까 설정한 부분으로 설정해준다.
하고 save 해준다.
virtualenv 부분에 /home/{id}/{가상환경 이름} 을 넣어준다.
Static files에 URL과 Directory 부분을 저런식으로 채워준다.
이제 모든 설정이 끝났다~~!
맨 위로 가서 Reload 버튼을 눌러준 후 그 위에 있는 주소로 들어가면 된다.
'컴퓨터 > WEB' 카테고리의 다른 글
[Django] 장고 User 모델 OneToOneField로 확장해서 사용하기 + 토큰으로 로그인하기 (0) | 2022.05.14 |
---|---|
[Web] 로그인 메커니즘, 그리고 세션과 쿠키 (0) | 2022.05.10 |
[Django] Django의 Migration (0) | 2022.04.30 |
[Django] Template Language (0) | 2022.04.28 |
[Django] django의 MVT 구조 (0) | 2022.04.28 |