프레임워크별 배포

.NET

관리형 .NET 이미지로 ASP.NET Core HTTP 서버를 배포하고 wwwroot 정적 파일을 CDN에서 제공합니다.

나이트로쉽은 배포 루트나 바로 아래 한 단계 디렉터리의 *.csproj로 .NET을 감지합니다. 관리형 프리셋은 선택한 프로젝트를 게시하고 어셈블리를 컴퓨트에서 실행하며, 게시된 wwwroot 정적 파일을 CDN으로 추출합니다.

배포하기

CLI 설치

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

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

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

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

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

프로젝트 선택과 빌드

프리셋은 Microsoft.NET.Sdk.Web을 사용하는 프로젝트가 정확히 하나 있으면 그것을 선택합니다. 다른 라이브러리 프로젝트가 있어도 괜찮습니다. 웹 SDK 프로젝트가 없으면 .csproj가 정확히 하나 있어야 합니다. 웹 프로젝트가 여러 개이거나 웹 프로젝트 없이 여러 프로젝트가 있으면 선택할 수 없으므로, 배포 루트를 바꾸거나 직접 만든 Dockerfile을 쓰세요. 선택한 프로젝트는 실제로 HTTP를 제공해야 합니다. 콘솔 앱을 게시한다고 웹 서버가 되지는 않습니다.

프로젝트, 참조하는 프로젝트, 의존성 설정을 함께 커밋하세요. SDK 버전은 global.json의 sdk.version → 선택한 프로젝트의 TargetFramework → .tool-versions 순으로 읽습니다. 프로젝트에 직접 선언한 TargetFramework는 가장 가까운 Directory.Build.props에서 상속한 값보다 우선합니다. 이 파일을 사용한다면 함께 커밋하세요. 런타임 이미지는 타깃 프레임워크에 맞춥니다. 빌드는 선언한 버전과 가장 가까운 지원 SDK·런타임 베이스 버전을 고정해서 쓰고, 선언이 없으면 안정 버전을 기본으로 씁니다. 여러 타깃을 사용하는 프로젝트나 별도·네이티브 게시 설정은 직접 만든 Dockerfile을 사용하세요.

생성된 빌드는 릴리스 빌드를 게시합니다. 게시된 파일은 런타임 이미지의 /app에 들어갑니다. 시작 명령은 AssemblyName에 지정한 DLL을 실행하며, 선언이 없으면 프로젝트 파일 이름을 사용합니다.

요청 수신 주소

생성된 런타임은 ASPNETCORE_URLS=http://0.0.0.0:$PORT를 설정하며 기본 포트는 3000입니다. 앱이 이 설정을 따르도록 유지하세요. 명시적인 Kestrel 엔드포인트나 코드에 하드코딩한 URL은 이 값을 덮어쓸 수 있습니다. localhost에만 바인딩하지 마세요.

정적 파일

게시된 wwwroot 파일은 이미지의 /app/wwwroot에 포함하고 /nitroship/static에 모읍니다. 빌더는 런타임을 시작하기 전에 공개 정적 파일을 자동으로 CDN 루트에 추출합니다. wwwroot/css/site.css는 /css/site.css로 제공됩니다. 서버 소스, 비밀 값, 심볼릭 링크는 공개 CDN 출력에 포함하면 안 됩니다. Razor 렌더링, API, 다른 서버 요청은 계속 컴퓨트에서 실행됩니다.

게시 결과에 wwwroot가 없으면 CDN 정적 출력도 없습니다. 앱의 임의 파일 공급자나 게시된 웹 루트 밖의 디렉터리를 자동으로 찾지는 않습니다. 다른 추출 구조가 필요하면 직접 만든 Dockerfile을 쓰세요.

환경 변수와 데이터 저장

프로덕션 설정과 비밀 값은 환경 변수로 등록하세요. ASP.NET Core 설정의 중첩 키에는 밑줄 두 개를 사용합니다. 예를 들어 앱이 해당 키를 읽는다면 ConnectionStrings__DefaultConnection을 설정하세요. 프로덕션 동작을 위해 ASPNETCORE_ENVIRONMENT=Production을 설정합니다. DATABASE_URL은 앱이 직접 읽을 때만 유효하며 .NET 연결 문자열로 자동 변환되지 않습니다. 데이터베이스는 외부 서비스를 사용하세요.

생성된 이미지는 루트 권한 없이 실행됩니다. 인스턴스 파일시스템은 임시 공간입니다. 임시 파일은 /tmp에 쓰고 업로드는 S3 같은 오브젝트 스토리지에 저장하세요. 인스턴스가 교체되어도 쿠키를 유지해야 한다면 ASP.NET Core Data Protection 키도 인스턴스 외부에 영구 저장하세요.

나이트로쉽은 마이그레이션, 큐 워커, 스케줄러를 자동으로 실행하지 않습니다. dotnet ef database update나 마이그레이션 번들처럼 프로젝트에서 사용하는 명령은 CI나 내 컴퓨터에서 외부 DB를 대상으로 실행하세요. 앱이 시작할 때 직접 마이그레이션한다면 실행 시점을 명시적으로 관리해야 합니다. 워커는 별도로 실행하고, 정기 HTTP 작업은 앱 안의 스케줄러 대신 Cron 작업을 사용하세요.

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

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

프레임워크를 직접 지정하지 않았을 때의 감지 순서는 빌드 방식 선택에 있습니다. 별도 프로젝트 선택, 네이티브 의존성, 게시 옵션, 정적 파일 구조가 필요하면 build.framework를 빼고 직접 만든 Dockerfile을 쓰세요.

이 페이지에서