Tuto WP-CLI : Comment installer et configurer WordPress en moins d’une minute et en seulement un clic
Ce tutoriel fait suite à ma conférence au WP Tech à Nantes, où j’ai présenté notre process d’agence optimisé, et notamment notre script Wippy d’automatisation d’installation et configuration WordPress via l’outil WP-CLI.
Et visiblement beaucoup d’entre vous l’attendent avec impatience !
On aura tous des installs #WordPress 100x plus efficaces dès lundi grâce à @Maximebj ! #WPTechNantes
— Jenny Beaumont (@jennybeaumont) November 29, 2014
Ma conférence
J’ai originalement présenté WP-CLI au WP Tech 2014 à Nantes. Voici les slides de ma présentation :
Qu’est-ce que WP-CLI ?
WP-CLI est un outil fonctionnant en ligne de commande (CLI = command line interface) permettant de procéder à des opérations sur un WordPress via un script Bash. Je ne suis pas fan de la ligne de commande à la base, mais j’ai bien vite changé d’avis en voyant toutes les possibilités !
Toutes les commandes se lancent via wp. Techniquement vous aurez accès à toutes les fonctions de WordPress : télécharger, installer WordPress, les plugins, les thèmes, créer ou modifier des articles, ajouter des utilisateurs, modifier des options…
Imaginez donc toutes les possibilités !
Pour vous donner une idée de l’étendue de WP-CLI, je vous invite à consulter la documentation en ligne :
[smoothie_button url=”http://wp-cli.org/commands/” label=”Documentation WP-CLI”]
Quelques idées de scripts
Une autre idée, grâce aux fonctions avancées, est de faire un équivalent de Velvet Blues URL, qui permet de remplacer des URLS par des autres, très utile lors de la mise en ligne d’un site WordPress, afin de remplacer en masse les URLs locales vers les URLs finales.La première idée qui nous vient à l’esprit, c’est d’automatiser l’installation de WordPress afin de gagner un temps considérable lors d’un démarrage de projet. On fait donc chuter de 20 minutes à 30 secondes l’installation d’un site.
Il est possible d’accéder à toutes les fonctions de WordPress avec WP-CLI, donc les possibilités sont presques infinies !
En installant WP-CLI sur vos hébergements, et en vous y connectant en SSH, vous pourriez très bien imaginer de gérer à distance la mise à jour de vos sites et vérifier qu’ils sont toujours en ligne. Un peu comme proposerait le service Manage WP, mais sans la nécessité d’installer un plugin.
Lorsque vous poussez un site en ligne via Git, vous pourriez également imaginer un Git hook qui lance le script WP-CLI sur votre hébergement, afin de remplacer les options Home et Site URL pour mettre les bonnes URLs
Et vous ? Quelle est votre idée ?
Installer WP-CLI
Il vous faudra une invite de commande. Sur Mac je vous conseille de télécharger iTerm qui est plutôt bien pensé. Il vous faudra ensuite installer WP-CLI, et éventuellement Git.
Pour lancer l’installation de WP-CLI, tapez ceci dans la console :
[pastacode lang=”bash” message=”” highlight=”” provider=”manual” manual=”curl%20-O%20https%3A%2F%2Fraw.githubusercontent.com%2Fwp-cli%2Fbuilds%2Fgh-pages%2Fphar%2Fwp-cli.phar”/]
Vérifiez que c’est bien installé :
[pastacode lang=”bash” message=”” highlight=”” provider=”manual” manual=”php%20wp-cli.phar%20–info”/]
Si vous utilisez Mamp, il faudra faire pointer vers le bon PHP et le bon MySQL (ceux de Mamp). Pour cela ouvrez ~/.zshrc à la racine de votre ordinateur.
[pastacode lang=”bash” message=”” highlight=”” provider=”manual” manual=”%23%20FIX%20PHP%20MAMP%20for%20WP-CLI%0Aexport%20PATH%3D%2FApplications%2FMAMP%2Fbin%2Fphp%2Fphp5.6.2%2Fbin%3A%24PATH%0Aexport%20PATH%3D%24PATH%3A%2FApplications%2FMAMP%2FLibrary%2Fbin%2F”/]
redémarrez votre console ensuite.
Le Script en détails
protip : ne vous embêtez pas à copier/coller. Je vous file le script à la fin de ce tuto ;).
- $1 fait référence au premier paramètre : le nom du site,
- $2 au titre du site, à fournir entre guillemets s’il a des espaces.
1. Les variables à renseigner
Ces quelques variables sont à changer en fonction de vos envies :
[pastacode lang=”bash” message=”” highlight=”” provider=”manual” manual=”%23%20admin%20email%0Aemail%3D%22mon%20%40%20email.com%22%0A%0A%23%20local%20url%20login%0Aurl%3D%22http%3A%2F%2F%22%241%22%3A8888%2F%22%0A%0A%23%20admin%20login%0Aadmin%3D%22admin-%241%22%0A%0A%23%20path%20to%20install%20your%20WPs%0Apathtoinstall%3D%22~%2FDesktop%22%0A%0A%23%20path%20to%20plugins.txt%0Apluginfilepath%3D%22~%2Fpath%2Fto%2Fwippy%2Fplugins.txt%22″/]
- L’email administrateur
- L’url locale de votre site
- l’identifiant admin (ici je génère admin-lenomdevotreprojet)
- Le dossier où installer WordPress
- Le fichier qui liste les plugins à installer
2. Les petites fonctions d’affichage (Optionnel)
J’ai ajouté quelques fonctions permettant d’afficher la progression : la fonction bot, ainsi que des codes couleurs pour iterm. Ces fonctions ne sont pas nécessaires au bon fonctionnement du script.
3. Télécharger, configurer, créer la base et installer WordPress
[pastacode lang=”bash” message=”” highlight=”” provider=”manual” manual=”wp%20core%20download%20–locale%3Dfr_FR%20–force%0Awp%20core%20version%0Awp%20core%20config%20–dbname%3D%241%20–dbuser%3Droot%20–dbpass%3Droot%20–skip-check%20–extra-php%20%3C%3CPHP%0Adefine(%20’WP_DEBUG’%2C%20true%20)%3B%0APHP%0Awp%20db%20create%0A%23%20generate%20password%0Apassgen%3D%60head%20-c%2010%20%2Fdev%2Frandom%20%7C%20base64%60%0Apassword%3D%24%7Bpassgen%3A0%3A10%7D%0A%23%20install%0Awp%20core%20install%20–url%3D%24url%20–title%3D%22%242%22%20–admin_user%3D%24admin%20–admin_email%3D%24email%20–admin_password%3D%24password”/]
Ici, on télécharge WordPress via la command core. On indique en paramètre que l’on veut la version Française. On génère un mot de passe aléatoire en 10 caractères (selon les configs cette commande peut peut-être différer).
Dans la configuration de la base de données, j’ai mis root pour identifiant et mot de passe. Si vous êtes sur Windows sur Easyphp, ce sera root comme identifiant, et mot de passe vide “”.
vous remarquerez quelques lignes bizarres à la fin de la config, elles permettent d’ajouter du PHP dans votre fichier. On en profite pour passer WP-DEBUG à True.
4. Installer les plugins à partir d’un fichier .txt
[pastacode lang=”bash” message=”” highlight=”” provider=”manual” manual=”while%20read%20line%0Ado%0A%20%20%20%20wp%20plugin%20install%20%24line%20–activate%0Adone%20%3C%20pluginfilepath”/]
Ces lignes permettent de récupérer la liste des plugins à installer depuis un fichier txt, qui comprend simplement l’identifiant d’un plugin par ligne. L’identifiant est celui dans l’URL quand vous êtes sur le site des extensions WordPress. Par exemple : wordpress-seo pour Yoast
5. Télécharger son thème versionné depuis Git
[pastacode lang=”bash” message=”” highlight=”” provider=”manual” manual=”cd%20wp-content%2Fthemes%2F%0Agit%20clone%20git%20%40%20bitbucket.org%3Amaximebj%2Fwordpress-zero-theme.git%0Awp%20theme%20activate%20%241″/]
On télécharge ici le thème WP0 thème (le thème ultra minimaliste WP-Spread pour démarrer votre développement rapidement) depuis Bitbucket via une commande git, et on active ce thème.
6. Créer les articles et pages
[pastacode lang=”bash” message=”” highlight=”” provider=”manual” manual=”wp%20post%20create%20–post_type%3Dpage%20–post_title%3D’Accueil’%20–post_status%3Dpublish%0Awp%20post%20create%20–post_type%3Dpage%20–post_title%3D’Blog’%20–post_status%3Dpublish%0Awp%20post%20create%20–post_type%3Dpage%20–post_title%3D’Contact’%20–post_status%3Dpublish%0Awp%20post%20create%20–post_type%3Dpage%20–post_title%3D’Mentions%20L%C3%A9gales’%20–post_status%3Dpublish%0A%0Acurl%20http%3A%2F%2Floripsum.net%2Fapi%2F5%20%7C%20wp%20post%20generate%20–post_content%20–count%3D5″/]
On crée les pages habituelles, comme Accueil, Contact, Mentions légales, ainsi qu’une série de 5 articles dont le contenu a été généré aléatoirement via l’api de loripsum.net.
7. Paramètres habituels, Permaliens et nettoyage
[pastacode lang=”bash” message=”” highlight=”” provider=”manual” manual=”%23%20Change%20Homepage%0Abot%20%22Je%20change%20la%20page%20d’accueil%20et%20la%20page%20des%20articles%22%0Awp%20option%20update%20show_on_front%20page%0Awp%20option%20update%20page_on_front%203%0Awp%20option%20update%20page_for_posts%204%0A%0A%23%20Menu%20stuff%0Abot%20%22Je%20cr%C3%A9e%20le%20menu%20principal%2C%20assigne%20les%20pages%2C%20et%20je%20lie%20l’emplacement%20du%20th%C3%A8me%20%3A%20%22%0Awp%20menu%20create%20%22Menu%20Principal%22%0Awp%20menu%20item%20add-post%20menu-principal%203%0Awp%20menu%20item%20add-post%20menu-principal%204%0Awp%20menu%20item%20add-post%20menu-principal%205%0Awp%20menu%20location%20assign%20menu-principal%20main-menu%0A%0A%23%20Misc%20cleanup%0Abot%20%22Je%20supprime%20Hello%20Dolly%2C%20les%20th%C3%A8mes%20de%20base%20et%20les%20articles%20exemples%22%0Awp%20post%20delete%201%20–force%20%23%20Article%20exemple%20-%20no%20trash.%20Comment%20is%20also%20deleted%0Awp%20post%20delete%202%20–force%20%23%20page%20exemple%0Awp%20plugin%20delete%20hello%0Awp%20theme%20delete%20twentytwelve%0Awp%20theme%20delete%20twentythirteen%0Awp%20theme%20delete%20twentyfourteen%0Awp%20option%20update%20blogdescription%20”%0A%0A%23%20Permalinks%20to%20%2F%25postname%25%2F%0Abot%20%22J’active%20la%20structure%20des%20permaliens%22%0Awp%20rewrite%20structure%20%22%2F%25postname%25%2F%22%20–hard%0Awp%20rewrite%20flush%20–hard%0A%0A%23%20cat%20and%20tag%20base%20update%0Awp%20option%20update%20category_base%20theme%0Awp%20option%20update%20tag_base%20sujet”/]
Ici on procède a un gros nettoyage de printemps : on enlève les thèmes de base inclus dans WordPress, les articles exemple, on vire Hello Dolly, on active la structure des permaliens sur /%postname%/ et on défini Accueil en page d’accueil.
On crée également un menu que l’on assigne à la zone main-menu (définie dans le thème dans functions.php) et on y assigne les pages nouvellement créées.
8. Versionnement du projet
[pastacode lang=”bash” message=”” highlight=”” provider=”manual” manual=”cd%20..%2F..%0Agit%20init%20%20%20%20%23%20git%20project%0Agit%20add%20-A%20%20%23%20Add%20all%20untracked%20files%0Agit%20commit%20-m%20%22Initial%20commit%22%20%20%20%23%20Commit%20changes”/]
Pour les habitués de git, on va simplement lancer le versionnement du projet. Pour ceux pas à l’aise avec Git, je vous conseille de suivre quelques tutos, comme celui d’Openclassrooms, vous comprendrez bien assez vite les bénéfices d’un projet gité, que vous soyez seul ou en équipe.
#WPTechNantes Même si t'es tout seul UTILISE GIT ! – je dis oui @Maximebj
— Julien OGER Ⓖ (@JulienOG) November 29, 2014
9. Ouvrir le navigateur, le finder et sublime text
[pastacode lang=”bash” message=”” highlight=”” provider=”manual” manual=”%23%20Open%20in%20browser%0Aopen%20%24url%0Aopen%20%22%24%7Burl%7Dwp-admin%22%0A%0A%23%20Open%20in%20Sublime%20text%0A%23%20REQUIRED%20%3A%20activate%20subl%20alias%20at%20https%3A%2F%2Fwww.sublimetext.com%2Fdocs%2F3%2Fosx_command_line.html%0Acd%20wp-content%2Fthemes%0Asubl%20%241%0A%0A%23%20Open%20in%20finder%0Acd%20%241%0Aopen%20.”/]
Juste pour le fun, on fait ouvrir le dossier dans l’explorateur, un onglet navigateur avec le site, un autre avec l’admin, et on ouvre le dossier du thème dans sublime text. Autant pousser la flemme jusqu’au bout !
10. Affichage du résumé et copie du mot de passe dans le presse papier
[pastacode lang=”bash” message=”” highlight=”” provider=”manual” manual=”%23%20Copy%20password%20in%20clipboard%0Aecho%20%24password%20%7C%20pbcopy%0A%0A%23%20That’s%20all%20!%20Install%20summary%0Abot%20%22%24%7Bgreen%7DL’installation%20est%20termin%C3%A9e%20!%24%7Bnormal%7D%22%0Aline%0Aecho%20%22URL%20du%20site%3A%20%20%20%24url%22%0Aecho%20%22Login%20admin%20%3A%20%20admin%241%22%0Aecho%20-e%20%22Password%20%3A%20%20%24%7Bcyan%7D%24%7Bbold%7D%20%24password%20%24%7Bnormal%7D%24%7Bnormal%7D%22″/]
Et enfin, on fait copier le mot de passe généré dans le presse papier (il restera plus qu’à coller) et on affiche un résumé des infos. Et voilà !
Bonus : Le Lancer avec Alfred
Si vous avez un Mac et Alfred d’installé, on va pouvoir créer en quelques secondes un mot-clé pour lancer le script avec élégance et rapidité, et s’affranchir totalement d’ouvrir le terminal.
De quoi impressionner vos potes n’est-ce pas ?
Vous allez avoir besoin du Power Pack Alfred (ça vaut le coup) afin de pouvoir créer vos propres actions. Dans les préférences d’Alfred, rendez-vous dans l’onglet Workflow.
Nous allons créer une action en 3 étapes :
- Définir un mot-clé
- Lancer le script
- Afficher une notification système
Le Workflow
1. Créer le mot clé
Ajoutez une action de type Mot-clé. Donnez le nom qui vous servira à appeler votre script. Dans mon cas c’est Wippy. Vous pouvez également ajouter le logo WordPress. N’oubliez pas de cocher with space et de sélectionner Argument Required.
2. Lancer le script
Ajoutez une action de type terminal. Nous allons ici simplement appeler notre script bash. Ecrivez bash suivi de l’adresse terminal jusqu’à votre script.sh. N’oubliez pas d’échapper les espaces avec un backslash.
Ajoutez à la fin {query} qui récupérera les paramètres à transmettre au script
3. Notification Système
Pas vraiment nécessaire, mais pour le fun, on peut lancer une petite notification système pour avertir l’utilisateur que le script est en cours d’exécution.
Télécharger WIPPY
Comme je suis sympa, je vous passe le fichier que j’ai utilisé lors de la conférence, qui pourra vous servir de base pour installer WordPress chez vous. N’hésitez pas à personnaliser, hacker et améliorer !
[smoothie_button url=”https://bitbucket.org/dysign/wippy-spread/src” label=”Wippy sur Bitbucket”]
Conclusion
Prenez un moment pour mettre en place WP-CLI chez vous, vous n’allez pas le regretter !
WP-CLI peut nous apporter énormément pour automatiser nos process de tous les jours. Ce tuto est un exemple parmi toutes les possibilités que l’on peut imaginer. Soumettez vos idées et vos projets !
En espérant que ce tuto vous a plu, je vous invite à le partager à vos connaissances, et me dire en commentaires sous quelle mesure WP-CLI vous a fait gagné du temps !
22 Commentaires
J’étais présent à la confs, ayant déjà utilisé WP-CLI je connaissais déjà les avantages. Ce qui était sympa c’est que tu as poussé l’exemple jusqu’au bout : ouvrir l’explorateur directement dans le thème, idem pour sublimtext et pour le navigateur.
Le seul reproche que j’ai à faire : c’est trop rapide pour aller faire un café en attendant.
Bravo pour ce script, plus qu’à adapté pour du serveur distant.
Merci beaucoup Maxime pour ce précieux partage. :)
Lorsque j’avais parcouru tes slides du WP-Tech-Nantes il y a quelques jours, j’avais fait une copie d’écran de l’extrait de code pour l’étudier plus en détail, un peu frustré qu’il ne soit que partiel !
Je suis comblé d’avoir maintenant accès à son intégralité, qui plus est enrichie de commentaires et d’astuces.
:D
Très cool cet article ! Mettre le script à dispo et l’expliquer point par point pour les noobs c’est vraiment top !
Chouette article, bien joué !
HUGE! J’ai hate d’implementer ça ! Merci de partager tout ce bon travail avec nous :-D
Si jamais quelqu’un voit passer l’équivalent sur Windows… ;)
Ton blog m’aide beaucoup ! Merci pour ces precieux conseils !
Wow, super article ! Merci de ce partage ! Avec par exemple un hébergement “tout bête” gandi SH qui propose un accès SSH, ça fait gagner pas mal de temps pour installer un WP.
Hello !
Si jamais ça peut aider, mon script d’installation est ici : https://github.com/posykrat/dfwp_install
Maxime, merci encore pour ton article et Wippy-spread sur lequel je me suis bien appuyé.
+
Bonjour,
j’essaye d’utiliser le script de Clem.
Tout fonctionne à merveille si je veux faire l’installation de wordpress dans mon dossier utilisateur.
excepté cela 2 Warning et 2 Error :
Warning: L’archive n’a pas pu être installée. Cette extension ne contient aucun fichier.
Warning: Can’t delete the currently active theme: twentyfifteen
J’active le thème test:
Error: The ‘test’ theme could not be found.
Je crée la page pattern et l’associe au template adéquat.
Error: Le modèle de page est invalide.
En revanche, le script échoue lorsque j’installe wordpress dans le répertoire htdocs de MAMP.
Je lance la configuration
Error: –dbprefix can only contain numbers, letters, and underscores.
Je crée la base de données
Error: wp-config.php not found.
Ensuite, c’est un enchaînement d’erreurs.
Dans ce cas précis, la base de données n’est pas créée.
Ais-je mal configuré le script ou y a-t-il un bug avec MAMP?
P.S. je n’ai pas réussi à utiliser le script Wippy. Je n’ai pas compris ce qu’il fallait remplacer pour le configurer pour mon serveur sous MAMP.
Bravo pour ce site qui est une mine d’informations, claires et détaillées.
Merci de votre aide.
—
Universalix.
Le script échoue dès que le le nom du dossier contient un slash.
—
Voilà.
La commande “wp site empty –yes” permet de supprimer l’ensemble des contenus (http://wp-cli.org/commands/site/empty/)
Hello !
Super idée tous ces enchainements. J’avais un petit script qui faisait le minimum pour gagneur de temps, mais là chapeau … et merci !
J’ai juste une petite question: tu as géré comment pour que Alfred te lance le script en ouvrant iTerm et non pas le Terminal par défaut d’OS X ?
J’ai déclaré dans le profil iTerm les “Schemes handled” SSH, Telnet et x-man-page … mais il en a rien à cirer semble-t-il :(
Encore merci !
Ravi d’avoir pu aider ! Le script de Clément biron est encore plus abouti du coup aujourd’hui.
Très bonne question pour le terminal, je pense simplement avoir défini iterm comme application bash par défaut car j’ai fait aucun réglage particulier dans Alfred pour ça.
bonjour,
merci pour ton tuto; je galère un peu à l’install ( suis pas vraiment à l’aise avec le terminal ).
peut être que tu peux m’aider : apparement, je n’arrive pas à régler le problème avec MAMP et la bdd.
J’ai toujours le message d’erreur :
Warning: mysqli_real_connect(): (HY000/2002): No such file or directory in /Applications/MAMP/htdocs/Wp theme dev/wp-includes/wp-db.php on line 1452
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /Applications/MAMP/htdocs/Wp theme dev/wp-includes/wp-db.php on line 1482
Warning: mysql_connect(): No such file or directory in /Applications/MAMP/htdocs/Wp theme dev/wp-includes/wp-db.php on line 1482
Error:
Error establishing a database connection
This either means that the username and password information in your
wp-config.php
file is incorrect or we can’t contact the database server atlocalhost
. This could mean your host’s database server is down.Are you sure you have the correct username and password?
Are you sure that you have typed the correct hostname?
Are you sure that the database server is running?
If you’re unsure what these terms mean you should probably contact your host. If you still need help you can always visit the WordPress Support Forums.
j’ai pourtant mis dans .zshrc les 2 lignes de code pour pointer suer l bon php et nysql mais manifestement ça coince……
si jamias tu as une idée, je suis preneur.
Merci
généralement c’est parceque le serveur n’a pas mysql à l’ancienne mais juste mysqli.
Faut voir si le serveur est à jour au niveau PHP/SQL et voir si ton WordPress est bien à jour aussi ?
En complément de la conférence de Kirsten Cassidy cette année au Wordcamp 2016 je viens de regarder ce vieil article de ton blog pour aller plus en avant et gagner du temps… Félicitations, tu fais partie sans aucun doute de mes meilleurs rencontres de cette année ! Bonne chance avec tes 2 autres acolytes pour WP Chef ;-)
Merci beaucoup ! :)
Salut,
déjà merci pour tes explications. Je regarde pour me faire mon propre script basé sur ton tuto.
J’ai comme certaines personnes un problème de SQL.
Ma base de données se créé mais ensuite le script s’arrête et bug avec ce message.
s/Kevin/Noomia/Develop/WPCLI/wp-includes/wp-db.php on line 1488
Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead in /Users/Kevin/Noomia/Develop/WPCLI/wp-includes/wp-db.php on line 1518
Warning: mysql_connect(): No such file or directory in /Users/Kevin/Noomia/Develop/WPCLI/wp-includes/wp-db.php on line 1518
Error: Erreur lors de la connexion à la base de données
Aurais-tu une solution ?
Salut,
Vérifie que : PHP est à jour, MYSQL est à jour et que tu as la dernière version de WP CLI est à jour. Mais je pense plus à PHP pour le coup
c’est vraiment chouette comme script, couplé à Alfred c’est démoniaque :D merci !
Perso, j’y ai ajouté, pour l’installation en local, la creation du vhost et la mise à jour du host, pour gagner encore un peu de temps :)
Merci pour ce tuto je vais gagner un temps fou.
Merci a Clem aussi pour son partage