영원히 흘러가는 강
pythonanywhere django 배포하기 (DRF) 본문
프로젝트로 로컬에서만 진행하던 사항을 실서버에 배포해서 확인해보고 싶은 마음이 들었다.
여러 배포 사이트를 확인했지만
간단한 사항이기에 무료 배포가 가능한곳으로만 알아봤고 pythonanywhere 이 채택되었다
그림이 없어 따라오기 힘들수 있겠지만 충분히 설명을 넣었다고 생각한다..
1. 로컬에서 진행해야할것
setting.py에 아래와 같이 추가
// 배포시 디버그는 false
DEBUG = 'False'
// 허용 가능한 host에 pythonanywhere 주소 추가
ALLOWED_HOSTS = [... , '<pythonanwhere에 추가한 사용자 이름>.pythonanywhere.com']
// static 파일 주소
STATC_ROOT = os.path.join(BASE_DIR,'static')
그 이후 아래의 명령어 입력
python manage.py collectstatic
정적 파일을 모아 파일로 만들어준다.
pip freeze > requirments.txt
패키지 목록이 작성되고 해당 버전 또한 작성된다.
+ mysql로 db를 마이그레이션 하고싶다면 아래의 코드 진행
// auth , contettype으로 에러가 엄청나게 발생..
python3 manage.py dumpdata --exclude=auth --exclude=contenttypes > db.json
2. pythonanywhere에서 코드 적용 진행 (github clone)
pythonanywhere 회원가입 진행
consoles에 접속하여 bash 클릭 후 (github에 레파지토리가 존재한다는 가정하에)
//한줄씩 실행
git clone <자신의 깃허브 레파지토리 주소>
//가상환경 생성
virtualenv --python=python3.10 venv
// 가상환경 실행
source venv/bin/activate
// 앞서 생성한 requirements.tsx 불러오기
pip install -r requirements.txt
이후 web 으로 이동하여
add 진행
manual configuration - python 3.10선택 후 생성
그 이후 files로 이동하여 각각의 사항 작성 (새탭으로 여는거 추천!)
3가지 적용해야한다. (빨간색으로 되어있다.)
1. source code : /home/유저아이디/프로젝트명
2. virtualenv : /home/유저아이디/venv
3. static files : URL : '/static/' Directory : '/home/유저아이디/프로젝트명/static'
추가로 WSGI configuration file 변경해야하여 주소 클릭
import os
import sys
path = '/home/유저아이디/프로젝트명'
if path not in sys.path:
sys.path.insert(0, path)
os.environ['DJANGO_SETTINGS_MODULE'] = '<setting가 위치한 main app이름>.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
적용한 후에 Reload 적용!!
우선 코드 올리기 완료!
3. pythonanywhere에서 Databasese 활용
나의 경우에는 mysql을 활용하여 django에 있던 sqlite를 덤프해와서 적용중에 있다.
나의 경우를 설명해보자면 아래와 같다.
우선 mysql 비밀번호 설정하여 생성
이후 databases name과 password를 생성해준다.
그다음 setting.py에 작성되어있는 databases 수정
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': '유저아이디$db이름',
'USER': '유저이름',
'PASSWORD': '비밀번호',
'HOST': '유저아이디.mysql.pythonanywhere-services.com'
}
}
앞서 1번에서 만들어둔 db.json 파일을 files에서 업로드 해준다.
//마이그레이션 진행
python manage.py makemigrations
python manage.py migrate
//작성해둔 db파일 불러오기
python manage.py loaddata db.json
나의 경우에는 이부분에서 삽질을 많이 했다...
1번에서 작성해둔것처럼 exclude 없이 덤프를 뜨고 업로드를 하려니 엄청난 오류 발생...
추가로 django_admin_log가 또 문제를 일으켜서 dev에서 작성하던 사항이니 시원하게 밀어버렸다 ㅋㅋㅋ
서버에 변경사항이 있다면 git pull로 적용하면 되는 사항이구 로컬 db가 변경된다면 위의 방법대로 덤프로 업로드 진행
그리하여 완료!
참고
https://oliopasta.tistory.com/34