[Django] Github를 통해 Pythonanywhere에 프로젝트 배포하기
※사용한지 좀 돼서 내용이 정확하지 않을 수 있습니다.
Pythonanywhere라는 사이트로 호스팅 하는 방법을 소개하고자 합니다.
시작하기 전 주의할 사항은, 요 사이트에서 다양한 웹서비스 호스팅을 돕고 가상환경(콘솔)까지 만들어주는 대신
회원등급제가 있습니다.
물론 무료로 이용가능합니다. 하지만 무료이용시 웹앱은 한개, 그에 대한 콘솔 갯수제한(2개까지)이 있고, 도메인 네임을 본인 계정 아이디로만 지정 가능합니다. 그리고 마지막으로 호스팅 기간에 제한이 있습니다. 무료로 사용한다면 공부용으로 사용해보실 분에게 추천드립니다. 더 자세한건 저도 잘 모릅니다.
1. Pythonanywhere 가입
혹시라도 특정 서비스를 호스팅할 용도의 계정이고 무료로만 이용하고자 한다면 가입시 아이디를 원하는 도메인으로 하는 꼼수를 부려도 되겠죠?
참고로 호스팅 시 주소는 [ 아이디.pythonanywhere.com ] 가 됩니다. 저는 HTTP 관련해선 뭘 건들지 않고 호스팅 했더니 https가 아닌 http로 설정되더라구요.
2. 프로젝트 설정
.git 폴더는 가상환경의 Scripts 폴더 내에 위치해야 합니다. Scripts 디렉터리를 Github에 업로드했거나, 그래야 합니다.
Scripts 폴더는 manage.py 파일을 비롯한 프로젝트, 앱 등 대부분의 장고 문서가 들어있는 곳입니다.
그리고 지금 디렉터리의 파일들은 로컬호스트로 개발하던 상태여야 합니다. 그대로 진행하겠습니다.
settings.py 파일 작업
1) 기존엔 로컬호스트 주소만 허용이 되어있죠. 호스팅하게 될 주소도 추가해줍니다.
ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '[Pythonanywhere아이디].pythonanywhere.com',]
2) 더이상 로컬의 디버깅용이 아닙니다. 방문자에게 버그페이지가 보이면 안되겠죠? POST값과 같이 서버가 사용하는 숨겨진 정보들이 다 드러나기 때문입니다.
DEBUG = False
3) 이 구문도 잘 있는지 한번 확인해주시구요.
WSGI_APPLICATION = '[프로젝트렉터리명].wsgi.application'
프로젝트 디렉터리명이 뭔지 모르신다면 대체로 'mysite'라는 이름으로 생성합니다.
내부 소스의 경로 지정 문자열 수정
분명 개발을 하면서 장고가 만들어주는 고유 파일 외에 솔루션을 위해 추가한 소스들이 추가되기 마련입니다.
프로젝트 폴더 내부의 여러 파일들을 모듈로 사용하기 위해서 등의 이유로 불러올겁니다.
장고는 가상환경에서만 동작하고, 절대경로만을 사용합니다. 그 얘기론, 가상환경 속에서 절대경로를 사용하게 되죠. 정확히 말하면 루트 폴더는 Scripts폴더가 됩니다. 다른 파일을 불러오는 파일이 Scripts 폴더 내 어디에 위치하든 경로는 Scripts폴더를 기준으로 절대경로입니다.
때문에 기존 경로 앞에 이렇게 추가해주셔야 합니다. 깃허브 리포지토리에서 파이썬 애니웨어 가상환경으로 프로젝트를 끌어올겁니다. 끌어오면 로컬에선 Scripts라는 이름이었던 프로젝트 루트 폴더가 깃허브 리포지토리 명이 됩니다.
그런데 파이썬애니웨어 콘솔 가상환경에서 깃허브 리포지토리를 끌어오면 결국 그 위에 루트가 하나 더 존재하게되고, 따라서 'home'이라는 루트를 추가로 붙여야 합니다.
"/home/[Pythonanywhere아이디]/[Scripts 폴더를 업로드할 깃허브 리포지토리명]/"
기억하기론 더 수정할 건 없습니다.
3. 깃허브에 업로드
깃허브에 새 리포지토리를 만들어 Scripts폴더를 업로드. 바로 위에서 업로드할 리포지토리명 사용한것과 동일해야합니다.
4. 대시보드 콘솔 작업
이제 파이썬애니웨어 사이트의 대시보드 페이지로 이동한다. 그곳에서 Consoles>Bash 버튼을 찾을 수 있다.
그럼 리눅스 기반의 콘솔이 뚝딱 생성된다.
Github에서 프로젝트 끌어오기
이제 git clone 명령을 해야한다. 아까 만든 리포지토리를 복제해온다=끌어옴. 네트워크 연결되어있어야 한다.
$ git clone [리포지토리경로]
그럼 로컬의 Scripts 폴더와 같게 된다. dir을 해보면 리포지토리 이름의 프로젝트 폴더가 있다. 그리로 이동(cd)한다.
가상환경 세팅
$ virtualenv --python=python[자신이 로컬에서 사용하던 파이썬 버전] myvenv
$ source myvenv/bin/activate
$ pip install django~=2.0
나는 로컬에서 3.8 버전을 사용하기 때문에 virtualenv --python=python3.8 myvenv.
이 리눅스 가상환경 서버에서는 로컬에서 작업했던 것처럼 명령어를 작성하며 사용할 수 있다.
때문에 단순 업로드->호스팅 이 아니라서 훨씬 편하다. 여기서 직접 관리할 수 있는 것이다.
소스 수정하기 & 변경사항 반영하기
그런데 깃허브에서 소스를 받아왔다. 수정은 어떻게 하는가?
해당 깃허브 리포지토리와 연결된 로컬의 프로젝트를 수정한 다음, 깃허브에 push하고, pythonanywhere의 콘솔에서 git pull을 받는다. 그럼 수정사항이 적용된다.
5. 호스팅 완료, 실행하기
웹 앱을 클릭한 후 새로고침(reload)를 해줍니다. 그리고 바로 링크로 접속하면 변경사항이 반영되어 실행이 됩니다.