Bruke WP-CLI med Mina

I den første delen av denne serien kunne vi bruke Mina til å distribuere WordPress. Vi lærte at Mina lager en shell script-fil, og skyver deretter WordPress til serveren for å kjøre. Siden alle kommandoer kjøres i en enkelt SSH-forbindelse, er Mina veldig fort. 

Ved hjelp av dette kan vi skrive oppgaver for å automatisere WordPress-kontroll. Vi kan slå vanlige WordPress-oppgaver som å skape brukere, installere en plugin, sikkerhetskopiere dataene våre og så videre inn i en rekke shell kommandoer. Da kombinerer vi disse shell kommandoene i Mina oppgave. 

Men hvordan kan vi lage shell kommandoer for å utføre disse oppgavene? WP-CLI er svaret. Det hjelper å kontrollere WordPress gjennom kommandolinjen. Du trenger ikke å logge på WordPress-dashbordet for å gjøre administrasjonsoppgaver. WP-CLI gir oss et sett med kommandoer som tilsvarer WordPress admin-oppgaver. Når vi vet WP-CLI-kommandoene for en spesiell oppgave, trenger vi bare å sette disse kommandoene i en Mina-oppgave. 

Hva trenger jeg å vite på forhånd?

  • Du trenger enten et Mac OS eller Linux OS for å få tilgang til en terminal. Hvis du er på Windows, er det fortsatt mulig, men det blir ikke dekket i denne opplæringen. 
  • Du bør ha en veldig grunnleggende forståelse av skallkommandoer og terminalen. Så lenge du har åpnet Terminal- eller iTerm-appen før, bør opplæringen være veldig enkelt for deg.
  • Du må ha SSH-tilgang til din eksterne maskin.

En rask titt på WP-CLI

Et veldig raskt eksempel, slik at du kan ha en oppgave med hva vi har med WP-CLI. Når du begynner å utvikle et WordPress-nettsted, må du opprette dummy innlegg eller dummy brukerkontoer for testing formål. 

Å skrive dette (når du har installert wp-cli) på terminalen din, vil skape deg 100 dummy innlegg uten minimal innsats.

php wp-cli.phar post generere - antall 100

Se hvor mye tid vil det spare deg? Men trenger vi virkelig å kjøre disse tingene via kommandolinjen? 

Spare tid er fint, men ikke et behov.

Her er en veldig god grunn til å gjøre dette: sikkerhet. Enkelte handlinger fra WordPress dashbord krever skrive tillatelse til wp-innhold mappe. Eksempel: Last opp plugins, laste opp temaer, oppgradere WordPress og så videre. Jo mer tillatelse vi gir til allmennheten, jo mer fare vi utsetter for nettstedet vårt. 


La oss forestille oss at en angriper får tilgang til vårt WordPress dashboard. Angriperen vil kunne laste opp skadelige skript som et plugin. En måte å forhindre dette på, er å deaktivere skrivetillatelse til en hvilken som helst mappe eller fil av WordPress unntatt wp-innhold / opplasting mappe. Derfor kan ingen laste opp et plugin eller et tema til webserveren. 

I første del av denne opplæringen lærer vi å gi skriverettigheter til Apache på wp-innhold / opplasting mappe. Vi endret eierskip av wp-innhold / opplasting til webserveren brukeren. På den måten kan webserveren skrive til opplastingsmappen; Derfor kan WordPress laste opp bilder og skrive inn i vår opplastinger mappe. 

Enhver handling som krever skriving til WordPress-mappen (unntatt opplastinger mappe) skal gjøres via kommandolinjen. Med andre ord vil vi legge til filen manuelt fra vår lokale maskin, forplikte og distribuere til server med Mina. Med dette oppsettet blir vår WordPress-katalog en skrivebeskyttet boks (unntatt for opplastinger mappe som brukes til lagring av media). 

Medieopplastingsfunksjonen i WordPress har allerede et sikkerhetslag for å hindre opplasting av PHP-filer. Hvis du vil gå videre, kan du konfigurere å ikke kjøre PHP-filer inni opplastinger mappe, men det er ideen og vil ikke være omslag i denne opplæringen. Vi vil fokusere mer på kommandolinjearbeid med WP-CLI.

Oppdater WordPress uten å skrive tillatelser

Når vi har fjernet skrivetillatelse, vil automatisk oppdateringen ikke lenger fungere, og du kan ikke bare oppdatere programmet fra WordPress dashboard. Siden vi har klart vår WordPress-kode med Git, bør vi gjøre oppdateringen manuelt. 

Vi kan laste ned WordPress zip / tar-filen, komprimerer den, overskriver gjeldende WordPress-fil. Deretter forplikter vi den nye koden, skyver til vårt lager, og gjør en distribusjon med Mina.

En gjennomgang av Mina Task Theory

En oppgave i Mina er bare en vanlig Rake-oppgave med a metode som kjøpte shell-kommandoene for å kjøre på serveren senere. For alle kommandoer som vi vil kjøre på server, kan vi bruke metode som følger.


desc "Beskriv denne oppgaven"
oppgave: prøve kjøre "ls # deploy_to / nåværende" kø "berør /tmp/test.log" avslutte

De desc blokk er valgfritt, men det er fint å ha. Hvis du skriver inn mina uten noen parameter, desc informasjon vil bli skrevet ut på skjermen for din referanse.

$ mina mina - Virkelig rask serverutplassering og automatiseringsverktøy Alternativer: -h, --hjelp Vis hjelp -V, --versjon Vis programversjon -v, --verbose Vis kommandoer når de skjer -S, --imuler Kjør i simulering modus -t, --trace Vis backtraces når feil oppstår -f FILE Bruk FILE som distribusjonskonfigurasjon Grunnleggende bruk: min hjelp # Vis hjelp. mina init # Oppretter en sample config-fil. Mine oppgaver # Vis alle oppgaver. Server oppgaver: mina clean_cache # Ren nginx cache mina db_export # Eksporter WordPress database til delt / backup mina deploy # Gjør den gjeldende versjonen til serveren. min tilbakestilling # Tilbakestilling til tidligere versjon mina run [command] # Kjører en kommando i serveren. mina oppsett # Setter opp et nettsted. mina toggle_plugin [plugin] # Slå på et plugin mina toggle_theme [tema] # Aktiver tema mina wp_version # Vis gjeldende WordPress-versjon Alle Rake-alternativer er også tilgjengelige som 'mina' -alternativer. Se 'rake - help' for mer informasjon.

For enhver kommando som vi vil kjøre på lokal maskin, kan vi bruke backtick ( ') karakter.

Oppgave: Prøve setter 'pwd' setter 'ls -la' slutten

La oss teste det med mina prøve for å se hva det skriver ut på din lokale maskin.

Så, i utgangspunktet er en Mina-oppgave bygget ved å lage en blokk av Oppgave: Oppgavenavn gjør // ... slutt
Oppgaven kan bli påkalt med min oppgavenavn. Hvis vi trenger å sende argument til oppgaven, kan vi bruke denne syntaksen:

oppgave: oppgavenavn,: arg,: another_arg do | cmd, args | setter args [: arg] setter args [: another_arg] end

Braketten [] er bare Ruby-måten å få tilgang til en hash. Du kan tenke på det som PHP associative array. Vi kaller argumentet, og så inne i oppgaveorganet, kan vi lett få tilgang til verdien med argument [: argument_name]. I dette eksemplet er argumentnavn er : arg og : another_arg

Oppgaven kan påberopes med denne syntaksen: min oppgavenavn [param1, param2]. Flere argumenter kan legges til, og vi vil passere flere parametere i det som min oppgavenavn [param1, param2, param3, param4].

Du kan forestille deg at oppgavenavn er en metode navn og vi ringer en metode og sender sin argumentasjon. Hvis parameteren har en plass, bør vi pakke hele parameteren med et tilbud.

 La oss prøve opp oppgaven nå. Det skriver bare ut hva vi passerer inn i det.

$ mina oppgavenavn [verdi1, "verdi 2 med litt plass"]
verdi1
verdi 2 med litt plass

Hvis du brukte zsh-skall, må du unnslippe [og] med tilbakeslaget:

$ mina oppgavenavn \ [verdi1, "verdi 2 med litt plass" \]

En annen ting å merke seg er in_directory metode av Mina. Det er veldig sannsynlig at du må cd inn i en katalog og kjør et par kommandoer. I stedet for å manuelt kjørecd kommando, vi kan bruke den praktiske in_directory metode. Det vil kjøre kommandoen inne i katalogen vi angir.

oppgave: prøve gjør in_directory "# deploy_to / current" gjør kø "pwd"
slutten

Ok, nok for teori. La oss starte den morsomme delen: Vi vil installere wp-cli, og deretter sette opp noen få oppgaver.

Installer WP-CLI

Alt vi trenger er å laste ned PHAR-filen til WP-CLI. Det er en enkelt fil som kan kjøres til PHP-motoren. I stedet for å ha en haug med PHP-filer, kan du komprimere dem til en enkelt fil som kan kjøres av PHP. 

Det er en veldig enkel måte å distribuere PHP-pakker på. Akkurat som på Windows, laster du ned en programvare i en enkelt. EXE-fil og kjører den. Å gjøre dette, cd inn i WordPress-koden på lokal maskin, kjør denne kommandoen:

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

La oss bekrefte at det fungerer. Kjør på din lokale maskin wp-cli.phar - info og du bør få følgende utgang.


./wp-cli.phar - info
PHP binær: / usr / bin / php
PHP versjon: 5.4.24
php.ini brukt: /etc/php.ini
WP-CLI root dir: phar: //wp-cli.phar
WP-CLI global config:
WP-CLI prosjektkonfigurasjon:
WP-CLI-versjon: 0.14.1

Nå er wp-cli i samme katalog med WordPress, la oss forplikte det og
trykk til depotet ditt og gjør en distribusjon.


git legg til wp-cli.phar git commit -m "Legg til wpcli" git push opprinnelse master mina distribuere

På dette tidspunktet er wp-cli i vår WordPress-katalog på serveren. La oss gjøre litt magi med det: skrive min oppgave med wp-cli.

Skrive en Mina-oppgave med WP-CLI

I dette avsnittet vil jeg vise deg hvordan du gjør noen grunnleggende oppgaver med wp-cli, samt hvordan du legger dem inn i Mina, slik at du kan få en smak av hvordan ting ser ut og gå, skriv din egen oppgave for å matche arbeidsflyten din og din trenge. Første ting først: Hei Verden.

1. Hei verden

Den aller første, veldig enkle kommandoen til wp-cli er å vise gjeldende WordPress-versjon. La opprette en mer Mina oppgave. Legg dette til din config / deploy.rb fil:

Descend "Show current WordPress versjon" oppgave: wp_version =>: miljø gjør køen% [echo "-----> Hei verden. Jeg er på denne versjonen nå:"] kø "cd # deploy_to / current &&. /wp-cli.phar kjerneversjon "slutt

Prøv nå å kjøre den:

$ mina wp_version -----> Hei verden. Jeg er på denne versjonen nå: 3.8.1 Forløpt tid: 0,00 sekunder

2. Installere et plugin

Vi laster ned et plugin for hånd, trekker det ut, legger det til i depotet, forplikter det, distribuerer og kjører en annen min oppgave for å aktivere et plugin. 

Her er koden vi trenger for denne oppgaven

desc "Toggle a plugin" -oppgave: toggle_plugin,: arg1 do | cmd, plugin | kø% [echo "----> Aktiver tema # theme"] in_directory "# deploy_to / current" køen% [./wp-cli.phar plugin toggle # plugin] endeenden 

Vi køer en ekkokommando for å skrive ut noen tekst. Kommandoen for å aktivere et plugin fra wp-cli er plugin swap plugin_name

For eksempel, si at vi vil installere Mathjax Latex-pluginet, og vi legger det allerede inn wp-innhold / tillegg

Vi kan installere denne måten:

git legg til wp-innhold / plugins / mathjax-latex git commit -m "Legg til mathjax plugin" git push opprinnelse master mina distribuere 

Nå er plugin installert. Aktivering kan gjøres via WordPress dashboard. Men siden vi har vår Mina oppgave, kan du prøve det:

$ mina toggle_plugin \ ["mathjax-latex" \] # Skal utdata ----> Bytt plugin mathjax-latex Suksess: Plugin 'mathjax-latex' aktivert.

Oppdatering av et plugin er bare den samme prosedyren. Du laster ned pluginet, kopier det til wp-innhold / plugg / [plugin-need-to-oppdatering], forplikte og re-distribuere.

3. Installere et tema


Arbeidsflyten er akkurat som hvordan vi gjør med plugin, bare en annen wp-cli-kommando for å aktivere temaet. Vi trenger bare å legge til temaet i Git, forplikte, presse, distribuere.

Ta en titt på følgende eksempel der vi skal installere dette temaet. Vi har allerede lastet ned og lagt det inn i wp-innhold / temaer / natsume.

git legg til wp-innhold / temaer / natsume git commit -m "Legg til mathjax plugin" git push opprinnelse master mina distribuere 

Igjen kan temaaktiveringen gjøres på WordPress admin-brukergrensesnitt. Men la oss gjøre en Mina-oppgave, slik at vi kan aktivere den når vi distribuerer den, fra kommandolinjen. 

Her er oppgaven:

desc "Aktiver tema"
oppgave: toggle_theme,: theme do | cmd, args |
tema = args [: tema]
kø% [ekko "----> Aktiver tema # tema"]
in_directory "# deploy_to / current" gjør
kø% [./ wp-cli.phar tema aktivere # tema]
slutt
slutt

For å aktivere et tema, kjør vår oppgave:

$ mina toggle_theme \ ["natsume" \] 

4. Database Backup

Denne oppgaven vil dumpe WordPress-databasen til en gzip-fil i delt / backup mappe. Hvis sikkerhetskopieringsmappen ikke eksisterer ennå, vil vi opprette den, så kaller vi wp-cli db-kommandoen for å dumpe databasen til en fil. 

Filnavnet vil være kombinasjonen av dato og klokkeslett når vi eksporterer i dette formatet "[år] [måned] [dag] _ [time] [minutt] [andre] .sql.gz". 

La oss komponere vår Mina-oppgave.

desc "Eksporter WordPress database til delt / backup" oppgave: db_export gjør # opprett backup katalog hvis det ikke går ut backup_to = "# deploy_to / shared / backup" kø% [[-d # backup_to] || mkdir -p # backup_to] in_directory "# deploy_to / current" gjør tid = Time.new file = "# time.year # time.month # time.day _ # time.hour  # time.min # time.sec .sql.gz "kø% [echo" ----> Sikkerhetskopier database til # file "] kø% [./wp-cli.phar db eksport - | gzip> # backup_to / # file] slutten

[-d navn] er en syntaks for å sjekke eksistensen av mappen. Hvis ikke, bruker vi mkdir til å lage den.
Da bruker vi Time-objektet til Ruby til å trekke ut dato og klokkeslett og sammenkoble sammen for å lage vårt filnavn.

Når du vil sikkerhetskopiere, skriver du fra din lokale maskin:

$ mina db_export

Enkel og elegant. En kommando, og du har alt.

5. Oppdater Domene


Svært ofte, når du endrer domenet, må du konfigurere det på nytt i wp-config.php, eller manuelt oppdatere domenet i databasen. Uansett er det mye arbeid. 

La oss bare løse denne gangen. Kommandoen for å oppdatere et alternativ er: Oppdatering av wp-cli [option_key] [option_value]. I følge WordPress-dokumentasjonen er domenet i to alternativer: hjem og SITEURL

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

Så, her er vår oppgave:

desc "Endre domene til en ny"
oppgave: update_domain,: domain do | cmd, args |
domain = args [: domain]
setter domenet
in_directory "# deploy_to / current" gjør
kø% [./ wp-cli.phar opsjonsoppdatering hjemme # domain]
kø% [./ wp-cli.phar opsjonsoppdatering siteurl # domain]
slutt
slutt

Oppgi det fra kommandolinjen:

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

6. Generer en Dummy Post

En veldig praktisk funksjon av wp-cli er postgenerering. Under testetiden kan du finne deg selv manuelt å lage mange dummy innlegg. Kommandoen for å lage post med wp-cli er wp-cli post generere - antall = mengde. Som alltid kan du lese syntaksen selv på wp-cli nettsted.

Vi oppretter et oppgaveanrop gen_dummy_post med en parameter er antall innlegg. For å få innhold av innlegg, vil vi bruke krøll for å få en lorem ipsum tekst via Loripsum API. cURL er et kommandolinjeverktøy som vanligvis er forhåndsinstallert på Linux / Mac OS, som lar deg sende HTTP-forespørsel.

Du kan tenke på det som en nettleser, men kjør på kommandolinjen. Så i stedet for å skrive inn en adresse i nettleseren din, og se utgangen på nettleseren din, gir du cURL en nettsideadresse, og den returnerer innholdet på nettstedet.

La oss prøve under kommando:

$ krølle http://loripsum.net/api/5 

Kjæresten er dum og sitter, og er en avgjørende forfatter. Ab hans oratorer, over hans imperatorer ac rerum publicarum princes extiterunt. Cupiditates ikke Epicuri divisione finiebat, sed sua satietate. Venit ad extremum; Duo Reges: konstruksjon interrete. Respond til hele tiden. Quis Aristidem non mortuum diligit? Quid Zeno?

Nihil acciderat ei, quod nollet, nisi quod anulum, quo delectabatur, in maria abiecerat. Nondum autem explanatum satis, erat, quid maxime natura vellet. Du kan selvfølgelig også få tilgang til et annet sted. Tum ille: Ain tandem? Sett deg ut, ut dixi, vitiose. Kvantum Aristoxeni ingenium consumptum videmus in musicis? Er du enig med deg? Ut er et godt valg, men du er ærlig, det er et populært fama gloriosum.

Har du et minusproblem, er du ikke enig med deg? Primum cur erta res digna odio est, nisi quod est turpis? Utinam quidem dicerent alium alio beatiorem! Iam ruinas videres. Beatum, inquit. Deinde disputat, quod cuiusque generis animantium statui deceat extremum. Nihil enim iam habes, med ad corpus referas;

Det er ikke en feiltakelse, vincunt Aristonem; Ikke sempre, inquam; Quid de Platone aut de Democrito loquar? Quem Tiberina descensio festo illo dø tanto gaudio affecit, quanto L. Ikke enim ipsa genuit hominem, sed godta en naturlig inchoatum. Scaevolam M. Recte, inquit, intellegis. Uterque enim summo bono fruitur, id er voluptate. Sic eksklusiv 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 å skrive ut, er du sikker på at du kan ha det med deg? Nonne igitur tibi videntur, inquit, mala?

Så når du kjører det, returneres fem avsnitt av lorem ipsum. Du kan endre nummeret etter / api for å få flere avsnitt.

Vi vet at vi har innhold, vi vil mate den inn i wp-cli for å lage innlegg. Syntaxen for å gjøre det er:

krølle http://loripsum.net/api/5 | wp post generere --post_content - count = 10

Legg merke til chracter |, det betyr at vi piper innholdet inn i neste kommad. Vi vet at syntaxen, vi kan begynne å komponere oppgaven

desc "Generer tilfeldig innlegg" oppgave: gen_dummy_post,: howmany do | cmd, args | howmany = args [: howmany] setter howmany in_directory "# deploy_to / current" gjør kø% [curl http://loripsum.net/api/5 | ./wp-cli.phar post generere --count = # howmany --post_content] slutten 

Når du visste syntaxen til Mina-oppgaven, kan du lese mer om WP-CLI-kommandoen for å skrive din egen oppgave, for eksempel å skape bruker, generere dummy-brukere for testing ...

Hvis du vil lene mer om wp-cli, kan du besøke disse linkene:

  • 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

Konklusjon

Vi har nå en god nok forståelse av hvordan du skriver Mina oppgaver, hvordan du bruker kraften til wp-cli. Med kombinasjonen disse to verktøyene, håper du vil distribuere veldig fort, og ditt WordPress-installasjon vil være sikrere enn før, og redusere tiden for administrasjonsoppgaver. 

Ikke begrense deg selv. Informasjonen i denne opplæringen er veldig kort, vennligst legg til flere ting i oppgavefilene og gi oss beskjed om hva du kom opp i kommentar. 

Hvis du har problemer, vennligst legg igjen en kommentar, jeg liker å hjelpe og snakke. Glad WordPress-automatisering!