Olá! Bem-vindo de volta.
Na lição anterior, estabelecemos uma base crucial para implantações seguras, diferenciando a gestão de segredos em desenvolvimento (com User Secrets) da gestão em produção (com variáveis de ambiente). Agora, vamos colocar essa teoria em prática.
O objetivo desta lição é implantar uma aplicação .NET containerizada no Render usando seu fluxo de trabalho nativo de Docker. Chegou a hora de levar nossa aplicação para a nuvem. Veremos dois métodos principais que o Render oferece, ambos aproveitando o que aprendemos sobre Docker e configuração. Isso nos permitirá ver nosso código rodando em um URL público, um marco importante no ciclo de vida de qualquer aplicação.
1. O Fluxo de Trabalho de Implantação com Contêineres
Antes de mergulharmos nos detalhes do Render, vamos visualizar o fluxo de trabalho geral de implantação baseado em contêineres. O processo, independentemente da plataforma de nuvem, geralmente segue estes passos:

Essencialmente, você empacota sua aplicação em uma imagem e a envia para um local central (registro). A partir daí, sua plataforma de hospedagem pode pegar essa imagem e executá-la. O Render simplifica esse processo, oferecendo duas maneiras principais de conseguir isso.
2. Os Modelos de Implantação do Render
O Render oferece flexibilidade na forma como você implanta serviços baseados em Docker. Compreender as duas abordagens principais o ajudará a escolher a mais adequada para seu projeto.
A documentação oficial do Render explica claramente as duas opções de implantação Docker. Vamos ler a introdução para entender essas duas vias.
Leia as seguintes seções: A seção de introdução, começando com "Build from a Dockerfile or pull from a container registry", que resume as duas opções. A seção "Docker or native runtime?", que justifica quando você deve escolher Docker em vez dos runtimes nativos do Render. Dado o nosso foco em Docker e .NET (um runtime não suportado nativamente pelo Render), esta seção reforça por que estamos no caminho certo.
Resumindo, as duas opções são:
- Construir a partir de um
Dockerfileno seu repositório Git: Você envia seu código-fonte (incluindo oDockerfile) para o GitHub/GitLab, e o Render se encarrega de construir a imagem e implantá-la. Este é um fluxo de trabalho de Integração/Implantação Contínua (CI/CD) muito comum. - Puxar uma imagem pré-construída de um registro: Você constrói a imagem Docker em sua máquina local ou em um pipeline de CI separado, a envia para um registro como o Docker Hub e, em seguida, instrui o Render a simplesmente baixar e executar essa imagem.
Vamos explorar ambos os fluxos de trabalho na prática.
3. Fluxo de Trabalho 1: Implantação a partir de um Repositório Git
Este é o método mais direto se você já tem um Dockerfile no seu projeto. O processo é: desenvolver -> git push -> Render constrói e implanta.
Deploy with Docker - Step-by-step Tutorial
O vídeo a seguir, de Dave Gray, demonstra esse fluxo de trabalho passo a passo. Embora o exemplo use uma aplicação PHP/Apache, o processo no painel do Render é exatamente o mesmo para qualquer tecnologia. Concentre-se nas etapas de configuração do Render.
Assista a estas duas seções: De 13:25 a 16:57: Observe como o projeto é preparado e enviado para um repositório GitHub. Este é o pré-requisito para o Render. De 16:57 a 20:02: Esta é a parte crucial. Preste atenção em como ele cria um novo 'Web Service', conecta o repositório do GitHub, seleciona 'Docker' como o runtime, escolhe o plano gratuito e, mais importante, onde ele menciona a seção de variáveis de ambiente. É aqui que você aplicaria o conhecimento da nossa lição anterior para fornecer segredos de produção.
Principais Passos neste Fluxo de Trabalho:
- Ter um repositório Git com seu projeto e um
Dockerfile. - No Render, criar um New Web Service.
- Conectar seu repositório do GitHub ou GitLab.
- Configurar o serviço:
- Dar um nome único ao serviço.
- Garantir que o Runtime esteja definido como Docker.
- Selecionar o plano Free.
- Na seção Environment Variables, adicionar quaisquer chaves e valores necessários para a produção (por exemplo,
ConnectionStrings__Postgres,ASPNETCORE_ENVIRONMENT=Production).
- Clicar em Create Web Service e monitorar os logs da implantação.
4. Fluxo de Trabalho 2: Implantação de uma Imagem Pré-construída
Este fluxo de trabalho desacopla a fase de construção da fase de implantação. É particularmente poderoso para nós, desenvolvedores .NET, porque o SDK do .NET 8 (e superior) tem suporte integrado para criar imagens de contêiner sem a necessidade de escrever um Dockerfile manualmente.
O processo é: desenvolver -> construir imagem localmente -> git push (código) & docker push (imagem) -> Render puxa e implanta.
Passo A: Construir e Enviar a Imagem .NET
Primeiro, vamos ver como gerar uma imagem Docker diretamente do nosso projeto .NET e enviá-la para o Docker Hub.
How to Deploy a .NET Application Using Docker For Free
Este artigo do LinkedIn, escrito por Shepherd Umanah, é um guia perfeito para desenvolvedores .NET. Ele mostra exatamente como usar o comando dotnet publish para criar, taguear e enviar uma imagem Docker da sua aplicação.
Leia as seguintes seções: Step 1 & Note: Entenda que, com o .NET 8, o suporte a contêineres é nativo, então você não precisa instalar pacotes adicionais. Step 2: Publishing Your .NET App: Veja o comando dotnet publish com o PublishProfile=DefaultContainer. Isso instrui o .NET a construir e empacotar sua aplicação em uma imagem Docker. Step 3 & 4: Tagging and Pushing: Aprenda os comandos docker tag e docker push para nomear sua imagem corretamente para o Docker Hub e enviá-la para o registro.
Resumindo, os comandos essenciais para uma aplicação .NET 8 são:
- Publicar e Criar a Imagem:
dotnet publish --os linux --arch x64 /t:PublishContainer -c Release - Taguear a Imagem para o Docker Hub:
docker tag <nome-da-sua-app>:latest <seu-usuario-dockerhub>/<nome-da-sua-app>:1.0.0 - Enviar a Imagem para o Docker Hub:
docker push <seu-usuario-dockerhub>/<nome-da-sua-app>:1.0.0
Passo B: Implantar a Imagem no Render
Agora que nossa imagem está no Docker Hub, podemos dizer ao Render para usá-la.
How to Deploy a Docker Image on Render for FREE || Step-by-Step Tutorial
Este vídeo do canal Dynamic Technologies demonstra como implantar uma imagem existente do Docker Hub no Render.
Assista do timestamp 01:46 a 09:04. Preste atenção em como o processo difere do fluxo de trabalho anterior: Ele seleciona "Deploy an existing image from a registry". Ele mostra como formatar corretamente a URL da imagem do Docker Hub (ex: docker.io/seu-usuario/sua-app). As outras etapas, como nomear o serviço, escolher o plano e configurar variáveis de ambiente, são semelhantes.
Teste seu entendimento!
Você tem um projeto de API .NET que deseja implantar no Render. Você prefere não manter um Dockerfile no seu repositório e, em vez disso, usar o suporte nativo a contêineres do .NET 8. Quais são os três comandos principais que você precisaria executar em seu terminal, em ordem, antes de ir para o painel do Render para criar o serviço? (Assuma que você já fez login no Docker CLI).
Show answer
- Build/Publish:
dotnet publish --os linux --arch x64 /t:PublishContainer -c Release(ou uma variação para criar a imagem local). - Tag:
docker tag <nome-da-app>:latest <seu-usuario-dockerhub>/<nome-da-app>:1.0.0(para preparar a imagem para o registro). - Push:
docker push <seu-usuario-dockerhub>/<nome-da-app>:1.0.0(para enviar a imagem para o Docker Hub).
Conclusão
Parabéns! Você agora conhece os dois principais fluxos de trabalho para implantar uma aplicação .NET containerizada no Render. Vimos como podemos usar uma abordagem de CI/CD integrada, onde o Render constrói a partir de um Dockerfile, e uma abordagem desacoplada, onde usamos as ferramentas do .NET para construir e enviar uma imagem que o Render então executa.
Principais Pontos:
- O Render pode implantar aplicações Docker de duas maneiras: construindo a partir de um
Dockerfileem um repositório Git ou puxando uma imagem pré-construída de um registro como o Docker Hub. - O fluxo de trabalho baseado em Git é ideal para uma configuração de CI/CD simples e direta.
- O fluxo de trabalho de imagem pré-construída é excelente para desenvolvedores .NET, pois permite o uso do comando
dotnet publishpara criar imagens de contêiner sem umDockerfilemanual. - Em ambos os fluxos de trabalho, a seção Environment Variables no painel do Render é onde você fornecerá com segurança suas configurações de produção, como strings de conexão e chaves de API.
Próxima Lição:
Agora que temos nossa aplicação rodando na nuvem gratuitamente, é importante entender o que "grátis" significa. Na próxima lição, vamos analisar as limitações do plano gratuito do Render, incluindo restrições de recursos (CPU/memória), rede, persistência de dados e o comportamento de "sleep" do serviço. Isso nos ajudará a tomar decisões informadas ao desenvolver projetos pessoais e a entender quando pode ser necessário fazer um upgrade.