Um chef para governá-los todos

10

Estou procurando um chef para automatizar as implantações do Magento - tanto nas opções de hospedagem padrão do Magento quanto em ambientes como o EC2. Pesquisei no Google e vi várias receitas, mas nenhuma realmente me parece canônica. Existe algum script de chef em particular que seja melhor / melhor? Além disso, se você já fez implantações de chefes com PHP antes, o que você gostaria de saber quando estava começando?

Alan Storm
fonte
2
Eu gostaria de saber que o Ansible ( ansible.com/home ) existia.
Reid Blomquist
Outras alternativas, se você estiver interessado, saltstack.com e docker.com . Ambos parecem promissores, mas também não tive a chance de trabalhar.
beeplogic
1
Eu tenho experimentado com capistrano-ash: github.com/augustash/capistrano-ash
pzirkind
Acho que Reid gosta de algo, Alan re: Ansible. Ele não requer a instalação de um agente (funciona com chaves ssh +) nos clientes, é um sistema declarativo, portanto é idempotente e, em geral, descobri que usá-lo me deixa com o "faça uma coisa, faça simplesmente, e fazê-lo bem ", como um unix, comparado a sistemas mais robustos, como chef, fantoche e sal. Já faz algum tempo desde que você postou isso originalmente, alguma atualização em seus pensamentos depois de trabalhar com o chef há algum tempo?
Bryan 'BJ' Hoffpauir Jr.

Respostas:

6

É quase impossível ter um conjunto de rotinas de tamanho único. Eu tive sucesso escrevendo um script Bash que executa chef-clientcorridas nas listas de hosts fornecidas por knife search. Os procedimentos são assim ...

Código aberto Chef Server 10.18.2 no Ubuntu 12.04 LTS

  1. Inicializar variáveis
  2. Obtenha o hash de revisão mais recente do GitHub para $branch
  3. Desabilitar o monitoramento de disponibilidade para impedir alertas sobre o status HTTP 503
  4. Alterne todos os hosts da Web e utilitários para o modo de manutenção
  5. Utilitário de implantação
    1. Pare o cron do Magento e todos os trabalhadores da Resque
    2. Endereçar dependências do sistema de arquivos
    3. Chef verifica a revisão definida como uma nova versão
    4. Endereço dependências do Magento (pacotes, módulos, sistema de arquivos, permissões)
    5. Atualize todas as tarefas e scripts cron para automação
    6. Implantar todos os módulos (compositor)
    7. Limpar cache com n98-magerun.phar
    8. Execute qualquer migração com n98-magerun.phar
    9. Reativar o Magento cron
    10. Iniciar trabalhadores do Resque
  6. Implante o primeiro host da web
    1. Endereçar dependências do sistema de arquivos
    2. Chef verifica o definido $revisioncomo uma nova versão
    3. Endereço dependências Magento
    4. Implantar todos os módulos Magento
  7. Marcar uma nova implantação na New Relic
  8. Ativar serviços de monitoramento de disponibilidade
  9. Desativar serviços do balanceador de carga para todos os outros hosts da web
  10. Continue as implantações em hosts da web, colocando-as sequencialmente on-line
  11. Executar rotinas de Chef para os hosts de pesquisa

Fonte: https://gist.github.com/parhamr/6177160#file-2-deployment

parhamr
fonte
4

Foi assim que me aproximei dessa área enquanto usava o papel de ser administrador de sistemas / devops. A maioria dos itens a seguir serão apenas princípios gerais que tento seguir e não específicos do Chef.

Acabei indo com o Puppet porque descobri que havia mais recursos na época e me senti mais fácil de pegar.

Eu olhei para os vários módulos pré-criados disponíveis para coisas como apache, php5, etc. Muitos deles pareciam fazer muito mais do que eu precisava e por estarem tão familiarizados com a plataforma que não confiavam no que estava acontecendo. Decidi que seria mais simples identificar o que precisava ser feito em cada tipo de nó.

Iniciei o processo provisionando o ambiente de desenvolvimento local da equipe (vargrant + caixa virtual). Para cada serviço / componente, criei um módulo: php5, apache2, redis, mysql, etc.

Depois que o ambiente de desenvolvimento estava estável / funcionando, comecei a criar o ambiente de controle de qualidade. Eu defini tipos de nós genéricos para servidores web, redis, vernizes etc. que reutilizaram os mesmos módulos que o dev. Feito isso, o armazenamento temporário e a produção precisavam de mudanças mínimas para começar a funcionar.

Ao escrever e escrever suas receitas / modelos, considere como se poderia ser reutilizado / generalizado. Não codifique coisas como caminhos ou usuários / grupos que podem mudar entre distros / projetos / ambientes. Como você está olhando para uma abordagem generalizada, acho que um grande obstáculo será lidar com as diferenças entre as distribuições * nix.

Mais importante, manter é simples. Automatize / padronize as partes mais importantes / demoradas do ambiente. Iterar, evoluir.

beeplogic
fonte