Skip to content

Instantly share code, notes, and snippets.

@jmo-jr
Last active May 9, 2023 21:48
Show Gist options
  • Save jmo-jr/efbcbb62e3e5b637bdbbe5ab413a0daa to your computer and use it in GitHub Desktop.
Save jmo-jr/efbcbb62e3e5b637bdbbe5ab413a0daa to your computer and use it in GitHub Desktop.
Como fazer o deploy de um aplicativo PHP, do Bitbucket para um VPS.

Fazendo o deploy de seu site com Git

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.

1 - Em sua máquina local

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

Pegue um script de deploy para o seu site

Veja deploy.php

Add, commit e push este arquivo para o repositório online (github, p.e.)

git add deploy.php
git commit -m 'Added the git deployment script'
git push -u origin master

2 - Em seu servidor

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.

Instale o git...

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

...no CentOS 5.6

# Add a nice repo
rpm -Uvh http://repo.webtatic.com/yum/centos/5/latest.rpm
# Install git
yum install --enablerepo=webtatic git-all

...usando yum genérico

sudo yum install git-core

Configurando git

git config --global user.name "Server"
git config --global user.email "[email protected]"

Crie um diretório ssh para o usuário do Apache

sudo mkdir /var/www/.ssh
sudo chown -R apache:apache /var/www/.ssh/

Gere uma chave de deploy para o usuário do Apache

sudo -Hu apache ssh-keygen -t rsa # choose "no passphrase"
sudo cat /var/www/.ssh/id_rsa.pub

3 - Na sua origin (github / bitbucket)

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

Instruções GitHub

Adicione a chave SSH ao seu usuário

  1. https://github.com/settings/ssh
  2. Crie uma nova chave
  3. Cole a chave de deploy que você gerou no servidor

Configure o hook de serviço

  1. https://github.com/oodavid/server.com/admin/hooks
  2. Selecione o service hook da URL de Pós-Recebimento (Post-Receive URL)
  3. Entre a URL ao seu script de deploy - http://server.com/deploy.php
  4. Clique em Update Settings

Instruções para Bitbucket

Adicione a chave SSH à sua conta

  1. https://bitbucket.org/account/ssh-keys/
  2. Crie uma nova chave
  3. Cole a chave de deploy gerada no servidor

Configure o service hook

  1. Vá para: Repo > Admin > Services
  2. Selecione "POST"
  3. Adicione a URL ao seu script se deploy - http://server.com/deploy.php
  4. Salve

Grato a DrewAPicture nos comentários pela informação abaixo

4 - No Servidor

Aqui clonamos o repositório origin em uma pasta chmodded /var/www/html

Pull a partir da origin

sudo chown -R apache:apache /var/www/html
sudo -Hu apache git clone [email protected]:you/server.git /var/www/html

Regozije-se!

Now you're ready to go :-)

Notes

  • Navegue ao script de deploy para disparar um pull e ver o output:
  • 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

Fontes

<?php
/**
* Script de deploy com Git
*
* Usado para fazer o deploy automático de um website, via Github ou Bitbucket.
*
* Mais detalhes em https://gist.github.com/rdeavila/6503795
* Este Gist é um fork de https://gist.github.com/1809044
*/
// The commands
$commands = array(
'echo $PWD',
'whoami',
'git pull',
'git status',
'git submodule sync',
'git submodule update',
'git submodule status',
);
// Run the commands for output
$output = '';
foreach($commands AS $command){
// Run it
$tmp = shell_exec($command);
// Output
$output .= "<span style=\"color: #6BE234;\">\$</span> <span style=\"color: #729FCF;\">{$command}\n</span>";
$output .= htmlentities(trim($tmp)) . "\n";
}
// Make it pretty for manual user access (and why not?)
?>
<!DOCTYPE HTML>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<title>GIT DEPLOYMENT SCRIPT</title>
</head>
<body style="background-color: #000000; color: #FFFFFF; font-weight: bold; padding: 0 10px;">
<pre>
. ____ . ____________________________
|/ \| | |
[| <span style="color: #FF0000;">&hearts; &hearts;</span> |] | Git Deployment Script v0.1 |
|___==___| / &copy; oodavid 2012 |
|____________________________|
<?php echo $output; ?>
</pre>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment