<?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: Monica Hillman</title>
    <description>The latest articles on Forem by Monica Hillman (@monicahillman).</description>
    <link>https://forem.com/monicahillman</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%2Fuser%2Fprofile_image%2F663091%2F73038c0b-b4ae-47cd-8b36-52702b73e524.png</url>
      <title>Forem: Monica Hillman</title>
      <link>https://forem.com/monicahillman</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/monicahillman"/>
    <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>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>
    <item>
      <title>Hospedando um site estático com Nginx na Magalu Cloud</title>
      <dc:creator>Monica Hillman</dc:creator>
      <pubDate>Tue, 23 Sep 2025 14:33:01 +0000</pubDate>
      <link>https://forem.com/magalucloud/hospedando-um-site-estatico-com-nginx-na-magalu-cloud-4g7c</link>
      <guid>https://forem.com/magalucloud/hospedando-um-site-estatico-com-nginx-na-magalu-cloud-4g7c</guid>
      <description>&lt;p&gt;Hospedar um site estático pode ser um processo que exige atenção a detalhes, mas com as ferramentas certas, a jornada se torna mais direta. Neste guia, vamos explorar como usar uma Máquina Virtual (VM) da Magalu Cloud e o Nginx, um servidor web potente, para implantar seu projeto e deixá-lo disponível para o público.&lt;/p&gt;

&lt;p&gt;Este guia assume que você já tem sua conta na Magalu Cloud e os arquivos do seu projeto prontos em seu computador.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Acessando e Preparando a VM&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Comece criando sua VM no painel da Magalu Cloud, garantindo que você adicione sua chave SSH. Para se conectar à instância, use o comando abaixo 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;ssh usuario_da_vm@&amp;lt;IP_PÚBLICO_DA_SUA_VM&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Instalando o Nginx&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Uma vez conectado à VM, o próximo passo é instalar o Nginx, que servirá os arquivos do seu projeto.&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;# Atualiza a lista de pacotes&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update

&lt;span class="c"&gt;# Instala o Nginx&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;nginx &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nginx (pronuncia-se "engine-ex") é um software de código aberto para servidor web. Mas ele é muito mais que isso: é também um proxy reverso, balanceador de carga e proxy de e-mail.&lt;/p&gt;

&lt;p&gt;Em termos simples, o Nginx é o programa que pega os arquivos do seu site (como HTML, CSS e JavaScript) e os entrega para os navegadores de quem acessa o seu endereço, seja um IP ou um domínio. Ele faz esse trabalho de forma extremamente rápida e eficiente, especialmente com sites estáticos, que são puramente arquivos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Transferindo os arquivos&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A seguir, copie os arquivos do seu computador para a VM. Uma boa prática é transferi-los para o seu diretório de usuário e depois movê-los para o diretório final.&lt;/p&gt;

&lt;p&gt;No seu terminal local, envie os arquivos para o diretório inicial (~/) da sua VM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;scp &lt;span class="nt"&gt;-r&lt;/span&gt; ./meu_projeto/&lt;span class="k"&gt;*&lt;/span&gt; ubuntu@&amp;lt;IP_PÚBLICO_DA_SUA_VM&amp;gt;:~/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O comando scp (secure copy) é uma ferramenta de linha de comando no Linux, macOS e outros sistemas Unix-like que permite a você copiar arquivos de forma segura entre computadores conectados a uma rede.&lt;/p&gt;

&lt;p&gt;A grande vantagem do scp é que ele usa o protocolo SSH (Secure Shell) para a transferência. Isso significa que a comunicação é criptografada, garantindo que seus dados não sejam interceptados.&lt;/p&gt;

&lt;p&gt;Agora, no terminal da VM, crie um diretório para o seu projeto e mova os arquivos para o local apropriado com o comando sudo.&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; /var/www/meu_projeto
&lt;span class="nb"&gt;sudo mv&lt;/span&gt; ~/index.html /var/www/meu_projeto/
&lt;span class="nb"&gt;sudo mv&lt;/span&gt; ~/styles.css /var/www/meu_projeto/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. Configurando o Nginx&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O Nginx precisa de instruções para encontrar e servir seus arquivos. Para isso, vamos criar um arquivo de configuração para o seu site.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Crie o arquivo de configuração
&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="nb"&gt;sudo &lt;/span&gt;nano /etc/nginx/sites-available/meu_projeto
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Cole o seguinte conteúdo
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;server &lt;span class="o"&gt;{&lt;/span&gt;
    listen 80&lt;span class="p"&gt;;&lt;/span&gt;
    server_name &amp;lt;IP_PÚBLICO_DA_SUA_VM&amp;gt;&lt;span class="p"&gt;;&lt;/span&gt;

    root /var/www/meu_projeto&lt;span class="p"&gt;;&lt;/span&gt;
    index index.html&lt;span class="p"&gt;;&lt;/span&gt;

    location / &lt;span class="o"&gt;{&lt;/span&gt;
        try_files &lt;span class="nv"&gt;$uri&lt;/span&gt; &lt;span class="nv"&gt;$uri&lt;/span&gt;/ &lt;span class="o"&gt;=&lt;/span&gt;404&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Substitua  pelo IP da sua VM. Salve e saia do editor.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ative a configuração
&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="nb"&gt;sudo ln&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; /etc/nginx/sites-available/meu_projeto /etc/nginx/sites-enabled/
&lt;span class="nb"&gt;sudo rm&lt;/span&gt; /etc/nginx/sites-enabled/default
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. Verificando e subindo o site&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Para finalizar, valide a configuração do Nginx e reinicie o serviço para que as mudanças entrem em vigor.&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;nginx &lt;span class="nt"&gt;-t&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Seu site agora está disponível para visualização pelo IP público da sua VM.&lt;/p&gt;

&lt;p&gt;Ao seguir este guia, você concluiu a implantação do seu site estático na Magalu Cloud. Este processo não apenas coloca seu projeto no ar, mas também oferece uma base sólida para futuros desenvolvimentos.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>cloud</category>
      <category>magalucloud</category>
    </item>
    <item>
      <title>Publicando sites estáticos com Object Storage na Magalu Cloud</title>
      <dc:creator>Monica Hillman</dc:creator>
      <pubDate>Tue, 26 Aug 2025 17:39:23 +0000</pubDate>
      <link>https://forem.com/magalucloud/publicando-sites-estaticos-com-object-storage-na-magalu-cloud-2fib</link>
      <guid>https://forem.com/magalucloud/publicando-sites-estaticos-com-object-storage-na-magalu-cloud-2fib</guid>
      <description>&lt;p&gt;Hospedar um site estático pode parecer algo que exige servidores, serviços de hospedagem ou configurações complexas. No entanto, para sites simples como portfólios, páginas institucionais ou protótipos de front-end, existe uma alternativa mais direta e econômica: usar um serviço de &lt;strong&gt;Object Storage&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O Object Storage é um tipo de armazenamento em nuvem projetado para guardar arquivos como objetos, acessíveis via URL. Cada objeto pode ser acessado individualmente, o que o torna ideal para publicar conteúdos estáticos. A &lt;a href="https://www.magalu.cloud/" rel="noopener noreferrer"&gt;Magalu Cloud&lt;/a&gt; oferece esse serviço com suporte a controle de acesso, alta disponibilidade e integração via linha de comando.&lt;/p&gt;

&lt;p&gt;Este tutorial ensina como usar o Object Storage da Magalu Cloud para hospedar um site estático.&lt;/p&gt;




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

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Conta na Magalu Cloud&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;mgc-cli&lt;/code&gt; instalado e configurado&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Passo a Passo
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Faça login na CLI
&lt;/h3&gt;



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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Crie uma API Key
&lt;/h3&gt;

&lt;p&gt;Antes de qualquer operação, é necessário autenticar a CLI com uma chave de API. Crie e configure uma API Key com os seguintes comandos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc object-storage api-key create chave-para-site
mgc object-storage api-key list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copie o UUID da chave criada e defina na 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 object-storage api-key &lt;span class="nb"&gt;set&lt;/span&gt; &amp;lt;UUID_DA_CHAVE&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Crie um bucket para o site
&lt;/h3&gt;

&lt;p&gt;Com a CLI autenticada, crie um bucket que servirá como repositório para os arquivos do seu site:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc object-storage buckets create site-estatico-exemplo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configure a ACL pública do bucket
&lt;/h3&gt;

&lt;p&gt;Para que os arquivos possam ser acessados publicamente, é necessário que o bucket permita a listagem de objetos. Isso é feito com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc object-storage buckets acl &lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="nt"&gt;--dst&lt;/span&gt; site-estatico-exemplo &lt;span class="nt"&gt;--public-read&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa configuração permite listar os arquivos contidos no bucket, mas não libera o acesso direto aos objetos. Isso será feito individualmente.&lt;/p&gt;

&lt;h3&gt;
  
  
  Envie os arquivos para o bucket
&lt;/h3&gt;

&lt;p&gt;Acesse a pasta local onde estão os arquivos do seu site. Por exemplo, se os arquivos estão na pasta &lt;code&gt;C:\Projetos\site-estatico&lt;/code&gt;, execute os seguintes comandos na CLI para fazer o upload:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc object-storage objects upload ./index.html site-estatico-exemplo/index.html
mgc object-storage objects upload ./estilos.css site-estatico-exemplo/estilos.css
mgc object-storage objects upload ./sobre.html site-estatico-exemplo/sobre.html
mgc object-storage objects upload ./imagens/banner.png site-estatico-exemplo/imagens/banner.png
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Garanta que os caminhos no segundo argumento (o nome do objeto no bucket) usem barra &lt;code&gt;/&lt;/code&gt;, mesmo se você estiver usando um sistema Windows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Torne os arquivos públicos com ACL
&lt;/h3&gt;

&lt;p&gt;Após o upload, os arquivos ainda não estarão acessíveis publicamente até que você defina permissões específicas para cada objeto:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mgc object-storage objects acl &lt;span class="nb"&gt;set &lt;/span&gt;site-estatico-exemplo/index.html &lt;span class="nt"&gt;--public-read&lt;/span&gt;
mgc object-storage objects acl &lt;span class="nb"&gt;set &lt;/span&gt;site-estatico-exemplo/estilos.css &lt;span class="nt"&gt;--public-read&lt;/span&gt;
mgc object-storage objects acl &lt;span class="nb"&gt;set &lt;/span&gt;site-estatico-exemplo/sobre.html &lt;span class="nt"&gt;--public-read&lt;/span&gt;
mgc object-storage objects acl &lt;span class="nb"&gt;set &lt;/span&gt;site-estatico-exemplo/imagens/banner.png &lt;span class="nt"&gt;--public-read&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Acesse o site pela URL pública
&lt;/h3&gt;

&lt;p&gt;Os arquivos agora podem ser acessados por qualquer pessoa com o link. A URL segue o formato:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://br-se1.magaluobjects.com/site-estatico-exemplo/index.html
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Basta abrir essa URL no navegador para visualizar o site.&lt;/p&gt;




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

&lt;p&gt;Neste tutorial, você aprendeu como hospedar um site estático na Magalu Cloud utilizando o Object Storage e controle de acesso por ACLs. O processo incluiu a criação do bucket, envio dos arquivos, configuração das permissões e acesso público via URL.&lt;/p&gt;

&lt;p&gt;Essa abordagem é simples e eficaz para casos em que você deseja publicar conteúdo rapidamente sem configurar servidores. É possível manter o controle de acesso granular e garantir alta disponibilidade com poucos comandos.&lt;/p&gt;

&lt;p&gt;Embora tenhamos utilizado ACLs individuais para liberar os arquivos, uma alternativa recomendada para cenários com muitos arquivos ou uploads frequentes é o uso de &lt;strong&gt;Bucket Policies&lt;/strong&gt;, que permitem tornar todos os objetos públicos de uma só vez, inclusive novos arquivos automaticamente.&lt;/p&gt;

&lt;p&gt;Por padrão, o conteúdo será acessado pela URL da Magalu Cloud. No entanto, caso você deseje usar um &lt;strong&gt;domínio personalizado&lt;/strong&gt; (como &lt;code&gt;www.seusite.com&lt;/code&gt;), é possível configurar um DNS que aponte para os arquivos do bucket usando serviços complementares. Isso pode exigir o uso de proxy reverso, CDN ou ferramentas específicas de roteamento, dependendo do seu cenário.&lt;/p&gt;

&lt;p&gt;Para saber mais sobre essas alternativas, o uso de políticas de acesso avançadas, automações e boas práticas, consulte a &lt;a href="https://docs.magalu.cloud/docs/docs" rel="noopener noreferrer"&gt;documentação oficial da Magalu Cloud&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>magalucloud</category>
      <category>programming</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Criando um bot para o Discord e hospedando em uma máquina virtual na Magalu Cloud</title>
      <dc:creator>Monica Hillman</dc:creator>
      <pubDate>Mon, 18 Aug 2025 19:18:17 +0000</pubDate>
      <link>https://forem.com/magalucloud/criando-um-bot-para-o-discord-e-hospedando-em-uma-maquina-virtual-na-magalu-cloud-18cb</link>
      <guid>https://forem.com/magalucloud/criando-um-bot-para-o-discord-e-hospedando-em-uma-maquina-virtual-na-magalu-cloud-18cb</guid>
      <description>&lt;p&gt;O Discord é uma plataforma cada vez mais presente no dia a dia de comunidades, empresas, grupos de estudo e projetos colaborativos. Com sua interface acessível e suporte a bots personalizados, ele se tornou um ambiente ideal para criar experiências interativas e automatizadas.&lt;/p&gt;

&lt;p&gt;Bots no Discord podem desempenhar diversas funções. Eles podem responder dúvidas, integrar sistemas externos, automatizar tarefas repetitivas ou até mesmo interagir com APIs personalizadas. O desafio comum está em mantê-los ativos constantemente, com estabilidade e baixo custo.&lt;/p&gt;

&lt;p&gt;Neste artigo, mostraremos como criar um bot do Discord utilizando Node.js e hospedá-lo de forma prática na &lt;a href="https://magalu.cloud" rel="noopener noreferrer"&gt;Magalu Cloud&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Criando o bot no Discord
&lt;/h2&gt;

&lt;p&gt;Começamos acessando o &lt;a href="https://discord.com/developers/applications" rel="noopener noreferrer"&gt;Discord Developer Portal&lt;/a&gt; para registrar um novo bot:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Crie uma nova aplicação;&lt;/li&gt;
&lt;li&gt;Vá até a aba “Bot” e clique em Add Bot;&lt;/li&gt;
&lt;li&gt;Vá até a seção "Privileged Gateway Intents";&lt;/li&gt;
&lt;li&gt;Ative a opção “Message Content Intent”;&lt;/li&gt;
&lt;li&gt;Copie o token (será usado mais tarde);&lt;/li&gt;
&lt;li&gt;Em “OAuth2 → URL Generator”, selecione bot e adicione permissões como Send Messages, Read Message History, etc.;&lt;/li&gt;
&lt;li&gt;Gere a URL, abra no navegador e adicione o bot ao seu servidor.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Atenção: nunca exponha o token do bot em repositórios públicos.&lt;/p&gt;

&lt;h2&gt;
  
  
  Desenvolvendo o bot com Node.js
&lt;/h2&gt;

&lt;p&gt;Para desenvolver o código do bot, você pode utilizar as bibliotecas discord.js, dotenv e axios. &lt;/p&gt;

&lt;p&gt;Dentro de um novo projeto Node.js (npm init -y), instalamos as dependências:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install discord.js dotenv axios
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Crie um arquivo chamado .env para adicionar o token.&lt;/p&gt;

&lt;p&gt;Agora crie um index.js com a lógica principal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Client, GatewayIntentBits } from 'discord.js';
import dotenv from 'dotenv';

dotenv.config();

const client = new Client({
  intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages, GatewayIntentBits.MessageContent],
});

client.once('ready', () =&amp;gt; {
  console.log(`Bot está online como ${client.user.tag}`);
});

client.on('messageCreate', message =&amp;gt; {
  if (message.author.bot) return;

  if (message.content === '!ping') {
    message.channel.send('Pong!');
  }
});

client.login(process.env.DISCORD_TOKEN);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este código inicializa um bot do Discord usando discord.js. Ele escuta mensagens em canais e responde com "Pong!" quando alguém envia !ping. A biblioteca dotenv é usada para carregar o token do bot de um arquivo .env, mantendo o código mais seguro e limpo.&lt;/p&gt;

&lt;p&gt;O bot é configurado com intents que permitem acessar mensagens e canais. Quando o bot está pronto, ele exibe uma mensagem no console, e ao receber uma nova mensagem, responde se for o comando esperado.&lt;/p&gt;

&lt;p&gt;Para mais detalhes sobre a biblioteca e suas funcionalidades, acesse a documentação oficial do &lt;a href="https://discord.js.org" rel="noopener noreferrer"&gt;discord.js&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Agora, precisamos manter esse bot sendo sempre executado, para que os usuários do seu servidor possam utilizá-lo. Para isso, vamos colocar esse projeto em uma máquina virtual.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inicializando uma máquina virtual na Magalu Cloud
&lt;/h2&gt;

&lt;p&gt;Usaremos uma máquina virtual (VM) para manter o bot do Discord rodando continuamente, sem depender de um computador local. A VM funciona como um servidor sempre disponível, ideal para projetos que precisam ficar online 24 horas por dia.&lt;/p&gt;

&lt;p&gt;Para criar uma VM, você pode acessar o painel da Magalu Cloud e criar uma nova instância com a imagem Ubuntu 22.04. Durante a criação, associamos a chave pública gerada anteriormente. Também ativamos um IP público para a VM e liberamos a porta 22 no firewall para permitir conexões SSH.&lt;br&gt;
Com a VM configurada, acessamos o servidor de qualquer lugar pelo terminal usando:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;Esse comando inicia uma conexão segura com a máquina virtual, usando o usuário padrão ubuntu. A partir daí, temos controle total sobre o ambiente da VM, podendo instalar dependências, rodar scripts, configurar o bot e manter tudo funcionando de forma autônoma.&lt;/p&gt;

&lt;p&gt;Antes de seguir com a instalação do projeto, é importante garantir que o sistema esteja atualizado. Execute o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em seguida, instalamos o Node.js na versão recomendada (20.x), que é compatível com a discord.js:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt install -y nodejs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para verificar se tudo está certo, execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node -v
npm -v
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o ambiente atualizado e o Node.js instalado, a VM está pronta para receber o código do bot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enviando o projeto para a máquina virtual
&lt;/h2&gt;

&lt;p&gt;Com a estrutura pronta localmente, você pode enviar seu projeto para a VM de duas formas: via Git ou via scp.&lt;/p&gt;

&lt;h3&gt;
  
  
  Via Git
&lt;/h3&gt;

&lt;p&gt;Se o seu projeto está versionado em uma plataforma como GitHub ou GitLab, você pode simplesmente clonar o repositório direto na VM:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/usuario/repositorio.git bot
cd bot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse comando clona o projeto para uma pasta chamada bot e já navega até ela.&lt;/p&gt;

&lt;h3&gt;
  
  
  Via scp
&lt;/h3&gt;

&lt;p&gt;Se o projeto estiver em uma pasta local (por exemplo, BotMagaluCloud), você pode fazer o upload diretamente para a VM. Primeiro remova a pasta node_modules e envie todos os arquivos com o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;scp -r /nome-da-pasta/* ubuntu@&amp;lt;ip-da-vm&amp;gt;:/home/ubuntu/bot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;scp&lt;/code&gt;: comando para copiar arquivos via SSH&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;-r&lt;/code&gt;: copia a pasta recursivamente&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;bot&lt;/code&gt;: nome da pasta local com seu projeto&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ubuntu@&amp;lt;ip-da-vm&amp;gt;&lt;/code&gt;: usuário e IP da sua VM&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;:/home/ubuntu/bot&lt;/code&gt;: caminho de destino onde o projeto será salvo na VM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agora, precisamos instalar as dependências desse projeto.&lt;/p&gt;

&lt;h2&gt;
  
  
  Instalando dependências
&lt;/h2&gt;

&lt;p&gt;Após o upload ou clone do projeto, acesse a pasta do bot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd ~/bot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instale as dependências definidas no package.json:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em seguida, crie o arquivo .env com:&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;No editor nano, adicione suas variáveis de ambiente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DISCORD_TOKEN=seu_token_do_discord
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como salvar no nano:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Pressione Ctrl + O para salvar o arquivo&lt;/li&gt;
&lt;li&gt;Pressione Enter para confirmar o nome .env&lt;/li&gt;
&lt;li&gt;Pressione Ctrl + X para sair do editor&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Agora o ambiente está pronto para rodar o bot com segurança, sem expor seus tokens diretamente no código. Mas então, como deixar esse código sendo executado mesmo após falhas ou reinicialização da máquina?&lt;/p&gt;

&lt;h2&gt;
  
  
  Mantendo o bot sempre ativo com PM2
&lt;/h2&gt;

&lt;p&gt;Para garantir que o bot continue rodando mesmo após uma queda ou reinicialização da máquina, usaremos o pm2, um gerenciador de processos para aplicações Node.js.&lt;/p&gt;

&lt;p&gt;Instale o pm2 globalmente na sua VM com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo npm install -g pm2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora, dentro da pasta do seu projeto, inicie o bot com o comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pm2 start index.js --name bot-magalu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse comando executa o bot e atribui o nome “bot-magalu” ao processo. Você pode verificar se está rodando com:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pm2 list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para garantir que o bot volte automaticamente se a máquina for reiniciada, execute:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pm2 save
pm2 startup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O pm2 irá exibir um comando extra, copie e cole no terminal para finalizar a configuração.&lt;/p&gt;

&lt;p&gt;Se quiser visualizar os logs do bot em tempo real, use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pm2 logs bot-magalu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora seu bot está rodando de forma contínua e confiável na Magalu Cloud.&lt;/p&gt;

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

&lt;p&gt;Ao longo deste artigo, mostramos como criar um bot funcional do Discord usando Node.js e hospedá-lo de forma estável na Magalu Cloud. Desde a configuração inicial no Discord até a publicação em uma máquina virtual Linux, passamos por todos os passos necessários para colocar seu projeto em produção, com segurança e autonomia.&lt;/p&gt;

&lt;p&gt;Essa abordagem é acessível tanto para quem está começando a desenvolver quanto para quem já trabalha com bots ou automações em ambientes de produção. Usar uma VM permite total controle sobre o ambiente, enquanto ferramentas como pm2 garantem que seu bot fique online mesmo em casos de falhas ou reinicializações.&lt;/p&gt;

&lt;p&gt;Seja para comunidades, empresas, projetos de estudo ou simplesmente para aprender algo novo, criar e hospedar seu próprio bot é uma ótima forma de aplicar conceitos práticos de programação, infraestrutura e integração com APIs.&lt;/p&gt;

&lt;p&gt;Agora que você tem a base pronta, pode expandir o bot com comandos personalizados, interações com bancos de dados, comandos com barra, ou até criar um painel de controle web. As possibilidades são muitas.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>cloud</category>
      <category>discord</category>
      <category>magalucloud</category>
    </item>
    <item>
      <title>Minha trajetória em tecnologia</title>
      <dc:creator>Monica Hillman</dc:creator>
      <pubDate>Fri, 10 Mar 2023 19:02:35 +0000</pubDate>
      <link>https://forem.com/monicahillman/minha-trajetoria-em-tecnologia-1153</link>
      <guid>https://forem.com/monicahillman/minha-trajetoria-em-tecnologia-1153</guid>
      <description>&lt;p&gt;Como mulher trabalhando na tecnologia vou aproveitar essa celebração do #WeCoded para contar minha jornada até aqui.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quem sou eu?
&lt;/h2&gt;

&lt;p&gt;Sou bacharela em Tecnologias Digitais, especialista em User Experience, pós graduanda em Docência e Performance na Educação a Distância e em Software Architeture. Durante a graduação fui vice-presidente do diretório acadêmico e monitora de LIBRAS. Atualmente sou instrutora na Alura e Alura Star. Nas horas vagas gosto de assistir animes e produções da marvel, ouvir kpop e post-hardcore, jogar Valorant e Genshin Impact e praticar culinária.&lt;/p&gt;

&lt;h2&gt;
  
  
  Como cheguei até aqui?
&lt;/h2&gt;

&lt;p&gt;Minha história com tecnologia começou cedo, lá por 2013 em que eu tinha 14 anos por causa da rede social Tumblr. Pra quem pegou a época, sabe que podiamos editar os layouts do nosso blog através de HTML e CSS (e dependendo do que queria fazer, Javascript). Gostava muito de me aventurar nisso e ficava aprendendo a mexer na prática, sem levar muito a sério e fazer cursos.&lt;/p&gt;

&lt;p&gt;Depois, meus pais valorizavam muito fazer cursos livres, então me inscreveram em uma promoção pra cursar informática básica, design gráfico e inglês. Fazia as aulas sem muito compromisso também, não conhecia ninguém que trabalhava com tecnologia então não conseguia ver como uma profissão.&lt;/p&gt;

&lt;p&gt;No meio da adolescência fui matriculada em um curso de "Programação WEB" pelo Senac via Pronatec. Nesse curso, conheci pessoas que já trabalhavam na área a tempos e meus professores formados na área. Foi meu primeiro contato em que pude perceber que isso era uma profissão rentável mesmo e o que eu poderia fazer com ela. Aprendi a base de HTML, CSS, JavaScript, banco de dados, PHP e etc. Foi muito enriquecedor e meu professor me incentivava sempre a seguir na área.&lt;/p&gt;

&lt;p&gt;Apesar disso, eu ainda estava tentada a seguir com licenciatura em alguma coisa pela minha admiração pelas professoras do ensino médio. Fiz o curso de "assistente administrativo" no SENAI. Sai totalmente fora da curva da tecnologia por uns anos.&lt;/p&gt;

&lt;p&gt;Chegou a hora de entrar na universidade e com a nota que tirei no ENEM, fiquei limitada a que curso tentar. Com isso, encontrei o curso chamado "tecnologias digitais" (que hoje se chama "criação digital") na Universidade de Caxias do Sul. Achei perfeito! Não envolvia apenas programação mas sim tecnologia, comunicação e artes. E foi esse caminho que escolhi.&lt;/p&gt;

&lt;p&gt;Lá aprendi front-end, back-end, animação, modelagem, banco de dados... muitas coisas, era bem diverso. Durante a graduação fiquei trabalhando como suporte técnico de T.I, que foi meu primeiro emprego na área de tecnologia. Lá formatava computadores, fazia limpeza, instalava softwares, ajudava os funcionários da empresa com problemas relacionados a hardware. &lt;/p&gt;

&lt;p&gt;Das estagiárias, era a única mulher do setor. Passei por algumas situações desconfortáveis com clientes relacionadas a diminuir minha capacidade por ser mulher, mas minha equipe sempre me ajudou e apoiou.&lt;/p&gt;

&lt;p&gt;Mas durante a pandemia eu repensei a carreira que estava seguindo. Queria desbravar a área da programação, não queria mais trabalhar com hardware e clientes. Me empenhei em aprender React e consegui minha primeira oportunidade em uma empresa local.&lt;/p&gt;

&lt;p&gt;Fiquei algum tempo como estagiária e rapidamente virei desenvolvedora Junior. Infelizmente as tarefas estavam vindo mais rápidos do que eu assimilava o conhecimento, e foi uma época conturbada com TCC e problemas pessoais. Acabei tendo alguns problemas psicológicos e abandonei a área. Não conseguia mais pensar em programar.&lt;/p&gt;

&lt;p&gt;Me inscrevi em uma pós em User Experience pois queria fazer transição de carreira. Mas durante essa tentativa de transição encontrei uma vaga pra ser instrutora de programação para escolas na Alura. Eu não tinha todos conhecimentos necessários mas lembra que eu falei que estava tentada a fazer licenciatura no ensino médio? O que custava tentar?&lt;/p&gt;

&lt;p&gt;E a tentativa deu certo. Consegui a vaga! E estou até hoje trabalhando como instrutora de front-end na Alura. Gosto muito do que faço, de estudar e ajudar outras pessoas que também estão estudando para entrar na área.&lt;/p&gt;

&lt;p&gt;Hoje me sinto muito mais confiante com meus conhecimentos em programação, acredito que minha história só começou e que ainda tenho muito o que agregar na área de tecnologia, seja pra comunidade ou pra produtos.&lt;/p&gt;

&lt;p&gt;Dificuldades acontecem, mas não podemos largar a mão de ninguém e mostrar que as coisas vão melhorar. Uma vaga e empresa não define a área inteira, há muitas áreas na tecnologia e se você não se dar bem com uma, desbrave outras! Vamos aumentar a presença de grupos diversificados dentro da tecnologia. Contem comigo no que eu puder ajudar :D&lt;/p&gt;

&lt;h2&gt;
  
  
  Participação em comunidades
&lt;/h2&gt;

&lt;p&gt;Outra coisa que me ajudou a me sentir mais a vontade na área de tecnologia foi participar de comunidades. Isso me rendeu vários contatos, amizades e histórias.&lt;/p&gt;

&lt;p&gt;Por um tempo fui gerente de comunidade na &lt;a href="https://braziliansintech.com/" rel="noopener noreferrer"&gt;Brazilians in Tech&lt;/a&gt; e &lt;a href="https://www.stemparaminas.com/" rel="noopener noreferrer"&gt;STEM para as Minas&lt;/a&gt;. Conheci várias mulheres e suas histórias, fiz live coding e aulas gratuitas para quem tava começando. Acredito que a melhor maneira de aprender é ensinando, então pra quem quer começar a seguir isso, que tal fazer parceria com comunidades pra ensinar o que sabe?&lt;/p&gt;

&lt;p&gt;Além do conhecimento técnico, a participação em comunidades melhorou muito minhas soft skills como comunicação. Sempre fui uma pessoa tímida, que não gostava de aparecer. Hoje, quero contribuir cada vez mais pra área, seja com artigos, seja com lives e participações em eventos.&lt;/p&gt;




&lt;p&gt;Gostou de saber um pouco sobre minha história? Conte a sua também! Se quiser entrar em contato comigo, pode acessar minhas redes sociais clicando &lt;a href="https://linktr.ee/monicahillman" rel="noopener noreferrer"&gt;aqui&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>wecoded</category>
      <category>braziliandevs</category>
      <category>devjournal</category>
    </item>
    <item>
      <title>Diário de um grupo de estudos sobre front-end</title>
      <dc:creator>Monica Hillman</dc:creator>
      <pubDate>Tue, 07 Mar 2023 20:22:44 +0000</pubDate>
      <link>https://forem.com/monicahillman/diario-de-um-grupo-de-estudos-sobre-front-end-24fl</link>
      <guid>https://forem.com/monicahillman/diario-de-um-grupo-de-estudos-sobre-front-end-24fl</guid>
      <description>&lt;h2&gt;
  
  
  Contextualização
&lt;/h2&gt;

&lt;p&gt;Durante o mês de março está acontecendo o &lt;strong&gt;6º Challenge de front-end da Alura Cursos Online&lt;/strong&gt;. O Challenge é uma implementação do Challenge Based Learning, onde você vai se engajar em cima de um problema, para investigar soluções e por fim colocar seu projeto no ar. Tudo isso com você comentando e ajudando nos projetos de outros alunos e alunas.&lt;/p&gt;

&lt;p&gt;O projeto que será desenvolvido é o &lt;strong&gt;CodeChella,&lt;/strong&gt; um festival de música alternativa que acontece anualmente, é composto por gêneros diversos e visa promover uma experiência encantadora e inesquecível para o visitante, proporcionando uma integração multicultural e social. &lt;/p&gt;

&lt;p&gt;Durante a semana um do desafio, o objetivo é desenvolver os elementos da tela inicial, da sobre as experiências fornecidas e setores do festival. E, assim como em uma sala de aula, temos vários alunos discutindo sobre diferentes abordagens de como seguir no desenvolvimento do projeto. &lt;/p&gt;

&lt;h2&gt;
  
  
  Grupo de estudos
&lt;/h2&gt;

&lt;p&gt;Sempre me posiciono no mesmo degrau que os alunos, e no grupo de estudos não seria diferente. Não compareci com todas soluções construídas. Melhor ainda: apareci com nada preparado. Na produção de uma aula nós estudamos o conteúdo anteriormente, chegamos com o passo a passo de como chegar no resultado, mas eu não queria isso. Queria me unir, pesquisar, construir, tudo em conjunto. Transformar o aluno em personagem principal nesse desafio.&lt;/p&gt;

&lt;p&gt;E não foi atoa, vamos destacar os conteúdos trazidos durante a conversa:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Qual a diferença entre a tag &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; e &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ambas não tem valor semântico, mas enquanto a tag span serve ao código com atributo display inline, a tag div serve ao código de tem como atributo display block.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Há diferença de acessibilidade entre construir um menu hamburguer somente com HTML e CSS e com JavaScript?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A conclusão foi de que provavelmente não, desde que a pessoa desenvolvedora tome cuidado com os elementos escolhidos e caso necessário, usar atributos relacionados a acessibilidade.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quais atributos ajudam a deixar meus elementos acessíveis?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Foi discutido brevemente sobre &lt;a href="[https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles](https://developer.mozilla.org/en-US/docs/Web/Accessibility/ARIA/Roles)"&gt;“ARIA roles”&lt;/a&gt;. É um atributo que permite atribuir “cargos” para os elementos, melhorando seu significado semântico. Isso foi abordado pra desenvolver o menu hamburguer, na problematização de como poderíamos inserir a imagem como &lt;code&gt;background-image&lt;/code&gt; de um &lt;code&gt;&amp;lt;span&amp;gt;&lt;/code&gt; mas ainda assim respeitando a acessibilidade daquele botão. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como remover os estilos padrões da página?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Você pode usar o arquivo &lt;code&gt;reset.css&lt;/code&gt; que já entrega isso pronto. Tanto utilizando um &lt;a href="[https://meyerweb.com/eric/tools/css/reset/?utm_source=cdnjs&amp;amp;utm_medium=cdnjs_link&amp;amp;utm_campaign=cdnjs_library](https://meyerweb.com/eric/tools/css/reset/?utm_source=cdnjs&amp;amp;utm_medium=cdnjs_link&amp;amp;utm_campaign=cdnjs_library)"&gt;arquivo css&lt;/a&gt; exclusivamente pra isso quanto importando um &lt;a href="[https://cdnjs.com/libraries/meyer-reset](https://cdnjs.com/libraries/meyer-reset)"&gt;pacote&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Há também o artigo &lt;a href="[https://www.alura.com.br/artigos/o-que-e-reset-css](https://www.alura.com.br/artigos/o-que-e-reset-css)"&gt;”O que é o reset.css?”&lt;/a&gt; da Alura que comenta sobre isso.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como remover os estilos de um elemento?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Uma curiosidade trazida é a propriedade CSS chamada “all”. Resumidamente, ela redefine todas as propriedades de um elemento. Ela pode definir os valores como o seu inicial, como o herdado dos elementos pais, ou valores especificados em outros locais.&lt;/p&gt;

&lt;p&gt;Um lugar bacana pra ler mais sobre essa propriedade é a &lt;a href="[https://developer.mozilla.org/en-US/docs/Web/CSS/all](https://developer.mozilla.org/en-US/docs/Web/CSS/all)"&gt;MDN Web Docs&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como colocar os efeitos nas imagens igual ao do Figma?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Geralmente podemos contar com o inspecionar do Figma, ao clicar no elemento. No caso do layout do CodeChella, a propriedade que está sendo usada é a &lt;code&gt;mix-blend-mode&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Essa propriedade descreve como um elemento de conteúdo deve ser mesclado com os elementos abaixo dele no background. Há vários valores que podem ser inseridos. No caso do projeto, é o &lt;code&gt;multiply&lt;/code&gt;. Você pode visualizar as outras na documentação do &lt;a href="[https://developer.mozilla.org/pt-BR/docs/Web/CSS/mix-blend-mode](https://developer.mozilla.org/pt-BR/docs/Web/CSS/mix-blend-mode)"&gt;MDN Web Docs&lt;/a&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Como lidar com a imagem de fundo das seções?&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Aqui depende do caso, temos várias propriedades CSS que podem ser utilizadas. Algumas delas são: &lt;code&gt;background&lt;/code&gt;, &lt;code&gt;background-size&lt;/code&gt;, &lt;code&gt;background-position&lt;/code&gt; e &lt;code&gt;background-repeat&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Sendo o &lt;code&gt;background&lt;/code&gt; ou &lt;code&gt;background-image&lt;/code&gt; onde colocamos a url da imagem que será inserida, o &lt;code&gt;background-size&lt;/code&gt; referente ao tamanho que ela ocupará, o &lt;code&gt;background-position&lt;/code&gt; define a posição inicial da imagem de fundo e o &lt;code&gt;background-repeat&lt;/code&gt; determina como as imagens serão repetidas.&lt;/p&gt;

&lt;p&gt;Apesar de termos vistos essas propriedades, o problema de alguns estudantes não foram resolvidos. Então ficará para o próximo grupo de estudos continuar neste tópico.&lt;/p&gt;




&lt;p&gt;Isso tudo foram assuntos abordados em somente uma hora de discussão. Apesar de, na prática, termos programado poucos elementos, a troca de conhecimentos pode ter ajudado a tirar dúvidas e estimulado a curiosidade de quem está iniciando. Essa será uma prática que tentarei aplicar no mínimo duas vezes por semana, e quem sabe, relatar os aprendizados por aqui.&lt;/p&gt;

&lt;p&gt;Agradecimentos especiais ao &lt;a href="https://github.com/marcelluscaio" rel="noopener noreferrer"&gt;Caio Marcellus&lt;/a&gt; que disponibilizou a maioria dos links disponibilizados aqui 🙂&lt;/p&gt;

&lt;h2&gt;
  
  
  Links interessantes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="[https://dev.to/sucodelarangela/entendendo-css-display-inline-block-e-inline-block-lic](https://dev.to/sucodelarangela/entendendo-css-display-inline-block-e-inline-block-lic)"&gt;Entendendo CSS: Display Inline, Block e Inline-Block&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="[https://dev.to/sucodelarangela/entendendo-css-pseudo-classes-e-pseudo-elementos-b83](https://dev.to/sucodelarangela/entendendo-css-pseudo-classes-e-pseudo-elementos-b83)"&gt;Entendendo CSS: Pseudo-Classes e Pseudo-Elementos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="[https://dev.to/sucodelarangela/como-aplicar-opacidade-em-background-image-sem-afetar-textos-31fj](https://dev.to/sucodelarangela/como-aplicar-opacidade-em-background-image-sem-afetar-textos-31fj)"&gt;Como aplicar opacidade em background-image sem afetar textos&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>braziliandevs</category>
      <category>beginners</category>
      <category>devjournal</category>
    </item>
  </channel>
</rss>
