WP-CLI gebruiken met Mina

In het eerste deel van deze serie konden we Mina gebruiken om WordPress in te zetten. We hebben geleerd dat Mina een shell-scriptbestand maakt en vervolgens WordPress naar de server pusht om te worden uitgevoerd. Omdat alle opdrachten worden uitgevoerd in een enkele SSH-verbinding, is Mina erg snel. 

Gebruikmakend van dit kunnen we taken schrijven om WordPress-controle te automatiseren. We kunnen normale WordPress-taken omzetten, zoals het maken van gebruikers, het installeren van plug-ins, het maken van back-ups van onze gegevens, enzovoort, in een reeks shell-opdrachten. Vervolgens combineren we deze shell-opdrachten in Mina-taak. 

Maar hoe kunnen we de shell-opdrachten maken om die taken uit te voeren? WP-CLI is het antwoord. Het helpt om WordPress te besturen via de opdrachtregel. U hoeft zich niet aan te melden bij het WordPress-dashboard om beheertaken uit te voeren. WP-CLI geeft ons een set opdrachten die overeenkomt met WordPress-beheertaken. Zodra we de WP-CLI-opdrachten voor een speciale taak kennen, hoeven we deze opdrachten alleen in een Mina-taak te plaatsen. 

Wat moet ik van tevoren weten?

  • U hebt een Mac OS of Linux OS nodig om toegang te hebben tot een terminal. Als u Windows gebruikt, is dit nog steeds mogelijk, maar het wordt niet behandeld in deze zelfstudie. 
  • Je moet een basiskennis hebben van shell-commando's en de terminal. Zolang je de Terminal- of iTerm-app eerder hebt geopend, zou de zelfstudie heel gemakkelijk voor je moeten zijn.
  • U moet SSH-toegang hebben tot uw externe machine.

Een snelle blik op WP-CLI

Een zeer snel voorbeeld, zodat u een taak kunt hebben van wat we hebben met WP-CLI. Wanneer u begint met het ontwikkelen van een WordPress-site, moet u dummy berichten of dummy gebruikersaccounts maken voor testdoeleinden. 

Als je dit typt (zodra je wp-cli hebt geïnstalleerd) op je terminal, krijg je 100 dummy berichten zonder dat je er maar weinig moeite voor hoeft te doen.

php wp-cli.phar post genereren --count 100

Zie je hoeveel tijd het je zal besparen? Maar moeten we deze zaken echt uitvoeren via de opdrachtregel? 

Tijd besparen is leuk, maar geen noodzaak.

Hier is een zeer goede reden om dit te doen: veiligheid. Voor sommige acties van het WordPress-dashboard is schrijfmachtiging nodig voor de wp-content map. Voorbeeld: uploaden van plug-ins, uploaden van thema's, upgraden van WordPress, enzovoort. Hoe meer toestemming we aan het publiek verlenen, hoe meer gevaar we blootleggen aan onze site. 


Laten we ons voorstellen dat een aanvaller toegang krijgt tot ons WordPress-dashboard. De aanvaller kan schadelijke scripts als een plug-in uploaden. Een manier om dit te voorkomen is om de schrijfrechten voor elke map of bestand van WordPress uit te schakelen, behalve de wp-content / uploads map. Daarom kan niemand een plug-in of thema uploaden naar de webserver. 

In het eerste deel van deze tutorial leren we schrijfrechten aan Apache geven wp-content / uploads map. We hebben het eigenaarsschip van veranderd wp-content / uploads naar de webservergebruiker. Op die manier kan de webserver naar de uploadmap schrijven; daarom kan WordPress foto's uploaden en in onze schrijven uploads map. 

Elke actie die schrijven naar de WordPress-map vereist (behalve de uploads map) moet via de opdrachtregel worden gedaan. Met andere woorden, we zullen het bestand handmatig toevoegen van onze lokale machine, commit en deployen naar server met Mina. Met deze opstelling wordt onze WordPress-map een alleen-lezen-vak (behalve de uploads map die wordt gebruikt voor het opslaan van onze media). 

De media-uploadfunctie van WordPress heeft al een beveiligingslaag om het uploaden van PHP-bestanden te voorkomen. Als je verder wilt gaan, kun je de configuratie gebruiken om PHP-bestanden niet binnen te laten uploads map, maar dat is het idee en zal niet worden behandeld in deze zelfstudie. We zullen ons meer richten op command line-actie met WP-CLI.

Update WordPress zonder schrijfrechten

Zodra we schrijfrechten hebben verwijderd, werkt de automatische update niet meer en kunt u de toepassing niet eenvoudig bijwerken vanuit het WordPress-dashboard. Omdat we onze WordPress-code met Git hebben beheerd, zouden we de update handmatig moeten doen. 

We kunnen het WordPress zip / tar-bestand downloaden, het decomprimeren, het huidige WordPress-bestand overschrijven. Vervolgens verbinden we de nieuwe code, pushen we naar onze repository en doen we een implementatie met Mina.

Een overzicht van Mina Task Theory

Een taak in Mina is gewoon een normale Rake-taak met een wachtrij methode die de shell-commando's in de wachtrij plaatst om later op de server te draaien. Voor elke opdracht die we op de server willen uitvoeren, kunnen we de wachtrij methode als volgt.


desc "Beschrijf deze taak"
task: sample do queue "ls # deploy_to / current" wachtrij "touch /tmp/test.log" einde

De desc blok is optioneel, maar het is leuk om te hebben. Als je typt mina zonder enige parameter, de desc informatie wordt afgedrukt op het scherm ter referentie.

$ mina mina - Echt snelle serverimplementatie en automatiseringstool Opties: -h, --help Toon help -V, -version Toon programmaversie -v, -verbose Toon commando's wanneer ze zich voordoen -S, -simuleren Uitvoeren in simulatie mode -t, --trace Toon backtraces wanneer er fouten optreden -f BESTAND Gebruik FILE als de deploy-configuratie Basisgebruik: mina help # Toon help. mina init # Maakt een voorbeeldconfiguratiebestand. mina tasks # Toon alle taken. Server taken: mina clean_cache # Clean nginx cache mina db_export # Exporteer WordPress-database naar shared / backup mina deploy # Implementeert de huidige versie naar de server. mina rollback # Terugdraaien naar vorige versie mina uitvoeren [opdracht] # Voert een opdracht uit op de server. mina-setup # Hiermee stelt u een site in. mina toggle_plugin [plugin] # Schakel een plugin in mina toggle_theme [thema] # Activeer thema mina wp_version # Toon huidige WordPress-versie Alle opties van Rake zijn ook beschikbaar als 'mina' opties. Zie 'rake --help' voor meer informatie.

Voor elke opdracht die we op de lokale computer willen uitvoeren, kunnen we de backtick ( ') karakter.

task: sample do puts 'pwd' zet 'ls -la' ten einde

Laten we het testen met mina monster om te zien wat het op uw lokale computer afdrukt.

Dus, in feite wordt een Mina-taak gebouwd door een blok van te maken taak: task_name do // ... end
De taak kan worden aangeroepen mina task_name. Als we een argument moeten doorgeven aan de taak, kunnen we deze syntaxis gebruiken:

task: task_name,: arg,: another_arg do | cmd, args | puts args [: arg] puts args [: another_arg] end

De beugel [] is gewoon de robijn manier om toegang te krijgen tot een hash. Je kunt het zien als PHP associatieve array. We noemen het argument, en vervolgens kunnen we binnen de taakstructuur gemakkelijk de waarde ervan bereiken met args [: argument_name]. In dit voorbeeld is argument_naam : arg en : another_arg

De taak kan worden aangeroepen met deze syntaxis: mina taskname [param1, param2]. Er kunnen meer argumenten worden toegevoegd en we zullen er meer parameters in invoeren, zoals mina taskname [param1, param2, param3, param4].

Je kunt je voorstellen dat het Opdrachtnaam is een methode naam en we noemen een methode en geven het argument door. Als de parameter een spatie heeft, moeten we de hele parameter omzetten met een aanhalingsteken.

 Laten we het nu boven de taak proberen. Het drukt gewoon uit wat we erin doorgeven.

$ mina task_name [value1, "value 2 with some space"]
value1
waarde 2 met wat ruimte

Als je de zsh-shell hebt gebruikt, moet je [en] met de backslash ontsnappen:

$ mina task_name \ [value1, "value 2 with some space" \]

Een ander ding om op te merken is het in_directory methode van Mina. Het is zeer waarschijnlijk dat u dat moet doen CD in een map en voer een aantal commando's uit. In plaats van handmatig in de rij te staanCD opdracht, we kunnen het handige gebruiken in_directory methode. Het voert het commando uit binnen de directory die we aangeven.

task: sample do in_directory "# deploy_to / current" do queue "pwd"
einde

Oké, genoeg voor theorie. Laten we beginnen met het leuke gedeelte: We zullen wp-cli installeren en vervolgens een paar taken instellen.

Installeer WP-CLI

Het enige dat we nodig hebben is het PHAR-bestand van WP-CLI downloaden. Het is een enkel bestand dat kan worden uitgevoerd naar de PHP-engine. In plaats van een aantal PHP-bestanden te hebben, kunt u ze comprimeren tot een enkel bestand dat kan worden uitgevoerd door PHP. 

Het is een zeer eenvoudige manier om PHP-pakketten te distribueren. Net als bij Windows, download je een software in één .EXE-bestand en voer je het uit. Om dit te doen, CD in uw WordPress-code op de lokale computer, voer deze opdracht uit:

curl -L https://raw.github.com/wp-cli/builds/gh-pages/phar/wp-cli.phar> wp-cli.phar chmod + x wp-cli.phar

Laten we controleren of het werkt. Voer op uw lokale computer uit wp-cli.phar --info en je zou de volgende uitvoer moeten krijgen.


./wp-cli.phar --info
PHP binair: / usr / bin / php
PHP-versie: 5.4.24
php.ini gebruikt: /etc/php.ini
WP-CLI-hoofddirectory: phar: //wp-cli.phar
WP-CLI global config:
WP-CLI projectconfiguratie:
WP-CLI-versie: 0.14.1

Nu staat wp-cli in dezelfde map als je WordPress, laten we het vastleggen en
druk op je repository en voer een implementatie uit.


git add wp-cli.phar git commit -m "Add wpcli" git push origin master mina deploy

Op dit moment staat wp-cli in onze WordPress-map op de server. Laten we er wat magie mee doen: Mina-taak schrijven met wp-cli.

Een Mina-taak schrijven met WP-CLI

In deze sectie zal ik je laten zien hoe je wat basistaken met wp-cli kunt doen en hoe je ze in Mina kunt plaatsen, zodat je een idee hebt hoe een ding eruit ziet en je eigen taak gaat schrijven die overeenkomt met je workflow en je nodig hebben. Eerste dingen eerst: Hallo wereld.

1. Hallo wereld

De allereerste, zeer eenvoudige opdracht van wp-cli is om de huidige WordPress-versie te tonen. Laat nog een Mina-taak maken. Voeg dit toe aan uw config / deploy.rb het dossier:

desc "Toon huidige WordPress versie" taak: wp_version =>: omgeving wachtrij% [echo "-----> Hallo wereld. Ik ben nu bij deze versie:"] wachtrij "cd # deploy_to / current &&. /wp-cli.phar-hoofdversie "einde

Probeer het nu uit te voeren:

$ mina wp_version -----> Hallo wereld. Ik ben nu bij deze versie: 3.8.1 Verstreken tijd: 0.00 seconden

2. Een plug-in installeren

We zullen een plug-in met de hand downloaden, extraheren, toevoegen aan repository, vastleggen, dan inzetten en een andere mina-taak uitvoeren om een ​​plug-in te activeren. 

Hier is de code die we nodig hebben voor deze taak

desc "Toggle a plugin" task: toggle_plugin,: arg1 do | cmd, plugin | wachtrij% [echo "----> Activeer thema # theme"] in_directory "# deploy_to / current" do queue% [./ wp-cli.phar plugin toggle # plugin] end end 

We zetten een echocommando in de wachtrij om tekst uit te voeren. Het commando om een ​​plugin vanuit wp-cli te activeren is plugin toggle plugin_name

Stel bijvoorbeeld dat we de Mathjax Latex-plug-in willen installeren en we hebben deze al in gebruik genomen wp-content / plugins

We kunnen deze manier installeren:

git add wp-content / plugins / mathjax-latex git commit -m "Voeg mathjax plugin toe" git push origin master mina deploy 

Nu is de plug-in geïnstalleerd. Activering kan via het WordPress-dashboard. Maar aangezien we onze Mina-taak hebben, kun je het proberen:

$ mina toggle_plugin \ ["mathjax-latex" \] # Moet output ----> Plug-in wisselen mathjax-latex Succes: Plugin 'mathjax-latex' geactiveerd.

Het updaten van een plug-in is precies dezelfde procedure. Je downloadt de plug-in, kopieert hem naar wp-content / plugins / [plugin-need-to-update], commit en re-deploy.

3. Een thema installeren


De workflow is net als bij de plug-in, alleen een andere opdracht wp-cli om het thema te activeren. We hoeven alleen het thema toe te voegen aan Git, commit, push, deploy.

Bekijk het volgende voorbeeld waarin we dit thema zullen installeren. We hebben het al gedownload en in wp-content / themes / natsume geplaatst.

git add wp-content / themes / natsume git commit -m "Voeg mathjax plugin toe" git push origin master mina deploy 

Nogmaals, het thema activeren kan worden gedaan op de gebruikersinterface van WordPress. Maar laat een Mina-taak maken, zodat we deze kunnen activeren zodra we deze hebben geïmplementeerd, vanaf de opdrachtregel. 

Dit is de taak:

desc "Thema activeren"
taak: toggle_theme,: theme do | cmd, args |
theme = args [: theme]
wachtrij% [echo "----> Activeer thema # thema"]
in de map "# deploy_to / current" doen
wachtrij% [./ wp-cli.phar-thema activeren # thema]
einde
einde

Om een ​​thema te activeren, voert u onze taak uit:

$ mina toggle_theme \ ["natsume" \] 

4. Databaseback-up

Met deze taak wordt de WordPress-database naar een gzip-bestand gedumpt shared / backup map. Als de back-upmap nog niet bestaat, maken we deze en daarna bellen we de opdracht wp-cli db om de database naar een bestand te dumpen. 

De bestandsnaam is de combinatie van datum en tijd wanneer we in dit formaat exporteren "[jaar] [maand] [dag] _ [uur] [minuut] [seconde] .sql.gz". 

Laten we onze Mina-taak samenstellen.

desc "Exporteer WordPress-database naar gedeelde / back-up" -taak: db_export do # maak een back-upmap als het geen exit is backup_to = "# deploy_to / shared / backup" wachtrij% [[-d # backup_to] || mkdir -p # backup_to] in_directory "# deploy_to / current" do time = Time.new file = "# time.year # time.month # time.day _ # time.hour  # time.min # time.sec .sql.gz "wachtrij% [echo" ----> Back-up van database naar # file "] wachtrij% [./ wp-cli.phar db export - | gzip> # backup_to / # file] end end

[-d naam] is een syntaxis om het bestaan ​​van de map te controleren. Als dat niet het geval is, gebruiken we mkdir om het te maken.
Vervolgens gebruiken we het Time-object van Ruby om datum en tijd te extraheren en samen te voegen om onze bestandsnaam te maken.

Als je een back-up wilt maken, typ je vanaf je lokale computer:

$ mina db_export

Eenvoudig en elegant. Eén opdracht en je hebt alles.

5. Domein bijwerken


Wanneer u het domein wijzigt, moet u het vaak opnieuw configureren in wp-config.php of het domein handmatig bijwerken in de database. Hoe dan ook, het is veel werk. 

Laten we deze ene keer gewoon oplossen. De opdracht om een ​​optie bij te werken is: wp-cli optie update [option_key] [option_value]. Volgens de WordPress-documentatie bestaat het domein in twee opties: huis en SITEURL

update_option ( 'siteurl', 'http: //example.com'); update_option ( 'home', 'http: //example.com');

Dus, hier is onze taak:

desc "Verander domein naar een nieuwe"
taak: update_domain,: domain do | cmd, args |
domain = args [: domein]
zet domein
in de map "# deploy_to / current" doen
wachtrij% [./ wp-cli.phar optie update home # domein]
wachtrij% [./ wp-cli.phar optie update siteurl # domein]
einde
einde

Roep het aan vanaf de opdrachtregel:

$ mina update_domain \ ["http://log.axcoto.com" \]

6. Genereer een dummy post

Een zeer handige functie van wp-cli is het genereren van berichten. Tijdens de testtijd kunt u merken dat u handmatig veel dummy-berichten maakt. De opdracht om een ​​bericht te maken met wp-cli is wp-cli post genereert --count = aantal. Zoals altijd kunt u de syntax zelf lezen op de wp-cli-website.

We zullen een taakoproep maken gen_dummy_post met een parameter is het aantal berichten. Om de inhoud van de post te krijgen, gebruiken we krul om een ​​lorem ipsum-tekst via te ontvangen de Loripsum API. cURL is een opdrachtregelprogramma dat meestal vooraf is geïnstalleerd op Linux / Mac OS waarmee u HTTP-aanvragen kunt verzenden.

Je kunt het zien als een browser, maar uitvoeren op de opdrachtregel. Dus in plaats van een adres in uw browser in te voeren en de uitvoer in uw browser te zien, geeft u cURL een websiteadres en retourneert het de website-inhoud.

Laten we het onderstaande commando proberen:

$ krul http://loripsum.net/api/5 

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Zijn oratoria, ab zijn imperatores ac rerum publicarum principes extiterunt. Cupiditates non Epicuri divisione finiebat, sed sua satietate. Venit ad extremum; Duo Reges: constructio interrete. Respondeat totidem verbis. Quis Aristidem niet-dodelijk diligit? Quid Zeno?

Nihil acciderat ei, quod nollet, nisi quod anulum, quo delectabatur, in mari abiecerat. Nondum autem explanatum satis, erat, quid maxime natura vellet. Quod autem satis est, eo quicquid accessit, nimium est; Tum ille: Ain tandem? Sedille, ut dixi, vitiose. Quantum Aristoxeni ingenium consumptum videmus in musicis? Quid enim possumus hoc agere divinius? Ut enim consuetudo loquitur, id solum dicitur honestum, quod est populari fama gloriosum.

Sed quid minus probandum quam esse aliquem beatum nec satis beatum? Primum cur ista res digna odio est, nisi quod est turpis? Utinam quidem dicerent alium alio beatiorem! Iam ruinas videres. Beatum, nam toe. Deinde disputat, quod cuiusque generis animantium statui deceat extremum. Nihil enim iam habes, quod ad corpus referas;

Quod ea non occurrentia fingunt, vincunt Aristonem; Niet-sempre, inquam; Quid de Platone aut de Democrito loquar? Quem Tiberina descensio festo illo die tanto gaudio affecit, quanto L. Non enim ipsa genuit hominem, sed accepit a natura inchoatum. Scaevolam M. Recte, inquit, intellegis. Uterque enim summo bono fruitur, id est voluptate. Sic exclusis sententiis reliquorum cum praeterea nulla esse possit, haec antiquorum valeat necesse est. Sed fortuna fortis; Mihi quidem Antiochum, quem audis, satis belle videris attendere.

Nam si propter voluptatem, quae est ista laus, quae possit e macello peti? Nonne igitur tibi videntur, inquit, mala?

Dus als je het uitvoert, worden vijf alinea's van lorem ipsum teruggegeven. U kunt het nummer daarna wijzigen / api om meer alinea's te krijgen.

We weten dat ze inhoud hebben, we zullen het in wp-cli invoeren om berichten te maken. De syntaxis om dat te doen is:

krul http://loripsum.net/api/5 | wp post generate --post_content --count = 10

Let op de chracter |, het betekent dat we de inhoud doorspitten naar de volgende commad. We weten dat de syntaxis bestaat, we kunnen beginnen met het samenstellen van de taak

desc "Generate random post" task: gen_dummy_post,: howmany do | cmd, args | howmany = args [: howmany] puts howmany in_directory "# deploy_to / current" do queue% [krul http://loripsum.net/api/5 | ./wp-cli.phar bericht genereren --count = # howmany --post_content] end end 

Zodra u de syntaxis van de Mina-taak kende, kunt u meer lezen over de opdracht WP-CLI om uw eigen taak te schrijven, zoals het maken van een gebruiker, dummy-gebruikers genereren voor testen ...

Als u meer wilt weten over wp-cli, kunt u deze links bezoeken:

  • http://www.slideshare.net/Japho/wp-melb-2014-0218
  • https://www.digitalocean.com/community/articles/how-to-use-wp-cli-to-manage-your-wordpress-site-from...
  • http://code.tutsplus.com/articles/using-wp-cli-for-fun-and-profit--wp-24496

Conclusie

We hebben nu een goed begrip van hoe Mina-taken moeten worden geschreven, hoe de kracht van wp-cli moet worden gebruikt. Met de combinatie van deze twee hulpprogramma's, hoopt u dat u deze zeer snel implementeert en dat uw WordPress-installatie veiliger is dan voorheen en de tijd voor beheertaken verkort. 

Beperk jezelf niet. De informatie in deze tutorial is heel kort, voeg meer dingen toe aan je taakbestanden en laat ons weten wat je in commentaar hebt opgedaan. 

Als je een probleem hebt, laat dan een reactie achter, ik hou van helpen en praten. Gelukkige automatisering van WordPress!