Python (FastAPI와 Flask)
관리형 Python 컨테이너로 FastAPI·Flask를 배포하고 공개 정적 파일을 CDN에서 제공합니다.
나이트로쉽은 requirements.txt, pyproject.toml, Pipfile의 fastapi 또는 flask 의존성을 감지합니다. 둘 다 있으면 FastAPI를 먼저 선택합니다. Django는 별도 관리형 프리셋을 사용합니다.
배포하기
CLI 설치
curl -fsSL https://nitroship.co/install.sh | bash
ntro login이미 설치했다면 다음 단계로 넘어가세요. 설치 옵션, PATH 설정 및 업데이트는 CLI 설치에서 확인하세요.
배포 루트에서 프리셋과 컴퓨트 리전을 지정하세요. 리전은 기본값이 없습니다. Flask 앱이라면 fastapi 대신 flask를 적습니다.
{
"build": {"framework": "fastapi"},
"compute": {"regions": ["kr-icn"]}
}ntro apps create my-python-app
ntro deploy . --prodPython 컨테이너 프리셋은 호스팅 빌더에서만 빌드할 수 있습니다. 기존 명령에 --local이 있다면 빼세요. 배포 후 CLI가 보여 준 주소에서 API와 공개 정적 파일을 각각 열어 보세요.
의존성과 Python 버전
빌드는 다음 순서로 의존성 설치 방식을 고릅니다.
uv.lock이 있으면 uv.poetry.lock이나[tool.poetry]가 있으면 Poetry.Pipfile이나Pipfile.lock이 있으면 Pipenv.requirements.txt가 있으면 pip.pyproject.toml의[project]에 선언된 의존성은 pip로 설치.
사용하는 도구의 의존성 선언 파일과 잠금 파일을 커밋하세요. Python 버전은 .python-version → pyproject.toml의 requires-python → .tool-versions 순으로 읽습니다. 버전 파일에 직접 선언한 값은 가장 가까운 지원 버전에 맞춰 고정합니다. requires-python 범위에는 지원하는 고정 인터프리터가 포함되어야 합니다. 조건을 만족하는 버전이 없으면 지원하지 않는 버전으로 넘어가지 않고 빌드 계획 단계에서 실패합니다. 선언이 없으면 안정 버전을 기본으로 씁니다.
실행 모듈과 정적 파일
FastAPI는 main.py, app.py, app/main.py에서 FastAPI 앱을 생성해 대입한 변수를 찾아 Uvicorn으로 실행합니다. Flask는 main.py, app.py, wsgi.py, 그 외 Python 모듈 순으로 Flask 인스턴스나 create_app 팩토리를 찾아 Gunicorn으로 실행합니다. 두 서버 모두 0.0.0.0:$PORT에서 요청을 받으며 기본 포트는 3000입니다. 다른 팩토리 이름, 특수한 중첩 구조, 별도 실행 명령이 필요하면 직접 만든 Dockerfile로 실행 모듈을 지정하세요.
public/이 있으면 공개 정적 파일을 /nitroship/static에 모으고, 런타임 시작 전에 자동으로 CDN 루트에 추출합니다. public/logo.svg는 /logo.svg로 제공됩니다. 이 폴더에 서버 소스나 비밀 값을 넣지 마세요. public/이 없으면 이 프리셋은 CDN 정적 파일을 만들지 않으며, API와 앱이 직접 제공하는 파일은 컴퓨트가 처리합니다. 임의의 FastAPI StaticFiles 마운트나 Flask static/의 URL 설정을 자동으로 따라가지는 않습니다.
환경 변수와 데이터 저장
API 키, 앱 설정, DB 연결 정보는 환경 변수로 등록하세요. DATABASE_URL은 앱이 실제로 읽을 때만 유효합니다. 영구 데이터는 로컬 SQLite 파일 대신 외부 DB에 저장하세요. Flask 세션을 사용한다면 프로덕션 비밀 키를 설정하고, 프로덕션에서는 개발용 디버거를 켜지 마세요.
생성된 이미지는 고정된 Python 베이스를 사용하고 루트 권한 없이 실행됩니다. 인스턴스 파일시스템은 임시 공간입니다. 임시 파일은 /tmp에 쓰고, 영구 데이터는 저장하지 마세요. 업로드는 앱 디렉터리 대신 S3 같은 오브젝트 스토리지에 저장하세요.
나이트로쉽은 마이그레이션, 큐 워커, 스케줄러를 자동으로 실행하지 않습니다. alembic upgrade head, flask db upgrade 같은 프로젝트의 마이그레이션 명령은 CI나 내 컴퓨터에서 외부 DB를 대상으로 실행하세요. 워커는 별도로 실행하고, 정기 HTTP 작업은 앱 안의 스케줄러 대신 Cron 작업을 사용하세요.
프레임워크 선택과 직접 만든 Dockerfile
build.framework: "fastapi" 또는 "flask"는 해당 프리셋을 직접 선택하며 자동으로 찾은 Dockerfile보다 우선합니다. build.framework와 build.dockerfile은 함께 쓸 수 없습니다.
프레임워크를 직접 지정하지 않았을 때의 감지 순서는 빌드 방식 선택에 있습니다. 추가 OS 패키지, 다른 Python 서버, 별도 실행 모듈·정적 파일 구조가 필요하면 build.framework를 빼고 직접 만든 Dockerfile을 쓰세요.