Costumo preferir padronizar minhas compilações de sistema usando principalmente scripts e fontes. Outros frequentemente gostam de usar as ferramentas de gerenciamento de configuração e criar seus próprios pacotes a partir do código-fonte para o gerenciador de pacotes nativo de suas distribuições. Se você padronizar sua construção adequadamente, esses métodos fornecem os mesmos resultados e são simplesmente maneiras diferentes de fazer as coisas.
Ainda uso pacotes de sistema e utilitários de construção de sistema nativos. Com o RHEL, o Kickstart é absolutamente essencial para a construção inicial. Para os utilitários comuns do userland, tenho tendência a padronizar os pacotes. Eu apenas compilo da fonte para a função de servidor principal. Por exemplo: banco de dados, servidor da Web, servidor proxy, balanceador de carga e assim por diante.
A1: Eu prefiro seguir o Padrão de Hierarquia do Sistema de Arquivos sempre que possível.
A2: Este é um tópico complexo. Se a atualização exigir bibliotecas atualizadas, outro software também poderá exigir essas bibliotecas. Todos os requisitos essenciais de um papel de compilação tendem a compilar por fonte. Bibliotecas Freqüentemente compartilho entre compilações e recompilo qualquer software compilado contra elas, como eu raramente compilava estaticamente. Se suas alterações forem testadas e preparadas adequadamente para a produção, você poderá minimizar a maioria dos riscos.
A3: As opções de configuração são normalmente especificadas na compilação quando se aplicam em todos os servidores. No caso de configuração única, como um VirtualHost específico em um cluster de servidores Web, eu manterei esses arquivos de configuração dentro de um Sistema de Controle de Revisão . Depois que um servidor é construído de forma programática, uma lista de verificação do sistema é concluída para uma verificação de sanidade e configuração de quaisquer opções que sejam melhor tratadas manualmente. Você também pode usar um sistema de gerenciamento de configuração para ajudar aqui, mas dependendo de quão bem sua compilação é padronizada, ela pode se tornar obsoleta.
A4: sim. Backups noturnos de todos os arquivos de configuração que são exclusivos.
A5: O sistema de atualização é basicamente a lógica incorporada no script inicial, com um script de wrapper em torno dele. Isso permite que as atualizações sejam mantidas como parte da construção. Às vezes, um conjunto de scripts mais simples usando for
faz loops em bash
e as mudanças de tubulação através de ssh. A ideia é que todas as mudanças sejam adequadamente padronizadas acima de tudo.
A6: Todas as alterações são testadas e verificadas em um ambiente de teste antes de serem testadas para produção. Todas as funcionalidades esperadas devem ser verificadas para serem operáveis.
Honestamente, eu poderia escrever um livro sobre esse assunto com base em sua pergunta como ela é. Você está essencialmente perguntando como arquitetar, padronizar e manter adequadamente um ambiente de produção. Minha resposta não é exaustiva e existem padrões fundamentais que devem ser aplicados em todas as abordagens. Você provavelmente se beneficiaria da fundação estabelecida no livro da Prática de administração de sistemas e de rede .
Eu também escrevi outras respostas sobre este assunto. Veja também:
Gerenciando uma aplicação em vários servidores, ou PXE vs cfEngine / Chef / Puppet
automatize a configuração do servidor com as compilações de origem