Cum să sincronizați un blog WordPress local și la distanță utilizând controlul versiunii

V-ați întrebat vreodată cum puteți utiliza versiunea de control cu ​​WordPress? Dacă preferați să lucrați la proiectele dvs. WordPress pe plan local, dar trebuie să le sincronizați de la distanță, acest tutorial este pentru dvs. Probabil că ați încercat să sincronizați între cele două setări prin încărcarea manuală a fișierelor modificate și utilizând PHPmyAdmin pentru a vă exporta și importa baza de date odată schimbată și (foarte probabil) a rupt ceva în proces. În acest tutorial, vom merge automatiza procesul de sincronizare; astfel încât să vă puteți concentra pe ceea ce trebuie să faceți în loc să vă luptați cu migrații nesfârșite.


Problema

De obicei, începem dezvoltarea WordPress pe mașinile noastre locale. Este întotdeauna mai rapid și mai ușor, mai ales atunci când aveți o conexiune lentă la internet. Dar sunt momente când trebuie să lucrezi de la distanță. S-ar putea să doriți să efectuați o mică schimbare, să remediați unele umpluturi sau pur și simplu să publicați un nou post. Modificările nu sunt salvate în aplicația dvs. WordPress instalată local și atunci când mizeria începe.

Mizeria începe deoarece este posibil să aveți nevoie să lansați o nouă versiune și, din moment ce lucrați la nivel local, schimbările pe care le-ați făcut de la distanță trebuie să fie aduse off-line. Este o adevărată durere. Trebuie să dați seama ce fișiere ați schimbat și să le descărcați / FTP. Uneori, schimbările au loc în baza de date, deci aveți nevoie de un instrument special, cum ar fi phpmyAdmin, pentru a aduce modificările.

În acest proces, puteți rupe ceva sau uitați o modificare. Atunci totul devine murdar. În acest caz, aveți nevoie de două lucruri: controlul versiunii și sincronizarea. În acest tutorial, voi descrie soluția pe care o urmăresc pentru a-mi organiza dezvoltarea și sincronizarea între mașina mea locală și serverul meu la distanță.


Pasul 1 Înființarea Fundației

Explicarea planului

În primul rând, permiteți-mi să explic ce vom face. Scopul nostru este sincronizarea ușoară între versiunea locală și cea locală. Veți lucra în ce versiune vă rog și apoi le veți face identice. Pentru a face acest lucru, trebuie mai întâi să explicăm diferențele dintre configurația locală și cea locală.

WordPress stochează informații despre blogul dvs. atât în ​​fișiere statice cât și în baza de date. Unele dintre aceste informații sunt relativ la hostingul dvs. curent. De aceea, atunci când încărcați întregul dosar WordPress și înlocuiți versiunea de la distanță, acesta nu va funcționa.

Informațiile se împart în două părți:

  • Fișiere statice: WordPress pune informațiile serverului de bază de date în fișierul wp-config.php.
  • Bază de date: WordPress plasează adresa URL a paginii de pornire și a paginii de pornire în tabela opțiuni wp.

Pentru wp-config.php, vom implementa un proces care detectează dacă suntem în serverul local sau la distanță. În acest fel, același fișier va funcționa și în ambele medii. Pentru baza de date, o vom integra cu sistemul de control al versiunii și îl vom actualiza astfel încât să se potrivească cu setările gazdă locale sau la distanță.

Integrarea controlului versiunii

Eu folosesc Mercurial pentru controlul versiunii. Git este mai popular în arena de dezvoltare web, dar în cazul nostru sunt aproape similare: Aveți nevoie doar de un instrument de control al versiunii.

Alegeți Mercurial dacă sunteți pe o mașină Windows. Are Tortoise, o interfață ușor de utilizat, pentru a vă gestiona depozitele. Instrumentul de control al versiunii trebuie să fie instalat în ambele mașini locale și la distanță. Acestea fiind spuse, veți avea nevoie de un server dedicat sau de un VPS pentru a putea instala aplicația terță parte.

Pentru a inițializa un depozit în Mercurial, tastați următoarele în consola dumneavoastră

 cd / mydev_directory hg init hg adăugați hg comite

În prima linie, schimbăm directorul de lucru în directorul pe care vrem să activam controlul versiunii. Acesta va fi directorul WordPress (unde veți instala WordPress). Următoarea linie inițializează depozitul. A treia linie spune mercurial să verifice toate versiunile din director. Aceasta va include și sub-dosare. Ultima linie creează un nou set de modificări în director; editorul de text se va deschide și vi se va cere să scrieți o descriere a acestei comitete.

Acest tutorial nu acoperă modul de utilizare a produsului Mercurial. Dacă nu știți controlul versiunii, atunci ar trebui să-l învățați. Acesta este un instrument important pentru a vă adăuga setul de aptitudini. Iată câteva tutoriale pe care le sugerez:

  • Inițial: În definitiv, cel mai bun tutorial despre Mercurial.
  • Mercurial pe Ubuntu: Acest tutorial arată cum se configurează Mercurial pe Ubuntu. Este util dacă rulați Ubuntu pe serverul dvs. VPS sau dedicat.

Pasul 2 Configurarea blogului dvs. local WordPress

Vom face o instalare proaspătă de WordPress în mașina noastră locală. Descărcați ultima versiune WordPress, extrageți-o într-un director gol la alegerea dvs. pe serverul dvs. web și instalați-l din browser sau modificând fișierul wp-config.php.

Acum vom activa controlul versiunii în directorul WordPress

 cd / testpress Hg init Hg adăugați comanda Hg

Aceste comenzi inițializează depozitul și creează primul set de modificări. Acum, putem clona pur și simplu acest depozit în serverul nostru, puteți instala WordPress și puteți sincroniza între distribuția locală și cea de la distanță.

Cu toate acestea, există diferențe așa cum am spus mai devreme. Înainte de implementarea procesului de sincronizare, trebuie să implementăm un script care să verifice locul în care rulează instalarea WordPress și să încarce setările corecte.
Setările care trebuie modificate sunt informațiile bazei de date. Ele sunt localizate în fișierul wp-config.php iar WordPress le încarcă din acest fișier. Versiunea mea locală arată așa

 // ** Setările MySQL - Puteți obține aceste informații de la gazda web ** // / ** Numele bazei de date pentru WordPress * / define ('DB_NAME', 'test'); / ** numele de utilizator al bazei de date MySQL * / define ('DB_USER', 'root'); / ** Parola bazei de date MySQL * / define ('DB_PASSWORD', 'xxxxx'); / ** Numele gazdei MySQL * / define ('DB_HOST', 'localhost'); / ** Cartelă bază de date pentru a fi utilizată în crearea tabelelor bazei de date. * / define ('DB_CHARSET', 'utf8'); / ** Tipul de bază de date. Nu modificați acest lucru dacă aveți îndoieli. * / define ('DB_COLLATE', ");

Rețineți că am copiat numai partea care contează. În serverul meu de la distanță, această parte ar trebui să difere ușor

 // ** Setările MySQL - Puteți obține aceste informații de la gazda web ** // / ** Numele bazei de date pentru WordPress * / define ('DB_NAME', 'user_blog'); / ** numele de utilizator al bazei de date MySQL * / define ('DB_USER', 'root'); / ** Parola bazei de date MySQL * / define ('DB_PASSWORD', 'xyxyx'); / ** Numele gazdei MySQL * / define ('DB_HOST', 'localhost'); / ** Cartelă bază de date pentru a fi utilizată în crearea tabelelor bazei de date. * / define ('DB_CHARSET', 'utf8'); / ** Tipul de bază de date. Nu modificați acest lucru dacă aveți îndoieli. * / define ('DB_COLLATE', ");

Trucul este de a scrie un cod care să detecteze unde se află WordPress. Variabila de utilizat este variabila PHP _SERVER [ "HTTP_HOST"]. Codul evaluează variabila și atribuie setările bazei de date.

 / * * Variabile unificate * / $ user_name = 'root'; $ hostname = 'localhost'; $ charset = 'UTF-8'; $ collate = "; / * * Verificați pentru mediul actual * / if ($ _SERVER [" HTTP_HOST "] === 'onlineqrlab.com') $ db_name = 'user_wordpress'; $ password = 'xyxyxy'; dacă $ _SERVER ["HTTP_HOST"] === 'localhost') $ db_name = 'test'; $ password = 'xxxxxx'; // ** Setările MySQL - // / ** Numele bazei de date pentru WordPress * / define ('DB_NAME', $ db_name); / ** MySQL nume de utilizator bază de date * / define ('DB_USER', $ user_name); / ** MySQL password database * / Definiți ('DB_CHARSET', $ chartset) * / define ('DB_PASSWORD', $ password); / ** MySQL hostname * / define ('DB_HOST', $ hostname); ; / ** Tipul bazei de date Collate, nu schimba acest lucru dacă aveți dubii. * / Define ('DB_COLLATE', $ collate);

În exemplul de mai sus, am doar doi parametri care s-au schimbat: numele bazei de date și parola. S-ar putea să aveți mai mult de atât. De exemplu, dacă găzduiți serverul mySql pe un server extern, va trebui să schimbați numele gazdei pentru configurarea serverului dvs. la distanță. Ar fi mai bine să limitați accesul blogului WordPress la nivel de utilizator cu capacități limitate în loc de nivel de administrator.

Verificați dacă versiunea dvs. locală WordPress funcționează. Dacă da, atunci sunteți pe jumătate terminat!


Pasul 3 Sincronizarea depozitelor Mercuriale

Setarea depozitului de server de la distanță

Puteți începe acum să lucrați la instalarea WordPress locală. De fiecare dată când efectuați o modificare majoră, faceți un angajament cu Mercurial pentru a urmări schimbările. În serverul la distanță, presupunând că aveți instalat Apache, creați un nou folder unde veți încărca depozitul dvs. WordPress.

 cd / apache mkdir mywp_repo cd mywp_repo

Rețineți că aceste comenzi ar trebui executate pe serverul dvs. de la distanță. Veți avea nevoie de acces SSH și de o linie de comandă prea. Folosesc Putty pe Windows pentru a te conecta la serverul meu.
Odată ce inițializăm depozitul nostru, putem împinge (încărca) și trage (descărca) seturi de modificări din alte depozite pentru a le ține la curent. Pentru ca acest proces să se întâmple, veți avea nevoie de serverul dvs. local sau de la distanță pentru a publica depozitul, astfel încât să puteți trage / împinge din acesta.

Serverul web Mercurial lipsește câteva funcții importante precum controlul accesului, autentificarea și SSL. Deci, este nesigur să o utilizați pe serverul de la distanță. De preferință, va trebui să rulați serverul web Mercurial local și să trageți modificările de la serverul local la serverul de la distanță.
Pentru a rula serverul Mercurial, tastați următoarele în mașina dvs. locală:

 hg servi

Acum ar trebui să puteți accesa depozitul dvs. din browserul dvs. Introduceți adresa URL afișată pe linia de comandă. De obicei, este localhost: 8000. Depozitul este disponibil și online. Aveți posibilitatea să accesați-l de la orice computer conectat la internet folosind youripaddress: 8000.

 Hg trageți 192.xxx.xxx.xxx:8000 Hg actualizare

Dar nu recomand această metodă deoarece nu este sigură. Există o modalitate ușoară și sigură de a face acest lucru. Este un magazin intermediar găzduit de un serviciu terț. Folosesc BitBucket. Acesta are un serviciu bun și fiabil și oferă, de asemenea, urmărirea bug-urilor și un wiki.

Înregistrați-vă și creați un cont în BitBucket. Acestea oferă numeroase depozite private și publice cu până la 5 utilizatori gratuit. Creați un repository nou în BitBucket și ar trebui să vă duceți la această pagină.

BitBucket are suport HTTPS și SSH. Dacă depozitul dvs. este privat, ca în cazul meu, va trebui să vă autentificați cu numele de utilizator și parola pentru a putea să împingeți și să trageți din depozit.
După ce ați creat noul depozit în BitBucket, executați următoarele comenzi în mașina dvs. locală

 hg push https: //[email protected]/username/repository

Vi se va cere să vă furnizați parola și depozitul va fi încărcat în BitBucket. După încărcarea pe BitBucket, clonați depozitul la serverul de la distanță.

 hg clone https: //[email protected]/username/repository hg actualizare

Clonarea descărcați fișierele într-un director nou (cu numele care este același ca directorul magaziei dvs.); poți redenumi acest director. Acest lucru va face ca primul pas din această secțiune (unde am creat directorul de configurare WordPress) să fie depășit.

Gândiți-vă la BitBucket ca un om de mijloc între computer și gazda dvs. de la distanță. Este posibil să aveți propriul server securizat Mercurial pe serverul dvs. de la distanță, dar acesta este dincolo de scopul acestui tutorial. Avantajul este acela de a fi independent de cel de mijloc. Acest lucru permite împingerea modificărilor direct pe serverul dvs. web.

Deci, cum este mai bine decât FTP?

  1. Nu trebuie să dai seama care fișiere s-au schimbat.
  2. Este mai convenabil și durează mai puțin.
  3. Mult mai repede din moment ce Mercurial împinge doar fișierele care s-au schimbat.

Instalarea blogului serverului de la distanță

Sunteți deja obosiți? Nu vă faceți griji, suntem aproape acolo. După tragerea depozitului de la mașina dvs. locală sau BitBucket, va trebui să rulați din nou instalarea WordPress; de data aceasta pe site-ul serverului de la distanță. Asigurați-vă că setările pe care le-ați introdus în fișierul wp-config.php pe care l-am făcut mai devreme sunt corecte și încărcați site-ul dvs. remote WordPress.

Vi se va cere să instalați din nou blogul dvs. WordPress, deoarece baza de date este goală. După instalare, blogul dvs. WordPress este gata. Puteți efectua modificări în versiunea la distanță sau locală și le puteți sincroniza cu Mercurial.

Dar există încă o problemă importantă: baza de date nu se sincronizează cu fișierele. Acest lucru este important pentru că lucrurile precum postările pe blog, comentariile, tabelele personalizate cu plug-in-uri? nu vor fi aceleași în versiunea locală și la distanță.
WordPress are o caracteristică import / export. Dar nu este util, deoarece nu face o sincronizare reală. Ce aveți nevoie este să mergeți la phpmyadmin-ul dvs., să exportați toate tabelele WordPress într-o parte (la distanță sau locală) și apoi să mergeți la cealaltă parte a phpmyadmin și să înlocuiți tabelele.

După aceasta, bazele dvs. de date WordPress vor deveni aceleași. Totuși, va trebui să modificați rândul site_url din tabelul wp_options. Acest proces devine dureros, pe măsură ce baza de date devine mai greu.


Pasul 4 Sincronizarea bazelor de date

După cum am văzut mai devreme, baza de date este puțin problematică. Nu se sincronizează cu fișierele, este mai greu de atins și necesită actualizarea a două câmpuri de fiecare dată când sincronizați. Nu este distractiv să o faci mereu. Automatizarea este soluția; de fapt, asta e treaba noastră.

Avem nevoie de un script care să sincronizeze bazele de date locale și de la distanță fără a sparge nimic. Ideea care mi-a venit în minte este includerea bazei de date în controlul reviziilor. Conținutul bazei de date va fi exportat la un fișier urmărit de controlul revizuirii. De fiecare dată când tragem modificări, conținutul bazei de date va fi înlocuit de acest fișier, făcând baza noastră de date actualizată.

Deoarece există câteva rânduri care diferă de la o gazdă la alta (adresa URL a site-ului și adresa URL a paginii de pornire), avem nevoie de un alt script mysql care să le actualizeze pe aceștia cu valorile corecte.
Un alt lucru important este conflictele. Dacă lucrați și faceți modificări (comitete) atât la versiunea de la distanță, cât și la cea locală, acest lucru va crea un conflict. Un scenariu tipic este atunci când lucrați și vă implicați în versiunea dvs. locală, iar cineva (online) adaugă un conținut nou pe blogul dvs. Nu vă pot ajuta în această situație, trebuie să învățați despre sistemul Mercurial (sau sistemul de control al revizuirii) care se îmbină și lucrează în echipă.

Pentru a evita conflictele, asigurați-vă că trageți magazia din BitBucket înainte de a efectua modificări; și de asemenea să comită și să împingă modificările la BitBucket după ce le-a făcut. Acest lucru va asigura că BitBucket are întotdeauna cea mai recentă versiune și că lucrați la cea mai recentă versiune.

Acest pas este puțin sensibil, deci asigurați-vă că urmați pașii cu atenție. În primul rând, voi explica cum funcționează soluția finală. Veți avea două scenarii: împingeți și trageți. În funcție de sistemul dvs. de operare, acesta va fi push.sh și pull.sh (Linux) sau push.bat sau pull.bat (Windows). Folosesc Windows local și Linux (Ubuntu) remotly, astfel încât acest tutorial va acoperi atât sistemele de operare.

Primul script va împinge modificările pe serverul Bitbucket. Când faceți unele modificări ale bazei de date, utilizați scriptul push pentru a încărca modificările în depozitul BitBucket. Push va anula baza de date curentă într-un fișier (/db/db_sync.sql) urmărit de sistemul de control al versiunii. Fișierul va fi împins împreună cu celelalte fișiere și încărcat în BitBucket.

Al doilea script va trage modificările de pe serverul Bitbucket. Scriptul de tragere va citi, de asemenea, fișierul (/db/db_sync.sql) și va înlocui baza de date. Aceasta va actualiza baza de date cu versiunea cu care ați împins. Deoarece au nume de gazdă diferite, scriptul de tragere va modifica câmpurile necesare, și anume urlul site-ului și urlul paginii de pornire.

Apasă pe BitBucket

În serverul de la distanță și local, creați un nou director numit "db". Fișierul de bază de date exportat va fi salvat acolo. În serverul dvs. local (presupun că utilizați Windows) creați un nou fișier numit push.bat. Nu contează exact unde ați pus fișierul (asigurați-vă că utilizați căile corecte). Am pus fișierul în directorul rădăcină al repozitorului meu WordPress.

 mysqldump -u username -password nume_bază de bază> db / db_sync.sql hg adăugați db / db_sync.sql hg comanda hg push https: //[email protected]/username/repository

Puteți elimina comanda "hg add db / db_sync.sql" după executarea scriptului pentru prima dată. Acest lucru este necesar doar o singură dată.

În partea de server (Linux / Ubuntu), lucrurile nu sunt cu adevărat diferite. Extensia de fișiere se schimbă de la .bat la .sh și, eventual, numele de utilizator, parola și numele bazei de date ale serverului mySql. Conținutul fișierelor este exact același.

Tragerea din BitBucket

Tragerea este un pic mai greu. Este nevoie de importarea fișierului SQL și, de asemenea, schimbarea câtorva câmpuri critice care diferă de la un mediu la altul.

În mașina dvs. locală, creați un fișier numit pull.bat

 hg trageți https: //[email protected]/username/repository hg actualizare cd db mysql -u username -password testpress < db_sync.sql mysql -u username -ppassword testpress < db.sql

În dosarul db, adăugați un fișier numit "db.sql". Acest fișier are instrucțiuni SQL care vor face modificările necesare pentru a se potrivi cu setările gazdă. Puteți adăuga mai multe declarații dacă doriți.

 USE testpress; UPDATE wp_options SET opțiune_value = "http: // localhost / testpress" WHERE nume_exemplu = "siteurl"; UPDATE wp_options SET opțiune_value = "http: // localhost / testpress" WHERE nume_exemplu = "acasă";

În afară de extensia de fișier, setările mySql și numele de bază de date nu se schimbă cu adevărat în serverul de la distanță. Acest lucru se datorează faptului că executăm comenzi de programe. Comenzile și utilizarea lor este platformă agnostică. Asigurați-vă că introduceți valorile corecte pentru adresa URL a site-ului web în fișierul "db.sql". Ar trebui să corespundă adresei URL a blogului dvs., dacă nu sunteți sigur că puteți verifica valorile din tabelul wp_options.

Pentru a rula scripturile, în Windows faceți dublu clic pe ".bat"? fișier și în terminalul server de la distanță rulați comanda? sh script_name.sh?.

Procesul

Ar trebui să aveți acum 2 fișiere executabile în fiecare mediu (trageți și împingeți). De asemenea, trebuie să aveți un script sql (db.sql) care nu ar trebui adăugat la controlul versiunilor. Acum putem testa sistemul nostru mic.

  1. În mașina dvs. locală, adăugați o nouă postare pe blog
  2. Apăsați modificările de la mașina dvs. locală
  3. Trageți modificările în mașina de la distanță
  4. Verificați dacă blogul se difuzează corect și postul de blog a fost adăugat
Cod