Usando Rsync para implantar um site. Fácil comando de um liner

Atualizado em agosto de 2014

Abaixo está um script básico para implantar arquivos em um servidor e diretório de destino. Resumindo, o rsync elimina a necessidade de copiar manualmente os arquivos modificados em um servidor. Funciona ainda melhor se você tiver sua chave instalada no servidor de destino. Você pode implantar todos os seus arquivos modificados em um único comando.

Requisito: Rsync instalado em seu servidor local e em seu servidor de destino.

Crie um arquivo “implantar” em seu diretório raiz. Certifique-se de que seja executável.

$> touch deploy
$
> chmod +x deploy

Agora, cole o seguinte script

#!/bin/bash

$ERRORSTRING
="Error. Please make sure you've indicated correct parameters"
if [ $# -eq 0 ]
then
echo $ERRORSTRING
;
elif [ $1 == "live" ]
then
if [[ -z $2 ]]
then
echo
"Running dry-run"
rsync
--dry-run -az --force --delete --progress --exclude-from=rsync_exclude.txt -e "ssh -p22" ./ username@server:/var/www/website-name
elif [ $2 == "go" ]
then
echo
"Running actual deploy"
rsync
-az --force --delete --progress --exclude-from=rsync_exclude.txt -e "ssh -p22" ./ username@server:/var/www/website-name
else
echo $ERRORSTRING
;
fi
fi

Agora, opcionalmente, crie um arquivo chamado rsync_exclude.txt ao lado do script de implantação. Coloque seus diretórios e arquivos de ignorar assim

uploads/
logs
/
cache
/
nbproject
/
.svn
.DS_Store

Para executar o script, basta iniciar seu terminal e executar o script. Leva 2 parâmetros. Se você deseja uma simulação para ver quais arquivos devem ser enviados por push, execute o seguinte:

$> ./deploy live

Se você estiver satisfeito com o resultado da simulação, anexe go . Isso fará o push real.

$> ./deploy live go

Implantar em ação (executando uma simulação)
Cenário

Implantar em ação (implantação real)
Cenário

O script aceita a configuração de vários servidores, basta modificá-lo de acordo com suas necessidades. Eu recomendo usar um processo de sincronização em 2 etapas. Um como local de teste e outro para produção.

$> ./deploy dev
$
> ./deploy dev go
$
> ./deploy live
$
> ./deploy live go

Atualizado em agosto de 2014