DEV Community

Thiago da Silva Adriano
Thiago da Silva Adriano

Posted on

7 1

Deploying NET 6 WEB API to Heroku using Docker

In this article we’ll publishing a NET 6 application on Heroku using Docker.

Prerequisite:

Create a new .NET 6 WEB API project

The First step we need to create a new .NET 6 project, to do this we’ll use dotnet cli. Open a terminal or CMD in your computer and type this command below:

dotnet new webapi
Enter fullscreen mode Exit fullscreen mode

This command will create a minimal web API:

Image description

to get to know more about minimal web API, I recommend this article Minimal APIs overview

Create a Heroku project

To host our project on Heroku, we need to go to Heroku website and Sign In or Sign Up

After this we need to create a new project. To this article I'll call net6heroku, but you can choose another name.

Image description

Containerize a .NET 6 web API

In your project folder, create a file Dockerfile without any extension and paste below lines: (please, change dotnet-heroku.dll based on your Solution name)

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443

FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["dotnet-heroku.csproj", "."]
RUN dotnet restore "./dotnet-heroku.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "dotnet-heroku.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "dotnet-heroku.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
CMD ASPNETCORE_URLS=http://*:$PORT dotnet dotnet-heroku.dll
Enter fullscreen mode Exit fullscreen mode

After this run this command bellow to create a new Docker image from you project:

docker build -t {your heroku project name} .
//like docker build -t net6heroku .
Enter fullscreen mode Exit fullscreen mode

And this command to logIn at heroku-cli

heroku login
heroku container:login
Enter fullscreen mode Exit fullscreen mode

Now we need to TAG our imagem to push to Heroku’s Container registry:

docker tag <MyApp> registry.heroku.com/<MyApp>/web
//like docker tag net6heroku registry.heroku.com/net6heroku/web
Enter fullscreen mode Exit fullscreen mode

Build the image locally and push it to Heroku’s Container Registry

heroku container:push web -a <MyApp>
//like heroku container:push web -a net6heroku
Enter fullscreen mode Exit fullscreen mode

Now release the image on Heroku to be deployed:

heroku container:release web -a <MyApp>
//like heroku container:release web -a net6heroku
Enter fullscreen mode Exit fullscreen mode

for this demo, I have used net6heroku as MyApp

net6heroku-example

Image description

Sentry image

See why 4M developers consider Sentry, “not bad.”

Fixing code doesn’t have to be the worst part of your day. Learn how Sentry can help.

Learn more

Top comments (2)

Collapse
 
alexeyromanchenko profile image
AlexeyRomanchenko

It seems that something has changed .. I have this error in the logs ,

State changed from crashed to starting
2022-07-23T11:55:41.622521+00:00 heroku[web.1]: Starting process with command /bin/sh -c ASPNETCORE_URLS\=http://\*:\42902\ dotnet\ WebApi.API.dll
2022-07-23T11:55:42.743639+00:00 heroku[web.1]: State changed from starting to crashed

Haven't you faced with something similar ?

Collapse
 
alexeyromanchenko profile image
AlexeyRomanchenko

I assume , it can be connected with a slash before the port number, I do not know why it is created there, investigating

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay