준비 및 확인사항

  • 3.7, 3.8, 3.9, 3.10, 3.11, 3.12

로컬/테스트 환경과 클라우드타입에서 설정한 Python 버전이 상이한 경우 정상적으로 빌드되지 않을 수 있습니다.

Django

쉘에 접근하지 않고 Django의 Super User 생성

환경변수와 시작 명령어를 다음과 같이 세팅하면 Super User를 생성할 수 있습니다.

[환경변수]
DJANGO_SUPERUSER_USERNAME - Django 슈퍼유저 username
DJANGO_SUPERUSER_PASSWORD - Django 슈퍼유저 password
DJANGO_SUPERUSER_EMAIL    - Django 슈퍼유저 email

[시작 명령 - Pre Start Command]
python3 manage.py makemigrations && python3 manage.py migrate && python3 manage.py createsuperuser --noinput

User 모델에 별도의 필수 필드를 설정한 경우 DJANGO_SUPERUSER_필드명(대문자) 로 하여 환경변수에 추가해야 합니다.

Django Admin 페이지에서 로그인 시 500 에러

도메인에 대한 origin 설정이 settings.py 에서 누락되어 발생하는 에러로, 다음의 코드를 settings.py 에 추가하면 해결됩니다.

ALLOWED_HOSTS = ["localhost", "127.0.0.1", ".cloudtype.app"]
CSRF_TRUSTED_ORIGINS = ['https://*.cloudtype.app']

Django 프로젝트를 배포했는데 manage.py 파일이 존재하지 않는다고 표시

Python 명령어 입력시 python이 아닌 python3 으로 실행해야 하며, GitHub 저장소에서 manage.py 가 위치한 곳을 정확히 지정해주어야 합니다.

  • GitHub 저장소의 루트 디렉토리에 manage.py 가 위치한 경우 별도의 설정 필요 없음
  • GitHub 저장소의 서브 디렉토리에 manage.py 가 위치한 경우 최초 템플릿 생성시, 경로 지정 필요
    • 예) 서브 디렉토리 - django-mariadb-samplapp
    • 최초 생성시 서브 디렉토리 필드에 알맞은 디렉토리명 입력

Flask

gunicorn: gunicorn command not found 에러 발생

Flask의 웹 서버 역할을 하는 gunicorn 패키지가 컨테이너 이미지 빌드 시에 설치되지 않은 경우입니다. 배포 대상 GitHub 저장소 내의 requirements.txt 파일 내부에 gunicorn 패키지가 올바르게 명시되어 있는지 확인해주세요.

Flask 서버가 실행 오류

Start Command 필드에는 기본적으로 gunicorn -b 0.0.0.0:5000 app:app 명령어가 세팅되어 있습니다. GitHub 저장소의 Flask 프로젝트에서 app.py 아닌 다른 이름의 파일에서 Flask를 import 하여 어플리케이션을 구성하였다면 다음과 같이 명령어를 변경하여야 합니다.

gunicorn -b 0.0.0.0:5000 [Flask를 import 하여 어플리케이션을 실행하는 파일명]:app

# [예시]
# cloudtype.py 에서 Flask를 import 하여 어플리케이션을 실행
gunicorn -b 0.0.0.0:5000 cloudtype:app

FastAPI

uvicorn: uvicorn command not found 에러

Flask의 웹 서버 역할을 하는 uvicorn 패키지가 컨테이너 이미지 빌드 시에 설치되지 않은 경우입니다. 배포 대상 Github 저장소 내의 requirements.txt 파일 내부에 uvicorn 패키지가 올바르게 명시되어 있는지 확인해주세요.

FastAPI 서버가 실행 오류

Start Command 필드에는 기본적으로 uvicorn main:app --host=0.0.0.0 --port=8000 명령어가 세팅되어 있습니다. 혹은 GitHub 저장소의 main.py 에서 다른 이름의 변수에 FastAPI 객체를 할당한 경우 다음과 같이 명령어를 변경하여야 합니다.추가로, 클라우드타입에 배포시 개발용으로 사용되는 --reload 는 Start Command 에서 제외해주셔야 합니다.

uvicorn main:app --host=0.0.0.0 --port=8000

# [예시]
# main.py에서 myapi=FastAPI()로 객체 할당 
uvicorn main:myapi --host=0.0.0.0 --port=8000

참고

공식문서