Git / GitHub é uma boa solução de implantação do WordPress?

Atualmente, estou desenvolvendo o meu WordPress localmente, comprometendo meu código para o GitHub com o Git e, em seguida, SSHing no meu servidor e fazendo um “git pull” para atualizar meu código. Esta é uma boa opção para a implantação de código em um site do WordPress (obviamente, tenho access ao nível do raiz para o meu servidor neste caso.) Eu sei de coisas como o Capistrano, mas isso seria um exagero para implantação em um site do WordPress? Como posso aproveitar ao máximo o Git / GitHub neste caso?

Solutions Collecting From Web of "Git / GitHub é uma boa solução de implantação do WordPress?"

Eu uso git para isso e acho que ele funciona muito bem. Algumas sugestões:

  • Adicione seu diretório de upload (wp-content / uploads) ao seu arquivo .gitignore .
  • Execute um servidor web e servidor de database em seu sistema de desenvolvimento para que você possa testar as mudanças localmente antes de empurrá-las para a produção.
  • Mantenha suas configurações de conexão de database consistentes entre dev e prod, ou adicione wp-config.php ao seu arquivo .gitignore para evitar que suas configurações de wordpress de configuração sobrescrevam suas produções.
  • Evite atualizar plugins no seu sistema de produção usando a interface de administração do WordPress – na melhor das hipóteses, sua cópia git replaceá todos os plugins que você atualizar, assim que você empurrar / ceder, na pior das hipóteses você terá conflitos. Faça suas atualizações usando a interface de administração em seu sistema de desenvolvimento, cometer, empurrar e ceder na produção.
  • Considere adicionar um git post-receive hook para efetuar suas atualizações automaticamente no diretório que você usa para publicar wordpress através do seu servidor web (por exemplo, /var/www ). Isso permite que você apenas verifique os arquivos em si, evitando qualquer metadata git encontrando-se no caminho da raiz do documento do servidor da web, e também significa que você pode adicionar quaisquer alterações de permissão no gancho pós-recebimento para que suas permissions permaneçam consistentes sempre. Um exemplo está incluído abaixo:

     #!/bin/sh unset GIT_INDEX_FILE # the directory your web server serves wordpress from export GIT_WORK_TREE=/var/www/example.com/ # the local directory where your remote git repository sites export GIT_DIR=/home/git/repos/example.com.git/ # below user is for debain - you want the user and group your webserver uses sudo git checkout -f sudo chown -R www-data:www-data $GIT_WORK_TREE sudo chmod -R 755 $GIT_WORK_TREE sudo chmod 600 $GIT_WORK_TREE/wp-config.php sudo chmod -R 775 $GIT_WORK_TREE/wp-content 

Eu recomendo configurar o Capistrano – é um pouco de trabalho inicial pela primeira vez, mas depois disso você pode usá-lo facilmente para novas configurações.

As principais vantagens são

  • podendo implantar a partir da sua área de trabalho. Pode não parecer muito, mas ssh-ing no seu servidor remoto, e fazer um git pull ainda é uma dor na bunda.
  • reversão fácil para uma versão anterior, se você precisar
  • capaz de fazer coisas legais como implantação de instalação em ambientes de teste / produção.

Estou adicionando um conjunto de scripts capistrano para mostrar como eu configurei as coisas.

Capfile

 require 'railsless-deploy' load 'config/deploy'` 

deploy.rb

 set :stages, %w(production staging local) set :default_stage, "staging" require 'capistrano/ext/multistage' set :application, "" # your application name - used to set directory name set :scm, :git set :repository, "" # use the ssh repo access line you get from the provider eg git@github.com:name/repo.git set :deploy_to, "/var/www/#{application}" #this is the root site folder on the remote server set :deploy_via, :remote_cache # get directly from repo set :copy_exclude, [".git", ".DS_Store", ".gitignore", ".gitmodules", "wp-config.php"] # makes capistrano ask for sudo password or other remote inputs default_run_options[:pty] = true namespace :tasks do task :fix_links do run "ln -nfs #{shared_path}/uploads #{release_path}/wp-content/uploads" run "ln -nfs #{shared_path}/wp-config.php #{release_path}/wp-config.php" run "ln -nfs #{shared_path}/blogs.dir #{release_path}/wp-content/blogs.dir" run "ln -nfs #{shared_path}/.htaccess #{release_path}/.htaccess" run "sudo chown -R www-data.www-data #{release_path}/" end end after "deploy", "tasks:fix_links" 

e, finalmente, um arquivo de ambiente de exemplo (se você usar a gema de vários estágios, então você pode ter um desses para cada etapa do seu ambiente, por exemplo, local, estadiamento, produção)

config / local.rb

 server "", :app #hostname set :branch, 'develop' #choose branch to deploy set :use_sudo, false #don't use sudo set :deploy_to, "/var/www/#{application}" #overwrite default path to deploy to 

Esses arquivos podem não funcionar sem ajustes, e você precisará de algum conhecimento Capistrano básico, mas espero que ajude algumas pessoas.

Este foi o primeiro tutorial que usei que me levou a cabo com Capistrano e WordPress: http://theme.fm/2011/08/tutorial-deploying-wordpress-with-capistrano-2082/

Na verdade, fiz uma apresentação do WordCamp sobre este tópico. Ao invés de me repetir, aqui está um screencast e aqui está um script de implantação muito simples para acompanhar o que eu discuti.

Em suma, eu uso o GitHub para hospedar o repo e use um webhook para implantar mudanças com base na referência git. Isso permite que você use o modelo de ramificação git de Vincent Driessen e o abre para ter webheads ilimitados, servidores de teste, servidores de testes, etc., todos com implantação automatizada. Também abrange a manutenção do wp-config.php sob version control, mantendo versões de desenvolvimento / dev. Separadas (renomeando os arquivos e o link simbólico).

Eu sei que esta questão é um pouco maior, no entanto, como não vi isso como resposta aqui, gostaria de compartilhar o que normalmente faço para configurações e implementações baseadas em git de site único e está funcionando muito bem, também com trabalho a partir de múltiplos dispositivos, locais e com vários desenvolvedores (todos com seus reposs locais locais que operam, pois é comum para git).

Posso sugerir calorosamente a seguinte configuração:

  • Um stream de trabalho Git com foco na web (por Joe Maller, novembro de 2008)

Também é delineado (se você precisar de um segundo recurso para envolver sua cabeça em torno dele):

  • Usando o Git para implantação (por Dan Barber, abril de 2011)

Basicamente funciona (com pelo menos três repos) por:

  1. colocando o site no live-host sob git,
  2. Crie um novo repository git nua no host ao vivo.
  3. E, em seguida, garfo do repository descoberto para o seu local de desenvolvimento git repo (s).

Quando o trabalho for concluído, você pressiona contra o repo remoto que você clonou. O repo nu tem ganchos para sincronizar com o repo ao vivo (nos códigos acima chamados prima ).

Como configurações específicas do WordPress no repo eu tenho este .gitignore :

 # uploads are data, excluded from source tree wp-content/uploads/ 

O resto inclui. a configuração do plugin e do tema eu mantenho sob version control / configuração. Isso me permite acompanhar facilmente as mudanças e rever o código antes de usá-lo ao vivo. Também posso combinar mais facilmente contra trees remotas com minhas próprias mudanças. Isso é especialmente útil contra o núcleo do WordPress, que está disponível no Github .

Isso funciona muito bem para a maioria das minhas necessidades do WordPress. O repo nu evita que você impeça as mudanças conflitantes. Ele também se sincroniza com uma cópia remota antes de atualizar o site ao vivo. Isso significa que atualizar o site ao vivo normalmente é bastante rápido. Por causa dos ganchos, você pode até mesmo chamar os ganchos de atualização do WordPress depois, se quiser.

Se não experimentou o quanto isso pode ser melhorado com os ganchos Github, mas normalmente não os preciso porque o código está sob o version control local, e não o Github.

Para configurar esse sistema pela primeira vez, você deve levar algum tempo para avaliar se você possui todas as ferramentas disponíveis no seu host remoto:

  • Acesso SSH
  • GIT
  • Um diretório privado em que você pode colocar arquivos e subdiretórios (por exemplo, para o seu repo nulo git)

O tempo de configuração pela primeira vez deve ser possível dentro de uma hora, inclusive. Todo o ambiente e você publica primeiro o push.

Dependendo do seu host, você também pode querer proteger o diretório .git do access à web. Aqui está um exemplo .htaccess código que, mesmo assim, ter WordPress colocado dentro de um sub-diretório, o que deixa espaço no repo não publicado online (útil):

 Options -Indexes # fix trailing slash for .git / make it disappear + .gitignore and similar files. RedirectMatch 404 ^/\.git(.*)$ # mask 403 on .ht* as 404  Order Deny,Allow Allow from all Satisfy All Redirect 404 /  RewriteEngine On RewriteBase / # map everything into public and set environment var # to tag the request being valid RewriteCond %{ENV:REDIRECT_sitealias} !set RewriteRule ^(.*)$ /public/$1 [E=sitealias:set,L] 

Em suma, tudo que não está dentro do diretório público não está online. Dentro do diretório público pode ser a base de dados wordpress, por exemplo, para o .htaccess que você precisa, então:

 RewriteEngine On # mask as 404 if directly accessed RewriteCond %{ENV:REDIRECT_sitealias} !set RewriteRule .* - [L,R=404] 

Isso evita o access direto ao público . Parte deste .htaccess, você pode encontrar esboçado aqui: os pedidos para .htaccess devem retornar 404 em vez de 403 . Para as variables ​​de ambiente que você precisa testar se isso funcionar em seu ambiente. Além disso, você precisa decidir se você colocou isso em version control ou não.

Se você tiver mais controle na hospedagem, você pode fazer mais coisas aqui (e diferente / mais otimizado), os exemplos acima são direcionados para ambientes típicos de hospedagem compartilhada (que oferecem GIT, alguns usuários dizem que você pode instalá-lo facilmente como Bem, eu normalmente pergunto aos meus hospedeiros para fornecer isso, porque eu prefiro se eles tomam cuidado, é por isso que eu pago).

Do lado negativo, este tem alguns dos problemas comuns também delineados nas outras respostas. Uma coisa com a qual não tenho orgulho, mas o que funciona é dar ao host de desenvolvimento uma mudança em seu arquivo host para que o servidor do database aponte para a cópia de desenvolvimento. Então, você pode manter uma configuração de database. Não é realmente legal esp. por causa das credenciais.

Backups Automáticos

No entanto, normalmente não me importo muito, mas, em vez disso, os backups diários são executados nos sistemas remotos que são incrementalmente, que eles mesmos são armazenados em outra localização remota. Isso é fácil e barato e permite que você restaure tanto a instalação do WordPress quanto o arquivo-uploads, o database eo retomínio git. Além disso, para os meus comandos de backup, talvez não esteja perfeitamente bem, mas os que funcionam para mim:

 mysql: mysqldump --host=%s -u %s --password=%s %s| gzip > %s git : git gc git bundle files: tar --force-local -czf %s %s 

O que sugiro aqui é que você mantém os processos em torno de sua instalação do WordPress fora do WordPress. Eles precisam executar em um sistema específico, então você normalmente não os tem dentro do aplicativo (por exemplo, o aplicativo pode diminuir, mas você precisa que estes continuem funcionando).

Ativado para trabalho em equipe

Outro bom benefício é que seu site já está habilitado para trabalho em equipe. Graças ao reembolso adicional, você não pode fazer muito mal e pode até mesmo separar ramos remotos, além de um mestre ou ramo ao vivo com seus colegas.