Git / GitHub est-il une bonne solution de déploiement WordPress?
-
-
J'utilise http://www.deployhq.com/et j'aimebeaucoup lesfonctionnalités qu'ils offrent.C'est un servicepayantmaisje trouve leprix raisonnable.Si vous hébergez avec WP Engine (je lefais),ils ont récemment déployé unefonctionnalitégit push: http://git.wpengine.com/.I use http://www.deployhq.com/ and really like the features they offer. It's a paid service but I find the price to be reasonable. If you happen to host with WP Engine (I do) they recently rolled out a git push feature: http://git.wpengine.com/.
- 0
- 2013-02-05
- dwenaus
-
3 réponses
- votes
-
- 2013-01-26
J'utilisegit pour celaet jetrouve que celafonctionnetrèsbien. Quelques suggestions:
- Ajoutez le répertoire de votre répertoire detéléversements (wp-content/uploads) à votrefichier
.gitignore
. - Exécutez un serveur Webet un serveur debase de données sur votre système de développement afin depouvoirtester lesmodifications localement avant de lespousseren production.
- Assurez la cohérence desparamètres de connexion de votrebase de donnéesentre le développementet laproduction,ou ajoutez wp-config.php à votrefichier
.gitignore
pour éviter que vosparamètres de développement wordpress écrasent vosparamètres deproduction. - Évitez demettre àjour lesplugins sur votre système deproductionen utilisant l'interface d'administration de Wordpress - car aumieux,votre copiegit écraseratous lesplugins que vousmettez àjour dès que vouspoussez/checkout,aupire vous aurez des conflits. Effectuez vosmises àjouren utilisant l'interface d'administration de votre système de développement,validez,pushet checkouten production.
-
Pensez à ajouter un hookgit
post-receive
pour récupérer vosmises àjour automatiquement dans le répertoire que vous utilisezpourpublier wordpress via votre serveur Web (parexemple,/var/www
). Cela vouspermet dene récupérer que lesfichierseux-mêmes,évitant ainsi que lesmétadonnéesgit netrouvent leur chemin dans la racine du document de votre serveur Web,et signifie également que vouspouvez ajoutertoutes lesmodifications d'autorisation dans le hookpost-receive afin que vos autorisations restent cohérentes à chaquefois. Unexempleestinclus ci-dessous:#!/bin/sh unset GIT_INDEX_FILE # le répertoire àpartir duquel votre serveur Web sert wordpress exporter GIT_WORK_TREE=/var/www/example.com/ # le répertoire local où vos sites de dépôtgit distants export GIT_DIR=/home/git/repos/example.com.git/ # ci-dessous l'utilisateurestpour debain - vous voulez l'utilisateuret legroupe que votre serveur Web utilise sudogit 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
I use git for this and find it works really well. A few suggestions:
- Add your uploads directory (wp-content/uploads) directory to your
.gitignore
file. - Run a web server and database server on your development system so you can test changes locally before pushing them to production.
- Keep your database connection settings consistent beween dev and prod, or add wp-config.php to your
.gitignore
file to prevent your development wordpress settings overwriting your production ones. - Avoid updating plugins on your production system using the admin interface of Wordpress - as at best, your git copy will overwrite any plugins you update as soon as you push/checkout, at worst you'll get conflicts. Do your updates using the the admin interface on your development system, commit, push and checkout in production.
Consider adding a git
post-receive
hook to checkout your updates automatically into the directory you use to publish wordpress via your web server (e.g./var/www
). This allows you to only check out the files themselves, avoiding any git metadata finding it's way into your web server's document root, and also means you can add any permission changes into the post-receive hook so your permissions stay consistent every time. An example is included below:#!/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
-
Lebacktick apparaissant après `unset GIT_INDEX_FILE`est-il unefaute defrappe?Is the backtick appearing after `unset GIT_INDEX_FILE` a typo?
- 0
- 2013-01-29
- Weston Ruter
-
James a àpeuprès résumémon worfklow,sauf queje n'ajoute lesfichiers dethème au dépôtgit qu'unefois le site depréparation/test/production établi. Deplus,je recommandetotalement d'utiliser un hookpost-reception sur le serveur distant,enregistre la connexionet fait ungit pulletc.James has pretty much summed up my worfklow, except I only add the theme files to the git repo once I have the staging/test/production site established. Also I totally recommend using a post-receive hook on the remote server, saves logging in and doing a git pull etc.
- 0
- 2013-02-04
- davemac
-
Cela,avec les alias SSH,signifie queje peuxpousser vers le repo dethèmesen directen utilisant 'gitpush live',etc.That, along with SSH aliases means I can push to the live theme repo using 'git push live' etc
- 0
- 2013-02-04
- davemac
-
Jene suispasfamilier avec leprocessus demise àjour duplugin dans wordpressmais que sepasse-t-il si lamise àjour dupluginmodifie labase de données?Comment cesmodifications locales seront-ellestransmises au serveur deproduction?I'm not familiar with the plugin updating process in wordpress but what happens if the plugin update makes changes to the database? How will those local changes get pushed to the production server?
- 0
- 2014-06-13
- User
-
@User qui varierait d'unplugin à l'autre.Core wordpress vérifie la version du schéma,donc si vousmettez àjour Wordpress sans utiliser leprogramme demise àjourintégré,ileffectuera lesmises àjour de labase de données séparément.Mon conseil serait que si vous utilisez desplugins qui écrivent dans labase de données,vous vérifiez la zone d'administration de Wordpress,car lesmises àjour de schéma y sontgénéralementgérées quelle que soit lafaçon dont vousmettez àjour le code duplugin.@User that would vary from plugin to plugin. Core wordpress does schema version checks, so if you update Wordpress without using the built in updater, it will do the DB updates seperately. My advice would be if you are using any plugins that write to the DB, that you check the admin area of Wordpress, as schema updates are usually handled there regardless of how you update the plugin code.
- 0
- 2014-06-13
- James Hebden
-
- 2013-01-26
Je recommande vivement de configurer Capistrano - c'est unpeu detravailinitial lapremièrefois,mais après cela,vouspouvezfacilement l'utiliserpour denouvelles configurations.
Lesprincipaux avantages sont
- êtreen mesure de déployer àpartir de votrebureau. Celapeutne pas semblerbeaucoup,mais ssh-ing dans votre serveur distant,et faire ungit pullesttoujours une douleur dans le cul.
- Revenirfacilement à une versionprécédente si vousen avezbesoin
- capable defaire des chosesintéressantes comme le déploiement de configuration dans desenvironnements depréparation/production.
J'ajoute unensemble de scripts capistranopour vousmontrer commentje configure les choses.
<₹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 [email protected]: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"
et enfin,unexemple defichier d'environnement (si vous utilisez lagemme multi-étapes,vouspouvezen avoir unpour chaque étape de votreenvironnement,parexemple local,miseen scène,production)
< convenientconfig/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
Cesfichiers risquent dene pasfonctionner sans des ajustements,et vous aurezbesoin de quelques connaissances debase sur Capistrano,maisnousespérons aider certainespersonnes.
C'était lepremiertutoriel quej'ai utilisé quim'apermis de démarrer avec Capistranoet WordPress: http://theme.fm/2011/08/tutorial-deploying-wordpress-with-capistrano-2082/
I would highly recommend setting up Capistrano - it's a little bit of upfront work the first time, but after that you can easily use it for new setups.
The main advantages are
- being able to deploy from your desktop. It may not sound like much, but ssh-ing into the your remote server, and doing a git pull is still a pain in the ass.
- easy rollback to a previous version if you need to
- able to do cool things like setup deployment to staging/production environments.
I'm adding a set of capistrano scripts to show you how I set things up.
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 [email protected]: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"
and finally, a sample environment file (if you use the multistage gem, then you can have one of these for each stage of your environment, eg local, staging, production)
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
These files might not work without tweaking, and you'll need some basic Capistrano knowledge, but hopefully will help some people.
This was the first tutorial I used that got me going with Capistrano and WordPress: http://theme.fm/2011/08/tutorial-deploying-wordpress-with-capistrano-2082/
-
Si vous utilisez des hookspost-receivegit,ils annulent lebesoin de ssh dans le serveur distantet defaire ungit pullIf you use git post-receive hooks, they negate the need to ssh in to the remote server and do a git pull
- 2
- 2013-02-04
- davemac
-
Le hook `gitpost-receive`est la voie à suivre!`git post-receive` hook is the way to go!
- 0
- 2013-05-14
- Brock Hensley
-
@dirt leproblème avec le hookpost-receptionest que,àmoins que vousn'ayez uneinfrastructure CI décenteen place,unefusionincorrectepeutfairetombertout votre site.Laprobabilité que cela augmente si voustravaillez sur unprojet avecplusieurs développeurs qui ont un accès de validation à votre dépôt.C'estpourquoi,personnellement,j'aime déployer via capistrano à laplace,maisje peux voirpourquoi d'autrespourraientne pas s'inquiéter autant.@dirt the problem with the post-receive hook is that unless you've got a decent CI infrastructure in place, one incorrect merge can bring down your whole site. The likelihood of this increases if you're working on a project with multiple devs who have commit access to your repo. That's why I, personally, like to deploy via capistrano instead, but I can see why others might not worry about it so much.
- 3
- 2013-05-14
- anu
-
Vous utilisez un dépôtgit nu,donc leproblème defusionn'estpaspertinentYou use a bare git repo so the merge issue is not relevant
- 0
- 2013-08-02
- davemac
-
- 2013-02-20
J'aifait uneprésentation WordCamp sur ce sujet.Plutôt que deme répéter,en voici un screencast et voici un script de déploiementtrès simple pour accompagner ce dontj'aiparlé.
Enbref,j'utilise GitHubpour héberger le dépôt,et j'utilise un webhookpour déployer desmodificationsbasées sur la référencegit.Cela vouspermet d'utiliser lemodèle debranchementgit de Vincent Driessen et vouspermet d'avoir unnombreillimité detêtes Web,serveurs detest,serveurs detest,etc.,letout avec un déploiement automatisé.Je couvre également lemaintien de wp-config.php sous le contrôle de versiontouten conservant des versions de développement/production séparées (en renommant lesfichierset en créant des liens symboliques).
I actually did a WordCamp presentation on this topic. Rather than repeat myself, here's a screencast of it and here's a very simple deployment script to accompany what I discussed.
In short, I use GitHub to host the repo, and use a webhook to deploy changes based on the git ref. This allows you to use Vincent Driessen's git branching model and opens you up to having unlimited webheads, staging servers, testing servers, etc., all with automated deployment. I also cover keeping wp-config.php under version control while maintaining separate dev/production versions (by renaming the files and symlinking).
Je développe actuellementmon WordPress localement,en validantmon code sur GitHub avec Git,puisen SSH surmon serveuret enfaisant un "gitpull"pourmettre àjourmon code.Est-ce unebonne optionpour le déploiement de code sur un site WordPress (j'ai évidemment un accès deniveau racine àmon serveur dans ce cas.) Je connais des choses comme Capistrano,mais serait-ceexcessifpour un déploiement sur un site WordPress?Commentpuis-jetirer lemeilleurparti de Git/GitHub dans ce cas?