<?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>DEV Community: Pedro Almeida</title>
    <description>The latest articles on DEV Community by Pedro Almeida (@heyalmeida).</description>
    <link>https://dev.to/heyalmeida</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%2F3981772%2F24965000-feb9-4c84-9159-fdb483c88c33.png</url>
      <title>DEV Community: Pedro Almeida</title>
      <link>https://dev.to/heyalmeida</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/heyalmeida"/>
    <language>en</language>
    <item>
      <title>Como construí uma plataforma de deploy com pipeline automatizado, Docker isolado, websockets e logs em tempo real</title>
      <dc:creator>Pedro Almeida</dc:creator>
      <pubDate>Fri, 12 Jun 2026 18:37:45 +0000</pubDate>
      <link>https://dev.to/heyalmeida/como-construi-uma-plataforma-de-deploy-com-pipeline-automatizado-docker-isolado-e-logs-em-tempo-c6l</link>
      <guid>https://dev.to/heyalmeida/como-construi-uma-plataforma-de-deploy-com-pipeline-automatizado-docker-isolado-e-logs-em-tempo-c6l</guid>
      <description>&lt;p&gt;Há alguns meses, pagando $7/mês por um servidor de 512MB no Render &lt;br&gt;
pra hospedar uma API de um projeto da escola, decidi entender como &lt;br&gt;
esse tipo de infraestrutura funciona por baixo — e construir a &lt;br&gt;
minha própria versão.&lt;/p&gt;

&lt;p&gt;O resultado é o &lt;strong&gt;Arctis Deploy&lt;/strong&gt;: uma plataforma de deploy &lt;br&gt;
contínuo via Git, com Docker isolado por projeto. Esse post é &lt;br&gt;
sobre como ela funciona por dentro.&lt;/p&gt;

&lt;h2&gt;
  
  
  Arquitetura geral
&lt;/h2&gt;

&lt;p&gt;Frontend (Next.js)&lt;/p&gt;

&lt;p&gt;│&lt;/p&gt;

&lt;p&gt;▼&lt;/p&gt;

&lt;p&gt;Backend (Go + Fiber) — Clean Architecture&lt;/p&gt;

&lt;p&gt;│&lt;/p&gt;

&lt;p&gt;├──► Deploy-Agent   (roda em cada servidor) → Docker&lt;/p&gt;

&lt;p&gt;└──► Database-Agent (provisiona MySQL/Postgres)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;em desenvolvimento, ainda não disponível para usuários&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cada servidor de produção roda um &lt;code&gt;deploy-agent&lt;/code&gt; próprio. O &lt;br&gt;
backend central envia comandos via HTTPs autenticado e o agent &lt;br&gt;
executa o que for necessário — clone, build, container, métricas.&lt;/p&gt;

&lt;h2&gt;
  
  
  O pipeline de deploy
&lt;/h2&gt;

&lt;p&gt;Todo deploy passa por 5 etapas sequenciais:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;clone&lt;/strong&gt; — &lt;code&gt;git clone --depth 1&lt;/code&gt;, otimizado pra trazer só o 
necessário&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;analyze&lt;/strong&gt; — detecta o framework automaticamente lendo 
&lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;requirements.txt&lt;/code&gt;, &lt;code&gt;go.mod&lt;/code&gt;, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;build&lt;/strong&gt; — gera um Dockerfile multi-stage específico pro 
framework detectado (timeout: 15min)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;deploy&lt;/strong&gt; — sobe o container na porta alocada, com limites de 
CPU/RAM aplicados&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;health check&lt;/strong&gt; — faz requisições até o container responder, 
com rollback automático em caso de falha&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Cada etapa emite logs estruturados (&lt;code&gt;info&lt;/code&gt;/&lt;code&gt;warn&lt;/code&gt;/&lt;code&gt;error&lt;/code&gt;), &lt;br&gt;
transmitidos via WebSocket em tempo real pro frontend.&lt;/p&gt;

&lt;h2&gt;
  
  
  Detecção automática de framework
&lt;/h2&gt;

&lt;p&gt;Next.js, React, Vue, Node.js, e sites estáticos. &lt;br&gt;
A detecção é baseada nos arquivos do repositório — o usuário só &lt;br&gt;
conecta o Git e dá push.&lt;/p&gt;

&lt;h2&gt;
  
  
  Outros detalhes
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pool de recursos&lt;/strong&gt;: cada plano define um total de Projetos/CPU/RAM/disco
que o usuário distribui livremente entre seus projetos&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auto-sleep&lt;/strong&gt;: no free, containers sem tráfego são pausados 
(&lt;code&gt;docker pause&lt;/code&gt;) — não destruídos — e despertam automaticamente 
na próxima requisição&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Domínios&lt;/strong&gt;: subdomínio automático ou domínio próprio, com SSL 
via Cloudflare&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pagamentos&lt;/strong&gt;: MercadoPago integrado, planos em real&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Validação inicial
&lt;/h2&gt;

&lt;p&gt;Postei essa história no Tabnews e, em poucos dias, tive mais de &lt;br&gt;
250 pageviews e 65+ visitantes únicos, boa parte chegando até a &lt;br&gt;
documentação e o dashboard. Ainda early stage, mas validou que a &lt;br&gt;
dor — preço em dólar, pouco recurso — é real pra outros devs também.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testar
&lt;/h2&gt;

&lt;p&gt;A plataforma está em beta público: &lt;a href="https://launch.arctisdev.com" rel="noopener noreferrer"&gt;https://launch.arctisdev.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Plano free: 2 vCPUs, 2GB RAM, 4GB disco — sem cartão.&lt;/p&gt;

&lt;p&gt;Se quiser trocar ideia sobre a arquitetura, decisões técnicas ou &lt;br&gt;
tiver sugestões, comenta aqui ou entra no &lt;a href="https://discord.gg/Qshcnfq2B2" rel="noopener noreferrer"&gt;Discord&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>docker</category>
      <category>automation</category>
      <category>buildinpublic</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
