Este gist assume que:
- você tem um repositório git local
- com um repositório online (github / bitbucket, etc)
- e um VPS ( DigitalOcean, Rackspace, Amazon EC2, etc)
- com seus scripts PHP servidos no diretório /var/www/html/
- e suas páginas web executadas pelo apache
- com o diretório do apache em /var/www/
- (se você não notou, isso descreve uma configuração padrão do apache no Redhat / Ubuntu / CentOS / Amazon AMI, etc)
Você também consegue fazer o mesmo com Java, Perl, RoR, JSP, etc. No entanto você vai ter que recriar o (relativamente simples) script PHP.
Aqui adicionamos o script de deploy e damos um push para a origin: o script de deploy roda comandos git para dar um PULL a partir da origin, atualizando assim seu servidor
Veja deploy.php
git add deploy.php
git commit -m 'Added the git deployment script'
git push -u origin master
Aqui instalamos e configuramos o git no servidor. Também criamos uma chave SSH para que o servidor possa conversar com a origem sem precisar de senhas, etc.
Depois de instalar o git, certifique-se de que é uma versão relativamente nova - scripts antigos rapidamente tornam-se problemáticos pelo fato do github/bitbucket/etc ter as últimas versões. Se você não tiver um versão recente, precisará descobrir como atualiza-la :-)
git --version
# Add a nice repo
rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm
# Install git
yum install --enablerepo=webtatic git-all
sudo yum install git-core
git config --global user.name "Server"
git config --global user.email "[email protected]"
sudo mkdir /var/www/.ssh
sudo chown -R apache:apache /var/www/.ssh/
sudo -Hu apache ssh-keygen -t rsa # choose "no passphrase"
sudo cat /var/www/.ssh/id_rsa.pub
Aqui adicionamos a chave SSH à origin para permitir que seu servidor se comunique sem senhas. No caso do GitHub também configuramos um hook de pós-recebimento que automaticamente chamará a URL de deploy, disparando assim um PULL request do servidor para a origin
- https://github.com/settings/ssh
- Crie uma nova chave
- Cole a chave de deploy que você gerou no servidor
- https://github.com/oodavid/server.com/admin/hooks
- Selecione o service hook da URL de Pós-Recebimento (Post-Receive URL)
- Entre a URL ao seu script de deploy - http://server.com/deploy.php
- Clique em Update Settings
- https://bitbucket.org/account/ssh-keys/
- Crie uma nova chave
- Cole a chave de deploy gerada no servidor
- Vá para: Repo > Admin > Services
- Selecione "POST"
- Adicione a URL ao seu script se deploy - http://server.com/deploy.php
- Salve
Grato a DrewAPicture nos comentários pela informação abaixo
Aqui clonamos o repositório origin em uma pasta chmodded /var/www/html
sudo chown -R apache:apache /var/www/html
sudo -Hu apache git clone [email protected]:you/server.git /var/www/html
Now you're ready to go :-)
- Navegue ao script de deploy para disparar um pull e ver o output:
- http://server.com/deploy.php
- útil para debugging também ;-)
- Ao dar um push pro GitHub seu site vai dar um ping automático na url acima (e puxar o código)
- Ao dar um push pro Bitbucket você vai precisar dar um ping manual na url acima
- Seria trivial configurar outro repositório no servidor para branches diferentes (develop, release-candidate, etc) - repita a maioria dos passos, mas dê checkout na branch após baixar o repositório