프레임워크별 배포

Rust

Cargo로 빌드한 Rust HTTP 서버를 관리형 컨테이너로 배포하고 공개 정적 파일을 CDN에서 제공합니다.

나이트로쉽은 Cargo.toml과 바이너리 타깃으로 실행 가능한 Rust 패키지를 감지합니다. 관리형 프리셋은 릴리스 바이너리를 빌드하고 런타임 이미지에 담습니다. HTTP 서버는 컴퓨트에서 동적 페이지·API를 처리하며, public/ 폴더가 있으면 그 안의 정적 파일은 CDN에서 제공합니다.

배포하기

CLI 설치

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

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

컴퓨트 리전은 기본값이 없으므로 꼭 정하세요. 배포 루트에서 Rust를 직접 선택합니다.

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

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

Cargo 프로젝트와 바이너리 선택

Cargo.toml과 Cargo.lock을 커밋하세요. 툴체인은 rust-toolchain.toml의 채널 → rust-toolchain → .tool-versions 순으로 읽습니다. 빌드는 선언한 버전과 가장 가까운 지원 툴체인·베이스 버전을 고정해서 쓰고, 선언이 없으면 안정 버전을 기본으로 씁니다.

배포 루트에는 실행할 바이너리가 있는 Cargo 패키지가 있어야 합니다. 프리셋은 src/main.rs, [[bin]] 선언, src/bin/*.rs, src/bin/*/main.rs를 인식합니다. 바이너리가 하나면 자동 선택합니다. 여러 개라면 패키지의 default-run에 실행할 바이너리를 지정하세요.

Cargo.toml
[package]
name = "my-server"
version = "0.1.0"
edition = "2021"
default-run = "my-server"

라이브러리 전용 패키지, default-run 없이 바이너리가 여러 개인 패키지, 워크스페이스 선언만 있는 루트는 관리형 서버로 배포할 수 없습니다. 패키지 루트를 배포하거나, 워크스페이스 빌드·네이티브 라이브러리·별도 바이너리 선택을 위해 직접 만든 Dockerfile을 쓰세요. 프리셋은 선택한 바이너리를 릴리스 모드로 빌드할 뿐 CLI 프로그램에 HTTP 서버 기능을 추가하지 않습니다.

관리형 포트에서 요청 받기

앱에서 **0.0.0.0:$PORT**로 요청을 받고, PORT가 없으면 3000을 사용해야 합니다. 이미지는 임의의 Rust 앱의 바인딩 주소를 바꿀 수 없습니다. 예를 들어 다음과 같이 주소를 만든 뒤 웹 프레임워크에 전달하세요.

let port = std::env::var("PORT").unwrap_or_else(|_| "3000".to_owned());
let address = format!("0.0.0.0:{port}");

localhost에만 바인딩하거나 다른 포트를 하드코딩하지 마세요.

정적 파일

public/이 있으면 이미지의 /app/public에 포함하고 공개 파일을 /nitroship/static에 모읍니다. 빌더는 런타임을 시작하기 전에 해당 디렉터리를 자동으로 CDN 루트에 추출합니다. public/logo.svg는 /logo.svg로 제공됩니다. .rs 파일과 다른 서버 소스는 CDN 출력에 포함하면 안 됩니다.

public/이 없으면 CDN 정적 출력도 없습니다. 바이너리에 임베드한 파일은 자동으로 추출하지 않으며 모든 요청은 컴퓨트가 처리합니다. 다른 정적 파일 구조가 필요하면 공개 폴더를 만들거나 직접 만든 Dockerfile을 쓰세요.

환경 변수와 런타임 제한

비밀 값과 앱·DB 설정은 환경 변수로 등록하세요. DATABASE_URL은 앱이 실제로 읽어야 동작합니다. 영구 데이터는 외부 DB에 저장하세요.

생성된 이미지는 루트 권한 없이 실행됩니다. 인스턴스 파일시스템은 임시 공간입니다. /tmp에는 임시 파일만 쓰세요. 업로드는 이미지나 public/ 대신 S3 같은 오브젝트 스토리지에 저장하세요.

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

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

build.framework: "rust"는 Rust를 직접 선택하며 자동으로 찾은 Dockerfile보다 우선합니다. build.dockerfile과는 함께 쓸 수 없습니다.

프레임워크를 직접 지정하지 않았을 때의 감지 순서는 빌드 방식 선택에 있습니다. 네이티브 라이브러리, 워크스페이스 빌드, 별도 빌드·실행 명령이 필요하면 build.framework를 빼고 직접 만든 Dockerfile을 쓰세요.

이 페이지에서