Desenvolvimento e bases de dados

Clonagem e implementação a partir de um repositório remoto privado

Revisto a 7 min de leitura git github despliegues

Importante: atualmente dispõe da ferramenta Deploy, um sistema avançado e simples de usar que se integra com o seu repositório do GitHub. Tem mais informação em Deploy, ferramenta de implementação automática a partir do GitHub.

Noutros artigos falámos das estratégias de implementação, de como criar ou clonar um repositório a partir do cPanel e até de como aplicar alterações a partir dessa interface.

Hoje, no entanto, vamos tratar de um método diferente, já que a interface do cPanel não costuma ser a melhor opção quando se trabalha com um repositório remoto privado.

No exemplo seguinte, vamos clonar um repositório privado alojado no GitHub e obter as alterações a partir dele sempre que for necessário.

Requisitos

Tenha em conta que vamos trabalhar com o terminal, por isso é essencial que tenha conhecimentos mínimos da sua utilização e que ative o acesso SSH no seu serviço de alojamento.

Depois de entrar, crie uma chave Ed25519 dedicada apenas a este repositório. Se o nome do ficheiro já existir, escolha outro; não substitua uma identidade em uso:

umask 077
mkdir -p ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/github_repositorio_deploy -C "deploy repositorio cpanel"
chmod 600 ~/.ssh/github_repositorio_deploy
chmod 644 ~/.ssh/github_repositorio_deploy.pub

Use uma frase-passe e um agente SSH quando o processo admitir interação. Se precisar de executar um pull sem supervisão, a chave pode ficar sem frase-passe, mas tem de permanecer fora de public_html, com permissões 600, sem ser reutilizada e com acesso só de leitura a um único repositório. Mostre a chave pública com:

cat ~/.ssh/github_repositorio_deploy.pub

Dar permissões no GitHub

Agora temos de permitir o acesso do nosso servidor ao repositório privado. No caso do GitHub, aceda ao repositório em questão:

  • Clique em Settings dentro do repositório concreto.
  • No menu lateral, abra Deploy keys.
  • Clique em Add deploy key, cole a chave pública e atribua um título identificável.
  • Não ative permissões de escrita se o alojamento só precisar de clonar e atualizar o código.

Configure um alias para obrigar o Git a usar essa identidade:

Host github-repositorio
    HostName github.com
    User git
    IdentityFile ~/.ssh/github_repositorio_deploy
    IdentitiesOnly yes

Guarde o bloco em ~/.ssh/config, aplique chmod 600 ~/.ssh/config e verifique previamente a impressão digital do GitHub por um canal independente.

Para verificar que está tudo correto, execute por SSH na sua conta:

ssh -T git@github-repositorio

Se receber uma saída do tipo:

Hi usuario/repositorio! You've successfully authenticated, but GitHub does not provide shell access.

Significa que a autenticação está correta e podemos continuar com os passos.

Se, pelo contrário, receber Permission denied (publickey)., significa que não tem permissões; reveja novamente o processo, porque algum passo não foi feito corretamente.

Estes passos são para o GitHub; no entanto, outras plataformas como o Bitbucket terão um processo semelhante através de autenticação por chaves SSH.

Clonar o repositório privado

Copie o URL do repositório a partir do botão Code, separador SSH, e substitua github.com pelo alias github-repositorio configurado antes.

Clone o repositório fora do diretório público:

mkdir -p ~/repositories
git clone git@github-repositorio:usuario/repositorio.git ~/repositories/repositorio

Não clone diretamente dentro de public_html: exporia o diretório .git se o servidor web não o bloquear. Publique apenas os ficheiros necessários através da ferramenta Deploy, do .cpanel.yml ou de uma estratégia de releases e ligações simbólicas.

Obter as alterações

Clonar ou atualizar o Git não instala dependências nem publica automaticamente um site. Para atualizar o clone, verifique primeiro o seu estado:

cd "$HOME/repositories/repositorio" || exit 1
git status --short
git branch --show-current

Se houver alterações locais ou o ramo não for o esperado, pare e reveja a sua origem. Para o ramo main, uma atualização que não crie automaticamente um merge seria:

git pull --ff-only origin main

Adapte o ramo e execute depois o procedimento de implementação do projeto. Não use git reset --hard para esconder uma divergência sem rever o que perderia.

A chave de leitura deste exemplo não permite git push. Se precisar de recuperar uma alteração feita no alojamento, reveja-a e passe-a para o seu fluxo de desenvolvimento sem alargar, por comodidade, a permissão da chave de implementação.

Considerações

O Git no nosso sistema funciona como no seu computador local. Se quiser prescindir do GitHub, pode criar um repositório privado fora de public_html e ligar o seu computador a esse remoto. Mantenha também fora do diretório público qualquer clone de trabalho e publique em public_html apenas os ficheiros necessários através do Deploy, do .cpanel.yml ou de uma estratégia de releases. A interface Git do cPanel permite gerir este fluxo.

O teste ssh -T do GitHub pode terminar com o código 1 mesmo que confirme a autenticação, porque não oferece uma shell interativa. Verifique a mensagem e o repositório autorizado, não apenas o código de saída.

Também lhe pode ser útil

Algo não bate certo ou mudou? Diga-nos e revemos.