Desenvolvimento e bases de dados
Automatizar a implementação no cPanel com o ficheiro .cpanel.yml
A interface de Git do cPanel não se limita a guardar os seus repositórios: também pode colocar as alterações em produção (fazer a implementação) executando as tarefas que definir no ficheiro .cpanel.yml.
Se procura um caso completo, passo a passo, veja implementação automática do GitHub para o cPanel com Laravel. Se preferir não o configurar manualmente, o Deploy+ faz isso a partir da área de cliente.
O ficheiro .cpanel.yml
É um ficheiro de texto em formato YAML com a lista de comandos que são executados em cada implementação: copiar ficheiros para a pasta pública, instalar dependências, limpar caches… qualquer coisa que possa fazer com um comando ou um script.
Crie-o na raiz do repositório, com esse nome exato (com o ponto à frente), e faça commit dele. A sua estrutura é esta:
--- deployment: tasks: - export DEPLOYPATH=/home/usuario/public_html/ - /bin/cp index.html $DEPLOYPATH - /bin/cp style.css $DEPLOYPATH
- As três primeiras linhas são fixas:
---,deployment:e, por baixo,tasks:. - Cada tarefa é uma linha que começa por
-(hífen e espaço), com o mesmo avanço. export DEPLOYPATH=...guarda a pasta de destino numa variável, para não a repetir em cada linha.- Os
/bin/cpcopiamindex.htmlestyle.cssdo repositório para a pasta pública. Assim, o site é atualizado com as alterações.
Substitua usuario pelo seu utilizador do cPanel. O cp substitui os ficheiros que já existam com esse nome no destino.
Copiar todo o site com rsync
Para não ir ficheiro a ficheiro, copie todo o conteúdo do repositório exceto o que não deve ser publicado:
--- deployment: tasks: - export DEPLOYPATH=/home/usuario/public_html/ - /bin/rsync -a --exclude='.git' --exclude='.cpanel.yml' ./ $DEPLOYPATH
O rsync não apaga do destino os ficheiros que já não estejam no repositório. Pode acrescentar --delete para que o faça, mas só se essa pasta contiver unicamente o que vem do repositório: apagaria também imagens carregadas, caches ou o .htaccess se não estiverem nele.
Tarefas de uma aplicação PHP
Pode executar qualquer ferramenta com o seu caminho completo. Por exemplo, instalar dependências com o Composer e esvaziar a cache de uma aplicação Laravel:
--- deployment: tasks: - cd /home/usuario/repositories/proyecto && /usr/local/bin/php /opt/cpanel/composer/bin/composer install --no-dev --optimize-autoloader - cd /home/usuario/repositories/proyecto && /usr/local/bin/php artisan config:cache
Use sempre caminhos absolutos: as tarefas não carregam a sua configuração de terminal. Se não souber onde está um programa, execute which php (ou o que for) por SSH.
Se as tarefas forem muitas ou dependerem umas das outras, coloque-as num script do repositório e chame apenas esse script a partir do .cpanel.yml:
--- deployment: tasks: - /bin/bash /home/usuario/repositories/proyecto/deploy.sh
Comece o script com set -e para que pare no primeiro comando que falhar.
Quando é executada a implementação
Push deployment: faz push para o repositório do cPanel
Se o seu repositório local tiver como remoto o repositório do cPanel, ao fazer git push o cPanel executa automaticamente as tarefas do .cpanel.yml. Para isso, o repositório do cPanel tem de ter um ramo ativo e não ter alterações por confirmar.
Para adicionar o repositório do cPanel como remoto, copie o Clone URL que aparece em Git™ Version Control > Manage e execute no seu equipamento:
git remote add cpanel ssh://usuario@tudominio.com/home/usuario/repositories/proyecto git push cpanel main
Pull deployment: o código está no GitHub, GitLab ou outro remoto
Se o repositório do cPanel for um clone de um do GitHub, faça push para o GitHub como sempre e, depois, em Git™ Version Control > Manage > Pull or Deploy:
- Update from Remote descarrega as alterações.
- Deploy HEAD Commit executa as tarefas do
.cpanel.yml.
Um push para o GitHub não avisa o cPanel por si só. Para que a implementação seja feita automaticamente em cada push, use um webhook do GitHub como se explica no caso prático com o GitHub, ou uma tarefa cron como a da secção seguinte.
Lançar a implementação com a API ou uma tarefa cron
Por SSH, este comando faz o mesmo que o botão Deploy HEAD Commit:
/usr/local/cpanel/bin/uapi VersionControlDeployment create repository_root=/home/usuario/repositories/proyecto
Substitua o caminho pelo do seu repositório. Se a resposta incluir status: 1, o cPanel pôs a implementação em marcha; o resultado de cada tarefa fica no ficheiro de log_path.
Para implementar periodicamente o que houver no GitHub, crie uma tarefa cron que primeiro descarregue as alterações e depois implemente:
cd /home/usuario/repositories/proyecto && /usr/bin/flock -n /home/usuario/.deploy.lock sh -c 'git pull -q && /usr/local/cpanel/bin/uapi VersionControlDeployment create repository_root=/home/usuario/repositories/proyecto' >/dev/null
O flock -n evita que sejam lançadas duas ao mesmo tempo se uma execução demorar mais do que o previsto. Não defina uma frequência muito alta: a cada 10 ou 15 minutos costuma bastar. Se só quiser implementar quando houver alterações, o webhook é a melhor opção.
Ver o que aconteceu numa implementação
Cada implementação deixa um registo em ~/.cpanel/logs/ com o nome vc_NUMERO_git_deploy.log. Aí aparece cada comando, a sua saída e o seu código de saída: Task completed with exit code 0 significa que correu bem; qualquer outro número indica o comando que falhou.
ls -t ~/.cpanel/logs/*git_deploy.log | head -1 | xargs cat
Se uma implementação não for executada ao fazer push, verifique em Git™ Version Control > Manage que o repositório tem um ramo ativo e que o .cpanel.yml está na raiz e confirmado com commit.
Também lhe pode ser útil
- Git Version Control do cPanel: clonar repositórios, ver o histórico e fazer a implementação Use o Git Version Control do cPanel para clonar um repositório do GitHub ou do GitLab ou criar um va...
- Implementar o WordPress e o Laravel no cPanel com o Deployer Configure o Deployer 8 para publicar o WordPress ou o Laravel no seu alojamento cPanel por SSH, com...
- 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...
- Implementação automática do GitHub para o cPanel com Git e .cpanel.yml (exemplo com Laravel) Passo a passo para clonar um repositório privado do GitHub no cPanel, definir as tarefas de implemen...
Algo não bate certo ou mudou? Diga-nos e revemos.