프레임워크별 배포

Django

관리형 Python 이미지로 Django를 배포하고 수집한 정적 파일을 CDN에서 제공합니다.

나이트로쉽은 manage.py와 requirements.txt, pyproject.toml, Pipfile 중 하나에 선언된 django 의존성으로 Django를 감지합니다. 관리형 프리셋은 컨테이너를 만들고 프로젝트에서 찾은 WSGI 모듈을 Gunicorn으로 실행합니다. Django 페이지·API는 컴퓨트에서, 수집한 정적 파일은 CDN에서 제공합니다.

배포하기

CLI 설치

curl -fsSL https://nitroship.co/install.sh | bash
ntro login

이미 설치했다면 다음 단계로 넘어가세요. 설치 옵션, PATH 설정 및 업데이트는 CLI 설치에서 확인하세요.

컴퓨트 리전은 기본값이 없으므로 꼭 정하세요. Django를 직접 선택하려면 배포 루트에 다음 파일을 만듭니다.

nitroship.json
{
  "build": {"framework": "django"},
  "compute": {"regions": ["kr-icn"]}
}
ntro apps create my-django-app
ntro deploy . --prod

이 프리셋은 호스팅 빌더에서만 빌드할 수 있습니다. 명령에 --local이 있다면 빼세요. 배포 후 CLI가 보여 준 주소에서 Django 페이지와 수집한 정적 파일을 각각 열어 보세요.

의존성과 서버

생성된 빌드 설정은 프로젝트 파일에 맞춰 pip, Poetry, uv, Pipenv로 Python 의존성을 설치합니다. 의존성 선언 파일과 잠금 파일을 커밋하세요. Python 버전은 .python-version → pyproject.toml의 requires-python → .tool-versions 순으로 읽습니다. 버전 파일에 직접 선언한 값은 가장 가까운 지원 버전에 맞춰 고정합니다. requires-python 범위에는 지원하는 고정 인터프리터가 포함되어야 합니다. 조건을 만족하는 버전이 없으면 지원하지 않는 버전으로 넘어가지 않고 빌드 계획 단계에서 실패합니다. 선언이 없으면 안정 버전을 기본으로 씁니다.

manage.py에 DJANGO_SETTINGS_MODULE이 선언되어 있어야 합니다. 프리셋은 해당 설정 모듈의 문자열 WSGI_APPLICATION을 읽거나 상위 패키지의 wsgi.py를 찾습니다. 이 모듈들을 배포 소스 트리 안에 두세요. Gunicorn은 0.0.0.0:$PORT에서 요청을 받으며 기본 포트는 3000입니다. 관리형 프리셋은 WSGI Django 앱용입니다. ASGI 실행 명령이나 자동으로 찾을 수 없는 프로젝트 구조가 필요하면 직접 만든 Dockerfile을 쓰세요.

정적 파일

설정에 STATIC_ROOT가 있으면 빌드 중 collectstatic을 실행하고, STATIC_URL의 URL 경로를 유지해 /nitroship/static 아래에 파일을 모읍니다. 예를 들어 /static/admin/css/base.css는 /admin/...가 아닌 /static/... 주소로 제공되어야 합니다.

빌더는 런타임을 시작하기 전에 /nitroship/static의 파일을 자동으로 CDN에 추출합니다. 공개할 정적 파일만 넣고 Python 소스나 비밀 값은 넣지 마세요. STATIC_ROOT를 설정하지 않으면 수집된 정적 파일을 CDN으로 자동 배포하지 않습니다. CDN 제공이 필요하면 먼저 설정하세요. 사용자 업로드 파일은 빌드 결과물이 아닙니다.

STATIC_URL은 /static/ 또는 static/처럼 이 사이트 안의 URL 경로여야 합니다. 외부 URL이나 프로토콜 상대 URL은 이 배포의 CDN에 연결할 수 없어 허용하지 않습니다.

프로덕션 환경과 데이터베이스

설정 코드가 실제로 읽는 이름에 맞춰 환경 변수를 등록하세요.

  • 앱에서 설정 모듈을 직접 지정해야 한다면 DJANGO_SETTINGS_MODULE을 설정합니다.
  • 프로덕션용 SECRET_KEY, DEBUG=False, 배포 도메인·커스텀 도메인이 담긴 ALLOWED_HOSTS를 설정합니다. 환경 변수만 등록한다고 Django 설정이 바뀌지는 않습니다. 설정 코드에서 값을 읽어야 하며, 특히 불리언과 호스트 목록을 올바르게 변환해야 합니다.
  • 설정 코드가 읽는 경우에만 DATABASE_URL을 사용합니다. 그렇지 않으면 프로젝트에서 사용하는 DB 변수를 설정하세요.

데이터베이스는 외부 서비스를 쓰세요. 이미지 안의 SQLite 파일에 영구 데이터를 저장하면 안 됩니다. collectstatic이 빌드 중 설정값을 요구하면 빌드 환경에도 필요한 값을 제공하되, 프로덕션 비밀 값을 소스에 직접 적지 마세요.

런타임 제한

생성된 이미지는 루트 권한 없이 실행됩니다. 인스턴스 파일시스템은 임시 공간이며, 생성된 이미지는 임시 파일을 /tmp에 쓰도록 구성합니다. 이곳에 쓴 데이터는 유지되지 않습니다. 업로드는 컨테이너의 MEDIA_ROOT가 아니라 S3 같은 오브젝트 스토리지에 저장하세요.

나이트로쉽은 마이그레이션, 큐 워커, 스케줄러를 자동으로 실행하지 않습니다. 외부 DB를 대상으로 CI나 내 컴퓨터에서 python manage.py migrate를 실행하세요. 워커는 별도로 배포하고, 정기 HTTP 작업은 앱 안의 스케줄러 대신 Cron 작업을 사용하세요.

프레임워크 선택과 직접 만든 Dockerfile

build.framework: "django"는 이 프리셋을 직접 선택하며 자동으로 찾은 Dockerfile보다 우선합니다. build.dockerfile과는 함께 쓸 수 없습니다.

build.framework가 없을 때의 감지 순서는 빌드 방식 선택에 있습니다. OS 패키지, 다른 실행 명령, 별도 정적 파일 처리가 필요하면 build.framework를 빼고 직접 만든 Dockerfile을 쓰세요.

이 페이지에서