Publicando uma aplicação ASP.NET Core no Heroku \| TreinaWeb               Promoção no ar   Matricule-se agora e garanta **54% de desconto**  

  Termina em   Tempo restante da oferta: 11 Horas 

 19 Min 

 35 Seg 

   Tempo restante da oferta: 11 19 35 

  [Assinar →](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26) 

   [                ](https://www.treinaweb.com.br)  Explorar  

 [ Quanto custa? ](#assinatura) [ FAQ ](https://www.treinaweb.com.br#faq) [Matricule-se](#assinatura) [ Entrar ](https://www.treinaweb.com.br/login) 

     [ Início ](https://www.treinaweb.com.br) [ Artigos ](https://www.treinaweb.com.br/blog) Publicando uma aplicação ASP.NET Core no Heroku  [ ASP .NET ](https://www.treinaweb.com.br/blog/categoria/asp-net) [ .NET Core ](https://www.treinaweb.com.br/blog/categoria/net-core) [ Desenvolvimento Web ](https://www.treinaweb.com.br/blog/categoria/entrevistas-desenvolvimento-web) 

# Publicando uma aplicação ASP.NET Core no Heroku

 Veja neste artigo como publicar uma aplicação ASP.NET Core no Heroku.

 [ Wladimilson M. Nascimento ](https://www.treinaweb.com.br/blog/autor/wladimilson-m-nascimento) 7 anos atrás

  ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/02/02145619/asp-net-heroku.png)  

No desenvolvimento de uma aplicação web pode ser necessário a sua publicação para testes, ou mesmo, para apresentar algo para um futuro usuário. Durante os estudos, também é muito comum o desejo de publicar a aplicação web que está sendo criada.

Por não ser algo definitivo, o desenvolvedor pode não desejar (ou não poder) pagar por uma hospedagem para publicar a aplicação web que está desenvolvendo. Infelizmente não existem muitas opções de hospedagem gratuita. Dos que existem, sempre há alguma limitação.

Um dos serviços que mais se destacam neste requisito é o [Heroku](https://www.heroku.com/).

[  ![Kubernetes - Rollouts, objetos de configuração, volumes e StatefulSet](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/kubernetes.svg)   Curso Kubernetes - Rollouts, objetos de configuração, volumes e StatefulSet Conhecer o curso ](https://www.treinaweb.com.br/curso/kubernetes-rollouts-objetos-de-configuracao-volumes-e-statefulset)

## Heroku

O Heroku é uma platform as a service ([PaaS](https://www.treinaweb.com.br/blog/os-tipos-mais-comuns-de-hospedagem-de-sites)) que permite que desenvolvedores criem, executem e publiquem aplicações na nuvem, sendo que a sua versão mais básica é grátis. Mesmo nesta versão, ele fornece uma URL, o que permite testar a aplicação sem necessitar de um domínio.

Entretanto, nativamente o Heroku fornece suporte apenas as linguagens JavaScript (via Node), Ruby, Java, PHP, Python, Go, Scala e Clojure. É possível executar outras linguagens via Buildpacks, que são scripts criados pela comunidade.

Contudo, esses buildpacks podem possuir limitações que impedem o seu uso na sua aplicação. Algo simples, para uma linguagem nativa, [como a publicação de uma aplicação Django](https://www.treinaweb.com.br/blog/deploy-de-uma-aplicacao-django-no-heroku/), pode ser complexo com o uso de um buildpack criado pela comunidade.

Felizmente, o Heroku também permite a publicação de uma imagem [Docker](https://www.treinaweb.com.br/blog/no-final-das-contas-o-que-e-o-docker-e-como-ele-funciona/), o que elimina praticamente todos os limites que um buildpack possa ter.

Assim, por não fornecer suporte nativo ao ASP.NET Core, neste artigo veremos como publicar este tipo de aplicação na plataforma via container do Docker.

## Preparando a casa

Para acompanhar este artigo é importante que tenha o Docker instalado na sua máquina. Há versões dele para [todos os sistemas operacionais](https://www.docker.com/get-started). Também é importante que tenha uma conta no Heroku e o seu utilitário de linha comando configurado na máquina. O [Fagner](https://www.treinaweb.com.br/blog/author/fagner-pinheiro/) (instrutor aqui da Treinaweb) explicou como isso pode ser feito no seu artigo sobre a [publicação de uma aplicação Django](https://www.treinaweb.com.br/blog/deploy-de-uma-aplicacao-django-no-heroku/).

Por fim, mas não menos importante, a aplicação utilizada neste artigo será a [API a criada com o framework Carter](https://www.treinaweb.com.br/blog/criando-uma-api-restful-com-o-carter-e-net-core/) que mostrei anteriormente.

[  ![Kubernetes - Rollouts, objetos de configuração, volumes e StatefulSet](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/kubernetes.svg)   Curso Kubernetes - Rollouts, objetos de configuração, volumes e StatefulSet Conhecer o curso ](https://www.treinaweb.com.br/curso/kubernetes-rollouts-objetos-de-configuracao-volumes-e-statefulset)

## “*Containeralizando*” a aplicação ASP.NET Core

A primeira coisa que temos que fazer na aplicação é adicioná-la a um container Docker, para isso, deve ser adicionado ao projeto o arquivo **Dockerfile**. Será neste arquivo que definiremos como o nosso container será criado.

Também é recomendado que seja criado na aplicação um arquivo **.dockerignore**. Assim como o **.gitignore**, neste arquivo são definidos diretórios e arquivos que o docker deve ignorar. Para esta aplicação, o conteúdo do **.dockerignore** será:

```reStructuredText
**/.dockerignore
**/.git
**/.gitignore
**/.vs
**/.vscode
**/*.*proj.user
**/bin
**/obj

```

Já o Dockerfile conterá:

```dockerfile
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app

FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY . .
RUN dotnet restore 
RUN dotnet build --no-restore -c Release -o /app

FROM build AS publish
RUN dotnet publish --no-restore -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
# Padrão de container ASP.NET
# ENTRYPOINT ["dotnet", "CarterAPI.dll"]
# Opção utilizada pelo Heroku
CMD ASPNETCORE_URLS=http://*:$PORT dotnet CarterAPI.dll

```

Um arquivo Dockerfile é como um script. Este em questão implementa multi-stage, o que significa que é definido um passo para cada processo definido no script. Assim, se um passo falhar, não é necessário refazer os passos que já foram concluídos.

Acima, inicialmente se obtém a imagem de runtime do ASP.NET Core, na imagem do SDK as bibliotecas da aplicação são obtidas e ela é compilada. Caso não ocorra nenhum erro, a aplicação é publicada e por fim, ela é iniciada.

Geralmente quando uma aplicação ASP.NET Core é adicionada em um container, ela é iniciada com o comando:

```dockerfile
ENTRYPOINT ["dotnet", "CarterAPI.dll"]

```

Mas o Heroku recomenda que a aplicação seja iniciada com o comando:

```dockerfile
CMD ASPNETCORE_URLS=http://*:$PORT dotnet CarterAPI.dll

```

Isso ocorre porque o processo web do Heroku “escuta” as requisições HTTP na porta `$PORT`, que não necessariamente é a porta 80. A porta que ele utilizará é atribuído a variável de ambiente `$PORT`, assim antes de iniciar a aplicação, a porta utilizada pela aplicação é alterada para ser a mesma esperada pelo Heroku.

Agora está tudo pronto e podemos criar uma imagem da nossa aplicação. Para isso, utilizamos o comando abaixo:

```dos
docker build -t carter-api .

```

Lembrando que este comando deve ser executado pelo terminal no mesmo nível do arquivo **Dockerfile**, ou seja, na raiz da aplicação.

Pronto, com a imagem do projeto criado, podemos publicá-la no Heroku.

## Publicando a aplicação no Heroku

Após se registrar no [site](https://heroku.com), no dashboard crie um novo projeto:

![](https://dkrn4sk0rn31v.cloudfront.net/2020/02/28161405/create-app-heroku.png)

O nome do projeto irá definir a URL da aplicação, que seguirá o padrão `.herokuapp.com`.

Voltando a aplicação, acesse pelo terminal a pasta da sua aplicação e nela execute o comando:

```dos
heroku container:push web -a carter-api

```

Note que no parâmetro `-a` é informado o nome da aplicação definida no Heroku. Com isso, uma imagem Docker será gerada e enviada para o registro do Heroku:

Como é apresentado no final deste comando, para que a aplicação seja disponibilizada é necessário executar o comando `container:release`:

```dos
heroku container:release web -a carter-api

```

Que irá apenas “liberar” a aplicação:

Agora é possível acessá-la na url `.herokuapp.com`:

![](https://dkrn4sk0rn31v.cloudfront.net/2020/02/28161405/app-on-heroku-1.png)

Até o Swagger está disponível:

![](https://dkrn4sk0rn31v.cloudfront.net/2020/02/28161404/app-on-heroku-2.png)

Simples não é?

[  ![C# (C Sharp) Avançado](https://d2knvm16wkt3ia.cloudfront.net/assets/svg-icon/csharp.svg)   Curso C# (C Sharp) Avançado Conhecer o curso ](https://www.treinaweb.com.br/curso/csharp-avancado)

## Para tudo e além…

O processo que utilizamos aqui é bem simples e por fazer uso de um container Docker, isso nos permite publicar qualquer tipo de aplicação web que funciona em container. Isso vale desde aplicações de linguagens suportadas nativamente pelo Heroku, mas que utilize outra versão da linguagem, até aplicações que ainda nem existem atualmente.

Uma aplicação web de uma nova linguagem que suporte Docker, poderia ser publicada utilizando este mesmo processo, sem problemas.

Então é isso. Você pode obter os códigos da aplicação demostrada aqui no meu [Github](https://github.com/wladimilson/carterapi).

- [ #ASP .NET Core ](https://www.treinaweb.com.br/blog/tag/asp-net-core)
- [ #Docker ](https://www.treinaweb.com.br/blog/tag/docker)
- [ #Heroku ](https://www.treinaweb.com.br/blog/tag/heroku)

Autor

 ![Wladimilson M. Nascimento](//secure.gravatar.com/avatar/f0dd442f156a3eacd2880e9cd0eafbd1?d=mm)

## Wladimilson M. Nascimento

 Instrutor, nerd, cinéfilo e desenvolvedor nas horas vagas. Graduado em Ciências da Computação pela Universidade Metodista de São Paulo. 

 [Todos os artigos](https://www.treinaweb.com.br/blog/autor/wladimilson-m-nascimento)  

## Continue estudando

 Transforme leitura em prática com os cursos e formações da TreinaWeb.

 [Ver cursos](https://www.treinaweb.com.br/cursos)   

  Continue lendo

## Artigos relacionados

- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/10/deploy-asp-net-core-linux-nginx-400x280.png)  [ ASP .NET ](https://www.treinaweb.com.br/blog/categoria/asp-net) 

     6 anos atrás

    ##  [ Publicando uma aplicação ASP.NET Core no Linux com o Nginx ](https://www.treinaweb.com.br/blog/publicando-uma-aplicacao-asp-net-core-no-linux-com-o-nginx) 

     Veja todo o processo de publicação de deploy de uma aplicação ASP.NET Core no Linux utilizando o Nginx.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/01/10162055/asp-net-beanstalk-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     7 anos atrás

    ##  [ Publicando uma aplicação .NET Core 3.0 no AWS Elastic Beanstalk ](https://www.treinaweb.com.br/blog/publicando-uma-aplicacao-net-core-3-0-no-aws-elastic-beanstalk) 

     Nesse artigo vamos aprender como publicar e configurar um projeto desenvolvido em ASP.NET Core 3.0 no Elastic Beanstalk, o serviço do tipo plataforma como serviço da AWS especializado para aplicações web.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2019/08/01172547/NET-CORE-3-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     7 anos atrás

    ##  [ .NET Core 3.0 - Criando tarefas de segundo plano com Worker Service ](https://www.treinaweb.com.br/blog/net-core-3-0-criando-tarefas-de-segundo-plano-com-worker-service) 

     Você já quis criar tarefas em segundo plano com o .NET Core? Na versão 3.0 foi introduzido o template Worker Service que facilita a criação deste tipo de aplicação. Caso tenha passado por uma situação assim, neste artigo mostramos como você pode aproveitar este novo recurso do .NET Core 3.0.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/05/05142558/mediator-pattern-com-mediatr-no-asp-net-core-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     7 anos atrás

    ##  [ Mediator Pattern com MediatR no ASP.NET Core ](https://www.treinaweb.com.br/blog/mediator-pattern-com-mediatr-no-asp-net-core) 

     Manter os objetos isolados é o objetivo do Mediator Pattern. No ASP.NET Core a sua implementação é facilitada com a biblioteca MediatR.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/04/utilizando-arquivos-dotenv-env-em-uma-aplicacao-asp-net-core-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     6 anos atrás

    ##  [ Utilizando arquivos Dotenv (.env) em uma aplicação ASP.NET Core ](https://www.treinaweb.com.br/blog/utilizando-arquivos-dotenv-env-em-uma-aplicacao-asp-net-core) 

     O uso de arquivos .env é quase o padrão de aplicações web, veja como utilizá-los em uma aplicação ASP.NET Core.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/07/13150455/aplicacoes-self-contained-com-o-net-core-400x280.jpg)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     8 anos atrás

    ##  [ ASP.NET Core: Compreendendo AddMvc(), AddMvcCore(), AddControllers(), AddControllersWithViews() e AddRazorPages() ](https://www.treinaweb.com.br/blog/asp-net-core-compreendendo-addmvc-addmvccore-addcontrollers-addcontrollerswithviews-e-addrazorpages) 

     Aprenda quando utilizar os métodos AddMvc(), AddMvcCore(), AddControllers(), AddControllersWithViews() e AddRazorPages() em uma aplicação ASP.NET Core.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/09/CACHE-DISTRIBUÍDO-ASP-NET-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     6 anos atrás

    ##  [ Implementando cache distribuído no ASP.NET Core ](https://www.treinaweb.com.br/blog/implementando-cache-distribuido-no-asp-net-core) 

     Veja como é simples implementar cache distribuído no ASP.NET Core, utilizando o Redis ou o SQL Server.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2017/07/aplicacoes-self-contained-com-o-net-core-400x280.png)  [ .NET Core ](https://www.treinaweb.com.br/blog/categoria/net-core) 

     10 anos atrás

    ##  [ Aplicações self-contained com o .NET Core ](https://www.treinaweb.com.br/blog/aplicacoes-self-contained-com-o-net-core) 

     Aprenda a criar aplicações self-contained no .NET Core.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2022/08/asp-net-conhecendo-as-minimal-api-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     4 anos atrás

    ##  [ ASP.NET - Conhecendo a Minimal API ](https://www.treinaweb.com.br/blog/asp-net-conhecendo-as-minimal-api) 

     Neste artigo vamos conhecer um dos recursos que foram adicionados no .NET 6/ASP.NET 6, que é um novo template de aplicações Web, a Minimal API.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2021/05/code-copy-400x280.png)  [ C# ](https://www.treinaweb.com.br/blog/categoria/csharp) 

     10 anos atrás

    ##  [ Criando repositórios para o NuGet ](https://www.treinaweb.com.br/blog/criando-repositorios-para-o-nuget) 

     Veja algumas importantes dicas sobre a criação de repositórios para o NuGet.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2018/07/16141718/GOOGLE-APP-ENGINE-400x280.png)  [ Google Cloud Platform (GCP) ](https://www.treinaweb.com.br/blog/categoria/google-cloud-platform-gcp) 

     8 anos atrás

    ##  [ O que é o App Engine e como publicar uma aplicação nele ](https://www.treinaweb.com.br/blog/o-que-e-o-app-engine-e-como-publicar-uma-aplicacao-nele) 

     Descubra o que é o App Engine, sua história e como fazer a publicação (deploy) de sua primeira aplicação através de um vídeo prático.

     Ler artigo
- ![](https://dkrn4sk0rn31v.cloudfront.net/uploads/2020/05/lambda-400x280.png)  [ Desenvolvimento ](https://www.treinaweb.com.br/blog/categoria/desenvolvimento) 

     7 anos atrás

    ##  [ O que é AWS Lambda? ](https://www.treinaweb.com.br/blog/o-que-e-aws-lambda) 

     Nesse artigo vamos conhecer o AWS Lambda, serviço de computação Serveless da AWS especializado em executar funções sem a necessidade de se preocupar com servidores.

     Ler artigo

## Um ano de acesso total para você viver de programação.

 Todos os cursos e formações da TreinaWeb numa única assinatura, com professores que atuam no mercado, suporte direto e certificados. Do primeiro `console.log` ao mercado de trabalho.

- **1 ano** de acesso a **todos os cursos**
- Cursos novos **toda semana**
- Suporte **direto com professores**
- Plano de carreira **personalizado**
- **Certificados digitais** inclusos
- **Aplicativos** para Android e iOS, com **acesso offline**

    **Garantia incondicional de satisfação** 

 Teste por 7 dias e, se não fizer sentido para você, devolvemos seu dinheiro.

### Acesso completo a todos os cursos e dezenas de Formações.

 12 meses 

  Economize R$ 840,00  54% OFF 

 de 12x R$ 129,00 por apenas

 12x  R$ 59,00

 sem juros no cartão de crédito ou R$ 599,00 à vista

  Oferta termina em  **11h 19min 35s**

- Acesso imediato e ilimitado durante 1 ano.
- Plano de carreira personalizado.
- Suporte direto com professores.
- E muito mais!

 [Matricule-se agora](https://www.treinaweb.com.br/checkout/pagamento/plano/anual?cupom=TW-SCLIENTE26)

     [                ](https://www.treinaweb.com.br)

 Escola online de programação, tecnologia e IA.

- [  ](https://www.facebook.com/TreinaWeb/)
- [  ](https://www.instagram.com/treinaweb/)
- [  ](https://www.youtube.com/user/TreinaWeb)
- [  ](https://twitter.com/treinaweb)
- [  ](https://www.linkedin.com/company/treinaweb)
- [  ](https://github.com/treinaweb)

## Inscreva-se em nossa newsletter

Receba lançamentos, promoções e novidades.

   Seu nome     Seu WhatsApp     Seu melhor e-mail   Inscrever-se 

## Cursos

- [ Base para Devs ](https://www.treinaweb.com.br/categoria/base-para-devs)
- [ Front-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-front-end)
- [ Back-end ](https://www.treinaweb.com.br/categoria/desenvolvimento-back-end)
- [ Mobile ](https://www.treinaweb.com.br/categoria/desenvolvimento-mobile)
- [ Bancos de Dados ](https://www.treinaweb.com.br/categoria/bancos-de-dados)
- [ Cloud ](https://www.treinaweb.com.br/categoria/cloud-computing)
- [ IA ](https://www.treinaweb.com.br/categoria/ia)
- [ E mais ](https://www.treinaweb.com.br/categoria/e-mais)
- [ Ver todos os cursos ](https://www.treinaweb.com.br/cursos)

## Conteúdo

- [ Formações ](https://www.treinaweb.com.br/formacoes)
- [ Projetos práticos ](https://www.treinaweb.com.br/projetos-praticos)
- [ Direto ao ponto ](https://www.treinaweb.com.br/direto-ao-ponto)
- [ Planos ](https://www.treinaweb.com.br#assinatura)
- [ Depoimentos ](https://www.treinaweb.com.br#depoimentos)
- [ Comunidade ](https://www.treinaweb.com.br#comunidade)
- [ Corpo docente ](https://www.treinaweb.com.br#docente)

## A empresa

- [ Sobre a TreinaWeb ](https://www.treinaweb.com.br#sobre)
- [ Perguntas frequentes ](https://www.treinaweb.com.br#faq)
- [ Vantagens de estudar na TreinaWeb ](https://www.treinaweb.com.br/vantagens-de-estudar-na-treinaweb)
- [ Cursos para empresas ](https://www.treinaweb.com.br/empresas)
- [ Sugira um novo curso ](https://www.treinaweb.com.br/sugerir-curso)
- [ Trabalhe conosco ](https://www.treinaweb.com.br/trabalhe-conosco)
- [ Artigos ](https://www.treinaweb.com.br/blog)
- [ Desenvolvedores e agentes ](https://www.treinaweb.com.br/developers)
- [ Contato ](https://www.treinaweb.com.br/contato)
- [ Política de privacidade ](https://www.treinaweb.com.br/politica-de-privacidade)
- [ Termos de uso ](https://www.treinaweb.com.br/termos-de-uso)

## Baixe nosso aplicativo

 [   Disponível na **App Store**  ](https://apps.apple.com/us/app/treinaweb/id1322729447) [   Disponível no **Google Play**  ](https://play.google.com/store/apps/details?id=br.com.treinaweb.mobile) 

  Av. Paulista, 1765, Conj 71 e 72 · Bela Vista · São Paulo · SP · 01311-200   © 2004 – 2026 TreinaWeb Tecnologia LTDA · CNPJ 06.156.637/0001-58
