Heroku에 .NET Core 배포

저는 항상 C#으로 코딩하는 것을 좋아했습니다. 마찬가지로 저는 Heroku를 사용하여 개인 프로젝트를 호스트하는 것을 좋아합니다. Heroku는 멋진 UI를 가지고 있으며 a free tier!

그러나 몇 가지 제한 사항이 있습니다. 특히 .NET Core는 즉시 지원되지 않습니다 😢. 우리는 그것을 고칠 수 있습니다!

수정



Heroku는 C# 코드를 직접 실행할 수 없지만 they do have support for Docker containers . 그것으로 우리의 솔루션은 명확합니다 - 모든 것을 고정화하십시오!

Docker에 .NET Core 앱 배포



다음은 .NET Core 과정을 위한 것이 아니지만 초보자인 경우 기본 파일 탐색에 대한 몇 가지 기본 사항을 선택할 수 있습니다. 우리가 다룰 내용:
  • 명령줄에서 새 .NET Core MVC 프로젝트 생성
  • 기본 파일을 Heroku 및 Docker와 호환되도록 수정
  • 새 Heroku 앱 구성
  • Heroku 🚀에 앱 배포

  • 1. 시작하기



    일부 코드를 변경하기 전에 기본 구성 요소를 순서대로 가져와야 합니다. 계속하기 전에 다음이 있어야 합니다.
  • 장치에 설치된 .NET Core
  • 나는 이 튜토리얼에서 v3.1을 사용하고 있는데, 이것은 here에서 찾을 수 있습니다.

  • 장치에 설치된 Docker
  • 단계here를 따를 수 있습니다.

  • Heroku 계정! - https://signup.heroku.com/
  • Container Registry와 통신할 수 있도록 하는 Heroku CLI 을 설치합니다.

  • 그것들을 제거하면 우리는 갈 준비가 된 것입니다.

    2. 새 .NET Core 앱 만들기



    먼저 새 .NET Core 앱을 만들어야 합니다. 찾을 수 있는 기본 .NET Core MVC 프로젝트 설정 단계를 따르겠습니다here.

    3. 새 Dockerfile 설정



    필요한 dockerfile은 너무 복잡하지 않은 매우 기본적인 것입니다.

    # Dockerfile
    
    FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
    WORKDIR /app
    
    # Copy csproj and restore as distinct layers
    COPY *.csproj ./
    RUN dotnet restore
    
    # Copy everything else and build
    COPY . .
    RUN dotnet publish -c Release -o out
    
    # Build runtime image
    FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
    WORKDIR /app
    COPY --from=build-env /app/out .
    
    # Run the app on container startup
    # Use your project name for the second parameter
    # e.g. MyProject.dll
    ENTRYPOINT [ "dotnet", "HerokuApp.dll" ]
    


    또한 이미지 크기를 작게 유지하려면 .dockerignore 파일을 설정해야 합니다.

    # .dockerignore
    
    bin/
    obj/
    


    컨테이너를 테스트하려면 다음을 실행할 수 있습니다.

    docker build -t YourAppName .
    
    # The name variable (abc) is simply used to refer to the 
    # container later when we want to close everything down.
    docker run -d -p 8080:80 --name abc YourAppName
    


    http://localhost:8080으로 이동하면 앱이 실행되는 것을 볼 수 있습니다.

    괜찮아 보이는데? 엄청난! 컨테이너를 로컬에서 종료합니다. 인터넷에 올라오려면 여기에서 실행할 필요가 없습니다!

    docker rm --force abc
    


    4. Heroku에서 새 앱 구성


  • Heroku에 로그인하고 개인 대시보드https://dashboard.heroku.com/apps에서 새 앱을 만듭니다.
  • 앱 이름과 배포 지역을 제공해야 합니다
  • .

  • 그러면 Heroku가 다양한 배포 옵션을 표시합니다. 우리는 Container Registry를 사용할 것입니다.


  • 5. Heroku 🚀로 출시



    마지막으로 중요한 것은 온라인으로 가져오겠습니다.

    1. 명령줄을 사용하여 Heroku 컨테이너 레지스트리에 로그인합니다.

    heroku container:login
    


    2. 위의 작업을 수행하지 않은 경우 도커를 빌드했는지 확인하십시오.
    컨테이너!

    docker build -t YourAppName .
    


    3. 새로 빌드한 컨테이너를 Heroku로 푸시합니다.

    # 'YourAppName' should be the name of the app you 
    # configured in Heroku in step 4.
    heroku container:push -a YourAppName web
    


    4. 드디어 출시!

    heroku container:release -a YourAppName web
    


    이제 https://your-app-name.herokuapp.com 으로 이동하면 기본 앱이 표시됩니다. 잠깐... 작동하지 않았습니다! 무슨 일이야?!


    heroku 로그를 살펴보십시오.

    heroku logs --tail
    


    무섭게 보이는 로그 내에서 .NET Core가 .NET Core용 웹 서버인 'Kestrel'을 시작하지 못한 것을 볼 수 있습니다. 이는 앱을 실행할 수 없음을 의미합니다😢.

    도커 컨테이너를 구성할 때 다시 로컬로 시작한 것을 기억한다면 전달한 매개변수 중 하나가 포트였습니다. Heroku가 사용할 포트를 제공하면 앱이 이에 대해 알아야 합니다!

    Dockerfile의 끝을 다음과 같이 수정하십시오.

    # Dockerfile
    
    # ...
    
    # ENTRYPOINT [ "dotnet", "HerokuApp.dll" ]
    # Use the following instead for Heroku
    CMD ASPNETCORE_URLS=http://*:$PORT dotnet HerokuApp.dll
    


    이를 통해 컨테이너는 시작할 때 Heroku 제공 포트를 사용할 수 있습니다.

    모든 것을 Heroku에 다시 배포합니다.
  • 도커 이미지 빌드
  • heroku 컨테이너 수행:푸시
  • heroku 컨테이너 수행:릴리스

  • 짜잔 - 웹에서 호스팅되는 고유한 .NET Core 앱입니다.

    결론



    위의 자습서가 도움이 되고 일부 초보자가 자신의 .NET Core 측면 프로젝트를 시작할 수 있기를 바랍니다.

    읽는 사람이 추가 팁이나 더 나은 접근 방식이 있으면 아래에 의견을 남겨주세요!

    읽어주셔서 감사합니다 👋

    좋은 웹페이지 즐겨찾기