Django/DRF

클라우드 타입으로 Django, postgreSQL 서버 배포

Jong_seoung 2023. 8. 9. 22:15
반응형

생각보다 클라우드 타입으로 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

 


재대로 따라해서 배포가 되었다면 아래와 같이 표시가 될것이다.


참고

https://velog.io/@rayleigh_/Cloudetype%EC%97%90-Django-drf-RESTfull-API-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0

 

Cloudtype에 Django drf RESTfull API 배포하기

Cloudtype에 Django drf RESTfull API 프로젝트를 배포하는 방법. AWS RDS를 곁들인..

velog.io

 

반응형