Nós migramos muito código-fonte para o git e estamos muito felizes com a nossa solução atual. Gostaríamos de ter nossos arquivos de configuração de servidor com versão no mesmo sistema, mas há algumas coisas que não funcionam da maneira que gostaríamos e espero que alguém possa compartilhar sua experiência aqui.
Esta pergunta é semelhante a Usando o controle de revisão para arquivos de configuração do servidor? , mas temos alguns requisitos especiais que não funcionam com as sugestões dessa pergunta.
A configuração atual usa o subversion para arquivos de configuração. O repositório correspondente se parece com isso
/ # raiz do repositório + - www.domain.com/ # configuração para www | \ - etc / | \ - apache2 / + - dev.domain.com/ # configuração para dev | + - etc / | \--optar/ | \ - app1 / | \ - configuração conf / # para app1 no dev \ - staging.domain.com/ # configuração para teste
Com o subversion, isso funcionaria perfeitamente, porque é possível fazer o checkout de um subdiretório de um repositório. Além disso, você pode usar svn: externals para apontar para uma estrutura comum para várias configurações diferentes. Nós apenas tivemos que lidar com os arquivos .svn em todos os diretórios com versão. O Git, por outro lado , não possui svn: externals e checkouts esparsos sempre exigem que o caminho da raiz para o diretório real seja o mesmo.
Ao discutir a migração para o git, tentei anotar os principais requisitos para o versionamento da configuração do servidor:
- nós queremos apenas um único repositório
- deve ser possível enviar facilmente alterações para o controle remoto central
- changesets devem conter o verdadeiro autor
Existe uma boa maneira de ter toda a configuração em um repositório e ter apenas um subcaminho como cópia de trabalho? Atualmente, estou considerando duas abordagens, mas queria fazer essa pergunta aqui primeiro
- Se o repositório .git estiver em um local fixo, por exemplo, em algum lugar em / var , poderíamos vincular o subcaminho a partir do diretório de trabalho "target". O principal problema: eu não saberia uma maneira de "vincular" o arquivo / etc para outro diretório para importar apenas o conteúdo, exceto a simbolização de arquivos únicos
- Encontrei outra alternativa nessa questão do SO , sugerindo ter várias ramificações em um repositório. Isso certamente aumentaria a complexidade, mas eu podia nos ver tentando dessa maneira.
O uso do git em uma única máquina para o gerenciamento de arquivos de configuração funciona bem, mas acredito que deve haver alguém que o esteja usando da maneira que gostaríamos de usá-lo.
Obrigado
Kariem
fonte
/
causa das permissões de gravação.On a new machine, clone the git repo and check out the branch for that machine type
. Posso tornar outras ramificações inacessíveis (por motivos de segurança)?Um pouco problemático aqui, mas parece que um gancho de recebimento de mensagens poderia fazer o trabalho
O repositório mestre é armazenado em / var / master
no clone do gancho para / var / localclone
e copia os detalhes específicos do host.
Você precisaria configurar o gancho .git / post-receive localmente em cada servidor (com as configurações apropriadas)
Também parece que você deseja algo mais como fantoche ou chef do que git, pois isso permitirá que você execute o git para gerenciar as configurações e os módulos centralmente e faça com que o puppet \ chef gerencie a implantação e a verificação para você
fonte
Aqui está um trabalho rápido que eu pensei:
1. Tenha um repositório central, digamos,
/var/repo
2. Coloque os arquivos que são globais para todos os domínios nesse diretório.
3. Crie ramificações para cada subdomínio
/var/repo/subdomain1
,/var/repo/subdomain2
etc.4. Crie um gancho de postagem onde qualquer push para a ramificação seja mesclado ao mestre.
Portanto, quando você altera a configuração,
/var/repo/subdomain2
ela é imediatamente mesclada com a master, para que você possa extrair o repositório inteiramente e ter todos os arquivos de configuração.Quando você quiser extrair configurações individuais de subdomínios, basta puxar a ramificação apropriada.
Como você coloca seus arquivos de configuração
/var/repo/*
é um assunto completamente diferente (abas cron, eu posso pensar)~ $
fonte