Tenho uma configuração da qual tenho muito orgulho e funciona muito bem para a minha equipe.
Estrutura Geral
Eu mantenho toda a instalação sob o git. Todas as alterações, seja uma atualização do sistema, adicionar / atualizar um plug-in, adicionar / atualizar um tema, passar pelo mesmo fluxo de trabalho. As alterações podem ser revertidas a qualquer momento. Eu tenho um servidor de implantação (um antigo desktop P4) rodando gitosis mas você pode facilmente usar o github ou gitolite . No git, eu tenho dois ramos "especiais", master
e develop
(explicado mais abaixo). Meus servidores de produção e de teste são baseados em nuvem.
Ambientes de desenvolvimento
Todo desenvolvedor executa seu próprio servidor de desenvolvimento em sua própria máquina. Em termos de bancos de dados, a necessidade de dados ao vivo quase nunca foi um problema. Usamos principalmente os dados de teste de unidade de tema . Caso contrário, exportar e importar cobre a maioria das coisas. Se a peça DB fosse crucial, você poderia configurar a replicação ou configurar algo para sincronização sob demanda. Quando eu configurei inicialmente essa estrutura, achei que isso seria crucial, então comecei a escrever um conjunto de ferramentas para fazer isso, mas para minha surpresa, eles realmente não eram necessários. (nota: como eles não eram necessários, eu nunca os aprimorei, então há bugs, por exemplo, ele substituirá o domínio em dados serializados).
Ambiente de armazenamento temporário
Quando as confirmações são enviadas da ramificação develop
para a gitosis, elas são automaticamente implantadas em nosso servidor de armazenamento temporário. O banco de dados de preparo é um escravo do banco de dados de produção.
Ambiente de produção
Quando as confirmações são enviadas para a gitosis na ramificação master
, ela é automaticamente implantada no servidor de produção.
O problema wp-config.php
Você deseja que wp-config.php
seja exclusivo de servidor para servidor, mas também deseja mantê-lo sob controle de versão. Minha solução foi usar .gitignore
para ignorar wp-config.php
e armazenar as versões de preparação e produção como arquivos com nomes diferentes. Então, em cada servidor, eu faço symlink, por exemplo %código%. Cada usuário mantém seu próprio banco de dados com suas próprias credenciais, com suas próprias configurações wp-config.php (sem rastreamento).
Outras Notas
Eu uso a Rackspace Cloud , que é fenomenal e barata. Com ele, posso manter meus servidores de preparação e produção idênticos. Eu também estou escrevendo plugins agora que usam sua API para permitir que eu controle meus serviços diretamente do WordPress, é maravilhoso.
Diretórios de cache, diretórios de upload de arquivos, etc., são adicionados a .gitignore. Se você quisesse, você poderia configurar uma tarefa Cron para checar os uploads rotineiramente e empurrá-los para a gitosis, mas isso nunca pareceu necessário para mim.
A estrutura master / develop está configurada para imitar parcialmente o modelo de ramificação de Vincent Driessen . Eu também uso sua extensão git git-flow e eu sugiro que também.
Eu tenho 10 ou mais desenvolvedores trabalhando nesta estrutura há mais de um ano e tem sido um sonho trabalhar com eles. Confiável, seguro, rápido, funcional e ágil, você não pode pedir muito mais!