picture
  1. Python

준비 및 확인사항

지원 Python 버전

  • 3.7, 3.8, 3.9, 3.10, 3.11, 3.12
  • ⚠️ 로컬/테스트 환경과 클라우드타입에서 설정한 Python 버전이 상이한 경우 정상적으로 빌드되지 않을 수 있습니다.

공통

1. No module named ‘’ 혹은 Command not found 에러 로그가 떠요. / Django, Flask, FastApi 배포했는데 503 Error가 발생해요.

  • 프로젝트가 저장된 GitHub 저장소에 requirements.txt 파일 자체가 누락되거나 파일 내부에 필요한 패키지 정보가 누락된 경우입니다. 프로젝트에서 사용하시는 패키지에 대한 명세가 requirements.txt 내에 잘 작성되었는지 확인 부탁드립니다.

    • 프로젝트가 세팅되어 있는 가상환경 내에서 requirements.txt 파일을 생성하는 명령어 다음과 같습니다.

      pip3 freeze > requirements.txt
      # Pipenv를 사용하는 경우
      pipenv requirements > requirements.txt
    • 프로젝트 내의 requirements.txt를 알맞게 생성/수정하여 GitHub 저장소에 commit/push 하신 후 재배포를 진행합니다.

    • 프로젝트 내에서 사용되는 각 패키지의 의존성 관리를 위해 버전을 명시하는 것을 권장합니다.

2. pip 패키지가 정상적으로 설치되지 않아요.

  • Python 버전이 프로젝트에 맞지 않게 설정되었을 가능성이 있습니다. 특히 최근 출시된 3.11, 3.12 버전은 이전의 패키지와 의존성 이슈가 발생할 가능성이 크므로 미리 로컬에서 테스트 하신 후 알맞은 버전으로 세팅 부탁드리겠습니다.

3. 에러 로그에서 CPython.c 등과 관련한 C언어 빌드 도구 의존성 에러가 발생해요.

  • 현재 Python 템플릿에서 발생하는 빌드 도구 의존성을 베이스 이미지에 설치하여 이슈가 대부분 해소되었으나 추가적으로 C언어 빌드 도구 의존성 문제로 인해 패키지 설치에서 에러가 나는 경우 Dockerfile 템플릿을 통해 베이스 이미지에 필요한 빌드 도구를 세팅하여 배포 부탁드립니다.

  • 현재 클라우드타입은 컨테이너 방식으로 서비스가 배포되고 있으며, 소스에서 컨테이너 이미지를 빌드하는 시점에 필요한 패키지들이 모두 설치되어야 합니다. 따라서 추가로 구동 중인 컨테이너에 접속하여 패키지를 설치하는 것이 불가하며, 최초 명세된 패키지가 빌드 시점에 정상적으로 설치되는지 확인 부탁드립니다.

4. 서비스 접속 시 50X 페이지만 뜹니다.

서비스 배포 후 50X 발생 시, 실행 로그 결과에 따라 다음과 같은 케이스로 나눠 살펴볼 수 있습니다.

1️⃣ 어플리케이션이 정상적으로 구동되지 않고 예외가 발생하거나 서버가 종료된 경우

  • 어플리케이션 구동에 필요한 패키지가 정상적으로 설치되지 않았거나 데이터베이스 연결이 실패했을 수 있습니다. 실행 로그의 에러 메세지를 기반으로 소스 내용 및 환경 변수 등을 확인해주세요.

2️⃣ 서버는 정상적으로 구동됐는데 권한과 관련된 에러가 발생하는 경우

  • 언어 및 프레임워크 중 특정 도메인 규칙에 대하여 CORS 허용 규칙을 적용해주어야 접속이 가능한 것이 있습니다. 아래의 링크를 참고하여 관련된 설정을 소스에 반영후 재배포 부탁드립니다.
  • CORS 설정

3️⃣ 빌드가 정상적으로 완료 되었는데 상태가 ‘시작중’에서 바뀌지 않고 생성된 URL에 접속해도 503 페이지만 뜨는 경우

  • 루트 디렉토리가 아닌 서브디렉토리에 코드가 존재하는 경우 이러한 상황이 발생할 수 있습니다. 사용자의 저장소를 디렉토리를 확인하고, 해당되는 경우 아래의 영상을 참고하여 배포시 서브디렉토리 설정을 추가해주세요.

4️⃣ 서버는 정상적으로 구동됐는데 접속시 에러창이 뜨고 실행 로그에 아무런 반응이 없는 경우

  • 소스 코드에 설정된 포트가 배포시에 작성하신 포트와 불일치할 경우일 확률이 높습니다. 입력한 포트를 확인해주세요.

Django

1. 쉘에 접근하지 않고 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_필드명(대문자) 로 하여 환경변수에 추가해야 합니다.

2. Django Admin 페이지에서 로그인하면 500 에러가 떠요.

  • 도메인에 대한 origin 설정이 settings.py 에서 누락되어 발생하는 에러로, 다음의 코드를 settings.py 에 추가하면 해결됩니다.
    ALLOWED_HOSTS = ["localhost", "127.0.0.1", ".cloudtype.app"]
    CSRF_TRUSTED_ORIGINS = ['https://*.cloudtype.app']

3. Django 프로젝트를 배포했는데 manage.py 파일이 존재하지 않는다고 표시되면서 서버가 정상적으로 작동하지 않아요.

  • Python 명령어 입력시 python이 아닌 python3 으로 실행해야 합니다.

  • GitHub 저장소에서 manage.py 가 위치한 곳을 정확히 지정해주어야 합니다.

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

Flask

1. gunicorn: gunicorn command not found 에러가 발생하면서 어플리케이션이 실행되지 않아요.

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

2. 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

1. uvicorn: uvicorn command not found 에러가 발생하면서 어플리케이션이 실행되지 않아요.

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

2. 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

참고

공식문서

사용에 문제나 어려움이 있다면 디스코드 채널에서 문의하세요.
디스코드 링크