<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Magalu Cloud</title>
    <description>The latest articles on Forem by Magalu Cloud (@magalucloud).</description>
    <link>https://forem.com/magalucloud</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F11416%2Fe6ffd0d1-6055-4705-9d5c-5d4ea705a223.png</url>
      <title>Forem: Magalu Cloud</title>
      <link>https://forem.com/magalucloud</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/magalucloud"/>
    <language>en</language>
    <item>
      <title>CI/CD na Magalu Cloud com GitHub Actions</title>
      <dc:creator>Monica Hillman</dc:creator>
      <pubDate>Thu, 19 Mar 2026 20:50:35 +0000</pubDate>
      <link>https://forem.com/magalucloud/cicd-na-magalu-cloud-com-github-actions-382p</link>
      <guid>https://forem.com/magalucloud/cicd-na-magalu-cloud-com-github-actions-382p</guid>
      <description>&lt;p&gt;Um dos problemas mais comuns em times de desenvolvimento não está no código em si, mas na forma como ele chega até produção.&lt;/p&gt;

&lt;p&gt;Mesmo equipes organizadas enfrentam situações como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;diferenças entre ambientes (desenvolvimento, homologação, produção)&lt;/li&gt;
&lt;li&gt;erros manuais durante o processo de publicação&lt;/li&gt;
&lt;li&gt;dificuldade em rastrear qual versão está em execução&lt;/li&gt;
&lt;li&gt;retrabalho após falhas em deploy&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esses problemas tendem a crescer à medida que o sistema evolui e o número de entregas aumenta.&lt;/p&gt;

&lt;p&gt;A prática de CI/CD (Integração Contínua e Entrega Contínua) surge exatamente para resolver esse cenário, automatizando o fluxo de validação e entrega de software.&lt;/p&gt;

&lt;p&gt;Neste artigo, vamos construir um fluxo completo utilizando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions para automação&lt;/li&gt;
&lt;li&gt;Container Registry da &lt;a href="https://magalu.cloud/?utm_source=organico&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+comunidade&amp;amp;utm_id=artigos+comunidade" rel="noopener noreferrer"&gt;Magalu Cloud&lt;/a&gt; para armazenamento de imagens&lt;/li&gt;
&lt;li&gt;Infraestrutura da Magalu Cloud como destino da aplicação&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O objetivo é sair de um processo manual e sujeito a falhas para um pipeline automatizado, reprodutível e integrado com a nuvem.&lt;/p&gt;




&lt;h2&gt;
  
  
  Hands-on: construindo um pipeline de CI/CD
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Visão geral do fluxo
&lt;/h3&gt;

&lt;p&gt;O pipeline que vamos montar segue esta sequência:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Código é enviado para o repositório&lt;/li&gt;
&lt;li&gt;GitHub Actions executa o pipeline&lt;/li&gt;
&lt;li&gt;A aplicação é empacotada como imagem de container&lt;/li&gt;
&lt;li&gt;A imagem é enviada para o Container Registry da Magalu Cloud&lt;/li&gt;
&lt;li&gt;A imagem fica disponível para execução na infraestrutura&lt;/li&gt;
&lt;/ol&gt;




&lt;h3&gt;
  
  
  Pré-requisitos
&lt;/h3&gt;

&lt;p&gt;Antes de começar, é necessário:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conta na Magalu Cloud&lt;/li&gt;
&lt;li&gt;Repositório no GitHub&lt;/li&gt;
&lt;li&gt;Docker configurado no projeto&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Obtendo informações da conta
&lt;/h3&gt;

&lt;p&gt;Para integrações com a plataforma, você pode consultar o Tenant ID via CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc auth tenant current
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O retorno inclui o identificador da conta (UUID), utilizado em integrações com APIs como &lt;code&gt;x-tenant-id&lt;/code&gt; &lt;/p&gt;




&lt;h3&gt;
  
  
  Estrutura do projeto
&lt;/h3&gt;

&lt;p&gt;Exemplo mínimo de aplicação com Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; nginx:alpine&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . /usr/share/nginx/html&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Criando o pipeline no GitHub Actions
&lt;/h3&gt;

&lt;p&gt;Crie o arquivo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;.github/workflows/ci-cd.yml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;CI/CD Magalu Cloud&lt;/span&gt;

&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;

&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;build-and-push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;

    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Checkout do código&lt;/span&gt;
        &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v3&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Build da imagem&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;docker build -t minha-app:latest .&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Login no Container Registry&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;docker login ${{ secrets.REGISTRY_URL }} \&lt;/span&gt;
          &lt;span class="s"&gt;-u ${{ secrets.REGISTRY_USER }} \&lt;/span&gt;
          &lt;span class="s"&gt;-p ${{ secrets.REGISTRY_PASSWORD }}&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Tag da imagem&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;docker tag minha-app:latest \&lt;/span&gt;
          &lt;span class="s"&gt;${{ secrets.REGISTRY_URL }}/minha-app:latest&lt;/span&gt;

      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Push da imagem&lt;/span&gt;
        &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
          &lt;span class="s"&gt;docker push \&lt;/span&gt;
          &lt;span class="s"&gt;${{ secrets.REGISTRY_URL }}/minha-app:latest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Configuração de credenciais
&lt;/h3&gt;

&lt;p&gt;No GitHub, configure as seguintes variáveis seguras:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;REGISTRY_URL&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;REGISTRY_USER&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;REGISTRY_PASSWORD&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essas informações devem ser obtidas no console da Magalu Cloud.&lt;/p&gt;




&lt;h3&gt;
  
  
  Resultado esperado
&lt;/h3&gt;

&lt;p&gt;A cada alteração na branch &lt;code&gt;main&lt;/code&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;o pipeline será executado automaticamente&lt;/li&gt;
&lt;li&gt;a imagem será construída&lt;/li&gt;
&lt;li&gt;a imagem será enviada ao Container Registry&lt;/li&gt;
&lt;li&gt;a versão ficará disponível para uso na infraestrutura&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;A implementação de CI/CD com GitHub Actions na Magalu Cloud resolve problemas reais do dia a dia de desenvolvimento, especialmente relacionados a consistência, automação e confiabilidade de entregas.&lt;/p&gt;

&lt;p&gt;Com poucos componentes é possível construir um fluxo completo que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;automatiza build e publicação&lt;/li&gt;
&lt;li&gt;padroniza a geração de artefatos&lt;/li&gt;
&lt;li&gt;integra diretamente com a infraestrutura da nuvem&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Além disso, a abordagem aberta da plataforma permite utilizar ferramentas amplamente adotadas, sem dependência de soluções proprietárias.&lt;/p&gt;

&lt;p&gt;O resultado é um processo de entrega mais previsível, escalável e alinhado às práticas modernas de desenvolvimento.&lt;/p&gt;

</description>
      <category>cicd</category>
      <category>devops</category>
      <category>github</category>
      <category>magalucloud</category>
    </item>
    <item>
      <title>Protegendo seus dados no Object Storage da Magalu Cloud com políticas de acesso</title>
      <dc:creator>Monica Hillman</dc:creator>
      <pubDate>Mon, 16 Mar 2026 12:10:56 +0000</pubDate>
      <link>https://forem.com/magalucloud/protegendo-seus-dados-no-object-storage-da-magalu-cloud-com-politicas-de-acesso-g9p</link>
      <guid>https://forem.com/magalucloud/protegendo-seus-dados-no-object-storage-da-magalu-cloud-com-politicas-de-acesso-g9p</guid>
      <description>&lt;p&gt;Em muitas aplicações modernas, o &lt;strong&gt;Object Storage&lt;/strong&gt; é utilizado para armazenar arquivos estáticos, backups, logs, imagens de aplicações ou até dados analíticos. No entanto, à medida que o volume de dados cresce e diferentes aplicações ou usuários passam a consumir esses arquivos, surge um problema comum: &lt;strong&gt;como controlar quem pode acessar cada objeto armazenado&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Imagine, por exemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Um bucket que armazena &lt;strong&gt;imagens públicas de um site&lt;/strong&gt;, que devem ser acessíveis por qualquer usuário.&lt;/li&gt;
&lt;li&gt;Outro bucket contendo &lt;strong&gt;backups de banco de dados&lt;/strong&gt;, que devem ser acessados apenas por aplicações internas.&lt;/li&gt;
&lt;li&gt;Ou ainda um cenário onde &lt;strong&gt;apenas determinadas contas ou serviços podem fazer upload ou download de objetos&lt;/strong&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sem um controle adequado de acesso, esses dados podem ficar &lt;strong&gt;expostos indevidamente&lt;/strong&gt; ou &lt;strong&gt;bloquear acessos legítimos&lt;/strong&gt;, causando falhas em aplicações.&lt;/p&gt;

&lt;p&gt;É nesse ponto que entram as &lt;strong&gt;políticas de acesso do Object Storage&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Neste artigo, você vai entender:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O que são &lt;strong&gt;políticas no Object Storage&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Como elas controlam o acesso aos dados&lt;/li&gt;
&lt;li&gt;Como aplicar esse conceito em cenários reais&lt;/li&gt;
&lt;li&gt;Boas práticas para evitar problemas de segurança&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O objetivo é que, ao final, você consiga &lt;strong&gt;estruturar políticas de acesso de forma segura e previsível em seus buckets&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  O que são políticas no Object Storage?
&lt;/h1&gt;

&lt;p&gt;Políticas são &lt;strong&gt;regras que definem quem pode acessar um recurso e quais ações são permitidas&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No contexto de Object Storage, elas controlam operações como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Listar objetos&lt;/li&gt;
&lt;li&gt;Fazer upload de arquivos&lt;/li&gt;
&lt;li&gt;Fazer download de objetos&lt;/li&gt;
&lt;li&gt;Excluir dados&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essas políticas funcionam como uma &lt;strong&gt;camada de controle de acesso sobre os buckets e objetos armazenados&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Podemos pensar em uma política como um &lt;strong&gt;porteiro digital&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ele verifica &lt;strong&gt;quem está tentando acessar&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Analisa &lt;strong&gt;qual ação está sendo solicitada&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Decide &lt;strong&gt;se o acesso será permitido ou negado&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esse mecanismo é essencial para proteger dados e garantir que apenas &lt;strong&gt;usuários ou aplicações autorizadas possam interagir com os objetos armazenados&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quando usar políticas de Object Storage
&lt;/h2&gt;

&lt;p&gt;As políticas são especialmente importantes em cenários como:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Distribuição de conteúdo público
&lt;/h3&gt;

&lt;p&gt;Arquivos como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;imagens&lt;/li&gt;
&lt;li&gt;vídeos&lt;/li&gt;
&lt;li&gt;arquivos estáticos de aplicações web&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;podem ser configurados para &lt;strong&gt;leitura pública&lt;/strong&gt;, permitindo acesso direto via internet.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Armazenamento de backups
&lt;/h3&gt;

&lt;p&gt;Backups geralmente devem ser acessados apenas por:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pipelines automatizados&lt;/li&gt;
&lt;li&gt;sistemas de recuperação&lt;/li&gt;
&lt;li&gt;contas administrativas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nesse caso, as políticas restringem o acesso para evitar &lt;strong&gt;exposição ou exclusão acidental&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Integração entre serviços
&lt;/h3&gt;

&lt;p&gt;Aplicações executando em máquinas virtuais, contêineres ou pipelines de dados podem precisar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;enviar arquivos para um bucket&lt;/li&gt;
&lt;li&gt;ler dados processados&lt;/li&gt;
&lt;li&gt;gerar relatórios armazenados no Object Storage&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As políticas garantem que &lt;strong&gt;cada serviço tenha apenas as permissões necessárias&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Como funciona o Object Storage na Magalu Cloud
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;&lt;a href="https://magalu.cloud/object-storage/?utm_source=Org%C3%A2nico&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+comunidade&amp;amp;utm_id=artigos+comunidade" rel="noopener noreferrer"&gt;Object Storage da Magalu Cloud&lt;/a&gt;&lt;/strong&gt; é projetado para armazenar grandes volumes de dados de forma escalável e resiliente. Os dados são replicados automaticamente entre zonas de disponibilidade, garantindo maior durabilidade e disponibilidade sem necessidade de intervenção do usuário. &lt;/p&gt;

&lt;p&gt;Isso significa que, além de escalável, o serviço já oferece uma &lt;strong&gt;camada de proteção contra falhas de infraestrutura&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Nesse contexto, as políticas atuam como a &lt;strong&gt;camada de controle de acesso&lt;/strong&gt;, garantindo que apenas os consumidores corretos possam interagir com os dados armazenados.&lt;/p&gt;




&lt;h2&gt;
  
  
  Controlando acesso a um bucket
&lt;/h2&gt;

&lt;p&gt;Vamos imaginar um cenário simples.&lt;/p&gt;

&lt;p&gt;Você possui um bucket chamado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;site-assets
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse bucket armazena arquivos estáticos de um site, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;imagens&lt;/li&gt;
&lt;li&gt;CSS&lt;/li&gt;
&lt;li&gt;JavaScript&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esses arquivos precisam ser &lt;strong&gt;acessíveis publicamente para leitura&lt;/strong&gt;, mas apenas o time de desenvolvimento pode enviar novos arquivos.&lt;/p&gt;

&lt;h3&gt;
  
  
  Estrutura da política
&lt;/h3&gt;

&lt;p&gt;Uma política geralmente define:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;quem&lt;/strong&gt; pode acessar&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;quais ações são permitidas&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;em qual recurso&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Um exemplo simplificado de política poderia seguir uma estrutura semelhante a esta:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2023-01-01"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"storage:GetObject"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bucket/site-assets/*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesse exemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;Principal: "*"&lt;/code&gt; indica que &lt;strong&gt;qualquer usuário pode acessar&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Action: storage:GetObject&lt;/code&gt; permite &lt;strong&gt;apenas leitura&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Resource&lt;/code&gt; define que a regra se aplica aos objetos do bucket&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Com essa política, qualquer pessoa poderá &lt;strong&gt;baixar arquivos&lt;/strong&gt;, mas não poderá:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;enviar novos objetos&lt;/li&gt;
&lt;li&gt;modificar arquivos&lt;/li&gt;
&lt;li&gt;excluir dados&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Outro exemplo: bucket privado para backups
&lt;/h1&gt;

&lt;p&gt;Agora imagine um bucket chamado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;db-backups
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse bucket contém backups sensíveis do banco de dados.&lt;/p&gt;

&lt;p&gt;Aqui, a política poderia permitir acesso apenas para uma &lt;strong&gt;conta de serviço responsável pelos backups&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Exemplo conceitual:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Version"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2023-01-01"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"Statement"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Effect"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Allow"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Principal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"backup-service"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"storage:PutObject"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="s2"&gt;"storage:GetObject"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"Resource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"bucket/db-backups/*"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesse caso:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apenas a conta &lt;code&gt;backup-service&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;pode &lt;strong&gt;enviar e recuperar backups&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;sem expor esses dados para outros usuários.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Boas práticas ao trabalhar com políticas
&lt;/h2&gt;

&lt;p&gt;Ao definir políticas de acesso para Object Storage, algumas recomendações ajudam a evitar problemas de segurança.&lt;/p&gt;

&lt;h3&gt;
  
  
  Use o princípio do menor privilégio
&lt;/h3&gt;

&lt;p&gt;Permita apenas o que for necessário.&lt;/p&gt;

&lt;p&gt;Por exemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;aplicações que apenas leem arquivos &lt;strong&gt;não precisam de permissão de escrita&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;sistemas de upload &lt;strong&gt;não precisam listar todo o bucket&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Evite exposição pública desnecessária
&lt;/h3&gt;

&lt;p&gt;Muitos vazamentos de dados acontecem porque buckets foram configurados como públicos sem necessidade.&lt;/p&gt;

&lt;p&gt;Sempre revise se:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;o bucket realmente precisa ser público&lt;/li&gt;
&lt;li&gt;apenas determinados objetos deveriam ser expostos&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Separe buckets por tipo de uso
&lt;/h3&gt;

&lt;p&gt;Uma prática comum é dividir dados em buckets diferentes:&lt;/p&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;site-assets
logs
backups
uploads
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso facilita a criação de políticas específicas para cada cenário.&lt;/p&gt;




&lt;h3&gt;
  
  
  Revise políticas periodicamente
&lt;/h3&gt;

&lt;p&gt;Com o crescimento das aplicações, novas integrações surgem e antigas deixam de existir.&lt;/p&gt;

&lt;p&gt;Revisar políticas regularmente ajuda a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;remover acessos obsoletos&lt;/li&gt;
&lt;li&gt;reduzir riscos de segurança&lt;/li&gt;
&lt;li&gt;manter o ambiente organizado&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;As políticas de acesso são um componente essencial para trabalhar com &lt;strong&gt;Object Storage de forma segura e escalável&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Elas permitem controlar com precisão:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;quem pode acessar os dados&lt;/li&gt;
&lt;li&gt;quais ações podem ser realizadas&lt;/li&gt;
&lt;li&gt;em quais recursos essas regras se aplicam.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Na Magalu Cloud, o &lt;a href="https://magalu.cloud/object-storage/?utm_source=Org%C3%A2nico&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+comunidade&amp;amp;utm_id=artigos+comunidade" rel="noopener noreferrer"&gt;Object Storage&lt;/a&gt; oferece uma base robusta para armazenamento de dados, com &lt;strong&gt;replicação automática entre zonas de disponibilidade&lt;/strong&gt;, garantindo alta disponibilidade e durabilidade. &lt;/p&gt;

&lt;p&gt;Ao combinar essa infraestrutura resiliente com &lt;strong&gt;políticas bem definidas&lt;/strong&gt;, é possível construir arquiteturas seguras para diversos cenários, desde distribuição de conteúdo até armazenamento de backups críticos.&lt;/p&gt;

&lt;p&gt;Compreender e aplicar corretamente essas políticas é um passo importante para qualquer desenvolvedor ou profissional de infraestrutura que trabalha com armazenamento em nuvem.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>magalucloud</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>IaC com Terraform na Magalu Cloud: do zero a um ambiente reproduzível</title>
      <dc:creator>Monica Hillman</dc:creator>
      <pubDate>Thu, 05 Mar 2026 21:32:14 +0000</pubDate>
      <link>https://forem.com/magalucloud/iac-com-terraform-na-magalu-cloud-do-zero-a-um-ambiente-reproduzivel-2bbm</link>
      <guid>https://forem.com/magalucloud/iac-com-terraform-na-magalu-cloud-do-zero-a-um-ambiente-reproduzivel-2bbm</guid>
      <description>&lt;p&gt;Infraestrutura em nuvem permite criar recursos rapidamente, mas também traz um desafio comum: &lt;strong&gt;como garantir que ambientes sejam consistentes e reproduzíveis?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Criar recursos manualmente pelo console funciona no início. Porém, conforme a infraestrutura cresce, manter ambientes idênticos entre desenvolvimento, homologação e produção se torna difícil.&lt;/p&gt;

&lt;p&gt;É nesse cenário que entra &lt;strong&gt;Infraestrutura como Código (IaC)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Neste artigo vamos construir um exemplo prático usando &lt;strong&gt;&lt;a href="https://registry.terraform.io/providers/MagaluCloud/mgc/latest/docs" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt; na &lt;a href="https://magalu.cloud/?utm_source=site&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+comunidade&amp;amp;utm_id=artigos+comunidade" rel="noopener noreferrer"&gt;Magalu Cloud&lt;/a&gt;&lt;/strong&gt;, criando um ambiente reproduzível com:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compute (máquina virtual)&lt;/li&gt;
&lt;li&gt;Storage persistente (Block Storage)&lt;/li&gt;
&lt;li&gt;Object Storage&lt;/li&gt;
&lt;li&gt;State remoto para colaboração entre equipes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ao final, você terá um projeto capaz de &lt;strong&gt;recriar toda a infraestrutura em poucos comandos&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que é Infraestrutura como Código (IaC)
&lt;/h2&gt;

&lt;p&gt;Infraestrutura como Código é a prática de &lt;strong&gt;descrever a infraestrutura em arquivos de configuração versionáveis&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Em vez de criar recursos manualmente, você escreve definições declarativas que descrevem o estado desejado do ambiente.&lt;/p&gt;

&lt;p&gt;O Terraform interpreta essas definições e executa as mudanças necessárias.&lt;/p&gt;

&lt;p&gt;Esse modelo traz benefícios importantes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reprodutibilidade&lt;/strong&gt; — qualquer pessoa pode recriar o ambiente&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Versionamento&lt;/strong&gt; — mudanças ficam registradas em Git&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Previsibilidade&lt;/strong&gt; — &lt;code&gt;terraform plan&lt;/code&gt; mostra o que será alterado&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automação&lt;/strong&gt; — integração simples com pipelines de CI/CD&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Na Magalu Cloud, a infraestrutura pode ser gerenciada por &lt;strong&gt;Console, APIs, CLI ou &lt;a href="https://docs.magalu.cloud/docs/devops-tools/terraform/overview/?utm_source=site&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+comunidade+documentacao&amp;amp;utm_id=artigos+comunidade+documentacao" rel="noopener noreferrer"&gt;Terraform&lt;/a&gt;&lt;/strong&gt;, utilizando o provider oficial:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
magalucloud/mgc

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Arquitetura que vamos criar
&lt;/h2&gt;

&lt;p&gt;Neste artigo vamos montar uma infraestrutura simples e reproduzível.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
VM (Compute)
├─ IP público
└─ Volume Block Storage

Object Storage
└─ Bucket para dados e Terraform state

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse ambiente já permite executar aplicações e armazenar dados persistentes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Configurando o provider da Magalu Cloud
&lt;/h2&gt;

&lt;p&gt;No arquivo &lt;code&gt;main.tf&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;terraform&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;required_providers&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;mgc&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"magalucloud/mgc"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="s2"&gt;"mgc"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;region&lt;/span&gt;  &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mgc_region&lt;/span&gt;
  &lt;span class="nx"&gt;api_key&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;mgc_api_key&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A autenticação pode ser feita usando variáveis de ambiente como:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MGC_API_KEY
MGC_REGION
MGC_OBJ_KEY_ID
MGC_OBJ_KEY_SECRET
MGC_ENV
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso evita expor credenciais diretamente no código.&lt;/p&gt;




&lt;h2&gt;
  
  
  Inicializando o Terraform
&lt;/h2&gt;

&lt;p&gt;Depois de configurar o provider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visualize o que será criado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform plan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E aplique a infraestrutura:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esses comandos fazem parte do fluxo básico de trabalho com Terraform.&lt;/p&gt;




&lt;h2&gt;
  
  
  Criando a máquina virtual
&lt;/h2&gt;

&lt;p&gt;A criação de uma instância exige alguns parâmetros básicos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Availability Zone&lt;/li&gt;
&lt;li&gt;imagem do sistema operacional&lt;/li&gt;
&lt;li&gt;tipo da máquina&lt;/li&gt;
&lt;li&gt;chave SSH&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Exemplo simplificado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"mgc_virtual_machine_instances"&lt;/span&gt; &lt;span class="s2"&gt;"app"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt;              &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"app-1"&lt;/span&gt;
  &lt;span class="nx"&gt;availability_zone&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;az&lt;/span&gt;

  &lt;span class="nx"&gt;image_id&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;image_id&lt;/span&gt;
  &lt;span class="nx"&gt;machine_type_id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;machine_type_id&lt;/span&gt;

  &lt;span class="nx"&gt;ssh_key_name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ssh_key_name&lt;/span&gt;

  &lt;span class="nx"&gt;network&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;associate_public_ip&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois da execução do Terraform, a VM estará pronta para acesso via SSH.&lt;/p&gt;




&lt;h2&gt;
  
  
  Adicionando armazenamento persistente
&lt;/h2&gt;

&lt;p&gt;Para aplicações que precisam armazenar dados de forma persistente, podemos anexar um volume de Block Storage à instância.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"mgc_block_storage_volume"&lt;/span&gt; &lt;span class="s2"&gt;"data"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"volume-via-terraform"&lt;/span&gt;
  &lt;span class="nx"&gt;size&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt;

  &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"cloud_nvme20k"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"mgc_block_storage_attachment"&lt;/span&gt; &lt;span class="s2"&gt;"data_attach"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;volume_id&lt;/span&gt;   &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mgc_block_storage_volume&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;
  &lt;span class="nx"&gt;instance_id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;mgc_virtual_machine_instances&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse volume pode ser utilizado para bancos de dados, arquivos de aplicação ou dados de usuário.&lt;/p&gt;

&lt;p&gt;Um ponto importante: &lt;strong&gt;volumes precisam estar na mesma Availability Zone da VM para serem anexados.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Usando Object Storage para Terraform state
&lt;/h2&gt;

&lt;p&gt;Quando várias pessoas trabalham no mesmo projeto Terraform, é importante armazenar o &lt;strong&gt;Terraform state remotamente&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Na Magalu Cloud, o Object Storage é compatível com S3, permitindo usar o backend &lt;code&gt;s3&lt;/code&gt; do Terraform.&lt;/p&gt;

&lt;p&gt;Exemplo conceitual:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;terraform&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;backend&lt;/span&gt; &lt;span class="s2"&gt;"s3"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;bucket&lt;/span&gt;   &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"terraform-state"&lt;/span&gt;
    &lt;span class="nx"&gt;key&lt;/span&gt;      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"iac/terraform.tfstate"&lt;/span&gt;
    &lt;span class="nx"&gt;region&lt;/span&gt;   &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"br-ne1"&lt;/span&gt;
    &lt;span class="nx"&gt;endpoint&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"https://br-ne1.magaluobjects.com"&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso evita conflitos quando múltiplos desenvolvedores executam o Terraform.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Infraestrutura como Código muda completamente a forma de gerenciar ambientes em nuvem.&lt;/p&gt;

&lt;p&gt;Com Terraform na Magalu Cloud é possível:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;automatizar provisionamento&lt;/li&gt;
&lt;li&gt;reproduzir ambientes completos&lt;/li&gt;
&lt;li&gt;reduzir erros manuais&lt;/li&gt;
&lt;li&gt;integrar infraestrutura ao fluxo de desenvolvimento&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ao definir compute e storage em código, sua infraestrutura deixa de ser um conjunto de recursos criados manualmente e passa a ser &lt;strong&gt;um sistema previsível, versionável e automatizado&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Links interessantes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://magalu.cloud/blog/magalu-cloud-e-certificada-pela-hashicorp-para-fornecer-recursos-da-ferramenta-terraform-registry/?utm_source=site&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+comunidade&amp;amp;utm_id=artigos+comunidade" rel="noopener noreferrer"&gt;Magalu Cloud é certificada pela HashiCorp para fornecer recursos da ferramenta Terraform Registry&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=6FH14RMvC9c" rel="noopener noreferrer"&gt;Usando Object Storage como Backend para Terraform State&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=8U6sN0nHj_Q" rel="noopener noreferrer"&gt;Testando o terraform da Magalu Cloud‬&lt;/a&gt;;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=DMb2FsoD-H8" rel="noopener noreferrer"&gt;Como criar uma VM via Terraform no Magalu Cloud?&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>braziliandevs</category>
      <category>magalucloud</category>
      <category>terraform</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Pare de Brincar com LLMs Locais: Leve a IAG Open Source para a Produção na Magalu Cloud</title>
      <dc:creator>Gláucio</dc:creator>
      <pubDate>Thu, 05 Feb 2026 10:30:00 +0000</pubDate>
      <link>https://forem.com/magalucloud/pare-de-brincar-com-llms-locais-leve-a-iag-open-source-para-a-producao-na-magalu-cloud-4p6c</link>
      <guid>https://forem.com/magalucloud/pare-de-brincar-com-llms-locais-leve-a-iag-open-source-para-a-producao-na-magalu-cloud-4p6c</guid>
      <description>&lt;p&gt;Nos últimos anos, tivemos um salto no processamento de linguagem natural (NLP). O surgimento da IA Generativa não apenas refinou tarefas antigas, mas abriu bastantes possibilidades em lidar com textos e dados não estruturados, melhorias em experiências de aplicações já existentes, classificações mais simples e demais tarefas. No entanto, para muitas organizações, trouxe um dilema crítico: como escalar o uso dessas tecnologias mantendo o controle absoluto sobre os dados?&lt;/p&gt;

&lt;p&gt;Para setores que lidam com informações sensíveis ou que operam sob regulamentações rígidas de privacidade, submeter dados a LLMs públicos via APIs externas não é apenas um risco, mas muitas vezes uma impossibilidade jurídica. É aqui que a soberania de dados se torna o pilar central da estratégia de tecnologia. Rodar modelos abertos em uma infraestrutura nacional e controlada, como a &lt;a href="https://magalu.cloud/?utm_source=site&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+glaucio&amp;amp;utm_id=artigos+glaucio" rel="noopener noreferrer"&gt;Magalu Cloud&lt;/a&gt;, não é mais apenas uma alternativa de custo, é uma necessidade de segurança e conformidade.&lt;/p&gt;

&lt;p&gt;Neste tutorial, vamos explorar como você pode unir o estado da arte dos modelos do &lt;a href="https://huggingface.co/" rel="noopener noreferrer"&gt;Hugging Face&lt;/a&gt; com o &lt;a href="https://docs.vllm.ai/en/stable/" rel="noopener noreferrer"&gt;vLLM&lt;/a&gt;, garantindo performance de nível de produção sem abrir mão da privacidade.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que é vLLM?
&lt;/h2&gt;

&lt;p&gt;O vLLM não é apenas uma biblioteca de inferência; é um sistema de gerenciamento de memória virtualizado para GPUs.&lt;/p&gt;

&lt;p&gt;O problema central da inferência de LLMs não é computação (FLOPs), é I/O de memória. Engines tradicionais alocam VRAM contígua para o Key-Value (KV) Cache, resultando em fragmentação massiva (60-80% de desperdício) e impedindo o paralelismo.&lt;/p&gt;

&lt;p&gt;O vLLM resolve isso com o PagedAttention: um algoritmo de atenção que permite armazenar o KV Cache em blocos de memória não contíguos. Isso desacopla a memória lógica (sequência de tokens) da memória física (VRAM), permitindo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Desperdício Zero: Quase nenhuma fragmentação de memória (&amp;lt;4%).&lt;/li&gt;
&lt;li&gt;Continuous Batching: A capacidade de injetar novas requisições na GPU token-a-token, sem esperar que o lote anterior termine.&lt;/li&gt;
&lt;li&gt;Copy-on-Write: Mecanismo eficiente para decodificação paralela (como em Beam Search), onde múltiplos "caminhos" compartilham a mesma memória física até divergirem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Você pode conhecer mais sobre o vLLM neste &lt;a href="https://blog.vllm.ai/2023/06/20/vllm.html" rel="noopener noreferrer"&gt;blog post&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Passo a passo para configuração do ambiente
&lt;/h2&gt;

&lt;p&gt;Para este tutorial, provisionamos uma máquina virtual equipada com a &lt;a href="https://www.nvidia.com/en-us/data-center/l40s/" rel="noopener noreferrer"&gt;GPU NVIDIA L40S&lt;/a&gt;. A escolha é estratégica pois a L40S é baseada na arquitetura Ada Lovelace, possui o Transformer Engine com suporte nativo a precisão FP8. Isso garante que o modelo &lt;a href="https://huggingface.co/Qwen/Qwen3-30B-A3B-FP8" rel="noopener noreferrer"&gt;Qwen3-30B-A3B-FP8&lt;/a&gt; rode muito bem tirando proveito dos 18.176 núcleos CUDA e da alta disponibilidade de memória. Com 48GB de VRAM GDDR6 (ECC) e uma largura de banda de 864 GB/s, eliminamos gargalos de transferência, assegurando estabilidade e alta vazão durante a inferência.&lt;/p&gt;

&lt;p&gt;Então dado o contexto vamos iniciar a mão na massa.&lt;/p&gt;

&lt;h3&gt;
  
  
  Criação da máquina
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://console.magalu.cloud/virtual-machine/new" rel="noopener noreferrer"&gt;Link para criação de máquinas virtuais&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Etapas para criarmos a máquina
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;1 - Início e Seleção do Serviço&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No Console da Magalu Cloud, localize o card com o texto "Virtual Machine".&lt;/li&gt;
&lt;li&gt;Clique no botão azul "Criar instância".&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;2 - Configurações de região e sistema operacional&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zona de Disponibilidade: Selecione a zona desejada (no meu caso, foi escolhida a &lt;code&gt;br-se1-a&lt;/code&gt; mas escolha o que preferir).&lt;/li&gt;
&lt;li&gt;Escolha de Imagem: Selecione a distribuição Ubuntu.&lt;/li&gt;
&lt;li&gt;Versão: No menu suspenso que aparece, escolha a versão Ubuntu 24.04 LTS.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;3 - Hardware&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Habilitar GPU (muito importante): Marque a caixa de seleção "Habilitar GPU" para visualizar as instâncias de alta performance.&lt;/li&gt;
&lt;li&gt;Tipo de Instância:&lt;/li&gt;
&lt;li&gt;Role até a seção de GPUs (GPU NVIDIA L40S, indicada para IA generativa e LLMs).&lt;/li&gt;
&lt;li&gt;Selecione a configuração desejada. Neste caso escolha a instância L40S-1x-DP8-64-100 (que oferece 8 vCPUs, 64 GB de RAM e 100 GB de disco).&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;4 - Conectividade e Acesso&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Acesso Público: Mantenha marcada a opção "Atribuir IPv4 público para essa instância" (padrão).&lt;/li&gt;
&lt;li&gt;Chave SSH (muito importante para poder acessar sua máquina):&lt;/li&gt;
&lt;li&gt;Selecione a opção "Selecionar chave já utilizada anteriormente" caso tenha uma ou cadastre uma nova clicando em " Inserir uma chave própria nova".&lt;/li&gt;
&lt;li&gt;Caso esteja inserindo uma nova chave, consulte-a com o seguinte comando Linux/macos &lt;code&gt;cat ~/.ssh/id_ed25519.pub&lt;/code&gt;(o nome da sua chave deve ser diferente de &lt;code&gt;id_ed25519.pub&lt;/code&gt;, mas ela deve finalizar com &lt;code&gt;.pub&lt;/code&gt;), copie o valor que aparecer no seu terminal e cole no campo "Insira sua chave SSH" e depois dê um nome para essa chave ssh ser utilizada.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;5 - Nomeando a máquina&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nome da Instância: Defina um nome identificável para o servidor. No meu caso, usei o nome &lt;code&gt;llm_server-vllm&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Clique no botão "Criar instância" no canto inferior direito.&lt;/li&gt;
&lt;li&gt;Você será redirecionado para a lista de instâncias, onde poderá ver seu novo servidor com o status "Criando".&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h3&gt;
  
  
  Acessando nossa máquina virtual para efetuarmos nossas configurações
&lt;/h3&gt;

&lt;p&gt;Depois de criarmos nossa máquina virtual, agora precisaremos acessar ela para fazermos as instalações necessárias para rodarmos nossa LLM em produção com proxy reverso e SSL.&lt;/p&gt;

&lt;p&gt;Requisito obrigatório:&lt;br&gt;
Para nosso proxy reverso funcionar corretamente, será preciso configurar seu domínio apontando o IP da sua máquina que poderá pegar essa informação acessando a página de detalhes da nossa VM.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjkuhdi1n57undqhkwpx9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjkuhdi1n57undqhkwpx9.png" alt="Configuração da VM na Magalu Cloud" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No meu caso utilizo a Cloudflare para gerir meu DNS, e você pode seguir a &lt;a href="https://developers.cloudflare.com/dns/get-started/" rel="noopener noreferrer"&gt;documentação deles para configurar seu DNS&lt;/a&gt;, mas caso use outro local para gerenciar seu DNS busque e faça a configuração, para este tutorial eu vou utilizar o seguinte domínio &lt;code&gt;vllm-mgc.glaucio.tec.br&lt;/code&gt; , dito isto vamos seguir para acesso.&lt;/p&gt;
&lt;h4&gt;
  
  
  Primeiro acesso a nossa VM via SSH
&lt;/h4&gt;

&lt;p&gt;Na página da nossa máquina virtual como no print acima, há um ícone azul para copiar o seu IPv4 Público e seu usuário.&lt;/p&gt;

&lt;p&gt;e execute o comando &lt;code&gt;ssh ubuntu@201.23.79.32&lt;/code&gt; no seu terminal como no print abaixo&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe41rjdm49wpa88tvrv1q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe41rjdm49wpa88tvrv1q.png" alt="Acessando nossa máquina via SSH." width="800" height="163"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No primeiro acesso irá aparecer esta mensagem da imagem acima no seu terminal, apenas digite &lt;code&gt;yes&lt;/code&gt; e aperte enter e agora com acesso ao servidor podemos iniciar a instalação das dependências.&lt;/p&gt;
&lt;h4&gt;
  
  
  Instalação do Docker
&lt;/h4&gt;

&lt;p&gt;Para instalar o Docker rapidamente vamos automatizar esta parte, para isso abra algum editor pelo terminal como VIM ou nano, no meu caso para ser mais fácil irei utilizar o nano para criar o script de instalação do nosso Docker com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano install_docker.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e você irá ver a seguinte tela, com o nosso editor nano aberto com um arquivo de texto em memória sem conteúdo algum&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkm7oj1anncrsb3rzjjg9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkm7oj1anncrsb3rzjjg9.png" alt="Editor nano aberto com um arquivo de texto em memória sem conteúdo algum." width="800" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para facilitar esta etapa de instalação do Docker, copie e cole o shell script abaixo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt;

&lt;span class="c"&gt;# 0. Antes de rodar o script lembre de executar `chmod +x install_docker.sh`&lt;/span&gt;

&lt;span class="c"&gt;# 1. Limpeza de tentativas anteriores (Resolve o erro 'Malformed entry')&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"🧹 Limpando configurações antigas..."&lt;/span&gt;
&lt;span class="nb"&gt;sudo rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /etc/apt/sources.list.d/docker.list
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update

&lt;span class="c"&gt;# 2. Instalar dependências essenciais&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"📦 Instalando dependências..."&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; ca-certificates curl gnupg lsb-release

&lt;span class="c"&gt;# 3. Baixar Chave GPG&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"🔑 Configurando chave GPG..."&lt;/span&gt;
&lt;span class="nb"&gt;sudo install&lt;/span&gt; &lt;span class="nt"&gt;-m&lt;/span&gt; 0755 &lt;span class="nt"&gt;-d&lt;/span&gt; /etc/apt/keyrings
&lt;span class="c"&gt;# Se a chave já existir, removemos para baixar a mais nova&lt;/span&gt;
&lt;span class="nb"&gt;sudo rm&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; /etc/apt/keyrings/docker.asc
&lt;span class="nb"&gt;sudo &lt;/span&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://download.docker.com/linux/ubuntu/gpg &lt;span class="nt"&gt;-o&lt;/span&gt; /etc/apt/keyrings/docker.asc
&lt;span class="nb"&gt;sudo chmod &lt;/span&gt;a+r /etc/apt/keyrings/docker.asc

&lt;span class="c"&gt;# 4. Adicionar Repositório (Fixo para 'noble' - Ubuntu 24.04)&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"📂 Adicionando repositório 'noble'..."&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb [arch=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;dpkg &lt;span class="nt"&gt;--print-architecture&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt; signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu noble stable"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/docker.list &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null

&lt;span class="c"&gt;# 5. Instalar Docker&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"⬇️  Instalando pacotes do Docker..."&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

&lt;span class="c"&gt;# 6. Configurar permissão de usuário&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"👤 Adicionando usuário '&lt;/span&gt;&lt;span class="nv"&gt;$USER&lt;/span&gt;&lt;span class="s2"&gt;' ao grupo docker..."&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;usermod &lt;span class="nt"&gt;-aG&lt;/span&gt; docker &lt;span class="nv"&gt;$USER&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"---"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"✅ Instalação concluída"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"⚠️  Para usar imediatamente, rode: newgrp docker"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Valide instalação com docker run hello-world"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e deve ficar da seguinte forma&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuckol2636vejaxg2jkqa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuckol2636vejaxg2jkqa.png" alt="Acessando nossa máquina via SSH." width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora aperte as teclas &lt;code&gt;Ctrl&lt;/code&gt; e &lt;code&gt;x&lt;/code&gt; para salvar e confirme para salvar o conteúdo que adicionamos ao nosso arquivo.&lt;/p&gt;

&lt;p&gt;Feito isso, confirme se o nosso script foi salvo com sucesso e deve ter o mesmo texto do script acima, rode o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;install_docker.sh 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e confira se está tudo ok. Feito isso precisamos fazer nosso script ser executável, para isso vamos precisar rodar o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x install_docker.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Feito isso, podemos rodar nosso script de instalação do Docker com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./install_docker.sh 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e correndo tudo bem irá aparecer no seu terminal as seguintes mensagens:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1b8igzau9o7s11fth6ho.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1b8igzau9o7s11fth6ho.png" alt="Acessando nossa máquina via SSH." width="800" height="177"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;e então siga as instruções que foram exibidas para alterar o GID (Group ID) da sua sessão do terminal para o grupo "docker", sem que você precise deslogar e logar e rodar um container de hello-world para dar sorte haha e validar se a instalação correu bem.&lt;/p&gt;

&lt;p&gt;Ao rodar os comandos sugeridos, você deve ter o seguinte resultado no seu terminal:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyf36wca0peafguw3odlp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyf36wca0peafguw3odlp.png" alt="Validando instalação do Docker com docker run hello-world" width="800" height="603"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se você teve os mesmos resultados dos prints acima, estamos prontos para instalar as dependências para que o Docker consiga se comunicar com a nossa GPU.&lt;/p&gt;

&lt;h4&gt;
  
  
  Instalação de drivers e nvidia-container-toolkit
&lt;/h4&gt;

&lt;p&gt;Assim como a etapa de instalação do Docker criaremos um script para agilizar nossa instalação e facilitar a reprodutibilidade.&lt;/p&gt;

&lt;p&gt;Crie nosso arquivo de setup da nossa máquina com o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano setup_nvidia.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;cole o script abaixo como fizemos na etapa do Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt;

&lt;span class="c"&gt;# Configuração - Altere conforme necessário&lt;/span&gt;
&lt;span class="nv"&gt;NVIDIA_DRIVER_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NVIDIA_DRIVER_VERSION&lt;/span&gt;&lt;span class="k"&gt;:-&lt;/span&gt;&lt;span class="nv"&gt;570&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Cores para output&lt;/span&gt;
&lt;span class="nv"&gt;RED&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'\033[0;31m'&lt;/span&gt;
&lt;span class="nv"&gt;GREEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'\033[0;32m'&lt;/span&gt;
&lt;span class="nv"&gt;YELLOW&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'\033[1;33m'&lt;/span&gt;
&lt;span class="nv"&gt;NC&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'\033[0m'&lt;/span&gt; &lt;span class="c"&gt;# No Color&lt;/span&gt;

&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GREEN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;╔════════════════════════════════════════════════════════╗&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NC&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GREEN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;║  Instalação NVIDIA Driver + Container Toolkit          ║&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NC&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GREEN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;║  Driver versão: &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NVIDIA_DRIVER_VERSION&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;                                       ║&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NC&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GREEN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;╚════════════════════════════════════════════════════════╝&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NC&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;

&lt;span class="c"&gt;# 0. Verificar se está rodando como root ou com sudo&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$EUID&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-eq&lt;/span&gt; 0 &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;RED&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;❌ Não execute este script como root. Use seu usuário normal.&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NC&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="nb"&gt;exit &lt;/span&gt;1
&lt;span class="k"&gt;fi&lt;/span&gt;

&lt;span class="c"&gt;# 1. Verificar se driver já está instalado&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"🔍 Verificando instalação existente..."&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; nvidia-smi &amp;amp;&amp;gt; /dev/null&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;YELLOW&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;⚠️  Driver NVIDIA já está instalado:&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NC&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    nvidia-smi &lt;span class="nt"&gt;--query-gpu&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;driver_version,name &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;csv,noheader
    &lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"Deseja continuar mesmo assim? (s/N): "&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; 1 &lt;span class="nt"&gt;-r&lt;/span&gt;
    &lt;span class="nb"&gt;echo
    &lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nv"&gt;$REPLY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;~ ^[Ss]&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
        &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"Instalação cancelada."&lt;/span&gt;
        &lt;span class="nb"&gt;exit &lt;/span&gt;0
    &lt;span class="k"&gt;fi
fi&lt;/span&gt;

&lt;span class="c"&gt;# 2. Verificar se Docker está instalado&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"🐳 Verificando Docker..."&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;!&lt;/span&gt; &lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="nt"&gt;-v&lt;/span&gt; docker &amp;amp;&amp;gt; /dev/null&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then
    &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;RED&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;❌ Docker não encontrado. Execute primeiro o script 01-docker_install_script.sh&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NC&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    &lt;span class="nb"&gt;exit &lt;/span&gt;1
&lt;span class="k"&gt;fi
&lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GREEN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;✓ Docker encontrado&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NC&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# 3. Atualizar sistema&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"📦 Atualizando lista de pacotes..."&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update

&lt;span class="c"&gt;# 4. Instalar Driver NVIDIA&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"🎮 Instalando driver NVIDIA versão &lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NVIDIA_DRIVER_VERSION&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;..."&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nvidia-driver-&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NVIDIA_DRIVER_VERSION&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;# 5. Instalar NVIDIA Container Toolkit&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"📦 Configurando repositório NVIDIA Container Toolkit..."&lt;/span&gt;

&lt;span class="c"&gt;# Adicionar chave GPG&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://nvidia.github.io/libnvidia-container/gpgkey | &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg &lt;span class="nt"&gt;--yes&lt;/span&gt;

&lt;span class="c"&gt;# Adicionar repositório&lt;/span&gt;
curl &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-L&lt;/span&gt; https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nb"&gt;sed&lt;/span&gt; &lt;span class="s1"&gt;'s#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g'&lt;/span&gt; | &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/nvidia-container-toolkit.list &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/null

&lt;span class="c"&gt;# Instalar toolkit&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"⬇️  Instalando nvidia-container-toolkit..."&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get update
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt-get &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; nvidia-container-toolkit

&lt;span class="c"&gt;# 6. Configurar Docker para usar runtime NVIDIA&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"🔧 Configurando Docker para usar GPU NVIDIA..."&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;nvidia-ctk runtime configure &lt;span class="nt"&gt;--runtime&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;docker

&lt;span class="c"&gt;# 7. Reiniciar Docker&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"🔄 Reiniciando serviço Docker..."&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart docker

&lt;span class="c"&gt;# 8. Resumo final&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GREEN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;╔════════════════════════════════════════════════════════╗&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NC&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GREEN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;║  ✅ Instalação concluída!                              ║&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NC&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GREEN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;╚════════════════════════════════════════════════════════╝&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NC&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;YELLOW&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;⚠️  IMPORTANTE: Reinicie a máquina para carregar o driver:&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NC&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"    sudo reboot"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;GREEN&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;Após reiniciar, valide a instalação com:&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;NC&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"    # Verificar driver no host"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"    nvidia-smi"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"    # Testar GPU no Docker"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"    docker run --rm --gpus all nvidia/cuda:12.3.1-base-ubuntu22.04 nvidia-smi"&lt;/span&gt;
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;salve com as teclas &lt;code&gt;Ctrl&lt;/code&gt; e &lt;code&gt;x&lt;/code&gt; e siga os caminhos para salvar e agora dê permissão para que ele também seja executável com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x setup_nvidia.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e agora vamos rodar com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;./setup_nvidia.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e correndo tudo bem na instalação, você verá o seguinte resultado no seu terminal&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F70ycmik493lk3fs8qgz8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F70ycmik493lk3fs8qgz8.png" alt="Instruções de sucesso para instalação dos drivers e container kit." width="800" height="663"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;e seguindo as instruções, vamos reiniciar a máquina para aplicar as novas configurações de driver.&lt;br&gt;
com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;reboot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;aguarde alguns segundos para a máquina reiniciar, aproveite para pegar um café, um chá ou uma água.&lt;/p&gt;

&lt;p&gt;Agora vamos precisar acessar nossa máquina via SSH novamente, com o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh ubuntu@ip-da-sua-maquina
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Antes de seguirmos para a mão na massa para subir o nosso servidor e LLM, vamos validar se nossos passos anteriores funcionaram e tudo foi instalado corretamente com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;--rm&lt;/span&gt; &lt;span class="nt"&gt;--gpus&lt;/span&gt; all nvidia/cuda:12.3.1-base-ubuntu22.04 nvidia-smi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e caso tenha o seguinte resultado, suas instalações estão corretas e podemos ir para a etapa de subir o nosso servidor de LLM. 🎉&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53pqymbavzwurgkfekh2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53pqymbavzwurgkfekh2.png" alt="nvidia-smi rodando dentro do container Docker" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Subindo aplicação
&lt;/h4&gt;

&lt;p&gt;Agora antes de partirmos para configurações e deploy, vale passarmos pela forma que foi pensada e arquitetada a essa nossa aplicação, passando por como ela vai ser servida, protegendo rotas do vLLM que não validam nosso token de autenticação e podem ser alvo de exploração por entidades mal-intencionadas.&lt;/p&gt;

&lt;h5&gt;
  
  
  Arquitetura da aplicação
&lt;/h5&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hcare8x9s8608bqiihi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1hcare8x9s8608bqiihi.png" alt="Desenho de como funcionará nossa aplicação, com um proxy reverso utilizando caddy" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como podemos observar na imagem acima, a porta de entrada para o modelo é o servidor &lt;a href="https://caddyserver.com/" rel="noopener noreferrer"&gt;Caddy&lt;/a&gt;, pois quando expomos um servidor de LLM à internet, não basta configurar uma API Key e achar que está tudo protegido. O vLLM, por padrão, expõe endpoints como &lt;code&gt;/health&lt;/code&gt; , &lt;code&gt;/metrics&lt;/code&gt; e &lt;code&gt;/docs&lt;/code&gt; que não validam autenticação, criando uma superfície de ataque significativa para scanners automatizados e potenciais explorações. Seguindo as recomendações oficiais de segurança do vLLM, implementamos uma arquitetura de "defense in depth": o &lt;a href="https://docs.vllm.ai/en/stable/" rel="noopener noreferrer"&gt;vLLM&lt;/a&gt; roda em uma rede interna do Docker, completamente isolado da internet, enquanto o Caddy atua como nosso portão de entrada único. No Caddyfile, configuramos um allowlist restrita apenas com as rotas &lt;code&gt;/v1/chat/completions&lt;/code&gt; , &lt;code&gt;/v1/completions&lt;/code&gt; , &lt;code&gt;/v1/models&lt;/code&gt; (opcional e pode ser removida) e &lt;code&gt;/v1/embeddings&lt;/code&gt; (opcional e pode ser removida) que são encaminhadas para o vLLM. Todo o resto, incluindo os endpoints críticos &lt;code&gt;/metrics&lt;/code&gt; e o &lt;code&gt;/health&lt;/code&gt; interno do &lt;a href="https://docs.vllm.ai/en/stable/" rel="noopener noreferrer"&gt;vLLM&lt;/a&gt;, é bloqueado com abort, retornando 403 Forbidden. Isso significa que mesmo que alguém descubra o IP do servidor, não consegue extrair métricas de performance, status detalhados do modelo ou acessar documentação sensível. Complementamos com TLS 1.2/1.3 forçado via Caddy e a API Key do vLLM protegendo os endpoints OpenAI e com isto temos um servidor que segue as recomendações de segurança da &lt;a href="https://docs.vllm.ai/en/stable/usage/security/?h=secur#unprotected-endpoints-no-api-key-required" rel="noopener noreferrer"&gt;documentação oficial do vLLM&lt;/a&gt;, minimizamos os endpoints expostos, colocamos tudo atrás de um proxy reverso confiável, e mantemos o motor de inferência completamente inacessível diretamente e sua LLM roda segura, privada e pronta para produção.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Não cheguei a configurar o rate limit, mas deixo como dever de casa caso tenha interesse.

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/mholt/caddy-ratelimit" rel="noopener noreferrer"&gt;caddy-ratelimit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Agora contextualizados, vamos à mão na massa.&lt;/p&gt;

&lt;h5&gt;
  
  
  Configurações importantes
&lt;/h5&gt;

&lt;p&gt;Para subirmos a aplicação, vamos precisar criar os seguintes arquivos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;.env&lt;/code&gt;: Onde incluiremos as nossas variáveis de ambiente usadas pelo Caddy e pelo vLLM.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Caddyfile&lt;/code&gt;: Configurações do nosso servidor de aplicação para fazer proxy reverso para o vLLM.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;compose.yml&lt;/code&gt;: Docker compose para orquestrarmos nossa aplicação de forma fácil.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;e para termos uma organização, vamos criar uma pasta para envolver os arquivos que vamos precisar criar, e para criar a pasta e os arquivos rode o seguinte comando no seu terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;mkdir &lt;/span&gt;llm-server&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;llm-server&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nb"&gt;touch&lt;/span&gt; .env Caddyfile compose.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e depois valide se tudo correu bem, se sim terá um resultado como o seguinte:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F52evqhlk6hu06od9143m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F52evqhlk6hu06od9143m.png" alt="Criando pastas e arquivos para servir nossa aplicação e mostrando arquivos da pasta." width="800" height="168"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Feito isto, vamos configurar nosso &lt;code&gt;.env&lt;/code&gt; com as variáveis necessárias para rodar nossos containers, e para isso vamos utilizar o nano, o conteúdo que vamos precisar inserir no nosso arquivo são:&lt;/p&gt;

&lt;p&gt;O que é cada variável?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;vLLM&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VLLM_API_KEY: Será o token que a API do vLLM vai validar a presença para permitir a inferência, pode gerar um para nosso teste com o comando &lt;code&gt;openssl passwd -6 "uma chave bem segura aqui"&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;HF_TOKEN: Token para baixar modelos privados, caso você tenha algum fine tuning e deseja servir ele, para conseguir este token pode seguir a &lt;a href="https://huggingface.co/docs/hub/en/security-tokens" rel="noopener noreferrer"&gt;documentação oficial&lt;/a&gt;. Neste caso como vamos utilizar um modelo aberto, pode deixar qualquer valor.&lt;/li&gt;
&lt;li&gt;MODEL_NAME: Nome do &lt;a href="https://huggingface.co/Qwen/Qwen3-30B-A3B-FP8" rel="noopener noreferrer"&gt;modelo do Hugging&lt;/a&gt; Face que iremos utilizar&lt;/li&gt;
&lt;li&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu9iec3dg50ixd2hb7jfz.png" alt="Onde copiar o nome do modelo" width="800" height="414"&gt;&lt;/li&gt;
&lt;li&gt;Fica até como desafio, servir outro modelo como o &lt;a href="https://huggingface.co/openai/gpt-oss-20b" rel="noopener noreferrer"&gt;gpt-oss-20b&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Caddy&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DOMAIN: O domínio em que vamos servir nossa aplicação.&lt;/li&gt;
&lt;li&gt;EMAIL_SSL: O email que o caddy utiliza para que o CertMagic renove seus certificados.
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# vLLM Configuration&lt;/span&gt;
&lt;span class="nv"&gt;VLLM_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;sua-chave-api-segura 
&lt;span class="nv"&gt;HF_TOKEN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;hf_seu_token_huggingface
&lt;span class="nv"&gt;MODEL_NAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Qwen/Qwen3-30B-A3B-FP8

&lt;span class="c"&gt;# Caddy/SSL Configuration&lt;/span&gt;
&lt;span class="nv"&gt;DOMAIN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;vllm-mgc.glaucio.tec.br
&lt;span class="nv"&gt;EMAIL_SSL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;meuemail+vllm-server@lorem.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora contextualizados vamos preencher nosso &lt;code&gt;.env&lt;/code&gt; , abra o arquivo com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano .env
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e cole suas variáveis preenchidas com seus dados, use &lt;code&gt;Ctrl + x&lt;/code&gt; e quando aparecer "Save modified buffer?" confirme apertando a tecla &lt;code&gt;y&lt;/code&gt; e depois quando aparecer "File Name to Write: .env", aperte &lt;code&gt;Enter&lt;/code&gt; .&lt;/p&gt;

&lt;p&gt;Vamos para o nosso arquivo &lt;code&gt;Caddyfile&lt;/code&gt; , abra ele com o nano como já descrito no passo do &lt;code&gt;.env&lt;/code&gt; e cole nele o seguinte conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{$DOMAIN} {
    # Habilita compressão Gzip/Zstd para performance
    encode gzip zstd

    # Configuração de Log (Opcional, bom para auditoria)
    log {
        output file /var/log/caddy/access.log
    }

    # REGRAS DE SEGURANÇA E ROTEAMENTO
    # Bloqueia tudo por padrão, exceto o bloco 'handle' abaixo

    # Página de status para verificar se o Caddy está online
    handle /health {
        respond "OK - Caddy is running on {$DOMAIN}" 200
    }

    # Página inicial com informações básicas
    handle / {
        header Content-Type text/html
        respond `&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;vLLM API Server&amp;lt;/title&amp;gt;
    &amp;lt;style&amp;gt;
        body { font-family: system-ui, sans-serif; max-width: 600px; margin: 50px auto; padding: 20px; background: #1a1a2e; color: #eee; }
        h1 { color: #00d9ff; }
        .status { background: #16213e; padding: 20px; border-radius: 8px; margin: 20px 0; }
        .ok { color: #00ff88; }
        code { background: #0f3460; padding: 2px 6px; border-radius: 4px; }
    &amp;lt;/style&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;h1&amp;gt;vLLM API Server&amp;lt;/h1&amp;gt;
    &amp;lt;div class="status"&amp;gt;
        &amp;lt;p class="ok"&amp;gt;Proxy: Online&amp;lt;/p&amp;gt;
        &amp;lt;p&amp;gt;Domain: {$DOMAIN}&amp;lt;/p&amp;gt;
    &amp;lt;/div&amp;gt;
    &amp;lt;h3&amp;gt;API Endpoints:&amp;lt;/h3&amp;gt;
    &amp;lt;ul&amp;gt;
        &amp;lt;li&amp;gt;&amp;lt;code&amp;gt;/v1/chat/completions&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
        &amp;lt;li&amp;gt;&amp;lt;code&amp;gt;/v1/completions&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
        &amp;lt;li&amp;gt;&amp;lt;code&amp;gt;/v1/models&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
        &amp;lt;li&amp;gt;&amp;lt;code&amp;gt;/v1/embeddings&amp;lt;/code&amp;gt;&amp;lt;/li&amp;gt;
    &amp;lt;/ul&amp;gt;
    &amp;lt;p&amp;gt;&amp;lt;small&amp;gt;Health check: &amp;lt;a href="/health"&amp;gt;/health&amp;lt;/a&amp;gt;&amp;lt;/small&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;` 200
    }

    # Define o matcher para rotas OpenAI (Chat, Completions, Models, Embeddings)
    @openai_routes {
        path /v1/chat/completions
        path /v1/completions
        path /v1/models # pode remover caso não queria expor
        path /v1/embeddings # como vamos servir apenas LLM não é muito útil aqui no nosso caso
    }

    # Processa apenas as rotas permitidas
    handle @openai_routes {
        reverse_proxy vllm:8000 {
            # Configurações de timeout para streaming longo (LLMs)
            flush_interval -1
            transport http {
                response_header_timeout 300s
            }
        }
    }

    # Captura qualquer outra rota (metrics, health, root) e retorna 403 Forbidden
    handle {
        abort
    }

    # TLS Configuration (Automático, mas forçando protocolos seguros)
    tls {$EMAIL_SSL} {
        protocols tls1.2 tls1.3
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E por último nosso arquivo &lt;code&gt;compose.yml&lt;/code&gt; para subirmos a aplicação, abra ele com &lt;code&gt;nano compose.yml&lt;/code&gt; e cole o seguinte conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;vllm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;vllm/vllm-openai:latest&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;vllm_inference&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;oom_score_adj&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;-500&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;VLLM_API_KEY=${VLLM_API_KEY}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;HUGGING_FACE_HUB_TOKEN=${HF_TOKEN}&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./vllm_cache:/root/.cache/huggingface&lt;/span&gt;
    &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;cpus&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;6.0'&lt;/span&gt;
          &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;56G&lt;/span&gt;
        &lt;span class="na"&gt;reservations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;cpus&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;4.0'&lt;/span&gt;
          &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;32G&lt;/span&gt;
          &lt;span class="na"&gt;devices&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;driver&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nvidia&lt;/span&gt;
              &lt;span class="na"&gt;count&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
              &lt;span class="na"&gt;capabilities&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;gpu&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
    &lt;span class="na"&gt;ipc&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;host&lt;/span&gt;
    &lt;span class="na"&gt;shm_size&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;16gb'&lt;/span&gt;
    &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="s"&gt;--model ${MODEL_NAME}&lt;/span&gt;
      &lt;span class="s"&gt;--served-model-name "qwen3-30b-a3b-fp8"&lt;/span&gt;
      &lt;span class="s"&gt;--host 0.0.0.0&lt;/span&gt;
      &lt;span class="s"&gt;--port 8000&lt;/span&gt;
      &lt;span class="s"&gt;--max-model-len 16384&lt;/span&gt;
      &lt;span class="s"&gt;--gpu-memory-utilization 0.95&lt;/span&gt;
      &lt;span class="s"&gt;--kv-cache-dtype fp8&lt;/span&gt;
      &lt;span class="s"&gt;--enable-prefix-caching&lt;/span&gt;
      &lt;span class="s"&gt;--max-num-seqs 8&lt;/span&gt;
      &lt;span class="s"&gt;--disable-log-requests&lt;/span&gt;
      &lt;span class="s"&gt;--reasoning-parser deepseek_r1&lt;/span&gt;
    &lt;span class="na"&gt;healthcheck&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;test&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CMD-SHELL"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;curl&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;-f&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;http://localhost:8000/health&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;||&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;exit&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
      &lt;span class="na"&gt;interval&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;15s&lt;/span&gt;
      &lt;span class="na"&gt;timeout&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;10s&lt;/span&gt;
      &lt;span class="na"&gt;retries&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;
      &lt;span class="na"&gt;start_period&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;300s&lt;/span&gt;  &lt;span class="c1"&gt;# 5 minutos para carregar o modelo&lt;/span&gt;

  &lt;span class="na"&gt;proxy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;caddy:alpine&lt;/span&gt;
    &lt;span class="na"&gt;container_name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;caddy_secure_proxy&lt;/span&gt;
    &lt;span class="na"&gt;restart&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;unless-stopped&lt;/span&gt;
    &lt;span class="na"&gt;deploy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;limits&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;cpus&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;1.0'&lt;/span&gt;
          &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;512M&lt;/span&gt;
        &lt;span class="na"&gt;reservations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;cpus&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0.5'&lt;/span&gt;
          &lt;span class="na"&gt;memory&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;64M&lt;/span&gt;
    &lt;span class="na"&gt;extra_hosts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;host.docker.internal:host-gateway"&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;80:80"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443:443"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;443:443/udp"&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;DOMAIN=${DOMAIN}&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;EMAIL=${EMAIL_SSL}&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./Caddyfile:/etc/caddy/Caddyfile&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./caddy_data:/data&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;./caddy_config:/config&lt;/span&gt;
    &lt;span class="na"&gt;depends_on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;vllm&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;condition&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;service_healthy&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com nossos arquivos preenchidos, podemos executar o comando para subir nosso docker compose:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose &lt;span class="nt"&gt;--env-file&lt;/span&gt; .env up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;e com isso começará a baixar as imagens que vamos utilizar:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy6i3qqw5ftmakvo2pmlx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy6i3qqw5ftmakvo2pmlx.png" alt="Baixando imagens dos nossos containers" width="800" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Depois de ter baixado as imagens dos nossos containers, vai aparecer na sua tela a inicialização do vLLM&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F056m7z49sfa11bazhrw5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F056m7z49sfa11bazhrw5.png" alt="Baixando imagens dos nossos containers" width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;e após o vLLM baixar os pesos do modelo ele irá iniciar o caddy e aguarde um tempo para configurações de SSL sejam feitas&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xmez22xknnucb3x8ejw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4xmez22xknnucb3x8ejw.png" alt="Servidor de aplicação subindo" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aí agora para deixar os containers rodando em background, aperte a tecla &lt;code&gt;d&lt;/code&gt; como sugerido na parte inferior do terminal&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fixlrt7e9ct571fvvri1f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fixlrt7e9ct571fvvri1f.png" alt="Mostrando como liberar terminal" width="800" height="871"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;e para não ter de passar por isso na próxima, suba os containers com &lt;code&gt;-d&lt;/code&gt; no comando para subir os containers e já liberar o terminal&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker compose &lt;span class="nt"&gt;--env-file&lt;/span&gt; .env up &lt;span class="nt"&gt;-d&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora feito tudo isso, nossa aplicação está rodando lindamente, mas ainda não está respondendo pois precisaremos fazer as configurações de rede para liberar as portas 80 e 443 do nosso servidor.&lt;/p&gt;

&lt;p&gt;No próximo passo irei explicar como resolver o erro do servidor não responder&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2pvqjhrx1lqt0so0o95.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn2pvqjhrx1lqt0so0o95.png" alt="Erro que vai aparecer por não termos configurado a porta 443 para nossa VM." width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Configuração de rede para liberar acessos externos pelo nosso DNS
&lt;/h4&gt;

&lt;p&gt;Agora vamos para a última etapa de configuração antes de podermos usar nossa LLM, e fazer nossas tão desejadas chamadas à API.&lt;/p&gt;

&lt;p&gt;Acesse novamente seu &lt;a href="https://console.magalu.cloud/" rel="noopener noreferrer"&gt;console do Magalu Cloud&lt;/a&gt;, estando na tela inicial, clique no menu sanduíche no lado superior direito e com isto irá abrir o menu lateral.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffue6zvanpcywwo1yf73j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffue6zvanpcywwo1yf73j.png" alt="Como Chegar na tela Grupo de Segurança" width="800" height="777"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;depois clique na opção com o texto "Network", ele irá abrir um submenu flutuante à esquerda dele e então clique na opção "Grupo de Segurança" e você será redirecionado para a tela de Grupo de Segurança.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fony6174e0e66wjtm4m8n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fony6174e0e66wjtm4m8n.png" alt="Tela Grupo de Segurança" width="800" height="479"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Chegando na tela Grupo de Segurança, clique no botão "Criar grupo de segurança" e irá abrir uma tela para nomear e dar uma descrição para seu novo grupo de segurança, e preencha com um nome que vá lembrar, no meu caso coloquei "tutorial-vllm-l40s" como pode ser visto na imagem abaixo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqd3b96oy1py61gbip18.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqd3b96oy1py61gbip18.png" alt="Criando um Grupo de Segurança" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;e confirmando a criação do nosso grupo, voltaremos para a página inicial de Grupo de Segurança, agora vamos precisar clicar no novo grupo que criamos, no meu caso foi "tutorial-vllm-l40s".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxpuzqi87f7n4hjb404l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftxpuzqi87f7n4hjb404l.png" alt="Criando um Grupo de Segurança" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicando nele, iremos para a página do nosso Grupo de Segurança e nela iremos clicar no botão "Adicionar regra", preencha o formulário para que nosso servidor possa responder às requisições que faremos para ele. Devemos liberar a porta 443 para entrada, aceitando requisições de qualquer origem; ou, caso você tenha um IP fixo que sempre chamará a API, pode incluí-lo no preenchimento. O meu ficou da seguinte forma:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcsv4mgea7xcz0twblp5b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcsv4mgea7xcz0twblp5b.png" alt="Liberando porta 443" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clique em "Adicionar regra", e após fechar a tabela onde lista as regras deve conter agora a regra de entrada para a porta 443:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7z3ttk5p1jj59gowa5zm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7z3ttk5p1jj59gowa5zm.png" alt="Regra aplicada para entrada" width="800" height="41"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;agora vá até a página da nossa máquina virtual e clique na "Tabzinha" (Contornada na imagem em vermelho) de rede e verá uma tela como a do print abaixo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffd93dm596tlvn607y6g5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffd93dm596tlvn607y6g5.png" alt="Tela de rede da máquina virtual" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Estando nesta página, clique no botão azul com o texto "Adicionar grupo de segurança", na modal que irá abrir, busque o Grupo de segurança que criamos e configuramos.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F63qo4o8tcair9p70xy5j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F63qo4o8tcair9p70xy5j.png" alt="Modal para aplicar regras de grupo de segurança" width="800" height="617"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Após adicionar, podemos validar se o nosso domínio está respondendo às requisições&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x0kqyxw9w0051fem7bm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0x0kqyxw9w0051fem7bm.png" alt="Tela de rede da máquina virtual" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Caso suas configurações estiverem corretas, você verá uma tela como acima, mas com o seu domínio.&lt;/p&gt;

&lt;p&gt;Agora podemos fazer chamadas para nosso modelo com o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST &lt;span class="s1"&gt;'https://vllm-mgc.glaucio.tec.br/v1/chat/completions'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s1"&gt;'Content-Type: application/json'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s1"&gt;'Authorization: Bearer sua-chave-api-segura'&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--data&lt;/span&gt; &lt;span class="s1"&gt;'{
  "model": "qwen3-30b-a3b-fp8",
  "messages": [
    {
      "role": "system",
      "content": "Você é um assistente muito inteligente, que pensa antes de qualquer resposta, que segue a ciência, e deve ser muito dedicado a acertar."
    },
    {
      "role": "user",
      "content": "você conhece o acre? /no_think"
    }
  ]
}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como estamos servindo um modelo com capacidade de "raciocínio", para habilitar enviamos na mensagem o texto &lt;code&gt;/think&lt;/code&gt; e para desabilitar envie &lt;code&gt;/no_think&lt;/code&gt; e configuramos o parser &lt;code&gt;--reasoning-parser deepseek_r1&lt;/code&gt; , então quando o "raciocínio" for ativado ele virá em &lt;code&gt;choices[0].message.reasoning&lt;/code&gt; e caso esteja desativado, essa chave terá o valor nulo.&lt;/p&gt;

&lt;p&gt;Exemplo de resposta com &lt;code&gt;/think&lt;/code&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"chatcmpl-871a1a570fd3a0d9"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"chat.completion"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"created"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1769888901&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"qwen3-30b-a3b-fp8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"choices"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"index"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"assistant"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Sim, conheço o **acre**! Ele pode se referir a **dois conceitos principais**:&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;---&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;### 1. **Unidade de área (acre)**  &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;O **acre** é uma unidade de medida de área do sistema imperial, amplamente usada em países como os Estados Unidos, Reino Unido e outros.  &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- **Definição**: 1 acre = **4.046,86 metros quadrados** (m²).  &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- **Equivalência**:  &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;  - 1 acre ≈ 0,4047 hectares (ha).  &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;  - 1 hectare ≈ 2,471 acres.  &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- **Uso comum**: Medição de terrenos, campos de futebol, fazendas, etc.  &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;  - Por exemplo, um campo de futebol oficial tem cerca de **0,71 acre**.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;---&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;### 2. **Estado do Acre (Brasil)**  &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;O **Acre** também é um **estado da Amazônia brasileira**, localizado no **norte do Brasil**, na região da **Amazônia Ocidental**.  &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- **Capital**: **Rio Branco**.  &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- **Características**:  &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;  - Faz parte da **Bacia do Rio Amazonas**.  &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;  - Conhecido por sua **floresta tropical**, riqueza em biodiversidade e culturas indígenas.  &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;  - Tem uma economia baseada em **extrativismo (como a seringueira)** e **agricultura**.  &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;  - O **Parque Nacional do Acre** e a **Reserva da Biosfera do Acre** são áreas protegidas.  &lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- **População**: Cerca de **900.000 habitantes** (estatísticas de 2023).  &lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;---&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Se você se referia a algo específico (como uma empresa, termo técnico ou outro contexto), me avise que posso aprofundar! 😊"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"refusal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"annotations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"audio"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"function_call"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"tool_calls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Okay, the user is asking if I know about Acre. First, I need to confirm what exactly they're referring to. Acre can mean a few things. The most common is the unit of area, which is 4,046.86 square meters. But there's also Acre as a place, like the Acre state in Brazil, or maybe even a company or a term in another context.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;I should start by acknowledging that Acre can refer to multiple things. Let me break it down. First, the unit of area. Explain that it's a unit used in the imperial system, commonly used in countries like the US, UK, and others. Mention its conversion to square meters and other units. Then, mention the Brazilian state, Acre, located in the northwest of Brazil, part of the Amazon region. Highlight its geography, maybe the capital, Rio Branco, and some key points about the state, like its natural resources or cultural aspects.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Wait, the user might be asking about the state, but I should cover both possibilities. Also, check if there's another context, like a company or a term in a different field. But I think the two main ones are the unit and the state. Make sure to present both clearly. Avoid any confusion by structuring the answer with headings or bullet points. Also, verify the accuracy of the information, like the exact area of an acre, the location of Acre state, and its capital. Maybe mention that the state is known for its rainforests and biodiversity. Double-check the conversion factors to ensure they're correct. Alright, that should cover the main points.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"reasoning_content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Okay, the user is asking if I know about Acre. First, I need to confirm what exactly they're referring to. Acre can mean a few things. The most common is the unit of area, which is 4,046.86 square meters. But there's also Acre as a place, like the Acre state in Brazil, or maybe even a company or a term in another context.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;I should start by acknowledging that Acre can refer to multiple things. Let me break it down. First, the unit of area. Explain that it's a unit used in the imperial system, commonly used in countries like the US, UK, and others. Mention its conversion to square meters and other units. Then, mention the Brazilian state, Acre, located in the northwest of Brazil, part of the Amazon region. Highlight its geography, maybe the capital, Rio Branco, and some key points about the state, like its natural resources or cultural aspects.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Wait, the user might be asking about the state, but I should cover both possibilities. Also, check if there's another context, like a company or a term in a different field. But I think the two main ones are the unit and the state. Make sure to present both clearly. Avoid any confusion by structuring the answer with headings or bullet points. Also, verify the accuracy of the information, like the exact area of an acre, the location of Acre state, and its capital. Maybe mention that the state is known for its rainforests and biodiversity. Double-check the conversion factors to ensure they're correct. Alright, that should cover the main points.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"logprobs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"finish_reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stop"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"stop_reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"token_ids"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"service_tier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"system_fingerprint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prompt_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;58&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"total_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;836&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"completion_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;778&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prompt_tokens_details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt_logprobs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt_token_ids"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"kv_transfer_params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exemplo de resposta com &lt;code&gt;/no_think&lt;/code&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"chatcmpl-a0710ba10d25e658"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"object"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"chat.completion"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"created"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1769889464&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"model"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"qwen3-30b-a3b-fp8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"choices"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"index"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"message"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"role"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"assistant"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Claro, eu conheço o Acre! O Acre é um estado da Amazônia brasileira, localizado no extremo oeste do Brasil, fazendo fronteira com a Bolívia e o Peru. É um dos estados mais extensos do Brasil e é conhecido por sua vasta floresta tropical, rica em biodiversidade e por ser um dos últimos grandes territórios preservados da Amazônia.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Alguns pontos interessantes sobre o Acre:&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;- **Capital**: Rio Branco&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- **População**: Cerca de 900 mil habitantes (dados aproximados)&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- **Cultura**: Mistura de influências indígenas, brasileiras e bolivianas.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- **Economia**: Baseada principalmente na agricultura (como a seringueira, o cauim, o açaí), na pecuária e na exploração de recursos naturais.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- **Ecologia**: É uma das regiões mais preservadas da Amazônia, com muitas áreas de proteção ambiental.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- **História**: Foi cedido ao Brasil pela Bolívia em 1903, através do Tratado de Petrópolis.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;O Acre também é famoso por sua paisagem única, com rios, florestas e uma cultura rica e diversificada. Se quiser, posso te contar mais sobre algum aspecto específico do Acre!"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"refusal"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"annotations"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"audio"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"function_call"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"tool_calls"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[],&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"reasoning"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"reasoning_content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"logprobs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"finish_reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stop"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"stop_reason"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"token_ids"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"service_tier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"system_fingerprint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"usage"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prompt_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"total_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;380&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"completion_tokens"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;320&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"prompt_tokens_details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt_logprobs"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompt_token_ids"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"kv_transfer_params"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Então a partir de agora é só ser feliz.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8pcd9g9e2xxftkj9aex.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8pcd9g9e2xxftkj9aex.png" alt="Imagem de encerramento do looney tunes" width="400" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Em breve trarei mais um post fazendo múltiplas requisições para nosso modelo, trazendo números de tempo de resposta e qualidade das respostas do modelo.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>vllm</category>
      <category>docker</category>
    </item>
    <item>
      <title>Regiões e Zonas de Disponibilidade na Magalu Cloud: como pensar resiliência desde o início</title>
      <dc:creator>Magalu Cloud</dc:creator>
      <pubDate>Fri, 30 Jan 2026 16:30:39 +0000</pubDate>
      <link>https://forem.com/magalucloud/regioes-e-zonas-de-disponibilidade-na-magalu-cloud-como-pensar-resiliencia-desde-o-inicio-3lmj</link>
      <guid>https://forem.com/magalucloud/regioes-e-zonas-de-disponibilidade-na-magalu-cloud-como-pensar-resiliencia-desde-o-inicio-3lmj</guid>
      <description>&lt;p&gt;Ao criar uma aplicação na nuvem, é comum focar primeiro no código, no sistema operacional ou no tipo de máquina virtual. No entanto, muitas indisponibilidades em produção não estão ligadas à aplicação em si, mas à forma como a infraestrutura foi planejada.&lt;/p&gt;

&lt;p&gt;Pensar em &lt;strong&gt;resiliência desde o início&lt;/strong&gt; significa entender onde seus recursos estão rodando fisicamente e como eles se comportam diante de falhas. Na &lt;a href="https://magalu.cloud/?utm_source=site&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+comunidade&amp;amp;utm_id=artigos+comunidade" rel="noopener noreferrer"&gt;Magalu Cloud&lt;/a&gt;, esse planejamento começa com dois conceitos fundamentais: &lt;strong&gt;Regiões&lt;/strong&gt; e &lt;strong&gt;Zonas de Disponibilidade (Availability Zones)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Neste artigo, você vai entender como esses conceitos funcionam na prática e, ao final, aplicar esse conhecimento em um &lt;strong&gt;hands-on técnico&lt;/strong&gt;, criando uma VM já preparada para cenários de falha e recuperação.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conceito
&lt;/h2&gt;

&lt;p&gt;Uma &lt;strong&gt;Região&lt;/strong&gt; é uma área geográfica que concentra um ou mais datacenters. Na Magalu Cloud, as regiões estão localizadas no Brasil, o que garante menor latência, conformidade com a legislação nacional e maior previsibilidade operacional.&lt;/p&gt;

&lt;p&gt;Dentro de cada região existem as &lt;strong&gt;Zonas de Disponibilidade (AZs)&lt;/strong&gt;. Cada AZ é um ambiente físico independente, com energia, refrigeração e conectividade próprias. Mesmo estando na mesma região, as zonas são isoladas entre si para reduzir o impacto de falhas físicas ou operacionais.&lt;/p&gt;

&lt;p&gt;De forma simples, a região define &lt;em&gt;onde&lt;/em&gt; sua aplicação está localizada, enquanto as zonas definem &lt;em&gt;como&lt;/em&gt; ela pode se manter disponível mesmo quando algo não sai como esperado.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quando pensar em Zonas de Disponibilidade
&lt;/h2&gt;

&lt;p&gt;A escolha correta de região e zona é especialmente importante quando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sua aplicação não pode ficar indisponível por longos períodos&lt;/li&gt;
&lt;li&gt;Você quer reduzir o impacto de falhas de infraestrutura&lt;/li&gt;
&lt;li&gt;O ambiente tende a crescer com o tempo&lt;/li&gt;
&lt;li&gt;Existe necessidade de recuperação rápida após erros ou manutenções&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Mesmo em projetos pequenos ou ambientes de teste, entender essas decisões desde o início evita retrabalho e limitações futuras.&lt;/p&gt;




&lt;h2&gt;
  
  
  Como funciona na Magalu Cloud
&lt;/h2&gt;

&lt;p&gt;Na Magalu Cloud, cada recurso é criado dentro de uma &lt;strong&gt;Zona de Disponibilidade específica&lt;/strong&gt;. Máquinas virtuais, por exemplo, pertencem a uma única AZ, assim como seus volumes de Block Storage, que precisam estar obrigatoriamente na mesma zona da VM.&lt;/p&gt;

&lt;p&gt;Isso significa que, se uma aplicação estiver concentrada em apenas uma AZ, ela ficará indisponível caso aquela zona enfrente problemas. Por outro lado, serviços como Object Storage já contam com &lt;strong&gt;replicação automática entre zonas&lt;/strong&gt;, oferecendo maior durabilidade sem configuração adicional.&lt;/p&gt;

&lt;p&gt;Essa diferença de comportamento entre os serviços é o que orienta as estratégias de resiliência.&lt;/p&gt;




&lt;h2&gt;
  
  
  Hands-on: criando uma VM resiliente desde o início
&lt;/h2&gt;

&lt;p&gt;Para tornar esse conceito mais prático, vamos construir um cenário simples, mas extremamente comum: &lt;strong&gt;uma VM única, criada de forma consciente, com um plano claro de recuperação&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Passo 1: identificar as Zonas de Disponibilidade disponíveis
&lt;/h3&gt;

&lt;p&gt;Antes de criar qualquer recurso, é importante saber quais AZs estão disponíveis para sua conta. Isso pode ser feito via CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc profile availability-zones list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O resultado mostrará as zonas disponíveis na região, como &lt;code&gt;br-se1-a&lt;/code&gt;, &lt;code&gt;br-se1-b&lt;/code&gt; e &lt;code&gt;br-se1-c&lt;/code&gt;. Esse passo é essencial, pois nem todos os serviços estão disponíveis em todas as zonas.&lt;/p&gt;




&lt;h3&gt;
  
  
  Passo 2: criar a VM em uma Zona de Disponibilidade específica
&lt;/h3&gt;

&lt;p&gt;Ao criar a VM pelo Console da Magalu Cloud, selecione explicitamente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A região desejada&lt;/li&gt;
&lt;li&gt;Uma Zona de Disponibilidade específica&lt;/li&gt;
&lt;li&gt;Uma imagem Linux oficial&lt;/li&gt;
&lt;li&gt;Uma chave SSH para acesso&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nesse momento, a VM passa a existir fisicamente dentro daquela AZ. Essa decisão é importante porque define o nível inicial de resiliência da aplicação.&lt;/p&gt;




&lt;h3&gt;
  
  
  Passo 3: acessar a VM e validar o ambiente
&lt;/h3&gt;

&lt;p&gt;Após a criação, acesse a VM via SSH:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh usuario@ip-publico-da-vm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dentro da VM, crie um arquivo simples para representar o estado da aplicação:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"VM criada na AZ br-se1-a"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ambiente.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse arquivo servirá como referência para validar a recuperação posteriormente.&lt;/p&gt;




&lt;h3&gt;
  
  
  Passo 4: criar um snapshot como ponto de recuperação
&lt;/h3&gt;

&lt;p&gt;Com a VM funcionando corretamente, crie um &lt;strong&gt;snapshot do disco&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Esse snapshot representa um estado conhecido e seguro da aplicação. Mais do que um backup, ele se torna um &lt;strong&gt;ponto estratégico de recuperação&lt;/strong&gt;, permitindo recriar a VM rapidamente em caso de falhas, erros de configuração ou indisponibilidade da zona original.&lt;/p&gt;




&lt;h3&gt;
  
  
  Passo 5: recriar a VM a partir do snapshot em outra AZ
&lt;/h3&gt;

&lt;p&gt;Agora vem o ponto-chave do hands-on. A partir do snapshot criado, crie uma nova VM escolhendo &lt;strong&gt;outra Zona de Disponibilidade da mesma região&lt;/strong&gt; e utilize o snapshot como base do disco.&lt;/p&gt;

&lt;p&gt;Após acessar a nova VM via SSH, valide o conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;ambiente.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se o arquivo estiver presente, você confirmou na prática que o ambiente pôde ser recriado com sucesso em outra AZ, reduzindo a dependência de um único ponto físico.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que esse hands-on demonstra
&lt;/h2&gt;

&lt;p&gt;Ao final desse exercício, fica claro que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Zonas de Disponibilidade impactam diretamente a arquitetura&lt;/li&gt;
&lt;li&gt;Uma VM em uma única AZ é funcional, mas vulnerável&lt;/li&gt;
&lt;li&gt;Snapshots são fundamentais para recuperação e continuidade&lt;/li&gt;
&lt;li&gt;Resiliência pode ser pensada desde o primeiro recurso criado&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tudo isso sem exigir arquiteturas complexas ou serviços adicionais.&lt;/p&gt;




&lt;h2&gt;
  
  
  Boas práticas e cuidados
&lt;/h2&gt;

&lt;p&gt;Ao planejar sua infraestrutura, sempre verifique previamente as AZs disponíveis e a compatibilidade dos serviços. Para máquinas virtuais, trate snapshots como parte do desenho da arquitetura, e não como um recurso opcional.&lt;/p&gt;

&lt;p&gt;Lembre-se também de que volumes de Block Storage precisam estar na mesma AZ da VM, enquanto dados que exigem maior durabilidade podem se beneficiar do uso de Object Storage, que já possui replicação automática entre zonas.&lt;/p&gt;

&lt;p&gt;Essas decisões simples, quando tomadas desde o início, aumentam significativamente a confiabilidade do ambiente.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Regiões e Zonas de Disponibilidade são pilares fundamentais para construir aplicações resilientes na Magalu Cloud. Entender como esses conceitos funcionam e aplicá-los desde o primeiro recurso criado permite reduzir riscos, facilitar a recuperação e preparar o ambiente para crescer com segurança.&lt;/p&gt;

&lt;p&gt;Pensar resiliência desde o início não significa complicar a arquitetura, mas sim fazer escolhas conscientes que farão diferença quando sua aplicação realmente precisar.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>cloud</category>
      <category>devops</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>Acessando e protegendo sua VM: SSH, snapshots e boas práticas iniciais</title>
      <dc:creator>Magalu Cloud</dc:creator>
      <pubDate>Fri, 23 Jan 2026 18:44:54 +0000</pubDate>
      <link>https://forem.com/magalucloud/acessando-e-protegendo-sua-vm-ssh-snapshots-e-boas-praticas-iniciais-1iph</link>
      <guid>https://forem.com/magalucloud/acessando-e-protegendo-sua-vm-ssh-snapshots-e-boas-praticas-iniciais-1iph</guid>
      <description>&lt;p&gt;Criar uma máquina virtual é apenas o primeiro passo para rodar aplicações na nuvem. Logo após o provisionamento, surgem duas necessidades fundamentais: &lt;strong&gt;acessar a VM com segurança&lt;/strong&gt; e &lt;strong&gt;garantir proteção contra falhas, erros ou perdas de dados&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Na &lt;a href="https://magalu.cloud/?utm_source=site&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+comunidade&amp;amp;utm_id=artigos+comunidade" rel="noopener noreferrer"&gt;Magalu Cloud&lt;/a&gt;, esses dois pontos são atendidos de forma nativa por meio do uso de &lt;strong&gt;chaves SSH&lt;/strong&gt; para acesso seguro e &lt;strong&gt;snapshots&lt;/strong&gt; para recuperação rápida. Combinados a algumas boas práticas iniciais, esses recursos ajudam a criar um ambiente mais confiável desde o primeiro dia.&lt;/p&gt;

&lt;p&gt;Neste artigo, você vai entender como acessar sua VM via SSH, como e por que usar snapshots e quais cuidados iniciais adotar para proteger seu ambiente.&lt;/p&gt;




&lt;h2&gt;
  
  
  Acesso seguro a VMs
&lt;/h2&gt;

&lt;p&gt;Em ambientes Linux, o acesso remoto a uma máquina virtual é feito via &lt;strong&gt;SSH (Secure Shell)&lt;/strong&gt;. Diferente do uso de senhas, o SSH utiliza &lt;strong&gt;criptografia por chave pública e privada&lt;/strong&gt;, reduzindo drasticamente o risco de acessos não autorizados.&lt;/p&gt;

&lt;p&gt;Na Magalu Cloud, o acesso inicial às VMs Linux é realizado exclusivamente por &lt;strong&gt;chaves SSH&lt;/strong&gt;, sem senhas padrão embutidas no sistema.&lt;/p&gt;




&lt;h2&gt;
  
  
  Proteção do estado da máquina
&lt;/h2&gt;

&lt;p&gt;Já os &lt;strong&gt;snapshots&lt;/strong&gt; funcionam como uma “fotografia” do estado atual de uma VM ou de um volume de armazenamento. Eles permitem restaurar o ambiente exatamente como estava em um determinado momento, sendo fundamentais para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recuperação após falhas&lt;/li&gt;
&lt;li&gt;Reversão de alterações problemáticas&lt;/li&gt;
&lt;li&gt;Criação de ambientes clonados&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Acesso via SSH
&lt;/h2&gt;

&lt;p&gt;Durante a criação de uma VM Linux na Magalu Cloud, você define uma &lt;strong&gt;chave SSH&lt;/strong&gt;, que pode ser:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gerada no próprio processo de criação da instância&lt;/li&gt;
&lt;li&gt;Reutilizada a partir de uma chave já existente na sua conta&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essa chave pública é automaticamente configurada na VM por meio do &lt;code&gt;cloud-init&lt;/code&gt;, permitindo que apenas quem possui a chave privada correspondente consiga acessar o servidor.&lt;/p&gt;

&lt;p&gt;Após a VM estar em execução, o acesso é feito diretamente pelo terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh usuario@ip-publico-da-vm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O nome do usuário depende da imagem escolhida (por exemplo, &lt;code&gt;ubuntu&lt;/code&gt; em imagens Ubuntu).&lt;/p&gt;




&lt;h2&gt;
  
  
  Snapshots de máquinas virtuais
&lt;/h2&gt;

&lt;p&gt;Os snapshots podem ser criados a partir do disco da VM ou de volumes de Block Storage associados. Eles capturam o estado do disco no momento da criação e ficam disponíveis para restauração posterior.&lt;/p&gt;

&lt;p&gt;Na prática, os snapshots permitem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Restaurar uma VM após falha ou erro humano&lt;/li&gt;
&lt;li&gt;Criar uma nova VM baseada em um estado conhecido&lt;/li&gt;
&lt;li&gt;Preservar um ponto seguro antes de mudanças importantes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Os snapshots são especialmente importantes em ambientes criados em uma única Zona de Disponibilidade, pois facilitam a recuperação rápida em caso de problemas.&lt;/p&gt;




&lt;h2&gt;
  
  
  Exemplo prático
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Fluxo recomendado após criar uma VM
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Criar a VM definindo uma chave SSH&lt;/li&gt;
&lt;li&gt;Acessar a VM via SSH a partir do seu computador&lt;/li&gt;
&lt;li&gt;Aplicar atualizações básicas do sistema operacional&lt;/li&gt;
&lt;li&gt;Criar um snapshot inicial da VM&lt;/li&gt;
&lt;li&gt;Prosseguir com a instalação de aplicações e serviços&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esse snapshot inicial funciona como um “ponto de retorno” limpo e confiável.&lt;/p&gt;




&lt;h2&gt;
  
  
  Boas práticas e cuidados
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Acesso e autenticação
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Utilize sempre chaves SSH fortes e protegidas&lt;/li&gt;
&lt;li&gt;Nunca compartilhe sua chave privada&lt;/li&gt;
&lt;li&gt;Evite conceder acesso desnecessário a usuários da conta&lt;/li&gt;
&lt;li&gt;Revise periodicamente as permissões de acesso&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Snapshots e recuperação
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Crie snapshots antes de qualquer atualização crítica&lt;/li&gt;
&lt;li&gt;Mantenha snapshots periódicos em ambientes importantes&lt;/li&gt;
&lt;li&gt;Não dependa de um único snapshot antigo&lt;/li&gt;
&lt;li&gt;Combine snapshots com uma estratégia de organização e limpeza&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Segurança inicial da VM
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Atualize o sistema logo após o primeiro acesso&lt;/li&gt;
&lt;li&gt;Remova serviços que não serão utilizados&lt;/li&gt;
&lt;li&gt;Limite a exposição de portas de rede apenas ao necessário&lt;/li&gt;
&lt;li&gt;Utilize VPC e regras de segurança para isolar o ambiente&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essas práticas reduzem a superfície de ataque e aumentam a estabilidade do ambiente.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;A segurança e a confiabilidade de uma máquina virtual começam nos primeiros minutos após sua criação. Ao utilizar &lt;strong&gt;chaves SSH para acesso seguro&lt;/strong&gt;, &lt;strong&gt;snapshots para proteção do estado da VM&lt;/strong&gt; e &lt;strong&gt;boas práticas iniciais&lt;/strong&gt;, você constrói uma base sólida para suas aplicações na Magalu Cloud.&lt;/p&gt;

&lt;p&gt;Esses recursos, aliados à infraestrutura local no Brasil, preços em reais e suporte em português, permitem que desenvolvedores tenham controle, previsibilidade e tranquilidade desde o início do projeto.&lt;/p&gt;

&lt;p&gt;Antes de avançar para configurações mais complexas, garantir esse básico bem feito faz toda a diferença no dia a dia.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>cloud</category>
      <category>magalucloud</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Máquinas virtuais na Magalu Cloud: conceitos essenciais e criação</title>
      <dc:creator>Magalu Cloud</dc:creator>
      <pubDate>Thu, 15 Jan 2026 19:23:18 +0000</pubDate>
      <link>https://forem.com/magalucloud/maquinas-virtuais-na-magalu-cloud-conceitos-essenciais-e-criacao-296k</link>
      <guid>https://forem.com/magalucloud/maquinas-virtuais-na-magalu-cloud-conceitos-essenciais-e-criacao-296k</guid>
      <description>&lt;p&gt;&lt;a href="https://docs.magalu.cloud/docs/computing/virtual-machine/overview?utm_source=site&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+comunidade+documentacao&amp;amp;utm_id=artigos+comunidade+documentacao" rel="noopener noreferrer"&gt;Máquinas virtuais&lt;/a&gt; (VMs) são a base da computação em nuvem para execução de aplicações, serviços e ambientes de desenvolvimento com isolamento, previsibilidade e controle total do sistema operacional.&lt;/p&gt;

&lt;p&gt;Na &lt;a href="https://magalu.cloud/?utm_source=site&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+comunidade&amp;amp;utm_id=artigos+comunidade" rel="noopener noreferrer"&gt;Magalu Cloud&lt;/a&gt;, a criação de VMs é feita por meio de uma interface gráfica simples e objetiva no Console, permitindo que desenvolvedores configurem todos os aspectos essenciais da instância como sistema operacional, capacidade de processamento, rede e acesso em poucos passos.&lt;/p&gt;

&lt;p&gt;Neste artigo, você vai entender os conceitos fundamentais por trás das VMs e acompanhar, passo a passo, como criar uma VM Linux usando a interface de criação de instâncias.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que são máquinas virtuais?
&lt;/h2&gt;

&lt;p&gt;Uma máquina virtual é um servidor definido por software que executa sobre a infraestrutura física da nuvem. Ela funciona como um computador completo, com recursos dedicados e isolamento garantido, mesmo compartilhando o mesmo datacenter com outras VMs.&lt;/p&gt;

&lt;p&gt;Cada VM possui:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sistema operacional próprio (Linux ou Windows)&lt;/li&gt;
&lt;li&gt;vCPUs (processadores virtuais)&lt;/li&gt;
&lt;li&gt;Memória RAM dedicada&lt;/li&gt;
&lt;li&gt;Disco de armazenamento&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esse modelo permite criar e remover servidores sob demanda, ajustando recursos conforme a necessidade da aplicação. &lt;/p&gt;

&lt;p&gt;Na Magalu Cloud, a criação de uma VM é feita a partir de imagens, que são modelos prontos de sistemas operacionais mantidos pela plataforma. Essas imagens já vêm preparadas para inicialização automática e configuração inicial.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quando usar máquinas virtuais?
&lt;/h2&gt;

&lt;p&gt;As máquinas virtuais são indicadas quando é necessário controle total sobre o sistema operacional e previsibilidade de recursos, sendo adequadas para executar aplicações web, APIs, serviços de back-end e sistemas legados.&lt;/p&gt;

&lt;p&gt;Elas também são uma boa escolha para ambientes de desenvolvimento, teste e homologação, além de cenários que exigem isolamento entre aplicações e integração direta com recursos de computação, armazenamento e conectividade da nuvem.&lt;/p&gt;




&lt;h2&gt;
  
  
  Criando uma VM Linux no Console
&lt;/h2&gt;

&lt;p&gt;A seguir, vamos percorrer cada seção da tela Criar instância, considerando a interface apresentada no Console da Magalu Cloud.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Escolha da zona de disponibilidade
&lt;/h3&gt;

&lt;p&gt;O primeiro passo é selecionar a Zona de Disponibilidade (AZ), como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;br-se1-a&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;br-se1-b&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;br-se1-c&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6pun0ktm5y9cz55i6xv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe6pun0ktm5y9cz55i6xv.png" alt="Seleção de zona de disponibilidade" width="800" height="124"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A zona representa uma unidade física independente dentro da região. Para ambientes simples, qualquer zona disponível atende bem. Em arquiteturas mais avançadas, a distribuição de VMs entre zonas ajuda a aumentar a resiliência.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Escolha da imagem
&lt;/h3&gt;

&lt;p&gt;Na seção Escolha uma imagem, você define o sistema operacional da VM. A Magalu Cloud oferece imagens oficiais, prontas para uso, como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu&lt;/li&gt;
&lt;li&gt;Oracle Linux&lt;/li&gt;
&lt;li&gt;Rocky Linux&lt;/li&gt;
&lt;li&gt;Debian&lt;/li&gt;
&lt;li&gt;Fedora&lt;/li&gt;
&lt;li&gt;openSUSE&lt;/li&gt;
&lt;li&gt;Windows Server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft1piqg14p2bd7wg1ufnb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft1piqg14p2bd7wg1ufnb.png" alt="Seleção de imagens" width="800" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para este exemplo, selecione uma distribuição Linux, como Ubuntu. As imagens Linux utilizam cloud-init para aplicar automaticamente configurações iniciais, como a chave SSH.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. GPU (opcional)
&lt;/h3&gt;

&lt;p&gt;Caso a aplicação exija aceleração gráfica ou processamento para IA, é possível marcar a opção Habilitar GPU, sujeita à disponibilidade na zona selecionada.&lt;/p&gt;

&lt;p&gt;Se não houver essa necessidade, essa opção pode ser mantida desabilitada.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Escolha do tipo de instância
&lt;/h3&gt;

&lt;p&gt;Na seção Escolha um tipo de instância, as VMs são organizadas por perfil de memória e classe de performance:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low Memory&lt;/li&gt;
&lt;li&gt;Standard Memory&lt;/li&gt;
&lt;li&gt;High Memory&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cada opção exibe claramente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quantidade de vCPUs&lt;/li&gt;
&lt;li&gt;Memória RAM&lt;/li&gt;
&lt;li&gt;Valor por hora&lt;/li&gt;
&lt;li&gt;Estimativa mensal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por exemplo, um perfil equilibrado pode ser indicado para:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aplicações gerais&lt;/li&gt;
&lt;li&gt;Servidores web&lt;/li&gt;
&lt;li&gt;Ambientes de desenvolvimento e teste&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqmq6t3ajnqcna00oyrgt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqmq6t3ajnqcna00oyrgt.png" alt="Seleção de instância" width="800" height="284"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Também é possível ajustar o tamanho do disco local, como 10 GB, diretamente nessa etapa.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Conectividade e acesso público
&lt;/h3&gt;

&lt;p&gt;Na seção Conectividade, você define como a VM será acessada pela rede:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O IPv6 público é gerado automaticamente após a criação&lt;/li&gt;
&lt;li&gt;É possível marcar a opção Atribuir IPv4 público para essa instância, caso seja necessário acesso direto via internet&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7bdx0artm09zcq6oxz2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj7bdx0artm09zcq6oxz2.png" alt="Seleção de IP" width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Essa escolha depende do cenário da aplicação e dos requisitos de conectividade.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Chave SSH
&lt;/h3&gt;

&lt;p&gt;Para VMs Linux, o acesso é feito exclusivamente por chave SSH.&lt;/p&gt;

&lt;p&gt;Na seção Chave SSH, você pode:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Selecionar uma chave já utilizada anteriormente&lt;/li&gt;
&lt;li&gt;Inserir uma nova chave pública SSH&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F30ir1qicatxv9jad2kz2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F30ir1qicatxv9jad2kz2.png" alt="Seção de chave SSH" width="800" height="151"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Essa chave será configurada automaticamente no sistema operacional durante a inicialização da VM. Não há senha padrão para acesso.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Nome da instância
&lt;/h3&gt;

&lt;p&gt;Por fim, informe o Nome da instância, seguindo as regras indicadas no Console:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Entre 3 e 50 caracteres&lt;/li&gt;
&lt;li&gt;Letras minúsculas, números, hífen (-) e underline (_)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esse nome ajuda na organização e identificação das VMs no ambiente.&lt;/p&gt;

&lt;p&gt;Após preencher todos os campos obrigatórios, clique em Criar instância. A Magalu Cloud inicia automaticamente o provisionamento da VM, que em poucos minutos estará pronta para uso.&lt;/p&gt;




&lt;h2&gt;
  
  
  Boas práticas e cuidados
&lt;/h2&gt;

&lt;p&gt;Ao trabalhar com VMs na Magalu Cloud, priorize o uso de chaves SSH seguras, escolha tipos de instância compatíveis com a carga da aplicação e utilize snapshots antes de alterações relevantes no sistema.&lt;/p&gt;

&lt;p&gt;Também é importante limitar o acesso de rede ao mínimo necessário e revisar periodicamente as instâncias em execução, removendo recursos ociosos para manter o ambiente seguro, organizado e com custos sob controle.&lt;/p&gt;




&lt;p&gt;As VMs da Magalu Cloud oferecem uma base sólida para executar aplicações com controle, simplicidade e previsibilidade. A interface de criação de instâncias foi pensada para guiar o desenvolvedor por todas as decisões técnicas essenciais, sem complexidade desnecessária.&lt;/p&gt;

&lt;p&gt;Ao entender cada etapa da criação de uma VM Linux, você ganha autonomia para montar ambientes confiáveis, escaláveis e alinhados às necessidades reais da sua aplicação, aproveitando uma infraestrutura local, com preços em reais e suporte próximo do ecossistema brasileiro.&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>cloud</category>
      <category>cloudcomputing</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>O que é a Magalu Cloud e como usar o Console e a CLI no dia a dia</title>
      <dc:creator>Magalu Cloud</dc:creator>
      <pubDate>Thu, 08 Jan 2026 19:01:16 +0000</pubDate>
      <link>https://forem.com/magalucloud/o-que-e-a-magalu-cloud-e-como-usar-o-console-e-a-cli-no-dia-a-dia-4l63</link>
      <guid>https://forem.com/magalucloud/o-que-e-a-magalu-cloud-e-como-usar-o-console-e-a-cli-no-dia-a-dia-4l63</guid>
      <description>&lt;p&gt;A computação em nuvem deixou de ser um tema restrito a grandes empresas e passou a fazer parte do cotidiano de desenvolvedores, startups e times técnicos de todos os tamanhos. Nesse contexto, não basta saber &lt;em&gt;o que é&lt;/em&gt; nuvem: é fundamental entender &lt;strong&gt;como uma plataforma funciona na prática&lt;/strong&gt; e &lt;strong&gt;como interagir com ela no dia a dia&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Neste artigo, você vai conhecer a &lt;strong&gt;&lt;a href="https://magalu.cloud/?utm_source=site&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+comunidade&amp;amp;utm_id=artigos+comunidade" rel="noopener noreferrer"&gt;Magalu Cloud&lt;/a&gt;&lt;/strong&gt;, entender seu posicionamento como nuvem pública brasileira e aprender, de forma prática, como trabalhar com a plataforma usando o &lt;strong&gt;Console&lt;/strong&gt; e a &lt;strong&gt;CLI&lt;/strong&gt;. Ao final, a ideia é simples: você deve saber onde está, como navegar e como executar ações básicas com segurança e previsibilidade.&lt;/p&gt;

&lt;h2&gt;
  
  
  Entendendo o que é a Magalu Cloud
&lt;/h2&gt;

&lt;p&gt;A Magalu Cloud é uma nuvem pública desenvolvida para oferecer serviços de computação, armazenamento, rede e governança com foco direto no mercado brasileiro. A plataforma foi pensada desde o início para operar com infraestrutura localizada no Brasil, preços em reais e total aderência à legislação nacional.&lt;/p&gt;

&lt;p&gt;Na prática, isso se reflete em alguns pontos importantes para quem desenvolve e opera sistemas. A proximidade física dos datacenters reduz a latência de aplicações voltadas ao público brasileiro. A cobrança em moeda local traz previsibilidade financeira e facilita o planejamento de custos. O suporte técnico acontece em português e a plataforma adota uma abordagem aberta, com APIs, CLI e integração com ferramentas de automação amplamente utilizadas no mercado.&lt;/p&gt;

&lt;p&gt;Mais do que abstrair a complexidade da nuvem, a proposta da Magalu Cloud é torná-la &lt;strong&gt;compreensível e controlável&lt;/strong&gt;, permitindo que o desenvolvedor entenda claramente o que está criando, como os recursos se relacionam e quais impactos técnicos e operacionais isso traz.&lt;/p&gt;

&lt;h2&gt;
  
  
  Console e CLI: duas formas de usar a plataforma
&lt;/h2&gt;

&lt;p&gt;Toda interação com a Magalu Cloud acontece, basicamente, de duas maneiras: pelo Console, que é a interface web gráfica, e pela CLI, que é a interface de linha de comando. Essas duas abordagens não competem entre si. Elas atendem a momentos diferentes da jornada técnica e, na prática, costumam ser usadas de forma complementar.&lt;/p&gt;

&lt;p&gt;O Console é o caminho mais natural para o primeiro contato. Ele facilita a exploração da plataforma, ajuda a entender como os serviços estão organizados e permite criar recursos manualmente com mais segurança visual. Já a CLI entra em cena quando surge a necessidade de repetição, automação ou maior controle sobre o fluxo de operações.&lt;/p&gt;

&lt;h2&gt;
  
  
  Usando o Console da Magalu Cloud no dia a dia
&lt;/h2&gt;

&lt;p&gt;O Console é a interface gráfica da Magalu Cloud, acessada pelo navegador. É por ele que muitos desenvolvedores têm o primeiro contato com a plataforma e começam a entender como os serviços se organizam.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa36wap34d0lg98cil3qp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa36wap34d0lg98cil3qp.png" alt="Console da Magalu Cloud" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ao acessar o Console, você encontra um painel central que agrupa os serviços. Antes de criar qualquer recurso, vale dedicar alguns minutos apenas para navegar. Explore os menus, leia as descrições dos serviços e observe como eles se relacionam.&lt;/p&gt;

&lt;p&gt;O Console é especialmente útil para esse momento de aprendizado e para criações pontuais, quando você quer validar opções, entender campos de configuração e visualizar o impacto das escolhas que está fazendo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Trabalhando com a CLI da Magalu Cloud de forma prática
&lt;/h2&gt;

&lt;p&gt;A CLI da Magalu Cloud é a ferramenta que permite interagir com a plataforma diretamente pelo terminal. Ela é essencial para quem busca produtividade, automação e consistência nos ambientes.&lt;/p&gt;

&lt;p&gt;Para instalar a CLI, você pode seguir os passos da &lt;a href="https://docs.magalu.cloud/docs/devops-tools/cli-mgc/how-to/download-and-install/" rel="noopener noreferrer"&gt;documentação&lt;/a&gt;. Após a instalação, o primeiro passo é autenticar sua conta, com o comando &lt;code&gt;mgc auth login&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Esse processo cria uma sessão local vinculada à sua identidade na Magalu Cloud e permite que os comandos executados no terminal tenham efeito real sobre os recursos da sua conta.&lt;/p&gt;

&lt;p&gt;Um bom ponto de partida é confirmar qual conta (tenant) está ativa no seu ambiente local. Para isso, você pode executar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc auth tenant current
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse comando retorna informações sobre o tenant autenticado, incluindo um identificador único. Conferir esse dado antes de criar ou alterar recursos é uma boa prática, especialmente se você trabalha com mais de uma conta ou ambiente.&lt;/p&gt;

&lt;p&gt;A partir daí, a CLI passa a ser uma forma objetiva de consultar e operar recursos. Por exemplo, listar zonas de disponibilidade disponíveis ajuda a entender onde seus recursos podem ser criados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc profile availability-zones list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A saída desses comandos geralmente vem em formato estruturado, o que facilita tanto a leitura quanto o uso em scripts. Com o tempo, é comum combinar a CLI com ferramentas de automação, mas mesmo em uso manual ela já traz ganhos importantes: menos cliques, mais previsibilidade e facilidade para repetir operações.&lt;/p&gt;

&lt;p&gt;Mesmo que você ainda prefira o Console, usar a CLI desde cedo para consultas simples e validações ajuda a criar familiaridade com a ferramenta e prepara o terreno para cenários mais avançados, como automação e infraestrutura como código.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como escolher entre Console e CLI
&lt;/h2&gt;

&lt;p&gt;Na prática, a escolha entre Console e CLI não é uma questão de certo ou errado. O Console costuma ser mais indicado para exploração, aprendizado inicial e criações manuais pontuais. A CLI, por outro lado, se destaca quando você precisa repetir tarefas, automatizar fluxos ou garantir que operações sejam executadas sempre da mesma forma.&lt;/p&gt;

&lt;p&gt;No dia a dia, muitos times usam o Console para entender e validar configurações e recorrem à CLI para executar e manter ambientes. Essa combinação oferece equilíbrio entre clareza visual e eficiência operacional.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Antes de pensar em arquiteturas complexas, é essencial compreender a plataforma, as ferramentas disponíveis e a forma correta de interagir com elas. A Magalu Cloud oferece uma interface gráfica acessível e uma CLI poderosa, permitindo que desenvolvedores escolham a abordagem mais adequada para cada momento.&lt;/p&gt;

&lt;p&gt;Dominar essas duas formas de uso desde o início torna a experiência em nuvem mais segura, previsível e eficiente, além de preparar o caminho para soluções mais robustas no futuro.&lt;/p&gt;

</description>
      <category>magalucloud</category>
      <category>cloud</category>
      <category>braziliandevs</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Como criar e escalar workloads Kubernetes com Container Registry na Magalu Cloud</title>
      <dc:creator>Monica Hillman</dc:creator>
      <pubDate>Thu, 18 Dec 2025 21:22:08 +0000</pubDate>
      <link>https://forem.com/magalucloud/como-criar-e-escalar-workloads-kubernetes-com-container-registry-na-magalu-cloud-2lga</link>
      <guid>https://forem.com/magalucloud/como-criar-e-escalar-workloads-kubernetes-com-container-registry-na-magalu-cloud-2lga</guid>
      <description>&lt;p&gt;Imagine um cenário bem comum: seu time mantém uma &lt;strong&gt;API&lt;/strong&gt; (por exemplo, &lt;code&gt;checkout-api&lt;/code&gt;) e um &lt;strong&gt;worker&lt;/strong&gt; de processamento assíncrono (por exemplo, &lt;code&gt;order-worker&lt;/code&gt;). Em dias normais, 2 réplicas da API dão conta. Mas em promoções, campanhas ou picos sazonais, o tráfego sobe rápido, e você precisa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;publicar uma nova versão&lt;/strong&gt; da aplicação com segurança (sem subir binário em VM na mão),&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;garantir que o cluster puxe a imagem correta&lt;/strong&gt; (privada) com controle de acesso,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;aumentar réplicas&lt;/strong&gt; rapidamente para absorver carga,&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;e manter um fluxo simples para repetir isso toda semana (ou todo dia).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;É exatamente aí que entram &lt;strong&gt;Container Registry&lt;/strong&gt; + &lt;strong&gt;Kubernetes&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;o &lt;strong&gt;&lt;a href="https://docs.magalu.cloud/docs/containers-manager/container-registry/overview/?utm_source=devto" rel="noopener noreferrer"&gt;Container Registry&lt;/a&gt;&lt;/strong&gt; vira o “repositório oficial” de imagens da sua aplicação (com versionamento e permissão),&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;o &lt;strong&gt;&lt;a href="https://docs.magalu.cloud/docs/containers-manager/kubernetes/overview/?utm_source=devto" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt;&lt;/strong&gt; executa essas imagens como workloads (Deployments/Pods) e permite &lt;strong&gt;escalar&lt;/strong&gt; o número de réplicas de forma controlada.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Neste artigo, você vai aprender:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Como criar e usar o &lt;strong&gt;Container Registry&lt;/strong&gt; da &lt;a href="https://magalu.cloud/?utm_source=site&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+comunidade&amp;amp;utm_id=artigos+comunidade" rel="noopener noreferrer"&gt;Magalu Cloud&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Como autenticar &lt;strong&gt;Docker&lt;/strong&gt; e &lt;strong&gt;Kubernetes&lt;/strong&gt; no registry&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Como criar workloads Kubernetes usando &lt;strong&gt;imagens privadas&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Como escalar workloads Kubernetes de forma simples&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Pré-requisitos
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Ter uma conta ativa na Magalu Cloud
&lt;/li&gt;
&lt;li&gt;Ter a CLI &lt;code&gt;mgc&lt;/code&gt; instalada e configurada com suas credenciais
&lt;/li&gt;
&lt;li&gt;Ter um cluster Kubernetes criado na Magalu Cloud
&lt;/li&gt;
&lt;li&gt;Ter acesso ao &lt;code&gt;kubectl&lt;/code&gt; configurado para o cluster
&lt;/li&gt;
&lt;li&gt;Ter o Docker (ou ferramenta compatível) instalado localmente
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Visão geral da arquitetura&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;O fluxo básico é o seguinte:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Criar um &lt;strong&gt;Container Registry&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Construir e publicar imagens no registry
&lt;/li&gt;
&lt;li&gt;Executar workloads no Kubernetes usando essas imagens
&lt;/li&gt;
&lt;li&gt;Escalar a aplicação conforme a necessidade&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Esse modelo separa claramente:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;build e versionamento&lt;/strong&gt; (Container Registry)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;execução e escalabilidade&lt;/strong&gt; (Kubernetes)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;O que é o Container Registry&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;O &lt;strong&gt;Container Registry da Magalu Cloud&lt;/strong&gt; é o serviço responsável por armazenar e distribuir imagens de container utilizadas pelas aplicações. Ele funciona como um repositório central, compatível com o padrão &lt;strong&gt;OCI/Docker&lt;/strong&gt;, onde o time publica as imagens geradas durante o processo de build e a partir do qual outros serviços, como o Kubernetes, conseguem consumi-las.&lt;/p&gt;

&lt;p&gt;Na prática, o registry passa a ser a &lt;strong&gt;fonte oficial das imagens da aplicação&lt;/strong&gt;. Cada versão gerada pode ser identificada por uma tag, permitindo controlar exatamente qual versão será executada em cada ambiente. Isso facilita o versionamento, o rollback e a padronização do processo de entrega.&lt;/p&gt;

&lt;p&gt;Além disso, o Container Registry permite manter &lt;strong&gt;imagens privadas&lt;/strong&gt;, garantindo que apenas usuários e serviços autorizados consigam acessá-las. Essa característica é essencial em ambientes de produção, onde o código da aplicação não deve ficar exposto em registries públicos.&lt;/p&gt;

&lt;p&gt;Por fim, o serviço é integrado de forma direta ao &lt;strong&gt;Kubernetes da Magalu Cloud&lt;/strong&gt;, possibilitando que os clusters façam o &lt;em&gt;pull&lt;/em&gt; das imagens privadas de maneira segura e automatizada, sem a necessidade de soluções externas ou configurações complexas.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Criando um Container Registry&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Antes de autenticar o Docker ou publicar imagens, é necessário &lt;strong&gt;criar um registry&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Esse recurso funciona como um &lt;strong&gt;namespace&lt;/strong&gt; para organização das imagens.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Criar o registry via CLI&lt;/strong&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc container-registry registries create &lt;span class="nt"&gt;--name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"meu-registry"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Esse comando cria o registry e o associa à sua conta e região.&lt;/p&gt;
&lt;h3&gt;
  
  
  &lt;strong&gt;Listar registries existentes&lt;/strong&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc container-registry registries list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Se já existir um registry, ele pode ser reutilizado.&lt;/p&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;Endpoints do Container Registry&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;O endpoint depende da região:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Brasil – Sudeste (br-se1)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;container-registry.br-se1.magalu.cloud
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Brasil – Nordeste (br-ne1)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;container-registry.br-ne1.magalu.cloud
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Esse endpoint será usado em:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;docker login&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;docker push&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;manifests do Kubernetes&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  &lt;strong&gt;Autenticação no Container Registry&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;A autenticação utiliza &lt;strong&gt;credenciais específicas do serviço&lt;/strong&gt;, distintas da conta principal da Magalu Cloud.&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;1. Listar credenciais do registry&lt;/strong&gt;
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc container-registry credentials list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Esse comando retorna o usuário e a senha/token do Container Registry.&lt;/p&gt;


&lt;h3&gt;
  
  
  &lt;strong&gt;2. Autenticar o Docker localmente&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Exemplo para &lt;strong&gt;br-se1&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker login https://container-registry.br-se1.magalu.cloud
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Informe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Usuário&lt;/strong&gt; → retornado pela CLI
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Senha&lt;/strong&gt; → token retornado pela CLI&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Após isso, o Docker estará autenticado para push e pull.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Publicando uma imagem no Registry&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Fluxo típico de publicação:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Construir a imagem&lt;/span&gt;
docker build &lt;span class="nt"&gt;-t&lt;/span&gt; meu-app:1.0.0 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="c"&gt;# Marcar a imagem com o registry&lt;/span&gt;
docker tag meu-app:1.0.0 &lt;span class="se"&gt;\&lt;/span&gt;
container-registry.br-se1.magalu.cloud/meu-registry/meu-app:1.0.0
&lt;span class="c"&gt;# Enviar a imagem&lt;/span&gt;
docker push container-registry.br-se1.magalu.cloud/meu-registry/meu-app:1.0.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Boas práticas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;use tags versionadas
&lt;/li&gt;
&lt;li&gt;evite sobrescrever &lt;code&gt;latest&lt;/code&gt; em produção
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Kubernetes na Magalu Cloud&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;O que é o Kubernetes gerenciado&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;O &lt;strong&gt;Kubernetes da Magalu Cloud&lt;/strong&gt; é um serviço gerenciado que fornece um &lt;strong&gt;cluster pronto para execução de workloads containerizados&lt;/strong&gt;, eliminando grande parte da complexidade operacional envolvida na administração de um ambiente Kubernetes.&lt;/p&gt;

&lt;p&gt;Em vez de lidar diretamente com servidores, sistemas operacionais e componentes internos do cluster, o desenvolvedor passa a interagir com o Kubernetes de forma declarativa, por meio de &lt;strong&gt;manifests&lt;/strong&gt; que descrevem como a aplicação deve ser executada.&lt;/p&gt;

&lt;p&gt;A Magalu Cloud é responsável por gerenciar os principais componentes da plataforma, incluindo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plano de controle&lt;/strong&gt;, que engloba serviços como API Server, agendador e controladores do Kubernetes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Infraestrutura subjacente&lt;/strong&gt;, como nós de trabalho, capacidade computacional e disponibilidade do cluster&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Integração com rede&lt;/strong&gt;, permitindo que pods e serviços se comuniquem de forma padronizada dentro do ambiente&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Com isso, o time não precisa se preocupar com tarefas como instalação do Kubernetes, atualizações de componentes, configuração inicial de rede ou manutenção do plano de controle.&lt;/p&gt;

&lt;p&gt;O foco do desenvolvedor fica restrito ao que realmente importa no dia a dia:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;definir &lt;strong&gt;Deployments&lt;/strong&gt;, &lt;strong&gt;Services&lt;/strong&gt; e outros recursos via YAML&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;versionar e atualizar aplicações com segurança&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;escalar workloads conforme a demanda&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;integrar o cluster com serviços da própria plataforma, como o Container Registry&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esse modelo reduz o esforço operacional e torna o uso do Kubernetes mais acessível, especialmente para times que querem adotar containers e orquestração sem assumir a complexidade completa de operar um cluster por conta própria.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Autenticação do Kubernetes no Container Registry&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Para que o Kubernetes consiga baixar imagens privadas, é necessário criar um &lt;strong&gt;Secret do tipo &lt;code&gt;docker-registry&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Criando o Secret&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl create secret docker-registry magalu-registry-secret &lt;span class="se"&gt;\-&lt;/span&gt;&lt;span class="nt"&gt;-docker-server&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;container-registry.br-se1.magalu.cloud &lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="nt"&gt;--docker-username&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;USUARIO_DO_REGISTRY&amp;gt; &lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="nt"&gt;--docker-password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;SENHA_DO_REGISTRY&amp;gt; &lt;span class="se"&gt;\ &lt;/span&gt;&lt;span class="nt"&gt;--docker-email&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;SEU_EMAIL&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Criando um workload Kubernetes&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Exemplo de Deployment&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: apps/v1
kind: Deployment
metadata:
  name: meu-app
spec:
  replicas: 2
  selector:
    matchLabels:
      app: meu-app
  template:
    metadata:
      labels:
        app: meu-app
    spec:
      imagePullSecrets:
        - name: magalu-registry-secret
      containers:
        - name: app
          image: container-registry.br-se1.magalu.cloud/meu-registry/meu-app:1.0.0
          ports:
            - containerPort: 8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aplicando o manifesto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-f&lt;/span&gt; deployment.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  &lt;strong&gt;Escalando workloads Kubernetes&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Escalonamento manual via CLI:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl scale deployment meu-app &lt;span class="nt"&gt;--replicas&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O Kubernetes cria ou remove pods automaticamente.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;Atualizando versões da aplicação&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Para atualizar a aplicação:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Gere uma nova imagem
&lt;/li&gt;
&lt;li&gt;Envie ao registry
&lt;/li&gt;
&lt;li&gt;Atualize a tag no Deployment
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;image: container-registry.br-se1.magalu.cloud/meu-registry/meu-app:1.1.0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ao aplicar o manifesto, o Kubernetes executa um &lt;strong&gt;rolling update&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;A integração entre &lt;strong&gt;Container Registry&lt;/strong&gt; e &lt;strong&gt;Kubernetes&lt;/strong&gt; na Magalu Cloud permite criar aplicações containerizadas de forma &lt;strong&gt;segura, escalável e padronizada&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Com esse modelo, você consegue:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Criar e organizar registries privados
&lt;/li&gt;
&lt;li&gt;Publicar imagens versionadas
&lt;/li&gt;
&lt;li&gt;Executar workloads Kubernetes
&lt;/li&gt;
&lt;li&gt;Escalar aplicações conforme a demanda&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tudo isso utilizando serviços gerenciados, integrados e operando sobre infraestrutura no Brasil.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>magalucloud</category>
      <category>kubernetes</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Como provisionar um cluster PostgreSQL no DBaaS da Magalu Cloud com failover automático</title>
      <dc:creator>Monica Hillman</dc:creator>
      <pubDate>Tue, 16 Dec 2025 21:32:38 +0000</pubDate>
      <link>https://forem.com/magalucloud/como-provisionar-um-cluster-postgresql-no-dbaas-da-magalu-cloud-com-failover-automatico-2n53</link>
      <guid>https://forem.com/magalucloud/como-provisionar-um-cluster-postgresql-no-dbaas-da-magalu-cloud-com-failover-automatico-2n53</guid>
      <description>&lt;p&gt;Bancos de dados relacionais continuam sendo componentes centrais em aplicações modernas. Quando o banco é crítico para o negócio, &lt;strong&gt;alta disponibilidade&lt;/strong&gt; deixa de ser diferencial e passa a ser requisito.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;&lt;a href="https://magalu.cloud/?utm_source=site&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+comunidade&amp;amp;utm_id=artigos+comunidade" rel="noopener noreferrer"&gt;Magalu Cloud&lt;/a&gt;&lt;/strong&gt; oferece o &lt;strong&gt;Database as a Service (DBaaS)&lt;/strong&gt;, que abstrai a complexidade operacional de bancos de dados gerenciados, incluindo replicação e failover automático.&lt;/p&gt;

&lt;p&gt;Neste artigo, você vai aprender:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;O que é um cluster PostgreSQL no DBaaS da Magalu Cloud&lt;/li&gt;
&lt;li&gt;Quando faz sentido usar alta disponibilidade&lt;/li&gt;
&lt;li&gt;Como provisionar um cluster PostgreSQL com failover automático usando a CLI &lt;code&gt;mgc&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  O que é um cluster PostgreSQL
&lt;/h2&gt;

&lt;p&gt;Um &lt;strong&gt;cluster PostgreSQL&lt;/strong&gt; no DBaaS da Magalu Cloud é uma configuração de &lt;strong&gt;alta disponibilidade&lt;/strong&gt;, formada por múltiplos nós do banco de dados:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;1 nó primário&lt;/strong&gt;, responsável por leitura e escrita&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Réplicas em espera (standby)&lt;/strong&gt;, distribuídas em Zonas de Disponibilidade diferentes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Failover automático&lt;/strong&gt;, que promove uma réplica a primária em caso de falha&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As alterações realizadas no nó primário são replicadas continuamente para as réplicas, reduzindo o tempo de indisponibilidade e o risco de perda de dados.&lt;/p&gt;

&lt;p&gt;A distribuição entre &lt;strong&gt;Zonas de Disponibilidade (AZs)&lt;/strong&gt; garante maior resiliência dentro de uma mesma região.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quando usar um cluster PostgreSQL
&lt;/h2&gt;

&lt;p&gt;Clusters PostgreSQL com failover automático são indicados quando a aplicação:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Não pode tolerar indisponibilidade prolongada&lt;/li&gt;
&lt;li&gt;Precisa de replicação contínua de dados&lt;/li&gt;
&lt;li&gt;Depende de alta disponibilidade para o negócio&lt;/li&gt;
&lt;li&gt;Quer reduzir esforço operacional com gerenciamento de banco&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Provisionamento via CLI (&lt;code&gt;mgc&lt;/code&gt;)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Pré-requisitos
&lt;/h3&gt;

&lt;p&gt;Antes de começar, você precisa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ter a CLI &lt;strong&gt;&lt;code&gt;mgc&lt;/code&gt;&lt;/strong&gt; instalada e configurada&lt;/li&gt;
&lt;li&gt;Ter acesso à região desejada&lt;/li&gt;
&lt;li&gt;Identificar a engine PostgreSQL e o tipo de instância adequado&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1. Listar engines disponíveis
&lt;/h2&gt;

&lt;p&gt;Primeiro, identifique a engine PostgreSQL disponível:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc dbaas engines list &lt;span class="nt"&gt;--status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ACTIVE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Anote o &lt;code&gt;id&lt;/code&gt; correspondente ao PostgreSQL (por exemplo, PostgreSQL 16).&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Listar tipos de instância compatíveis
&lt;/h2&gt;

&lt;p&gt;Em seguida, liste os tipos de instância disponíveis para essa engine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc dbaas instance-types list &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--engine-id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"SEU_ENGINE_ID"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--status&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ACTIVE
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cada tipo de instância define CPU e memória de &lt;strong&gt;cada nó do banco&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Entendendo o &lt;code&gt;compatible_product&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;No resultado, observe o campo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;SINGLE_INSTANCE&lt;/code&gt; - pode ser usado apenas para instâncias simples&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;CLUSTER&lt;/code&gt; - pode ser usado apenas para clusters com alta disponibilidade&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Esse campo é &lt;strong&gt;informativo&lt;/strong&gt; e serve para orientar a escolha correta do &lt;code&gt;instance-type-id&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Criar um cluster PostgreSQL com failover automático
&lt;/h2&gt;

&lt;p&gt;A criação do cluster é feita com o comando &lt;strong&gt;&lt;code&gt;mgc dbaas clusters create&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Diferente de uma instância simples, o cluster já nasce com múltiplos nós e com alta disponibilidade configurada desde o início.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Apenas tipos de instância com &lt;code&gt;compatible_product: CLUSTER&lt;/code&gt; podem ser utilizados neste comando.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Exemplo de criação de cluster
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc dbaas clusters create &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"meu-postgres-cluster"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"admin"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--password&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"SenhaSegura!"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--engine-id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ID_DA_ENGINE_POSTGRESQL"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--instance-type-id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ID_DO_INSTANCE_TYPE_CLUSTER"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--volume&lt;/span&gt;.size&lt;span class="o"&gt;=&lt;/span&gt;100 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--volume&lt;/span&gt;.type&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"CLOUD_NVME20K"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Principais parâmetros
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;--name&lt;/code&gt;&lt;br&gt;
Nome do cluster PostgreSQL&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;--user&lt;/code&gt;&lt;br&gt;
Usuário administrador do banco&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;--password&lt;/code&gt;&lt;br&gt;
Senha do usuário administrador&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;--engine-id&lt;/code&gt;&lt;br&gt;
Identificador da engine PostgreSQL&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;--instance-type-id&lt;/code&gt;&lt;br&gt;
Tipo de instância compatível com &lt;strong&gt;CLUSTER&lt;/strong&gt;, que define CPU e memória de cada nó&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;--volume.size&lt;/code&gt;&lt;br&gt;
Tamanho do volume de dados em GiB&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;--volume.type&lt;/code&gt;&lt;br&gt;
Tipo de armazenamento gerenciado do DBaaS - Você pode verificar os valores na &lt;a href="https://docs.magalu.cloud/docs/dbaas/postgres/create-manage/create-instance/?utm_source=devto" rel="noopener noreferrer"&gt;documentação&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Após a execução, o cluster entra em processo de provisionamento, o que pode levar alguns minutos.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Acompanhar o status do cluster e das instâncias
&lt;/h2&gt;

&lt;p&gt;Para acompanhar o status do cluster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc dbaas clusters get &lt;span class="s2"&gt;"ID_DO_CLUSTER"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Após a criação, você pode listar os nós do cluster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc dbaas instances list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E obter detalhes de um nó específico:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc dbaas instances get &lt;span class="s2"&gt;"ID_DA_INSTANCIA"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Failover automático na prática
&lt;/h2&gt;

&lt;p&gt;Quando o cluster está ativo, o DBaaS da Magalu Cloud monitora continuamente o nó primário. Em caso de falha:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uma réplica é promovida automaticamente a primária&lt;/li&gt;
&lt;li&gt;O endpoint do cluster permanece o mesmo&lt;/li&gt;
&lt;li&gt;A aplicação precisa apenas lidar com reconexões&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Todo o processo ocorre sem intervenção manual.&lt;/p&gt;




&lt;h2&gt;
  
  
  Boas práticas
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Utilize senhas fortes para usuários do banco&lt;/li&gt;
&lt;li&gt;Escolha tipos de instância compatíveis com a carga da aplicação&lt;/li&gt;
&lt;li&gt;Monitore o status das instâncias via CLI&lt;/li&gt;
&lt;li&gt;Garanta que a aplicação lide bem com reconexões&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Provisionar um cluster PostgreSQL com failover automático no DBaaS da Magalu Cloud permite unir &lt;strong&gt;simplicidade operacional&lt;/strong&gt; e &lt;strong&gt;alta disponibilidade&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Com a CLI &lt;code&gt;mgc&lt;/code&gt;, você consegue:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identificar engines e tipos de instância&lt;/li&gt;
&lt;li&gt;Criar clusters PostgreSQL com alta disponibilidade desde a criação&lt;/li&gt;
&lt;li&gt;Contar com failover automático gerenciado pela plataforma&lt;/li&gt;
&lt;li&gt;Monitorar o estado do banco de dados de forma centralizada&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Isso reduz a complexidade operacional e permite que o time foque no desenvolvimento da aplicação, aproveitando a infraestrutura gerenciada da &lt;a href="https://magalu.cloud/?utm_source=site&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+comunidade&amp;amp;utm_id=artigos+comunidade" rel="noopener noreferrer"&gt;Magalu Cloud&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/x3sW2stCHgI"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

</description>
      <category>magalucloud</category>
      <category>cloud</category>
      <category>braziliandevs</category>
      <category>postgres</category>
    </item>
    <item>
      <title>Como anexar um volume de Block Storage à sua VM Linux na Magalu Cloud (via CLI)</title>
      <dc:creator>Monica Hillman</dc:creator>
      <pubDate>Tue, 09 Dec 2025 18:53:01 +0000</pubDate>
      <link>https://forem.com/magalucloud/como-anexar-um-volume-de-block-storage-a-sua-vm-linux-na-magalu-cloud-via-cli-37fl</link>
      <guid>https://forem.com/magalucloud/como-anexar-um-volume-de-block-storage-a-sua-vm-linux-na-magalu-cloud-via-cli-37fl</guid>
      <description>&lt;p&gt;Quando a gente começa a usar nuvem, é comum pensar na máquina virtual como “o computador inteiro”: CPU, memória e aquele disco onde o sistema operacional está instalado. Só que esse disco de sistema, em muitos provedores, é efêmero: se você recriar a VM, trocar o tipo, apagar a instância ou tiver um incidente, aquele armazenamento pode ir embora junto. Para ambientes de teste isso pode até ser tolerável. Para qualquer coisa que envolva dado importante, não.&lt;/p&gt;

&lt;p&gt;É justamente nesse ponto que entra o Block Storage.&lt;/p&gt;

&lt;p&gt;De forma conceitual, Block Storage é um tipo de armazenamento em que a nuvem entrega para você um disco em blocos, exposto à VM como se fosse um segundo HD ou SSD. Esse disco não depende da “vida” da máquina virtual: ele é um recurso separado, com identidade própria, que pode ser criado, anexado, desanexado e reaproveitado em outras instâncias. Você continua administrando o sistema de arquivos (ext4, XFS, etc.) dentro do sistema operacional, mas a infraestrutura de desempenho, replicação e disponibilidade é responsabilidade da nuvem.&lt;/p&gt;

&lt;p&gt;Na &lt;a href="https://magalu.cloud/?utm_source=site&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+comunidade&amp;amp;utm_id=artigos+comunidade" rel="noopener noreferrer"&gt;Magalu Cloud&lt;/a&gt;, esses volumes são oferecidos em perfis pensados para diferentes cargas, com base em NVMe e latência baixa, o que os torna apropriados para bancos de dados, sistemas de arquivos compartilhados, aplicações que fazem muitas leituras e escritas e até para separar melhor responsabilidades: um volume só para banco, outro para uploads de usuários, outro para logs de auditoria, e assim por diante.&lt;/p&gt;

&lt;p&gt;Os casos de uso aparecem rápido:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;um banco de dados que não pode sumir se você precisar recriar a VM;&lt;/li&gt;
&lt;li&gt;um diretório de uploads de um e-commerce que precisa crescer sem que você mude toda a máquina;&lt;/li&gt;
&lt;li&gt;um conjunto de logs de aplicação que você conserva em disco resiliente para análise posterior;&lt;/li&gt;
&lt;li&gt;volumes dedicados a ambientes de homologação, criados a partir de snapshots de produção.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O desafio prático que este artigo resolve é simples e muito real:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Tenho uma VM Linux na Magalu Cloud e quero adicionar um disco persistente, separado do sistema, usando a CLI.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A ideia é caminhar desde o conceito até o comando real, mostrando como criar o volume, anexar à VM e prepará-lo no Linux para uso cotidiano.&lt;/p&gt;




&lt;h2&gt;
  
  
  Criando e usando um volume de Block Storage na Magalu Cloud
&lt;/h2&gt;

&lt;p&gt;Vamos supor o seguinte cenário: você já criou uma VM Linux na Magalu Cloud, instalou a CLI &lt;code&gt;mgc&lt;/code&gt;, autenticou na sua conta e agora quer um novo disco de 10 GiB para armazenar dados da aplicação em produção ou em teste.&lt;/p&gt;

&lt;p&gt;Antes de escrever qualquer comando, vale reforçar uma regra de arquitetura: &lt;strong&gt;volume e VM precisam estar na mesma região e na mesma Zona de Disponibilidade (AZ)&lt;/strong&gt;. Isso existe porque o volume é fisicamente associado a uma infraestrutura específica; tentar anexar a uma VM em outra zona simplesmente não faz sentido do ponto de vista de rede e desempenho.&lt;/p&gt;

&lt;p&gt;Com isso em mente, o fluxo natural é:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;criar o volume de Block Storage na região/AZ correta;&lt;/li&gt;
&lt;li&gt;anexar esse volume à VM;&lt;/li&gt;
&lt;li&gt;entrar na VM, formatar o dispositivo e montar em um diretório;&lt;/li&gt;
&lt;li&gt;tornar a montagem persistente entre reboots.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Criando o volume pela CLI
&lt;/h3&gt;

&lt;p&gt;A criação do volume pela CLI é direta. Você descreve o tamanho, o nome e o tipo de desempenho desejado. Um exemplo típico seria:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc block-storage volumes create   &lt;span class="nt"&gt;--name&lt;/span&gt; volume-app-prod   &lt;span class="nt"&gt;--size&lt;/span&gt; 10   &lt;span class="nt"&gt;--type&lt;/span&gt;.name cloud_nvme1k
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O &lt;code&gt;--name&lt;/code&gt; identifica o volume dentro da região; é um rótulo lógico, útil para saber, por exemplo, que esse é o volume de dados da aplicação de produção. O &lt;code&gt;--size&lt;/code&gt; define o tamanho em gibibytes (GiB) podendo ser 10, 20, 50, 100, e assim por diante, dentro dos limites que a Magalu Cloud impõe para aquele tipo de volume. Já &lt;code&gt;--type.name&lt;/code&gt; aponta para o perfil de IOPS/latência. Perfis baseados em NVMe costumam ser adequados para cargas que fazem muito I/O, como bancos de dados e aplicações mais intensas.&lt;/p&gt;

&lt;p&gt;Depois da criação, o volume nasce em um estado equivalente a “livre”, pronto para ser anexado. Você pode conferir isso com um simples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc block-storage volumes list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Na listagem, o volume recém-criado aparece geralmente com o status &lt;code&gt;available&lt;/code&gt;. Enquanto ele estiver assim, nenhuma VM está usando esse recurso.&lt;/p&gt;

&lt;h3&gt;
  
  
  Anexando o volume à máquina virtual
&lt;/h3&gt;

&lt;p&gt;O passo seguinte é anexar à máquina virtual. Conceitualmente, é como plugar um SSD extra em um servidor físico: a VM passa a “enxergar” um novo disco. Para que isso funcione, a VM precisa estar em um estado válido (ligada ou desligada) e compartilhar a mesma AZ do volume. Em muitas arquiteturas, é mais seguro realizar esse tipo de operação com a instância desligada, principalmente se você estiver mexendo em ambientes sensíveis, ainda que a plataforma permita anexar com a VM em execução.&lt;/p&gt;

&lt;p&gt;Com o ID da VM e do volume em mãos, o comando é semelhante a:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc block-storage volumes attach   &lt;span class="nt"&gt;--id&lt;/span&gt; vol-1234567890abcdef   &lt;span class="nt"&gt;--virtual-machine-id&lt;/span&gt; vm-abcdef1234567890
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Depois de alguns instantes, o volume deixa o estado &lt;code&gt;available&lt;/code&gt; e passa para algo como &lt;code&gt;in-use&lt;/code&gt;, indicando que agora existe uma relação concreta com uma máquina virtual.&lt;/p&gt;

&lt;h3&gt;
  
  
  Preparando o volume dentro da VM
&lt;/h3&gt;

&lt;p&gt;A partir desse ponto, a “bola” passa para o sistema operacional. Dentro da VM, esse volume aparece como um novo dispositivo de bloco, por exemplo &lt;code&gt;/dev/vdb&lt;/code&gt;. Para enxergar isso, você pode usar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;lsblk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A saída costuma mostrar o disco de sistema como &lt;code&gt;vda&lt;/code&gt; com partições e pontos de montagem já preenchidos, e o novo volume como &lt;code&gt;vdb&lt;/code&gt;, ainda sem partição e sem sistema de arquivos. É aqui que entra a parte de teoria de armazenamento que desenvolvedores às vezes pulam: um volume de Block Storage é só um conjunto de blocos; cabe a você criar o sistema de arquivos por cima dele.&lt;/p&gt;

&lt;p&gt;Se o volume é novo e não contém dados, faz sentido criar um sistema de arquivos moderno como &lt;code&gt;ext4&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;mkfs.ext4 /dev/vdb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse comando grava estruturas internas no volume, preparando-o para guardar arquivos, diretórios, permissões e tudo mais que o kernel vai gerenciar. Caso o volume tenha sido criado a partir de um snapshot, a situação é outra: nesses casos, ele já traz um sistema de arquivos e dados, então &lt;strong&gt;não&lt;/strong&gt; se deve formatar novamente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Montando o volume em um diretório
&lt;/h3&gt;

&lt;p&gt;Com o sistema de arquivos pronto, o próximo passo é escolher um ponto de montagem. Um caminho clássico para dados de aplicação é algo como &lt;code&gt;/mnt/data&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo mkdir&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; /mnt/data
&lt;span class="nb"&gt;sudo &lt;/span&gt;mount /dev/vdb /mnt/data
&lt;span class="nb"&gt;df&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt; | &lt;span class="nb"&gt;grep&lt;/span&gt; /mnt/data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A partir desse momento, qualquer escrita em &lt;code&gt;/mnt/data&lt;/code&gt; é uma escrita no volume de Block Storage. É aqui que você pode configurar o banco de dados para usar um diretório dentro desse caminho, apontar uploads de usuário, logs de auditoria ou o que fizer sentido para a sua arquitetura.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tornando a montagem persistente com &lt;code&gt;/etc/fstab&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;No entanto, essa montagem ainda é temporária: se você reiniciar a VM, o Linux não vai remontar automaticamente o volume. Para que isso aconteça, entra em cena o arquivo &lt;code&gt;/etc/fstab&lt;/code&gt;, onde ficam descritas as montagens permanentes.&lt;/p&gt;

&lt;p&gt;Uma prática recomendada é montar não pelo nome &lt;code&gt;/dev/vdb&lt;/code&gt;, mas pelo UUID do sistema de arquivos, que é estável mesmo se a ordem de dispositivos mudar. Você descobre o UUID com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;blkid /dev/vdb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com a informação em mãos, edita o &lt;code&gt;/etc/fstab&lt;/code&gt; com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/fstab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E adiciona uma linha descrevendo a montagem, algo nesta linha:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;UUID=abcd-1234-...   /mnt/data   ext4   defaults   0   0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Antes de reiniciar, é sempre prudente testar a configuração desmontando e pedindo para o sistema montar tudo de novo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;umount /mnt/data
&lt;span class="nb"&gt;sudo &lt;/span&gt;mount &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se não houver mensagens de erro, o Linux aceitou a sintaxe e vai remontar o volume automaticamente na próxima inicialização. Assim, você garante que o diretório de dados da sua aplicação volta exatamente ao mesmo lugar, mesmo que a VM seja restartada diversas vezes.&lt;/p&gt;

&lt;p&gt;Do ponto de vista conceitual, a partir daqui você já está usufruindo das propriedades do Block Storage: o disco de sistema continua efêmero (caso deseje), mas os dados críticos residem em um volume persistente, que pode ser dimensionado, copiado via snapshot ou até reaproveitado em outra VM, dependendo da necessidade.&lt;/p&gt;

&lt;h3&gt;
  
  
  Gerenciando o ciclo de vida: resize, retype e snapshots
&lt;/h3&gt;

&lt;p&gt;Além dessa trilha básica, a CLI também oferece operações de ciclo de vida interessantes. É possível, por exemplo, aumentar o tamanho do volume (sempre para cima) quando o espaço se aproximar do limite, ou alterar o tipo de desempenho (“retype”) para um perfil com mais IOPS conforme a carga evolui. Outra operação comum é a criação de snapshots, que são cópias pontuais do volume: a partir de um snapshot, você consegue gerar um novo volume idêntico para testes, homologação ou recuperação de desastre, reduzindo impacto na produção.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Block Storage é um daqueles conceitos que parecem meramente “infra” à primeira vista, mas que definem a diferença entre um ambiente frágil e uma arquitetura preparada para crescer. Ao separar o disco de dados da vida da máquina virtual, você passa a tratar armazenamento como um recurso de primeira classe: com identidade própria, políticas de backup, perfis de desempenho e possibilidades de migração.&lt;/p&gt;

&lt;p&gt;Ao longo do texto, vimos como esse modelo funciona na prática na Magalu Cloud: um volume NVMe criado via CLI, anexado a uma VM, formatado e montado em um diretório específico, pronto para receber dados de aplicação. Esse caminho, embora simples, libera algumas boas práticas importantes: não guardar banco de dados no disco de sistema, isolar uploads de usuários, manter logs críticos em armazenamento persistente e poder, se necessário, recriar a VM sem derrubar o estado da aplicação.&lt;/p&gt;

&lt;p&gt;Na Magalu Cloud, a ideia é justamente oferecer essa base de infraestrutura com cara de nuvem moderna, mas com vantagens muito concretas para o dia a dia de quem desenvolve no Brasil: cobrança em reais, foco em soberania de dados, &lt;a href="https://docs.magalu.cloud/docs/docs/?utm_source=site&amp;amp;utm_medium=organico&amp;amp;utm_campaign=artigos+comunidade+documentacao&amp;amp;utm_id=artigos+comunidade+documentacao" rel="noopener noreferrer"&gt;documentação em português&lt;/a&gt; e integração com o ecossistema Magalu. Se você ainda não experimentou, vale criar uma VM de laboratório, seguir o passo a passo deste artigo e começar a construir suas próprias combinações de volumes, snapshots e ambientes.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>magalucloud</category>
      <category>braziliandevs</category>
    </item>
    <item>
      <title>Como criar e gerenciar seu primeiro banco PostgreSQL na Magalu Cloud</title>
      <dc:creator>Monica Hillman</dc:creator>
      <pubDate>Wed, 26 Nov 2025 16:09:42 +0000</pubDate>
      <link>https://forem.com/magalucloud/como-criar-e-gerenciar-seu-primeiro-banco-postgresql-na-magalu-cloud-1k40</link>
      <guid>https://forem.com/magalucloud/como-criar-e-gerenciar-seu-primeiro-banco-postgresql-na-magalu-cloud-1k40</guid>
      <description>&lt;p&gt;No desenvolvimento de aplicações modernas, a escolha da infraestrutura de dados é tão crítica quanto a escolha da linguagem de programação. Este artigo explora o uso do &lt;strong&gt;PostgreSQL&lt;/strong&gt; no ambiente gerenciado (DBaaS) da &lt;strong&gt;Magalu Cloud&lt;/strong&gt;, detalhando os benefícios do modelo "as a Service", o que é o PostgreSQL e um tutorial prático de implementação.&lt;/p&gt;




&lt;h2&gt;
  
  
  1. Por que adotar Database as a Service (DBaaS)?
&lt;/h2&gt;

&lt;p&gt;Antes de entrarmos em comandos e configurações, é essencial entender a mudança de paradigma. Antigamente, gerenciar um banco de dados significava comprar hardware, instalar o sistema operacional, configurar o banco, gerenciar patches de segurança e configurar backups manuais.&lt;/p&gt;

&lt;p&gt;O modelo &lt;strong&gt;DBaaS (Database as a Service)&lt;/strong&gt; remove o "trabalho pesado". Ao optar pelo DBaaS da Magalu Cloud, você transfere a responsabilidade da infraestrutura física e da manutenção básica para o provedor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Principais vantagens:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sua equipe foca em otimizar &lt;em&gt;queries&lt;/em&gt; e modelagem de dados, não em atualizar o sistema operacional do servidor.&lt;/li&gt;
&lt;li&gt;Aumentar recursos (CPU, RAM, Disco) é feito com poucos cliques ou comandos, sem necessidade de migrações físicas complexas.&lt;/li&gt;
&lt;li&gt;Recursos nativos de backup (snapshots) e proteção de rede simplificam a conformidade e a recuperação de desastres.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. Por que PostgreSQL?
&lt;/h2&gt;

&lt;p&gt;O PostgreSQL é amplamente considerado o banco de dados relacional &lt;em&gt;open-source&lt;/em&gt; mais avançado do mundo. Ele não é apenas um depósito de dados, mas uma plataforma robusta de processamento.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. PostgreSQL na Magalu Cloud
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Fase 1: Planejamento e Criação
&lt;/h3&gt;

&lt;p&gt;Selecione a versão do banco de dados desejada:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw1njn97lyhrvgttavz3r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw1njn97lyhrvgttavz3r.png" alt=" " width="341" height="192"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ao criar sua instância, você deve tomar decisões de arquitetura baseadas no custo e performance.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Escolha do Tipo de Instância:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Balanced Value (BV):&lt;/strong&gt; Ideal para ambientes de desenvolvimento, testes ou aplicações com tráfego moderado. Custo reduzido.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dedicated Performance (DP):&lt;/strong&gt; CPUs dedicadas para ambientes de produção que exigem consistência e alto rendimento.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ms95ktwkewxuetdojm8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ms95ktwkewxuetdojm8.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Armazenamento:&lt;/strong&gt; Escolha entre &lt;strong&gt;10 GiB e 10 TiB&lt;/strong&gt; (SSD), definindo o IOPS necessário para sua carga de trabalho.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwl3b4neihmg0v5qv2nli.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwl3b4neihmg0v5qv2nli.png" alt=" " width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Escolha um ID e senha de acesso.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu633gdu6dwglwl715pok.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu633gdu6dwglwl715pok.png" alt=" " width="800" height="178"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Determine o horário que deseja para acontecer a sua cópia de segurança.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2s747vsne1ew0vkc6ux.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw2s747vsne1ew0vkc6ux.png" alt=" " width="800" height="171"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Atenção:&lt;/strong&gt; O banco é criado com um &lt;strong&gt;IP Privado&lt;/strong&gt;. Ele só é acessível dentro da rede da Magalu Cloud. Você &lt;strong&gt;não&lt;/strong&gt; conseguirá acessá-lo diretamente do seu computador local sem uma "ponte".&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Fase 2: Conexão (O padrão Jump Host)
&lt;/h3&gt;

&lt;p&gt;Como o banco reside em uma rede privada para segurança, você precisa de uma Máquina Virtual (VM) na mesma região (ex: &lt;code&gt;br-se1&lt;/code&gt;) para atuar como intermediário.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Passo a passo:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Acesse sua VM (Ubuntu/Debian) via SSH.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Instale o cliente PostgreSQL:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;postgresql-client
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Conecte-se à instância gerenciada usando as credenciais fornecidas na criação:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;psql &lt;span class="nt"&gt;-h&lt;/span&gt; &lt;span class="s2"&gt;"IP_PRIVADO_DO_BANCO"&lt;/span&gt; &lt;span class="nt"&gt;-U&lt;/span&gt; &lt;span class="s2"&gt;"usuario_admin"&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"postgres"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Uma vez logado, crie seu banco de produção:&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;minha_loja&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="k"&gt;c&lt;/span&gt; &lt;span class="n"&gt;minha_loja&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Fase 3: Gerenciamento via CLI (&lt;code&gt;mgc&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;A Magalu Cloud oferece uma ferramenta de linha de comando poderosa (&lt;code&gt;mgc&lt;/code&gt;). Aqui estão os comandos essenciais para o dia a dia.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Listar e Verificar Status:&lt;/strong&gt;&lt;br&gt;
Para ver o IP, versão e se o banco está "Ligado":&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc dbaas instances list
&lt;span class="c"&gt;# ou para detalhes específicos&lt;/span&gt;
mgc dbaas instances get &lt;span class="s2"&gt;"instance-id"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Escalar Recursos (Resize):&lt;/strong&gt;&lt;br&gt;
Precisa de mais poder? Você pode aumentar a máquina ou o disco (o disco só pode ser aumentado, nunca diminuído).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Alterar tipo de instância&lt;/span&gt;
mgc dbaas instances resize &lt;span class="nt"&gt;--instance-type-id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"novo-id-dp"&lt;/span&gt;

&lt;span class="c"&gt;# Aumentar disco para 50GB&lt;/span&gt;
mgc dbaas instances resize &lt;span class="nt"&gt;--volume&lt;/span&gt;.size&lt;span class="o"&gt;=&lt;/span&gt;50
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Gerenciamento de Energia:&lt;/strong&gt;&lt;br&gt;
Vai fazer manutenção ou quer economizar em ambiente de teste durante a noite?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc dbaas instances stop &lt;span class="s2"&gt;"instance-id"&lt;/span&gt;  &lt;span class="c"&gt;# Desligar&lt;/span&gt;
mgc dbaas instances start &lt;span class="s2"&gt;"instance-id"&lt;/span&gt; &lt;span class="c"&gt;# Ligar&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Fase 4: Segurança e monitoramento
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Snapshots e Backups:&lt;/strong&gt;&lt;br&gt;
Configure snapshots automáticos na criação (retenção de 1 a 30 dias). Para criar um manual antes de uma grande mudança:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc dbaas snapshots instances-snapshots create &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--instance-id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"id"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"snapshot-pre-deploy"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Logs em Tempo Real:&lt;/strong&gt;&lt;br&gt;
A Magalu Cloud faz o streaming de logs na porta &lt;code&gt;5140&lt;/code&gt;. De dentro da sua VM, você pode monitorar o que está acontecendo no banco:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ncat IP_DO_DBAAS 5140
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Monitoramento Visual:&lt;/strong&gt;&lt;br&gt;
Para métricas avançadas, o ambiente suporta integração com &lt;strong&gt;Prometheus&lt;/strong&gt; (porta 9090) e &lt;strong&gt;Grafana&lt;/strong&gt; (porta 3000). Certifique-se de liberar essas portas no &lt;em&gt;Security Group&lt;/em&gt; da sua VM de monitoramento para visualizar consumo de CPU, memória e conexões ativas.&lt;/p&gt;




&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Utilizar o PostgreSQL na Magalu Cloud une a flexibilidade do melhor banco relacional do mercado com a segurança e facilidade de uma infraestrutura gerenciada brasileira. Seja para iniciar um MVP ou migrar um legado, o ambiente oferece as ferramentas de CLI e Console necessárias para escalar com confiança.&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>magalucloud</category>
      <category>postgres</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
