Je développe actuellement mon WordPress localement, confiant mon code à GitHub avec Git, puis à SSHing sur mon serveur et effectuant un "tirage de git" pour mettre à jour mon code. Est-ce une bonne option pour le déploiement de code sur un site WordPress (dans ce cas, j’ai évidemment un accès de niveau racine à mon serveur). Je connais des choses comme Capistrano, mais est-ce que c’est excessif pour un déploiement sur un site WordPress? Comment puis-je tirer le meilleur parti de Git/GitHub dans ce cas?
J'utilise git pour cela et trouve que ça marche vraiment bien. Quelques suggestions:
.gitignore
..gitignore
pour éviter que vos paramètres de développement wordpress ne remplacent vos paramètres de production.Pensez à ajouter un hook git post-receive
pour extraire automatiquement vos mises à jour dans le répertoire utilisé pour publier wordpress via votre serveur Web (par exemple, /var/www
). Cela vous permet uniquement d'extraire les fichiers eux-mêmes, en évitant que les métadonnées git se retrouvent dans la racine du document de votre serveur Web. Cela signifie également que vous pouvez ajouter toute modification d'autorisation dans le hook de post-réception afin que vos autorisations restent cohérentes à chaque fois. Un exemple est inclus ci-dessous:
#!/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
Je recommanderais vivement de configurer Capistrano. C’est un peu fastidieux la première fois, mais vous pouvez ensuite l’utiliser facilement pour de nouvelles configurations.
Les principaux avantages sont
J'ajoute un ensemble de scripts capistrano pour vous montrer comment je règle 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, un exemple de fichier d’environnement (si vous utilisez le gem à plusieurs étages, vous pouvez en avoir un pour chaque étape de votre environnement, par exemple local, transfert, 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
Ces fichiers risquent de ne pas fonctionner sans modifications, et vous aurez besoin de connaissances de base en Capistrano, mais espérons pouvoir aider certaines personnes.
C’était le premier tutoriel que j’ai utilisé et qui m’ait donné à démarrer avec Capistrano et WordPress: http://theme.fm/2011/fr/tutorial-deploying-wordpress-with-capistrano-2082/
J'ai en fait fait une présentation WordCamp sur ce sujet. Plutôt que de me répéter, voici un extrait vidéo et voici un script de déploiement très simple pour accompagner ce que j'ai discuté.
En bref, j'utilise GitHub pour héberger le référentiel et utilise un WebHook pour déployer les modifications basées sur la référence git. Cela vous permet d'utiliser le modèle de branchement git de Vincent Driessen et vous permet d'avoir un nombre illimité de têtes Web, de serveurs de transfert, de serveurs de test, etc., le tout avec un déploiement automatisé. Je couvre également le maintien de wp-config.php sous contrôle de version tout en maintenant des versions de développement/production séparées (en renommant les fichiers et en créant des liens symboliques).
Je sais que cette question est un peu plus ancienne, mais comme je n’ai pas vu cette réponse ici, je voudrais partager ce que je fais normalement pour les installations et les déploiements basés sur git sur un seul site, et cela fonctionne très bien, même avec plusieurs périphériques, emplacements et avec plusieurs développeurs (tous ayant leur propre dépôt local dans lequel ils opèrent, comme c'est commun pour git).
Je peux suggérer chaleureusement la configuration suivante:
Il est également décrit dans (si vous avez besoin d'une deuxième ressource pour bien comprendre):
Cela fonctionne essentiellement (avec au moins trois pensions) en:
Lorsque le travail est terminé, vous appuyez sur le dépôt nu distant à partir duquel vous avez cloné. Le référentiel nu a des points d'ancrage pour la synchronisation avec le référentiel actif (dans les codes ci-dessus appelés prime ).
En tant que paramètres spécifiques de Wordpress dans le référentiel, j'ai ce .gitignore
:
# uploads are data, excluded from source tree
wp-content/uploads/
Le reste incl. le plugin et la configuration du thème que je conserve sous contrôle de version/configuration. Cela me permet de suivre facilement les modifications et de revoir le code before l’utiliser en direct. Je peux aussi plus facilement fusionner contre des arbres distants avec mes propres modifications. Cela est particulièrement utile contre le noyau Wordpress disponible sur Github .
Cela fonctionne assez bien pour la plupart de mes besoins Wordpress. Le repo nu vous empêche de pousser des modifications contradictoires. Il se synchronise également sur une copie distante avant de mettre à jour le site actif. Cela signifie que la mise à jour du site en direct est normalement assez rapide. Grâce aux points d'ancrage, vous pouvez même appeler les points d'ancrage de mise à jour Wordpress ultérieurement si vous le souhaitez.
Si je n'ai pas expérimenté dans quelle mesure cela peut être amélioré avec les hooks Github, mais normalement je n'en ai pas besoin car le code est sous contrôle de version local, pas Github.
Pour configurer un tel système pour la première fois, prenez le temps d'évaluer si vous disposez de tous les outils disponibles sur votre hôte distant:
Le temps d'installation pour la première fois devrait être possible dans un délai de deux heures, incl. tout l'environnement et vous publiez d'abord Push.
En fonction de votre hôte, vous pouvez également vouloir protéger le répertoire .git
de l'accès Web. Voici un exemple de code .htaccess
qui fait même que Wordpress est placé dans un sous-répertoire, ce qui laisse un espace dans le référentiel non publié en ligne (utile):
Options -Indexes
# fix trailing slash for .git / make it disappear + .gitignore and similar files.
RedirectMatch 404 ^/\.git(.*)$
# mask 403 on .ht* as 404
<Files ~ "^\.ht">
Order Deny,Allow
Allow from all
Satisfy All
Redirect 404 /
</Files>
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]
En bref, tout ce qui ne se trouve pas dans le répertoire public n'est pas en ligne. Dans le répertoire public peut être le wordpress codebase, par exemple, pour le .htaccess
il vous faut alors:
RewriteEngine On
# mask as 404 if directly accessed
RewriteCond %{ENV:REDIRECT_sitealias} !set
RewriteRule .* - [L,R=404]
Cela empêche l'accès direct à public . Une partie de ce .htaccess - foo que vous pouvez trouver est décrite ici: Les demandes adressées à .htaccess doivent renvoyer 404 au lieu de 403 . Pour les variables d’environnement, vous devez vérifier si cela fonctionne dans votre environnement. Vous devez également décider si vous placez cela sous contrôle de version ou non.
Si vous avez plus de contrôle sur l'hébergement, vous pouvez faire plus de choses ici (et différemment/plus optimisées), les exemples ci-dessus sont destinés aux environnements d'hébergement partagé typiques (qui offrent GIT, certains utilisateurs disent que vous pouvez facilement l'installer vous-même. Eh bien, je demande normalement à mes hébergeurs de fournir cela, car je préfère que ce soit pour ce que je les paye).
Du côté négatif, cela présente certains des problèmes communs également décrits dans les autres réponses. Une chose dont je ne suis pas fier, mais ce qui fonctionne, c’est de donner à l’hôte de développement une modification de son fichier d’hôte pour que le serveur de base de données pointe sur la copie de développement. Vous pouvez donc conserver une configuration de base de données. Pas vraiment cool esp. à cause des informations d'identification.
Cependant, normalement, je ne me soucie guère de faire cela ici, mais de faire des sauvegardes quotidiennes sur les systèmes distants qui sont incrémentiels et qui sont eux-mêmes stockés dans un autre emplacement distant. C’est simple et peu coûteux et vous permet de restaurer à la fois l’installation Wordpress ainsi que les fichiers téléchargés, la base de données et le dépôt git. Aussi, pour mes commandes de sauvegarde, je ne serais peut-être pas parfaitement d'accord, mais celles-ci fonctionnent pour moi:
mysql: mysqldump --Host=%s -u %s --password=%s %s| gzip > %s
git : git gc
git bundle
files: tar --force-local -czf %s %s
Ce que je suggère ici est que vous gardiez les processus autour de votre installation Wordpress en dehors de Wordpress. Ils doivent fonctionner sur un système spécifique, de sorte que vous ne les avez normalement pas dans l'application (par exemple, une application peut disparaître mais vous besoin pour qu'ils continuent à fonctionner).
Un autre avantage de Nice est que votre site est déjà activé pour le travail en équipe. Grâce à la mise à nu supplémentaire, vous ne pouvez pas faire grand chose de mal et vous pouvez même partager des branches distantes en dehors d'une branche principale ou en direct avec vos collègues.