Pular para o conteúdo
Código e Café com PauloDev: Explorando o Universo da Programação

Código e Café com PauloDev: Explorando o Universo da Programação

Explore o universo da programação e tecnologia com PauloDev. Descubra insights, tutoriais e inovações que moldam o futuro digital. De linhas de código a ideias revolucionárias, embarque nesta jornada tech onde a paixão pela inovação se encontra com a expertise do desenvolvimento. Seja bem-vindo ao blog que transforma códigos em narrativas de vanguarda, guiado pela visão única de PauloDev no vasto panorama tecnológico.

  • Meu portifolio

Publicando um API ASP.NET Core com Docker e Docker Compose em uma VPS Linux 

30 de junho de 2024
Por Paulo In Boas Práticas, Docker

Publicando um API ASP.NET Core com Docker e Docker Compose em uma VPS Linux 

Trabalhar como desenvolvedor não se limita apenas a escrever códigos, mas também, muitas das vezes somos responsáveis por fazer a publicação dos nossos projetos. Uma tarefa bem comum, ainda mais se você trabalha em pequenas e médias startups.

Mas não se engane, não é algo ruim de saber, saber publicar uma aplicação é um grande diferencial para seu emprego, além de mostrar que você tem conhecimento sobre determinado assunto, e é capaz, além de escrever o seu código, levá-lo para produção e apresentar para o cliente.

Conceitos básicos – O que é uma VPS

Para esse artigo, vamos usar a VPS da Hostinger para hospedar o nosso projeto, mas fique à vontade para usar de qualquer outra, desde que seja uma VPS, para não correr o risco de você se perder.

Basicamente, VPS, sigla para Virtual Private Server, ou servidor virtual privado. São servidores virtualizados em máquinas físicas e que apresentam performance superior à oferecida pelos serviços tradicionais de hospedagem, como a hospedagem compartilhada. Eles entregam um ótimo desempenho, além de um preço mais acessível quando comparados a servidores dedicados ou clouds.

Caso você não saiba, um servidor se refere a um computador usado para armazenar dados, arquivos e aplicações que podem ser acessados de forma remota. Os servidores também cumprem um papel deveras importante quando o assunto é páginas da internet, fazendo o armazenamento de sites e disponibilizando-os quando alguém os requisita.

Qual é o objetivo do VPS?

A hospedagem compartilhada, como o próprio nome indica, armazena seu site ou seu blog de forma compartilhada, ou seja, no mesmo computador junto de inúmeros outros sites de muitas outras pessoas e/ou empresas.

Na outra ponta, estão os servidores dedicados, que são sinônimo de exclusividade. Estamos falando de um computador com ótimo poder de processamento só para o seu site, e ninguém mais. O que consequentemente, torna-o mais caro de se manter, já que será só você e ninguém mais.

Ao optar pelo VPS, seu site é hospedado em um computador ao lado de outros sites; contudo, não são tantos como acontece na hospedagem tradicional.

Isso significa que os recursos de hardware da máquina são compartilhados por uma quantidade menor de sites, o que torna o VPS uma opção que oferece um desempenho melhor por um preço mais acessível que o do servidor dedicado.

Docker – O melhor amigo do Dev

Acho que dificilmente você nunca ouviu o termo Docker sendo cunhado se você acompanha algum canal de tecnologia hoje em dia. Contudo, deixe-me explicar melhor o que ele é.

Diferente de máquinas virtuais, que fazem o carregamento completo do seu sistema, o Docker tem uma proposta mais simples, utilizar containers para virtualizar os ambientes de execução das aplicações. Cada container inclui apenas o necessário para a aplicação funcionar, como bibliotecas e dependências, compartilhando o kernel do sistema operacional host com outros containers. Isso, por sua vez, nos traz mais eficiência de recursos e facilita a implantação e o gerenciamento de aplicações tanto no ambiente de produção, quanto de desenvolvimento.

Sem mais enrolação – vamos para o código

Vamos iniciar separando o que devemos fazer para rodar nossa aplicação:

  1. Ter uma VPS e fazer a conexão SSH pelo terminal
  2. Instalar o Docker e o Docker Compose na nossa VPS
  3. Subir um container SQL Server e  liberar o acesso externo por meio do firewall da VPS
  4. Configurar o Dockerfile para nosso container com ASP.NET
  5. Configurar o docker-compose.yml para subir nosso container 
  6. Buildar o projeto como Docker

Vamos iniciar pelo mais simples, a conexão via SSH é algo que ao fazer o pagamento da sua hospedagem já é instruído. Para fazer a conexão, basta ter instalado o sistema operacional (S.O)  pelo painel da sua VPS (estou usando o ubuntu 22.04 para esse artigo). Em seguida, pegue o endereço do servidor da sua hospedagem e o usuário do S.O. Por fim, abra o terminal do seu computador e digite:

ssh <usuario_do_so>@<endereco_do_servidor>

Ao apertar “enter”, você precisará informar a senha que definiu ao instalar o S.O.

Instalando o Docker

Agora vamos para a segunda etapa, instalar o Docker. Se você procurar no Google algo como “How to install Docker on ubuntu 22.04”, irão ser listados “N” tutoriais para te orientar. Mas para simplificar seu dia, vamos para uma instalação mais direta. Com o terminal aberto, e conectado na sua VPS, siga os seguintes passos:

Atualizar os pacotes do sistema

sudo apt update

Instalar alguns pacotes de pré-requisitos que permitem “apt” usar pacotes via HTTPS:

sudo apt install apt-transport-https ca-certificates curl software-properties-common

Adicionar a chave GPG do repositório oficial do Docker ao seu sistema:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Adicione o repositório Docker às fontes APT:

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Atualizar sua lista de pacotes existente, para pegar os recém adicionados:

sudo apt update

Verificar se você vai instalar o Docker a partir do repositório oficial do Docker, ao invés o do Ubuntu:

apt-cache policy docker-ce

Saída esperada:

docker-ce:
  Installed: (none)
  Candidate: 5:20.10.14~3-0~ubuntu-jammy
  Version table:
     5:20.10.14~3-0~ubuntu-jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages
     5:20.10.13~3-0~ubuntu-jammy 500
        500 https://download.docker.com/linux/ubuntu jammy/stable amd64 Packages

Por fim, instale o Docker:

sudo apt install docker-ce

Agora basta iniciar o docker na inicialização do seu sistema:

sudo systemctl status docker

Pronto, agora podemos seguir.

Subindo um container com SQL Server e liberando o acesso externo

Para que o artigo fique mais completo, estou optando por te mostrar como fazer a configuração do SQL Server no Docker, por ser uma banco bastante usado em projetos ASP.NET. Mas sinta-se à vontade para utilizar qualquer outro, basta compreender os conceitos apresentados a seguir.

Vamos começar subindo o nosso container SQL Server. Isso pode demorar um pouco, então aproveite para ir tomar um café:

docker run --name sqlserver -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=1q2w3e4r@#$" -p 1433:1433 -d mcr.microsoft.com/mssql/server

Agora, basta liberar o acesso externo do SQL Server através do Firewall da VPS. Para isso, basta digitar:

sudo ufw allow 1433/tcp

Para testar, primeiro procure pelo ip público da sua hospedagem, para isso digite:

curl ifconfig.me

Em seguida, você pode usar algum software para fazer a conexão com o seu banco, nesse exemplo, estou usando o Azure Data Studio, mas sinta-se à vontade para usar qualquer outro. Vamos usar a conexão por meio de “Connection Strings”, então, no software escolhido, ao criar a nova conexão escolha por “Connection Strings”. Em seguida basta colocar o seguinte:

Server=<IP_Público_da_VPS>,1433;User Id=sa;Password=1q2w3e4r@#$;

Pronto, fazendo isso você já estará conectado.

Configurando nosso Dockerfile para o ASP.NET

A configuração do Dockerfile é uma etapa de grande importância para nós, pois ele é usado para configurarmos nossas próprias imagens, com as características necessárias para a aplicação funcionar. Estarei usando o .net6.0, mas sinta-se à vontade para colocar a versão que melhor se adequa ao seu projeto.

Inicie criando adicionando o arquivo Dockerfile (sem nenhuma extensão mesmo), na raiz do seu projeto, no mesmo nível do arquivo .sln da sua aplicação. Nesse arquivo digite o seguinte:

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
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["NOME_DO_SEU_PROJETO/NOME_DO_SEU_PROJETO.csproj", "NOME_DO_SEU_PROJETO/"]
RUN dotnet restore "./NOME_DO_SEU_PROJETO/NOME_DO_SEU_PROJETO.csproj"
COPY . .
WORKDIR "/src/NOME_DO_SEU_PROJETO"
RUN dotnet build "./NOME_DO_SEU_PROJETO.csproj" -c $BUILD_CONFIGURATION -o /app/build

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./NOME_DO_SEU_PROJETO.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "NOME_DO_SEU_PROJETO.dll"]

Onde está escrito “NOME_DO_SEU_PROJETO”, substituia pelo nome que você informou na hora de criar a sua aplicação. 

Configurando o Docker Compose – O orquestrador de containers Docker

Para você não se perder, acabei não dizendo o que é o Docker Compose, apesar de você já ter instalado em sua VPS, desde que tenha instalado o Docker corretamente. De forma resumida, o Docker compose nos permite gerenciar uma grande quantidade de containers Docker a partir de um arquivo de configurações YAML, tendo todos os containers configurados dentro do arquivo chamado “docker-compose.yml” ou “docker-compose.yaml” (ambos funcionam da mesma forma).

Com ele, nosso trabalho para subir containers será bastante facilitado. Imagine uma aplicação com mais de 10 container Docker, ter que digitar tudo isso no terminal ou até mesmo lembrar o que digitar toda vez que for rodar seu projeto não é uma tarefa tão simples.

Voltando para o nosso projeto, vamos adicionar no “docker-compose.yml” no mesmo diretório que colocamos o “Dockerfile”. Com ele aberto, digite o seguinte:

version: '3.8'
services:
  feedbacks-app:
    image: feedbacks-app
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - '5101:80'
      - '7286:443'

A parte boa – Buildando o nosso projeto

Tendo todas as configurações anteriores feitas, e tudo ocorrido com sucesso. Basta um simples comando para rodar o seu projeto. Certifique-se de estar no mesmo diretório que o seu arquivo docker-compose.yml. Agora, basta rodar o seguinte:

docker-compose up -d

Pronto, seu projeto está rodando. Você pode acessá-lo usando o IP da sua VPS + a porta que seu projeto está rodando, por exemplo:

http://<IP_DA_SUA_HOSPEDAGEM>:5101/api/v1/login

Mas não se limita a apenas isso, você também pode configurar um domínio para seu projeto, mas isso fica para outro artigo.

Conclusão

Nesse artigo você aprendeu a como fazer o deploy de um projeto ASP.NET com Docker em uma VPS Linux. Foi apresentado a conceitos teóricos como, o que são VPS e para que servem, o que é Docker e Docker Compose, além dos comandos necessários para fazer o deploy do seu projeto na sua VPS.

Mas não pare por aí, aproveite nosso blog para adquirir novos conhecimentos sobre o ASP.NET. Que tal aprender sobre a utilização de Cache nas suas aplicações? Curtiu? Então clique no link abaixo:

Cache com C# e ASP.NET – Uma maneira simples de melhorar a performance da sua aplicação
Promoção
Written by:

Paulo

Ver todos os posts

Categorias

  • Android
  • Android Studio
  • Angular
  • API
  • AWS
  • Back-end
  • Bash
  • Boas Práticas
  • CSharp
  • CSS
  • Django
  • Docker
  • Electron
  • Front-end
  • Git
  • Github
  • Html
  • Http
  • Java
  • JavaScript
  • Laravel
  • Linha de comando
  • Linux
  • Machine Learning
  • Metodologias
  • Mysql
  • Node
  • NoSql
  • PHP
  • Power Shell
  • Python
  • Segurança
  • Sem categoria
  • SQL
  • Tecnologia
  • Testes
  • VueJs
  • Windows

Últimos posts

  • Python para o desenvolvimento Web: Como o Django pode alavancar na escrita do seu código
  • Conheça as Transactions e como elas podem te ajudar a testar o seu sistema
  • Melhorando a performance dos seus projetos PHP, conheça o OPCache e o JIT
  • Redis com Laravel: Uma ferramenta poderosa para o escalonamento horizontal da sua aplicação
  • Conhecendo e configurando um servidor de Load Balance com YARP e NGINX

© Todos os direitos reservados PauloDev 2023