Estratégias de implementação multi-servidor - Git em servidores de produção?

7

Pergunta principal: A implantação usando o Git em servidores de produção é uma boa estratégia?

Muitas, muitas estratégias de implantação que vejo giram em torno de ter o Git em seus servidores (dev, staging e produção).

Os méritos disso parecem óbvios para implantação no estágio / produção:

  • Capacidade de inserir alterações rapidamente
  • Automatização mais fácil
  • Pode alternar ramificações, se necessário (talvez por servidor de teste)
  • É possível ver se os arquivos foram alterados de alguma forma em um servidor de produção

No entanto, vejo algumas desvantagens para isso:

  • Segurança - o Git parece ser um vetor potencial de ataque, mesmo que a produção tenha acesso somente leitura
  • git pull em um servidor de produção pode falhar se houver mudanças não sincronizadas na produção (embora superáveis com -f)

A implantação como empresas de serviços (por exemplo, Beanstalkapp.com, deployhq.com) usa FTP, SFTP ou SSH. O Beanstalkapp, em particular, é bom apenas para modificar arquivos baseados no histórico do git (vs reimplementando todos os arquivos). Esses serviços não solicitam que você git em seus servidores de estágio / produção (se você implementar via SSH, é discutível que você poderia / poderia usar essa estratégia).

Descobri que gosto de usar o sftp:

  • Pode executar scripts pré / pós-implantação ainda
  • Substitui, move, exclui arquivos independentemente do que está no servidor de produção (Isso é uma vantagem para mim)
  • Não tem diretório .git ou qualquer vulnerabilidade de ataque baseada em git em produção

A facilidade de usar o git em um servidor de produção vale a pena em termos de práticas recomendadas e segurança? Se não, o que é uma boa maneira de implantar, ignorando as ferramentas de integração contínua?

(Eu só pergunto sobre pular ferramentas de CI, uma vez que as limitações de tempo / orçamento / cliente não permitem que elas sejam usadas no meu dia-a-dia).

    
por fideloper 06.01.2013 / 21:10

1 resposta

5

Respondendo a sua pergunta: Sim, a implantação usando o git (ou qualquer outro controle de revisão, na verdade) é o caminho a percorrer, especialmente quando sua infraestrutura começa a se tornar complexa / grande.

Respondendo aos seus clientes

  • A segurança deve ser feita em camadas, e mesmo se o git fosse um vetor de ataque realmente preocupante, alguém ainda teria que obter acesso aos servidores para fazer isso. Tenha boa segurança de servidor, autenticação baseada em chave SSH e controle de acesso / registro e você terá um risco muito baixo.

  • Se você quiser escrever uma ferramenta de implantação, é claro que você deve considerar um procedimento de reversão caso a atualização do código falhe. O bom é que ferramentas como o capistrano (que eu estou mais familiarizado) já tem todas essas etapas embutidas, e você pode mudar o comportamento e etc.

Acho que o melhor é usar ferramentas de implantação como capistrano ou Vlad the Deployer ou mesmo Chef implanta se você já tem Chef (ou outra ferramenta de gerenciamento de configuração).

O Capistrano, por exemplo, é direcionado aos trilhos por padrão, mas você pode adaptá-lo para implantar qualquer coisa. Ele se conectará aos seus servidores, atualizará o código (mantendo algumas versões mais antigas, caso precise reverter para uma versão anterior), executará tarefas como migrações ou limpezas de banco de dados e, em seguida, reiniciará os serviços, se necessário. Você pode personalizar isso para o seu ambiente e até ter ambientes diferentes (trabalhei com produção, afirmando + 3 outros).

Todas as outras ferramentas permitirão que você faça algo assim, e acho que gastar tempo para escrever um script de implantação só é válido se o seu sistema for realmente diferente dos "usuais".

    
por 06.01.2013 / 21:44