프레임워크별 배포

Rails

관리형 Ruby 이미지와 Puma로 Rails를 배포하고 공개 정적 파일을 CDN에서 제공합니다.

나이트로쉽은 Gemfile의 rails 의존성과 config/application.rb로 Rails를 감지합니다. 관리형 프리셋은 gem 설치와 정적 파일 사전 컴파일을 수행하고 Puma를 실행합니다. Rails 페이지·API는 컴퓨트에서, 공개 정적 파일은 CDN에서 제공합니다.

배포하기

CLI 설치

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

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

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

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

관리형 Rails 프리셋은 호스팅 빌더에서만 빌드할 수 있습니다. 명령에서 --local을 빼세요. 배포 후 Rails 페이지와 그 페이지에서 참조하는 정적 파일 주소를 열어 보세요.

Rails가 생성한 Dockerfile과 Kamal

Rails/Kamal이 생성하는 Dockerfile은 보통 80 포트에서 요청을 받습니다. 자동으로 찾은 Dockerfile은 Rails 감지보다 우선하므로, 관리형 프리셋을 쓰려면 build.framework: "rails"를 지정하세요. 직접 만든 Dockerfile을 유지하려면 build.framework를 빼고, 서버가 3000 같은 비특권 포트에서 0.0.0.0:$PORT로 요청을 받도록 수정하세요.

빌드와 서버

Ruby 버전은 .ruby-version → Gemfile의 ruby 선언 → .tool-versions 순으로 읽습니다. 빌더는 선언한 버전과 가장 가까운 지원 버전을 고정해서 쓰고, 선언이 없으면 안정 버전을 기본으로 씁니다. Gemfile과 Gemfile.lock을 커밋하세요.

빌드는 bundle install을 실행합니다. 앱에 assets:precompile 작업이 등록되어 있으면 이어서 SECRET_KEY_BASE_DUMMY=1 bundle exec rails assets:precompile을 실행하고, 이 작업이 없는 API 전용 앱은 정적 파일 컴파일을 건너뜁니다. 등록된 정적 파일 작업에서 오류가 나면 빌드는 실패합니다. 더미 키는 컴파일용일 뿐 런타임 비밀 키가 아닙니다. Puma는 프로덕션 모드로 0.0.0.0:$PORT에서 요청을 받으며 기본 포트는 3000입니다.

JavaScript 도구로 정적 파일을 만든다면 package.json과 잠금 파일도 커밋하세요. 생성된 빌드는 잠금 파일로 Bun, pnpm, npm, Yarn을 선택하고, 잠금 파일이 없으면 packageManager를 확인합니다. 해당 의존성은 정적 파일 컴파일 전에 설치합니다.

생성된 이미지는 앱과 설치된 gem을 포함합니다. public/의 파일은 /nitroship/static에 모으고, 런타임 시작 전에 빌더가 자동으로 CDN에 추출합니다. public/assets/application.css는 /assets/application.css로 제공됩니다. public/에 Ruby 소스, 자격 증명, 비공개 파일을 넣지 마세요. 공개 정적 파일이 없으면 CDN에 추출할 파일도 없지만, 동적 요청은 계속 Rails가 컴퓨트에서 처리합니다.

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

다음 값은 환경 변수로 등록하세요.

  • RAILS_ENV=production과 충분히 강하고 배포 간에 유지되는 SECRET_KEY_BASE.
  • DB 설정에서 사용하는 경우 DATABASE_URL. 데이터베이스는 외부 서비스를 사용하세요.
  • 암호화된 자격 증명이 필요한 앱의 RAILS_MASTER_KEY. 정적 파일 빌드에서도 암호화된 자격 증명을 읽는다면 빌드 환경에도 키를 제공하세요.

평문 자격 증명을 커밋하지 말고, 이미지 안의 SQLite 파일에 영구 프로덕션 데이터를 저장하지 마세요.

런타임 제한

생성된 이미지는 루트 권한 없이 실행됩니다. 인스턴스 파일시스템은 임시 공간입니다. Rails의 임시 파일·로그·저장 경로는 /tmp 아래로 연결하며 앱 로그는 표준 출력으로 보냅니다. 임시 디스크는 영구 저장소가 아닙니다. 업로드는 Active Storage의 로컬 디스크 대신 S3 같은 오브젝트 스토리지를 사용하세요.

나이트로쉽은 마이그레이션, 큐 워커, 스케줄러를 자동으로 실행하지 않습니다. CI나 내 컴퓨터에서 외부 DB를 대상으로 bundle exec rails db:migrate를 실행하세요. 백그라운드 워커는 별도로 실행해야 합니다. 웹 프로세스를 시작한다고 Solid Queue나 Sidekiq 워커도 시작되는 것은 아닙니다. 정기 HTTP 작업은 앱 안의 스케줄러 대신 Cron 작업을 사용하세요.

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

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

프레임워크를 직접 지정하지 않았을 때의 감지 순서는 빌드 방식 선택에 있습니다. 추가 OS 패키지, 다른 프로세스 구성, 별도 정적 파일 컴파일이 필요하면 build.framework를 빼고 직접 만든 Dockerfile을 쓰세요.

이 페이지에서