생각보다 클라우드 타입으로 django와 postgresql을 배포하는 글이 생각보다 없어서 작성하게 되었다. 자료가 없고 처음 배포를 진행하다 보니 이래저래 실수가 많아서 거의 하루를 투자한 것 같아서 그런 사람이 없었으면 하는 마음으로 작성하게 되었다. (사실 클라우드 타입 홈페이지에 다 나와있는데..) 배포할 때 배포할 템플릿을 잘 선택해야 한다!!! 나는 그것이 제대로 안되어 있어서 오래 걸린 것이지만..ㅠㅠ
Django
외부 패키지 목록 만들기
나는 pipenv를 이용하여 패키지 관리를 하였기 때문에 pipenv로 requirements를 만들어주었다.
- 생성된 파일 깃허브에 올리면 클라우드 타입에서 배포를 할때 자동으로 requirements를 찾아서 패키지를 다운한다.
pip freeze > requirements.txt
pipenv freeze > requirements.txt
Settings.py 수정, 환경 변수 분리
나는 아래와 같이 구현하였다.
from .base import *
from django.core.exceptions import ImproperlyConfigured
def get_env_variable(var_name):
try:
return os.environ[var_name]
except KeyError:
error_msg = "Set the {} environment variable".format(var_name)
raise ImproperlyConfigured(error_msg)
DEBUG = False
ALLOWED_HOSTS = ["*"]
BASE_URL = get_env_variable("BASE_URL")
SECRET_KEY = get_env_variable("DJANGO_SECRET")
STATE = get_env_variable("STATE")
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": get_env_variable("DB_NAME"),
"USER": get_env_variable("DB_USER"),
"PASSWORD": get_env_variable("DB_PASSWORD"),
"HOST": get_env_variable("DB_HOST"),
"PORT": get_env_variable("DB_PORT"),
}
}
SIMPLE_JWT = {
"JWT_SECRET_KEY": SECRET_KEY,
"ACCESS_TOKEN_LIFETIME": timedelta(hours=1),
"REFRESH_TOKEN_LIFETIME": timedelta(days=3),
"ROTATE_REFRESH_TOKENS": False,
"BLACKLIST_AFTER_ROTATION": True,
"TOKEN_OBTAIN_SERIALIZER": "user.serializers.MyTokenObtainPairSerializer",
}
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_CREDENTIALS = True
CSRF_TRUSTED_ORIGINS = ("배포 후 url 등록",)
cors 추가하기
앱 추가
INSTALLED_APPS = [
...
'corsheaders'
...
]
미들 웨어 추가
"corsheaders.middleware.CorsMiddleware" 와 "whitenoise.middleware.WhiteNoiseMiddleware",
를 추가해주어야하는데, 위치가 중요하다 아래와 같이 해주었다.
MIDDLEWARE = [
"corsheaders.middleware.CorsMiddleware",
"django.middleware.security.SecurityMiddleware",
"django.middleware.csrf.CsrfViewMiddleware",
"django.contrib.sessions.middleware.SessionMiddleware",
"django.middleware.common.CommonMiddleware",
"django.contrib.auth.middleware.AuthenticationMiddleware",
"django.contrib.messages.middleware.MessageMiddleware",
"django.middleware.clickjacking.XFrameOptionsMiddleware",
"whitenoise.middleware.WhiteNoiseMiddleware",
]
정적 파일 경로 지정 및 모으기
import os
STATIC_ROOT = os.path.join(BASE_DIR, "static")
이후 BASE_DIR에 static 폴더를 만든 후 아래와 같은 명령어를 입력해 주면 static 파일로 admin 관련 css, js, img와 기존에 사용하던 css, js, img 파일들이 모이게 될 것이다. 이후 깃허브에 static 파일을 커밋해 주면 된다.
python3 manage.py collestatic
클라우드 타입에 업로드하기
클라우드 타입에 업로드하는 방법은 클라우드 타입 홈페이지에 자세히 나와있기 때문에 아래의 링크를 통해서 확인하면 좋을것 같다. 환경 변수 설정은 아래에 있으니 같이 보면서 진행하면 좋을 것 같다.
https://help.cloudtype.io/guide/python-django
Python Django 시작하기
클라우드타입에서 Python Django 애플리케이션을 배포하는 방법입니다. 🧑🏻💻 아래의 가이드에 따라 템플릿을 통해 서비스를 배포해보세요. 시간은 3-5 분 가량 소요됩니다. 😺
help.cloudtype.io
환경 변수 설정하기
Environment Variables가 보일텐데 아래의 명령어를 참고해서 작성하면 된다.
환경 변수
DJANGO_SUPERUSER_USERNAME - 슈퍼유저 username
DJANGO_SUPERUSER_PASSWORD - 슈퍼유저 password
DJANGO_SUPERUSER_EMAIL - 슈퍼유저 이메일
- 나의 경우 최초 배포시 admin 계정을 만들어주고 이후 업데이트 시 환경 변수 및 start command에서 superuser 생성 부분을 삭제하고 배포하였다.
Pre Start Command
참고로 --settings=weheproject.settings.dev 가 붙는 이유는 나는 setting 파일을 배포용과 로컬용으로 나눠서 진행하였기 때문이다.
나의 경우 아래의 명령어로 시작하여 서버 배포를 하였다.
python3 manage.py makemigrations --settings=weheproject.settings.dev && python3 manage.py migrate --settings=weheproject.settings.dev && python3 manage.py createsuperuser --noinput --settings=weheproject.settings.dev
이후 DB 서버 배포 후에 아래의 명령어를 통해서 업데이트하였다.
python manage.py makemigrations user posts skills comments -- settings=weheproject.settings.dev && python3 manage.py migrate --settings=weheproject.settings.dev
Start Command
python3 manage.py runserver 0:8000 --settings=weheproject.settings.dev
PostgreSQL
PostgreSQL을 배포하는 방법도 클라우드 타입 홈페이지에 자세히 나와있기 때문에 아래를 참고해서 진행하면 좋을 것 같다. 본인의 경우 몇 시간의 검색을 하다가 유튜브를 통해서 진행하고 홈페이지를 찾게 되었는데.. 아마 유튜브 없었으면 오래 헤매었을 거라고 생각하고 잘 따라 해야 한다.
https://help.cloudtype.io/guide/postgres
PostgreSQL
클라우드타입에서 PostgreSQL을 배포하고, 관리 툴을 사용하여 TCP 방식으로 접속하는 가이드입니다. 🧑🏻💻 본 가이드에서는 관리 툴로 pgAdmin을 사용했으며, 아래의 링크에서 다운로드 받을
help.cloudtype.io
재대로 따라해서 배포가 되었다면 아래와 같이 표시가 될것이다.
참고
Cloudtype에 Django drf RESTfull API 배포하기
Cloudtype에 Django drf RESTfull API 프로젝트를 배포하는 방법. AWS RDS를 곁들인..
velog.io
'Django > DRF' 카테고리의 다른 글
DRF Image DB 저장, 스웨거 적용 (0) | 2023.10.10 |
---|---|
Django 인기글 구현 (1) | 2023.09.26 |
Django의 OneToOneField와 ForeignKey의 차이점 (0) | 2023.05.23 |
Django 모델 관계에 대한 이해 - 양방향 참조와 단방향 참조 (0) | 2023.05.23 |
Django 추상화 클래스 (0) | 2023.05.11 |