Desenvolvimento e bases de dados
Clonagem e implementação a partir de um repositório remoto privado
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
- Implementar o Laravel a partir do GitHub com Git e o .cpanel.yml do cPanel Monte um fluxo de implementação do Laravel do GitHub para o cPanel com chaves dedicadas, .cpanel.yml...
- Implementar o WordPress e o Laravel no cPanel com o Deployer Prepare implementações por versões com o Deployer, configure ficheiros partilhados e verifique o que...
- Implementação automática a partir do GitHub, GitLab ou Bitbucket com rollback instantâneo Ligue um repositório Git ao alojamento, execute scripts por versão com variáveis da implementação e...
- Alojar React, Vue e sites estáticos ligados a APIs externas Verifique se o seu frontend JavaScript cabe num alojamento partilhado, ligue-o ao Supabase, ao Fireb...
Algo não bate certo ou mudou? Diga-nos e revemos.