Desenvolvimento, estágio e implantação de produção para sites WordPress?

41

Então, eu preciso ter iterações de dev / stage / production (em servidores separados) para um site WordPress, eu uso o git normalmente, mas isso obviamente não funcionará com sites WordPress devido à dependência do banco de dados para os principais configuração de ... bem, quase tudo.

Então, minha pergunta é como vocês fazem isso? Eu tinha um Google rápido e vi que havia alguns plugins, esse é o único caminho? Quais fazem o trabalho melhor em termos de facilidade de uso, velocidade, confiabilidade, interface do usuário, etc.?

Rob Vermeer
fonte
O pantheon.io possui dev, test e live para um único domínio. Eles usam git para os arquivos e transferem o banco de dados entre eles com um único clique. É grátis para experimentar e você paga apenas quando entra em funcionamento - youtube.com/watch?v=KpGTDeqwgX4
jgraup

Respostas:

27

Tenho uma configuração da qual tenho muito orgulho e funciona extremamente bem para minha equipe.

Estrutura geral

Eu mantenho toda a instalação no git. Todas as alterações, seja uma atualização do sistema, adicionando / atualizando um plug-in, adicionando / atualizando um tema, passam pelo mesmo fluxo de trabalho. As alterações podem ser revertidas a qualquer momento. Eu tenho um servidor de implantação (uma área de trabalho P4 antiga) executando gitosis, mas você pode usar o github ou gitolite com a mesma facilidade . No git, tenho dois ramos "especiais" mastere develop(explicado mais abaixo). Meus servidores de produção e armazenamento temporário 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 ativos quase nunca foi um problema. Usamos principalmente os dados de teste da unidade temática . Caso contrário, a exportação e importação cobre a maioria das coisas. Se a peça do banco de dados for crucial, você poderá configurar a replicação ou algo para sincronização sob demanda. Quando configurei inicialmente essa estrutura, pensei que isso seria crucial, então comecei a escrever um conjunto de ferramentas para fazer isso, mas, para minha surpresa, elas realmente não eram necessárias. (nota: como eles não eram necessários, eu nunca os aprimorei; portanto, existem erros, por exemplo, ele substituirá o domínio nos dados serializados).

Ambiente de armazenamento temporário

Quando as confirmações são enviadas da developramificação para a gitose, elas são implantadas automaticamente em nosso servidor de teste. O banco de dados temporário é um escravo do banco de dados de produção.

Ambiente de produção

Quando as confirmações são enviadas para gitoses na masterfilial, elas são implantadas automaticamente no servidor de produção.

O problema do wp-config.php

Você deseja wp-config.phpser exclusivo de servidor para servidor, mas também deseja mantê-lo sob controle de versão. Minha solução foi usar .gitignorepara ignorar wp-config.phpe armazenar as versões de teste e produção como arquivos com nomes diferentes. Então, em cada servidor, eu faço um link simbólico, por exemplo wp-config.php -> wp-config-production.php. Cada usuário mantém seu próprio banco de dados com suas próprias credenciais, com suas próprias configurações (não rastreadas) de wp-config.php.

Outras notas

Eu uso o Rackspace Cloud , que é fenomenal e barato. Com ele, posso manter meus servidores de preparação e produção idênticos. Também estou escrevendo plugins agora que usam sua API para me permitir controlar meus serviços diretamente do WordPress, é maravilhoso.

Diretórios de cache, diretórios de upload de arquivos etc. são adicionados ao .gitignore. Se você quiser, poderá configurar uma tarefa cron para fazer check-in rotineiramente de uploads e enviá-los para gitosis, mas isso nunca me pareceu necessário.

A estrutura mestre / desenvolvimento está configurada para imitar parcialmente o modelo de ramificação de Vincent Driessen . Eu também uso a extensão git git-flow e eu sugiro isso também.

Eu tenho mais ou menos 10 desenvolvedores trabalhando nessa 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!

Matthew Boynes
fonte
Estou prestes a configurar uma instalação wp de maneira semelhante (mas usamos svn) e queria confirmar seu processo de atualização de plug-ins e wp: conclua a atualização e verifique o dev, confirme as alterações, implante-as no teste, verifique, dependem ao vivo. Em resumo, você nunca efetua uma atualização de instalação do wp no servidor ativo que você introduz nas alterações por meio de atualizações no repositório?
paullb
1
E as alterações no banco de dados feitas pela rotina de atualização. Como essas são efetuadas no banco de dados de produção?
paullb
Esse fluxo de trabalho está correto @paullb e você não precisa se preocupar com atualizações de banco de dados. Da maneira que o WordPress funciona, as atualizações são acionadas após a alteração ser detectada, portanto, isso funciona exatamente da mesma maneira que uma atualização manual (para o núcleo ou um plugin) funciona!
Matthew Boynes
@MatthewBoynes, olá. você ainda está usando esse worklow para o seu desenvolvimento? Nesse caso, vou aplicar esse fluxo de trabalho ao meu projeto. obrigado :)
khakiout
Não, mas apenas porque não é aplicável aos projetos em que trabalho atualmente, que são hospedados principalmente no WordPress.com VIP. Se fosse aplicável, eu ainda o usaria (e, de fato, a empresa em que trabalhei anteriormente continua a usá-lo).
precisa saber é o seguinte
4

Primeiro, acho importante considerar o que você está indo para o Controle de Versão. Eu recomendaria não colocar todo o diretório WP no VC. Eu acho que faz mais sentido colocar wp-content / themes / YourThemeName em VC. Para um site grande com um alto número de plugins complexos, eu poderia ver o caso de incluir também o wp-content / plugins. Se você precisou, pode incluir conteúdo wp / uploads. As respostas abaixo mudarão um pouco, dependendo do que você controla a versão.

Dado isso, aqui está o que eu uso:

Local: Configure uma pilha LAMP em sua máquina. Use o mesmo URL do seu site de desenvolvimento. Use as entradas do arquivo VirtualHosts e .host para simular o ambiente de desenvolvimento do ponto de vista da URL. Se você está apenas criando seu tema, considere usar o SSHFS para vincular a wp-content / plugins, wp-content / uploads. Considere usar o banco de dados na instalação de desenvolvimento do projeto, a menos que você esteja realmente fazendo algum trabalho pesado.

Desenvolvimento: faça check-out de uma cópia de trabalho do seu Repo no seu ambiente WP. Configure um gancho POST-COMMIT no SVN para atualizar esse repositório em cada confirmação. Isso irá mantê-lo sincronizado. (Considere a integração contínua de um pobre homem.)

Produção: confira uma tag de versão nomeada que representa um candidato final. Quando você precisar usar uma nova versão, alterne a tag e atualize o repositório.

Ethan Seifert
fonte
Um ambiente de desenvolvimento é muito adequado para testar compilações noturnas, e o git wordpress é atualizado automaticamente a cada 30 minutos, além de ser descentralizado e funcionar melhor para as equipes, não conheço ninguém que tenha migrado para o git / hg que voltou. usando svn.
Wyck
1
Apenas curioso quanto ao seu raciocínio para não colocar todo o diretório WP sob controle de versão. Isso parece um gargalo no fluxo de trabalho. Colocar o WP no repositório fornece a todos os desenvolvedores a mesma base de código e versão do WP. Também permite consistência entre os ambientes. Veja o link de Wyck (em sua resposta) para arquivos condicionais wp-config.
9789 Brian Fegter #
2

Recentemente, descobrimos a RAMP . Nota: isso é apenas parte de todo o processo, mas a sincronização dos bancos de dados de conteúdo entre os servidores é provavelmente a parte mais difícil.

lkraav
fonte
2

Faço isso com git e mercurial, apenas certifique-se de usar um repositório particular.

Opção 1.

O único problema é o config.php, que você pode dizer ao git para ignorar no push ou antes do init.

Use .gitignoreor git update-index --assume-unchanged config.php(leia um pouco sobre o comando assumido inalterado antes de usá-lo)

Opções 2.

Use um condicional no config.php que verifique a URL e aplique as credenciais corretas, ao longo das linhas "se o servidor url = dev, use as credenciais A, caso contrário, use as credenciais B", etc.

Mark explica isso melhor, http://markjaquith.wordpress.com/2011/06/24/wordpress-local-dev-tips/

ps. Você também pode servidor os arquivos diretamente de um repositório remoto em vez de ter um "servidor de arquivos" tradicional. (vídeo muito chato que fiz sobre este http://www.youtube.com/watch?v=8ZEiFi4thDI )

Wyck
fonte