Alternar tema

Runner auto-hospedado do GitHub Actions: guia completo para implantação em ambiente privado

Easton editorial illustration: service topology model

Em março de 2026, o GitHub publicou um anúncio discreto: o uso de Runners auto-hospedados em repositórios privados passaria a ser cobrado a US$ 0,002 por minuto. Parece pouco? Fazendo as contas, são US$ 0,12 por hora; com 100 horas de execução por mês, a conta chega a US$ 12.

A notícia pegou muita gente de surpresa: o Runner auto-hospedado não era gratuito? Por que começou a ser cobrado de repente? Ao mesmo tempo, o preço dos Runners GitHub-hosted caiu cerca de 40%. Isso levou muitas equipes a refazer as contas: afinal, é melhor usar uma infraestrutura própria ou a hospedada pelo GitHub?

A mudança de preço é apenas uma parte da questão. Se o seu código precisa acessar um banco de dados na rede interna ou se o ambiente de build exige 32 GB de memória, o GitHub-hosted simplesmente não atende. Nesses casos, o Runner auto-hospedado deixa de ser uma opção e passa a ser uma necessidade.

Neste artigo, vamos comparar três formas de implantação — servidor tradicional, Docker e Kubernetes —, abordar as armadilhas de segurança e apresentar o Runner Fleet, uma ferramenta open source bastante útil para gerenciamento. Seja para economizar, aumentar a segurança ou simplesmente controlar o ambiente de build, você deve encontrar aqui uma resposta adequada.

Por que usar um Runner auto-hospedado?

O que é um Runner auto-hospedado

Em termos simples, um Runner auto-hospedado é uma máquina sua — servidor físico, máquina virtual ou até mesmo um Raspberry Pi — que executa os jobs de build do GitHub Actions. O GitHub-hosted runner é um ambiente preparado pelo GitHub na nuvem e descartado depois do uso; no modelo auto-hospedado, você monta a própria estrutura e tem liberdade para configurá-la como quiser.

O Runner é um projeto open source. O GitHub mantém o código no repositório actions/runner, disponível para qualquer pessoa baixar. Depois de instalá-lo na sua máquina e registrá-lo em um repositório ou organização, ele busca jobs no GitHub, executa as tarefas e envia os resultados de volta.

Principais diferenças em relação ao GitHub-hosted

A diferença não se resume a quem fornece o servidor.

No GitHub-hosted runner, cada build começa em um ambiente novo, que é destruído após o uso. A vantagem é ter um ambiente limpo e seguro; as desvantagens são a inicialização a frio mais lenta e as limitações de software. Quer usar um compilador pouco comum? Pode não ser possível. Seus testes precisam acessar um banco de dados interno? A conexão não estará disponível.

O Runner auto-hospedado funciona de forma oposta. Você monta o ambiente e pode pré-instalar o que quiser. Ele não precisa ser destruído ao fim de cada build; na próxima execução, tudo já está pronto, incluindo o cache local, o que torna o processo muito mais rápido. O preço dessa liberdade é assumir a operação e a investigação de qualquer problema.

CritérioGitHub-hostedAuto-hospedado
AmbienteNovo a cada execuçãoPersistente
Inicialização a frio1 a 2 minutosAlguns segundos
PersonalizaçãoLimitadaTotal
SegurançaIsolamento limpoExige reforço próprio
CustoCobrança por minutoMáquina + operação

Entendendo a mudança de preços de 2026

Esse ponto merece uma explicação mais detalhada.

Antes de março de 2026, o Runner auto-hospedado era gratuito para repositórios privados. A máquina e a energia eram suas, e o GitHub não cobrava nada. Depois de março, porém, o GitHub passou a cobrar US$ 0,002 por minuto pelo uso de Runners auto-hospedados em repositórios privados.

Parece pouco? Vamos fazer as contas. Suponha que sua equipe execute 50 pipelines de CI por dia, com média de 10 minutos cada. Isso representa 15.000 minutos por mês, ou US$ 30. Em um ano, são US$ 360, o suficiente para pagar um VPS razoável.

O curioso é que, no mesmo período, os Runners GitHub-hosted ficaram cerca de 40% mais baratos. Seria uma tentativa de levar os usuários para a nuvem?

Não tire conclusões tão rápido. Os Runners auto-hospedados continuam gratuitos para repositórios públicos. Se o seu projeto é open source, essa mudança não deve ser motivo de preocupação.

Quando o modelo auto-hospedado é necessário?

Depois de tudo isso, em quais situações vale considerar um Runner auto-hospedado? Estes são alguns cenários típicos:

Cenário 1: acesso a serviços da rede interna

Seu pipeline de CI precisa acessar um banco de dados, uma API ou um registro privado de imagens dentro da rede. As máquinas GitHub-hosted estão na internet pública e não conseguem alcançar esses serviços internos.

Cenário 2: requisitos especiais de hardware

Você precisa de GPU para treinar modelos ou de 128 GB de memória para compilar um projeto grande. A configuração padrão do GitHub-hosted tem apenas 7 GB de memória e 2 núcleos de CPU, portanto não atende a esse tipo de demanda.

Cenário 3: sensibilidade a custos com grande volume de builds

Se a sua equipe executa centenas de pipelines de CI por dia, a cobrança por minuto do GitHub-hosted se acumula. Manter alguns Runners próprios pode sair mais barato.

Cenário 4: conformidade e soberania de dados

Setores como finanças e saúde têm regras rígidas para impedir que dados saiam do ambiente controlado. O build precisa acontecer na rede interna, e o código não pode deixar o datacenter da empresa.

Para uma equipe pequena e com poucos builds, o GitHub-hosted continua sendo muito atraente: é prático, exige pouca manutenção e ficou mais barato. Mas, quando um dos cenários acima aparece, o modelo auto-hospedado deve entrar no planejamento.

Comparação entre três opções de implantação

Opção 1: servidor tradicional

A abordagem mais direta é usar um servidor Linux, baixar o pacote do Runner, extrair os arquivos, configurar e iniciar o serviço.

Minha primeira implantação de um Runner auto-hospedado foi assim. Entrei por SSH em um servidor CentOS 7 e segui, comando por comando, a documentação do GitHub. Em meia hora estava tudo pronto; ver o Runner aparecer como “Online” na página do GitHub deu uma boa sensação de dever cumprido.

Vantagens: implantação simples, sem exigir conhecimentos de Docker ou Kubernetes. O ambiente é estável, e um único Runner pode funcionar por muito tempo.

Desvantagens: a manutenção é trabalhosa. Se o Runner parar, será preciso reiniciá-lo manualmente; se a máquina apresentar problemas, alguém terá de investigar; para ampliar a capacidade, é necessário comprar outra máquina e configurá-la do zero.

Cenário indicado: equipes pequenas, com 1 ou 2 Runners, orçamento limitado e sem interesse em adotar contêineres.

Opção 2: contêineres Docker

O Runner é instalado em um contêiner Docker, e cada ambiente de build é destruído após o uso; na execução seguinte, um contêiner limpo é criado. Isso é muito mais seguro do que a abordagem tradicional: se um script malicioso comprometer o contêiner, basta removê-lo e começar novamente.

Há duas formas de implementar essa opção: contêiner único e Docker-in-Docker (DinD).

Contêiner único: o Runner e o build são executados no mesmo contêiner. É adequado para a maioria dos casos.

Modo DinD: um Docker daemon é executado dentro do contêiner do Runner, permitindo criar imagens e rodar testes com vários contêineres. No entanto, o DinD apresenta riscos de segurança consideráveis, e a recomendação oficial é usá-lo com cautela.

Vantagens: bom isolamento do ambiente, limpeza simples e possibilidade de gerenciar vários Runners em lote com Docker Compose.

Desvantagens: riscos de segurança no DinD, necessidade de intervenção manual na orquestração e capacidade limitada de escalonamento automático.

Cenário indicado: equipes de porte médio, preocupadas com isolamento de segurança e com experiência em Docker.

Opção 3: Kubernetes + Actions Runner Controller (ARC)

Essa é a opção recomendada oficialmente pelo GitHub para implantações em grande escala. O Actions Runner Controller, ou ARC, é um Operator para Kubernetes que gerencia automaticamente o ciclo de vida dos Runners.

O ARC funciona de forma inteligente: você define quantos Runners precisa, e ele cria os Pods automaticamente; quando chega um job, um Pod o executa; ao término, o Pod é destruído. Também é possível aumentar automaticamente a capacidade quando a fila cresce e reduzi-la nos períodos ociosos.

Em janeiro de 2025, a AWS publicou um artigo específico sobre essa arquitetura, recomendando-a para empresas que operam em grande escala na AWS.

Vantagens: escalonamento automático e menor custo operacional; acesso a todo o ecossistema de ferramentas Kubernetes; adequado para grandes implantações.

Desvantagens: a barreira de entrada é alta — é preciso conhecer Kubernetes, Helm e CRD —, e a implantação é muito mais complexa do que nas duas opções anteriores.

Cenário indicado: equipes grandes, com dezenas ou centenas de Runners, infraestrutura Kubernetes e foco na automação das operações.

Comparação e recomendação de escolha

A tabela abaixo ajuda a identificar rapidamente a opção mais adequada:

CritérioServidor tradicionalDockerKubernetes ARC
Dificuldade de implantaçãoBaixaMédiaAlta
Isolamento do ambienteRuimBomMuito bom
Escalonamento automáticoNãoLimitadoTotalmente compatível
Custo operacionalAltoMédioBaixo após a automação
Curva de aprendizadoBaixaMédiaAlta
Escala indicada1 a 5 Runners5 a 20 RunnersMais de 20 Runners

Minha recomendação:

Equipe pequena, com 1 a 5 pessoas e poucos builds: o servidor tradicional é suficiente; não é preciso complicar com contêineres.

Equipe de porte médio, com 10 a 30 pessoas e dezenas de builds por dia: use contêineres Docker com o Runner Fleet ou uma ferramenta semelhante.

Equipe grande, com mais de 30 pessoas e milhares de minutos de CI/CD: escolha Kubernetes ARC. O investimento no aprendizado se converte em operações automatizadas.

Na prática, não existe uma opção “melhor” em termos absolutos, apenas a mais adequada ao seu contexto. Avalie o tamanho da equipe, a stack tecnológica e a capacidade operacional, sem adotar uma tecnologia nova apenas por ser novidade.

Práticas recomendadas de segurança

Repositórios públicos: área proibida

Esse ponto precisa vir primeiro, pois há um alerta explícito do próprio GitHub.

“Runners auto-hospedados quase nunca devem ser usados em repositórios públicos” — GitHub Docs

Por quê? Qualquer pessoa pode enviar um PR a um repositório público e acionar o seu Workflow. Se esse Runner estiver em uma máquina da rede interna, um PR malicioso poderá executar comandos arbitrários no ambiente — ler arquivos confidenciais, roubar Tokens e até atacar lateralmente outros serviços internos.

Em janeiro de 2026, um artigo de análise de segurança da Sysdig abordou especificamente esse problema: invasores usaram Runners auto-hospedados como backdoor para entrar em redes corporativas. Não se trata de um risco teórico; isso já aconteceu na prática.

Portanto, em repositórios públicos, use um GitHub-hosted runner ou não use CI. Quer mesmo adotar um Runner auto-hospedado? Primeiro torne o repositório privado.

Estratégia de isolamento com Runner Groups

Repositórios privados também não são totalmente seguros. Projetos e equipes diferentes têm níveis de confiança distintos. O Runner do código principal do negócio não deve compartilhar o mesmo ambiente que o Runner de um projeto experimental.

Os Runner Groups resolvem esse problema. No nível da organização, você pode criar vários grupos e classificá-los por projeto, equipe ou nível de confiança. Para cada grupo, é possível definir o escopo de acesso, controlando quais repositórios podem utilizá-lo.

Um exemplo de configuração típica:

  • Grupo critical-prod: usado apenas pelos repositórios principais, com máquinas em uma zona isolada da rede interna
  • Grupo dev-team: usado pelos repositórios da equipe de desenvolvimento, com máquinas na rede interna comum
  • Grupo sandbox: usado por projetos experimentais, com máquinas em um ambiente de sandbox isolado

Assim, mesmo que um repositório seja comprometido, o invasor só terá acesso aos Runners do grupo correspondente, sem alcançar os sistemas principais.

Medidas de reforço do ambiente

Há alguns princípios básicos para reforçar a segurança do próprio Runner:

Princípio do menor privilégio: execute o processo do Runner com um usuário dedicado, nunca como root. Instale apenas o software necessário para reduzir a superfície de ataque.

Isolamento de rede: não exponha diretamente a máquina do Runner à internet pública. O recebimento de tarefas via webhook do GitHub não exige uma conexão pública de entrada.

Gerenciamento de Tokens: o Token usado para registrar o Runner tem prazo de validade. Quando expirar, será necessário gerar outro. Não grave o Token diretamente em scripts; use Secrets para gerenciá-lo.

Auditoria de logs: preserve os logs de execução do Runner para poder rastrear comportamentos anormais.

Em abril de 2026, a Wiz observou em seu guia de segurança que os ambientes de Runner de muitas empresas eram permissivos demais, oferecendo facilidades excessivas aos invasores. O reforço de segurança não é uma tarefa pontual; ele exige verificações contínuas.

Ferramenta de segurança recomendada

Há uma ferramenta de segurança chamada Harden-Runner que pode ser usada diretamente no Workflow:

steps:
  - uses: step-security/harden-runner@v2
    with:
      egress-policy: audit

Essa Action monitora as conexões de saída da rede do Runner e relata comportamentos anormais. Ela oferece os modos Audit e Block; no modo Block, as conexões de saída não autorizadas são bloqueadas diretamente.

O modo Block é especialmente útil para Runners auto-hospedados: se um script malicioso tentar enviar dados para a internet, a conexão será interrompida.

Não subestime essa parte. Já vi muitas equipes instalarem o Runner e depois o abandonarem, com permissões excessivas e Tokens gravados diretamente em arquivos de configuração. Quando um incidente acontece, já é tarde demais para se arrepender.

Solução open source Runner Fleet

O que é o Runner Fleet

Já vimos como implantar com contêineres Docker, mas gerenciar vários contêineres de Runner continua sendo trabalhoso. Status, Tokens e logs ficam espalhados, e é preciso consultar cada lugar manualmente.

Runner Fleet é um projeto open source criado especificamente para resolver esse problema. Seu autor, soulteary, publicou um artigo prático e detalhado na comunidade de desenvolvedores da Tencent Cloud, explicando a origem e os recursos do projeto.

Em resumo, o Runner Fleet oferece uma interface web para gerenciar todos os contêineres de Runner em um único lugar: monitoramento de status, operações em lote, gerenciamento unificado de Tokens e recuperação automática de falhas. Em vez de acessar cada contêiner por SSH, basta abrir uma página para ter uma visão completa.

Principais recursos

O Runner Fleet tem alguns recursos que considero especialmente úteis:

Monitoramento de status agregado: o status online, os jobs atuais e o histórico de execução de todos os Runners aparecem em uma única tela. Não é necessário consultar os logs de cada contêiner individualmente.

Gerenciamento unificado de Tokens: os Tokens de registro dos Runners podem ser configurados pela interface web, sem ajustes manuais em cada máquina. Quando um Token muda, a atualização pode ser sincronizada com um clique.

Verificação e recuperação automática: se um contêiner de Runner parar, o sistema detecta o problema e o reinicia automaticamente. Durante minhas implantações, já vi Runners perderem a conexão de vez em quando, exigindo investigação manual. Com a recuperação automática, esse trabalho diminui bastante.

Modo contêiner e modo host: é possível executar tudo em contêineres ou manter o Runner no host e usar contêineres para o gerenciamento. Cada abordagem tem suas vantagens; escolha de acordo com a necessidade.

Operações em lote: inicie, pare ou reinicie todos os Runners com um clique. Ao ampliar a capacidade, crie vários Runners de uma só vez, sem configurar máquina por máquina.

Guia de implantação rápida

O Runner Fleet é implantado com Docker e pode ser iniciado com poucos comandos:

# Baixar a imagem
docker pull soulteary/runner-fleet

# Iniciar o serviço (versão simplificada)
docker run -d \
  --name runner-fleet \
  -p 8080:8080 \
  -v /var/run/docker.sock:/var/run/docker.sock \
  soulteary/runner-fleet

Depois da inicialização, acesse http://IP_DA_SUA_MAQUINA:8080 para abrir a interface de gerenciamento.

Na interface, configure o GitHub Token, escolha a quantidade de Runners, defina os parâmetros do ambiente e crie vários Runners com poucos cliques. Isso economiza muito tempo em comparação com baixar, extrair e configurar cada Runner manualmente.

Se a sua equipe usa Docker, mas não quer aprender Kubernetes, o Runner Fleet oferece uma ótima relação entre custo e benefício. Você obtém o isolamento dos contêineres sem precisar lidar com uma operação manual complexa.

Etapas práticas de implantação

Implantação no Linux em cinco etapas

Se você prefere o servidor tradicional, estas são as etapas completas. Vamos considerar uma máquina Ubuntu 20.04.

Etapa 1: criar um usuário dedicado

# Criar o usuário runner; não execute o Runner como root
sudo useradd -m runner
sudo passwd runner  # Definir a senha

Por que usar um usuário dedicado? O processo do Runner tem acesso ao seu GitHub Token. Se ele for executado como root e for comprometido, o invasor também terá privilégios de root. Um usuário dedicado oferece ao menos uma camada de isolamento.

Etapa 2: baixar o pacote do Runner

Acesse a página de releases do Runner no GitHub e encontre o link de download da versão mais recente:

# Trocar para o usuário runner
sudo su - runner

# Baixar (substitua o número da versão)
cd ~
curl -o actions-runner-linux-x64-2.321.0.tar.gz -L \
  https://github.com/actions/runner/releases/download/v2.321.0/actions-runner-linux-x64-2.321.0.tar.gz

# Extrair
tar xzf actions-runner-linux-x64-2.321.0.tar.gz

Etapa 3: obter o Token de registro

Acesse a página Settings do seu repositório ou organização no GitHub e abra Actions -> Runners -> New self-hosted runner. A página exibirá um Registration Token. Esse Token pode ser usado apenas uma vez e deixa de ser válido após o registro.

Etapa 4: configurar e registrar

# Configurar o Runner
./config.sh --url https://github.com/YOUR_ORG \
  --token YOUR_REGISTRATION_TOKEN \
  --name my-runner-01 \
  --labels linux,ubuntu

--labels adiciona rótulos ao Runner. Depois, você pode usar runs-on: [self-hosted, linux] no Workflow para direcionar o job a esse Runner.

Etapa 5: instalar o serviço systemd

# Instalar como serviço do sistema (exige root)
sudo ./svc.sh install runner
sudo ./svc.sh start

Assim, o Runner será iniciado junto com o sistema, e o systemd o reiniciará automaticamente em caso de falha.

Como especificar o Runner em um Workflow

Depois de instalar o Runner, use runs-on no Workflow para selecioná-lo:

jobs:
  build:
    runs-on: self-hosted  # Usar qualquer Runner auto-hospedado
    steps:
      - uses: actions/checkout@v4
      - name: Build
        run: npm run build

Ou informe rótulos específicos:

jobs:
  test:
    runs-on: [self-hosted, linux, ubuntu]
    steps:
      - uses: actions/checkout@v4
      - name: Test
        run: npm test

Quando vários Runners compartilham os mesmos rótulos, o GitHub distribui os jobs automaticamente. Quanto mais preciso for o conjunto de rótulos, mais preciso será o direcionamento.

Após a implantação, verifique o status do Runner na página do GitHub. Se ele aparecer como “Offline”, pode haver um problema de rede ou um erro na configuração do Token.

Conclusão

Depois de tudo isso, qual opção escolher?

Equipe pequena e com poucos builds: use diretamente o GitHub-hosted. Depois da redução de preços, a relação custo-benefício é boa e a operação é simples. Considere o modelo auto-hospedado apenas se surgir alguma necessidade especial.

Equipe de porte médio, com dezenas de builds por dia: contêineres Docker + Runner Fleet. Essa combinação isola o ambiente, centraliza o gerenciamento e mantém o custo operacional sob controle.

Equipe grande e com muitos Runners: Kubernetes + ARC. O investimento no aprendizado traz, no longo prazo, um excelente retorno em automação operacional.

Cenário sensível à segurança: repositório privado + isolamento com Runner Groups + monitoramento com Harden-Runner. Nunca use um Runner auto-hospedado em um repositório público; isso não é apenas uma sugestão, é um alerta.

A mudança de preços de 2026 realmente alterou o cálculo de custos, mas o valor do modelo auto-hospedado não está apenas na economia. Acesso à rede interna, personalização de hardware e conformidade de dados são necessidades que o GitHub-hosted nunca conseguirá atender. Portanto, entenda seus requisitos e escolha a opção mais adequada, sem seguir tendências nem hesitar desnecessariamente.

O próximo passo? Se a sua equipe enfrenta um problema específico — acesso à rede interna, pressão de custos ou exigências de conformidade —, experimente primeiro a combinação Docker + Runner Fleet. O custo de implantação é baixo, e o resultado aparece rapidamente. Se a demanda crescer muito, ainda será possível migrar para Kubernetes mais adiante.

FAQ

Quanto custa um Runner auto-hospedado para repositórios privados?
A partir de março de 2026, o GitHub passa a cobrar US$ 0,002 por minuto pelo uso de Runners auto-hospedados em repositórios privados. Se uma equipe executar 50 pipelines de CI por dia, com 10 minutos cada, serão cerca de 15.000 minutos por mês, ou aproximadamente US$ 30.
É possível usar um Runner auto-hospedado em repositórios públicos?
**Não é recomendável de forma alguma**. O GitHub alerta explicitamente que ‘Runners auto-hospedados quase nunca devem ser usados em repositórios públicos’. Qualquer pessoa pode enviar um PR que acione o Workflow, permitindo que código malicioso execute comandos arbitrários em uma máquina da sua rede interna.
O que sai mais barato: Runner auto-hospedado ou GitHub-hosted?
Depende do volume de builds. Para equipes pequenas e com poucas execuções, o GitHub-hosted pode ser mais vantajoso depois da redução de preços. Em cenários com muitos builds, usar máquinas próprias com Runners auto-hospedados pode custar menos, mas é preciso considerar o trabalho de operação e manutenção.
O que é o Runner Fleet?
Runner Fleet é uma ferramenta open source com interface web para gerenciar todos os contêineres de Runner de forma centralizada. Ela oferece monitoramento de status, gestão unificada de Tokens, recuperação automática de falhas e operações em lote, entre outros recursos.
Para equipes de que tamanho a solução Kubernetes ARC é indicada?
Ela é indicada para equipes grandes, especialmente em cenários com mais de 20 Runners. Exige infraestrutura Kubernetes e capacidade operacional, mas permite escalonamento automático e oferece o menor custo de operação no longo prazo.

16 min de leitura · Publicado em: 23 abr 2026 · Atualizado em: 4 set 2026

Comentários

Entre com GitHub para comentar

Easton BlogEaston Blog