Pular para o conteúdo

Conecte seu servidor a um repositório do GitHub, GitLab, Gitea ou Forgejo e faça deploy automaticamente a cada push, release ou tag, com caminhos protegidos, reinícios, verificações de CI e rollback com um clique.

A aba Git Deploy no Portal conecta seu servidor a um repositório Git no GitHub, GitLab, Gitea ou Forgejo. Os arquivos dele são copiados para o seu servidor automaticamente — a cada push, quando você publica uma release, quando envia uma tag, ou com o clique de um botão. Se quiser, o seu servidor é parado com segurança antes do deploy e iniciado de novo depois.

Resumindo: envie o seu código e, alguns segundos depois, ele está rodando no seu servidor. Sem mais upload via SFTP, sem descompactar arquivos ZIP no gerenciador de arquivos, sem reinícios esquecidos.

O que você vai aprender

  • Como conectar um repositório, com o app GitHub Daki Git Deploy ou com um token de acesso
  • Quando um deploy é executado e como disparar um você mesmo
  • Como manter mundos, bancos de dados e arquivos .env seguros com caminhos protegidos
  • Como funcionam os reinícios, o histórico de deploys, os rollbacks e o status no seu repositório
  • Como dar à sua equipe as permissões certas

Para quem é

  • Desenvolvedores de bots do Discord e de apps Node.js, Python ou Java cujo código já está no GitHub ou no GitLab.
  • Redes de Minecraft e equipes de servidores de jogos que mantêm plugins, configurações ou datapacks em um repositório e querem que as mudanças sejam publicadas de forma rastreável.
  • Equipes: várias pessoas trabalham no repositório, o servidor está sempre atualizado, e as permissões dos subusuários definem exatamente quem pode fazer deploy.
  • Projetos baseados em releases: só versões publicadas (por exemplo, um .jar pronto de uma release) chegam ao servidor, não cada trabalho em andamento.

Antes de começar

  • Um servidor no Portal que mostre a aba Git Deploy. Ela fica na navegação do servidor, em Essentials, logo após Files por padrão.
  • Um repositório no GitHub (github.com), GitLab (gitlab.com ou sua própria instância, incluindo subgrupos como grupo/subgrupo/projeto), Gitea ou Forgejo (por exemplo, Codeberg ou sua própria instância). Repositórios públicos e privados funcionam.

A Daki decide, por tipo de servidor (egg), se a aba é exibida. Se você não vir Git Deploy, ela não está habilitada para o tipo do seu servidor.

Este guia usa os rótulos em inglês da aba Git Deploy. A aba está disponível em 19 idiomas e segue o idioma que você escolheu no Portal — os botões ficam no mesmo lugar em todos os idiomas.


O caminho mais rápido: conecte-se pelo Daki Git Deploy, o app oficial do GitHub da Daki Hosting. Você entra no GitHub e escolhe os seus repositórios — sem token e sem webhook.

  1. Abra a aba Git Deploy

    No Portal, abra o seu servidor e vá para a aba Git Deploy. Em Git service, escolha GitHub.

  2. Conecte com o GitHub

    Na caixa GitHub access, clique em Connect with GitHub. Entre no GitHub e autorize o app.

    Na primeira vez, o GitHub leva você direto para escolher quais repositórios o app pode acessar (All repositories ou apenas alguns selecionados) — uma etapa só, em vez de duas. Depois, você volta ao Portal, e a caixa GitHub access mostra Connected via Daki Git Deploy as com o seu nome no GitHub. A caixa Webhook confirma que não há nada para configurar: os pushes e as releases chegam pelo app sozinhos.

  3. Escolha o seu repositório e o branch

    Clique em Choose from my repositories e selecione o seu repositório, ou cole a URL web ou de clone, ou informe o caminho. Clique em Load branches e escolha o branch que será publicado. Deixe o campo vazio para usar o branch padrão do repositório.

  4. Escolha quando e como fazer o deploy

    Em When to deploy, escolha um modo (por exemplo, Every push). Depois, defina a pasta de destino, os seus caminhos protegidos e o comportamento de reinício.

  5. Salve

    Clique em Save settings na barra na parte inferior. Pronto: o cabeçalho da aba mostra Automatic deploys on, e o seu próximo push será publicado automaticamente. Para fazer o deploy agora mesmo, clique em Deploy now no canto superior direito.

  • Permitir outro repositório: Choose repositories on GitHub abre de novo a seleção de repositórios no GitHub, onde você escolhe a quais repositórios o Daki Git Deploy pode acessar.
  • Remover a conexão: clique em Disconnect. Depois disso, o servidor não faz mais deploy a partir de repositórios privados.

Você nunca precisa renovar nada. Para cada deploy, o Portal busca em segundo plano uma chave nova e de curta duração no GitHub (válida por 1 hora), que chega apenas ao único repositório do seu servidor.


Início rápido com um token de acesso

Para GitLab, Gitea e Forgejo — e para o GitHub, se você preferir — você salva um token de acesso pessoal. Repositórios públicos funcionam sem nenhum token.

  1. Escolha o serviço Git

    Abra o seu servidor → Git Deploy e escolha o Git service. Para a sua própria instância de GitLab, Gitea ou Forgejo, informe a URL do servidor (por exemplo, https://codeberg.org ou https://git.example.com). Para o gitlab.com, deixe o campo vazio.

  2. Informe o repositório

    Informe o repositório como um caminho (dono/nome) ou simplesmente cole a URL web ou de clone dele. Para um repositório público, só isso basta — sem token, a caixa de acesso mostra No token – public repositories only.

  3. Salve um token para repositórios privados

    No GitHub, primeiro clique em Use an own access token instead na caixa GitHub access. Depois, crie um token no seu provedor Git — o link Create a token on … no Portal leva você direto à página certa — e salve-o em Personal access token. O Portal verifica o token imediatamente. Veja Permissões do token para as permissões que ele precisa.

  4. Escolha as suas configurações e salve

    Escolha quando fazer o deploy, a pasta de destino, os caminhos protegidos e o comportamento de reinício, depois clique em Save settings.

  5. Adicione o webhook

    A caixa Webhook mostra o Payload URL e o Secret, cada um com um botão de copiar. Adicione-os ao seu repositório conforme descrito em Configure o webhook. Abaixo da caixa, Last delivery mostra se o webhook está chegando.

  6. Ative os deploys automáticos

    Ative Automatic deploys active.

Permissões do token

ProvedorTipo de tokenPermissões para deploysTambém necessário para o status no seu repositório
GitHubToken de granularidade fina, somente para este repositórioContents: Read-only (para Wait for CI checks também Actions: Read-only)Commit statuses e Deployments: Read and write
GitLabToken de acesso pessoal, de projeto ou de gruporead_api + read_repositoryapi no lugar de read_api, papel Developer
Gitea / ForgejoSettings → Applicationsrepository: Read, user: Readrepository: Read and Write

Se apenas a permissão de escrita para o status estiver faltando, o seu servidor ainda recebe o deploy — o log do deploy mostra uma observação.

Configure o webhook

No seu repositório, vá para Settings → Webhooks → Add webhook:

  1. Cole o Payload URL e o Secret do Portal.
  2. Defina o content type como application/json.
  3. Em eventos, escolha Just the push event. No modo de releases, escolha Releases.

Seu provedor Git não consegue acessar o Portal, por exemplo porque a sua instância de Gitea roda na sua rede doméstica? Escolha um intervalo em Also check … for updates (por exemplo Also check Gitea for updates). A primeira verificação faz o deploy do estado atual uma vez.


Quando um deploy é executado

Em When to deploy, escolha um dos quatro modos:

ModoO que é publicado
ManualSomente quando alguém clica em Deploy now.
Every pushCada push para o branch escolhido.
ReleasesSomente quando uma release é publicada. Você pode publicar o código-fonte da release ou um arquivo da release (por exemplo, *.jar) — opcionalmente salvo com um nome fixo (por exemplo, server.jar) e opcionalmente extraído, se for um .zip. Pré-releases podem ser incluídas ou deixadas de fora.
TagsQuando uma tag que corresponde a um padrão é enviada, por exemplo v*.

Gatilhos

  • Webhook: o seu provedor Git informa as mudanças imediatamente, e o deploy começa em segundos. Com o app do GitHub, isso acontece automaticamente, sem um webhook seu.
  • Verificações de atualização (polling): opcionais, para casos em que o seu provedor Git não consegue acessar o Portal. Intervalos de 5 minutos a 1 dia.
  • Deploy now: a qualquer momento, com o clique de um botão. No modo de releases, você pode escolher uma release específica.
  • Pular um push: coloque [skip deploy] na mensagem do commit e esse push não é publicado. [deploy skip] e [no deploy] também funcionam.

Aguarde as verificações de CI

Com Wait for CI checks ativado (somente no modo Every push), um commit só é publicado quando o CI dele está verde — GitHub Actions, GitLab CI e Gitea/Forgejo Actions são suportados. Se o CI falhar, o deploy é ignorado.


Todas as configurações explicadas

SeçãoConfiguraçãoO que faz
RepositórioGit serviceGitHub, GitLab, Gitea ou Forgejo
RepositórioServer URLSomente para instâncias próprias; precisa estar acessível pela internet
RepositórioRepositorydono/nome ou uma URL; Choose from my repositories mostra uma lista
RepositórioBranchVazio = branch padrão; Load branches mostra uma lista
Quando fazer deployManual / Every push / Releases / TagsVeja Quando um deploy é executado
Quando fazer deployWait for CI checksSomente com Every push
Quando fazer deployInclude pre-releases, What to deploy (Source code / Release file), Save as, Extract .zip files instead of uploading themSomente com Releases
Quando fazer deployTag patternSomente com Tags, por exemplo v*; vazio = todas as tags
Quando fazer deployAlso check … for updates (com o nome do seu serviço Git, por exemplo Also check GitHub for updates)Polling: Never (webhook only), 5/10/15/30 min, 1/3/6/12/24 h
Quando fazer deployAutomatic deploys activeDesligado pausa o webhook e o polling; Deploy now continua funcionando
Quando fazer deployShow deploys in the repositoryStatus no commit, veja Status no seu repositório
ArquivosFolder in the repositoryPublica somente uma subpasta, por exemplo dist; vazio = tudo
ArquivosTarget folder on the serverPara onde os arquivos vão; / = a pasta principal do seu servidor
ArquivosProtected pathsUma regra por linha, veja Caminhos protegidos
ArquivosRemove files that were deleted from the repositoryLimpeza opcional, veja abaixo
ReinícioRestart if running / Always start / Do not restartVeja Comportamento de reinício
ReinícioIf the server does not stopParar imediatamente, ou após 5 s, 10 s (padrão: Kill after 10 seconds), 15 s, 30 s, 1 min, 2 min ou 5 min

As mudanças só têm efeito depois que você clica em Save settings. Enquanto houver algo não salvo, uma barra na parte inferior mostra Discard e Save settings, e Deploy now fica bloqueado.

Remove files that were deleted from the repository remove apenas arquivos que um deploy anterior gravou — nunca caminhos protegidos e nunca arquivos criados por você. Pastas vazias permanecem no lugar.


Caminhos protegidos

Arquivos e pastas em Protected paths nunca são sobrescritos nem excluídos por um deploy. Se ainda não existirem, são criados uma única vez. Perfeito para mundos de jogos, bancos de dados e senhas.

Escreva uma regra por linha, relativa à pasta de destino. Linhas vazias e linhas que começam com # são ignoradas. * nunca corresponde através de um /.

RegraProtege
world/Toda pasta chamada world, em qualquer profundidade
/world/Somente world diretamente na pasta de destino
*.dbTodo arquivo que termina em .db, em qualquer lugar
.envTodo arquivo chamado .env, em qualquer lugar
/config.ymlSomente config.yml diretamente na pasta de destino
plugins/*/config.ymlconfig.yml em cada subpasta direta de plugins

Exemplos típicos:

Text
world/
world_nether/
world_the_end/
plugins/*/config.yml
whitelist.json
ops.json
banned-*.json

Comportamento de reinício

OpçãoO que acontece
Restart if runningO servidor é parado antes de os arquivos serem gravados e iniciado de novo depois. Um servidor desligado continua desligado.
Always startIgual à opção acima, e um servidor desligado é iniciado depois do deploy.
Do not restartOs arquivos são substituídos enquanto o servidor continua rodando.

If the server does not stop: alguns programas, especialmente apps Node.js, ignoram o sinal de parada. Nesse caso, o servidor é encerrado à força depois do tempo que você escolher (imediatamente, de 5 segundos até 5 minutos; Kill after 10 seconds por padrão), para que o deploy não fique travado. Encerrar na hora é o mais rápido, mas não dá tempo ao servidor para salvar nada.

Duas redes de segurança: se o servidor não desligar de jeito nenhum, nenhum arquivo é alterado. Se o deploy falhar depois que o servidor foi parado, o servidor é iniciado de novo.


O que acontece durante um deploy

  1. Um gatilho (push, release, tag, verificação de atualização ou botão) cria um deploy.
  2. Se Wait for CI checks estiver ativado, ele espera pelas verificações de CI verdes (Waiting).
  3. O Portal baixa o arquivo compactado do seu provedor Git. As suas credenciais nunca saem do Portal e nunca chegam ao seu servidor.
  4. O arquivo é preparado: apenas a pasta escolhida, com os caminhos protegidos filtrados, e conteúdo inseguro, como links simbólicos, é descartado.
  5. Conforme as suas configurações, o servidor é parado (e encerrado à força depois do tempo escolhido, se necessário).
  6. Os arquivos são gravados na pasta de destino; opcionalmente, arquivos excluídos no repositório são removidos.
  7. Conforme as suas configurações, o servidor é iniciado de novo.
  8. O resultado e o log completo aparecem no histórico — e, se ativado, como status no commit.

Um deploy normalmente leva de 10 a 40 segundos, além do tempo que o seu servidor precisa para parar.


Histórico, logs e rollback

A lista Deployments no final da aba mostra cada deploy com o seu status, branch e commit (por exemplo main @ 75cd0a1), número, gatilho, a pessoa que o iniciou, o horário e a mensagem do commit. O cabeçalho da aba mostra quando o servidor foi publicado pela última vez.

StatusSignificado
WaitingAguardando as verificações de CI
ScheduledNa fila, começa em instantes
RunningO deploy está em andamento
DeployedConcluído com sucesso
FailedAlgo deu errado — o log mostra o quê
SkippedNão publicado, por exemplo porque o CI falhou ou o commit tem [skip deploy]
CancelledCancelado antes de começar
  • Log: cada deploy tem um log ao vivo, que é atualizado enquanto o deploy roda. Hide log fecha o log de novo.
  • Rollback com um clique: clique em Deploy again em um deploy anterior para publicar aquele estado mais uma vez.
  • Cancelar: deploys em Waiting ou Scheduled podem ser cancelados.

Vários servidores podem fazer deploy ao mesmo tempo, mas cada servidor roda apenas um deploy por vez. Um novo gatilho substitui um deploy mais antigo que ainda está esperando.


Status no seu repositório

Com Show deploys in the repository ativado, o seu commit mostra um status Daki Hosting / nome do seu servidor: amarelo enquanto o deploy roda, depois um check verde ou um X vermelho, com um link para a aba Git Deploy.

  • No GitHub, um deploy também aparece em Deployments, com o nome do seu servidor como ambiente.
  • Com o app do GitHub, o status é escrito pelo Daki Git Deploy e mostra o logo dele; não há mais nada para configurar. Com um token, mostra a foto da conta do token, e o token precisa de permissões de escrita (veja Permissões do token).
  • Você pode desligar isso por servidor. Somente o status e o link são públicos — sem logs e sem detalhes de erros.

Equipes e permissões de subusuários

Subusuários recebem o próprio grupo de permissões Git Deploy:

PermissãoPermite
view (github.read)Ver as configurações, o endereço do webhook e o histórico com logs
deploy (github.deploy)Deploy now, Deploy again e cancelar deploys
change settings (github.update)Repositório, acesso, webhook e todas as configurações

Subusuários não têm acesso ao Git Deploy por padrão — você decide quem recebe qual permissão. O dono do servidor sempre pode fazer tudo.


Segurança

  • Tokens e segredos são armazenados criptografados e nunca são enviados ao seu navegador.
  • Com o app do GitHub, não há nenhum token seu de longa duração para os deploys: cada deploy usa uma chave de curta duração (1 hora) que chega apenas ao repositório do seu servidor.
  • O seu próprio acesso ao GitHub decide quais repositórios você pode conectar. Ninguém consegue trazer repositórios de outra pessoa para o próprio servidor.
  • Os webhooks são assinados com um segredo próprio para cada servidor. Entregas com segredo errado ou para outro repositório são rejeitadas.
  • Somente a pessoa que salvou o token pode alterar o repositório, então subusuários não conseguem usar o token do dono para carregar outros repositórios privados.
  • Se você mudar o Git service ou a URL do servidor, o token salvo é excluído automaticamente ao salvar.
  • Caminhos protegidos nunca são sobrescritos, e Remove files that were deleted from the repository só exclui o que o Git Deploy gravou.
  • O status público no seu repositório não contém logs nem detalhes de erros.

Limitações conhecidas

  • Um repositório e um acesso por servidor.
  • Cada servidor roda apenas um deploy por vez.
  • O status no seu repositório só aparece quando o deploy de fato começa, não enquanto ele espera pelo CI.
  • Arquivos de release só são extraídos se forem arquivos .zip; um .tar.gz é enviado como arquivo.
  • Pastas vazias permanecem no lugar depois de Remove files that were deleted from the repository.
  • Links simbólicos no repositório não são publicados.
  • O GitLab não tem pré-releases; uma release com data futura conta como pré-release.
  • GitLab: arquivos de release enviados ao projeto (/uploads/…) não podem ser baixados com um token de projetos privados; links para o registro de pacotes funcionam.
  • Connect with GitHub só está disponível para o GitHub; GitLab, Gitea e Forgejo usam um token.

Perguntas frequentes e solução de problemas

Preciso renovar meu token regularmente?

Não com o app do GitHub: o Portal busca uma chave nova para cada deploy automaticamente. Um token próprio vale pelo período que você definiu ao criá-lo no seu provedor Git; quando ele expirar, basta salvar um novo.

Meu repositório não está na lista (app do GitHub)

Clique em Choose repositories on GitHub e permita que o app acesse o repositório.

O deploy fica em Scheduled

Aguarde um pouco. Se continuar assim por mais de alguns minutos, por favor entre em contato com o suporte.

O webhook não chega, ou o GitHub mostra erro 401

O segredo não confere. Copie o segredo no Portal e informe-o novamente no webhook. New secret cria um novo — nesse caso, altere-o também no seu provedor Git.

Por que o meu deploy foi ignorado?

Possíveis motivos: as verificações de CI falharam, a mensagem do commit contém [skip deploy], ou um gatilho mais novo substituiu um deploy que ainda estava esperando. O motivo aparece na linha do deploy.

Não vejo um status no meu commit

Show deploys in the repository precisa estar ativado. Com um token, o token também precisa de permissões de escrita (veja Permissões do token) — o log do deploy mostra o motivo.

O deploy falha com “The node rejected the request”

O tipo do seu servidor não permite certos arquivos, ou o disco está cheio. O log mostra os detalhes.

A URL da minha instância própria de Gitea é rejeitada

Instâncias próprias precisam estar acessíveis pela internet. Endereços de uma rede doméstica, como 192.168.x.x, não funcionam.

Como faço rollback?

No histórico, clique em Deploy again no deploy anterior para o qual você quer voltar.

O meu mundo de jogo ou o meu banco de dados será sobrescrito?

Não, se estiverem listados em Protected paths (por exemplo, world/ ou *.db).

Quem na minha equipe pode fazer deploy?

Somente pessoas com a permissão deploy no grupo Git Deploy das configurações de subusuários do servidor. O dono do servidor sempre pode fazer tudo.


Próximos passos