Saga Migrării de WordPress – Începuturile

6 min read
De pe Le blog de Laurel

După o săptămână de docker up, docker down, și bucle aleatorii de redirecționări, am reușit într-un final să-mi mut copiii (inclusiv acest blog) într-o casă nouă, pe Linode, un provider de servere virtuale private.

Iată prima postare din Saga Migrării de WordPress, serie care prezintă migrarea unui website WordPress deja existent pe un alt host, în Docker. Nu trebuia să devină chiar o saga, dar a devenit o postare foaaarte lungă și a trebuit să o fragmentez. 🙃

În această postare vom vorbi puțin despre contextul în care a trebuit să fac migrarea și despre condițiile prealabile pentru acest gen de migrare.

127.0.0.1? Acasă, Localhost în rețelistică. Da, aceasta este o postare mai tehnică, dar dacă îți place să-ți execuți toate task-urile în Bash, vei rămâne pe-aproape. 🙂

Să împachetăm

Acum un an, am început niște blog-uri de test folosind hosting-ul pentru WordPress de la GoDaddy și un site static și alt blog administrate prin cPanel. Anul a trecut, oferta s-a terminat, era timpul să împachetez și să mă mut într-un cămin mai ieftin. Deja găzduiam website-uri pe Linode, în scop de testare, așa că am hotărât să-mi mut lucrurile tot pe o instanță de server pe Linode.

WordPress (tată și mamă pentru acest blog) este un Sistem de Administrare a Conținutului (CMS) construit pe o bază de date MySQL cu preprocesare PHP.

Linode este o companie de hosting americană care oferă găzduire în cloud prin intermediul unor planuri de găzduire VPS care rulează pe servere exclusiv de Linux. Compania a fost fondată în 2003 de către Christopher Aker și s-a dezvoltat de-a lungul anilor să acopere opțiuni de cloud hosting. Centrele de date ale Linode suportă 11 piețe globale, inclusiv Frankfurt. (src)

Înainte de a face vreo migrare, a trebuit să pregătesc serverul virtual și să-l securizez puțin, astfel încât să nu ajung să servesc de pe website-urile mele conținut pentru adulți când ar fi fost să le prezint mamei și posibililor clienți 🙂 (de fapt, un botnet ar fi mai probabil). Există o mulțime de resurse utile despre cum să securizezi un host.

Pentru a migra un website de tip WordPress, trebuie să-ți muți întregul director al blog-ului, plus baza de date (de obicei MySQL, unde sunt stocate opțiuni, utilizatori, postări și altele) pe noul server, apoi să restaurezi baza de date. M-am gândit că nu va fi mare lucru de făcut, așa că am amânat migrarea pentru ultima săptămână înainte de expirarea planurilor de la GoDaddy.

Și atunci, oroarea! 😱 Când am încercat să-mi descarc blog-urile de pe host-ing-ul de WordPress, nu am găsit link-uri de descărcare, doar Restore.. Se pare că opțiunea de a descărca back-up-urile este disponibilă doar pentru US și Canada. Ei bine, nu m-am putut conecta la server prin ssh, așa că am recurs la Filezilla să-mi descarc întreg directorul de blog, și la UpdraftPlus, un plugin pentru WordPress, să-mi descarc și baza de date.

Pentru website-ul administrat prin cPanel migrarea a fost ușoară, aveam opțiunea de a folosi fie phpMyAdmin, fie MySQL să iau baza de date, și să descarc orice backup pe calculatorul local, sau să le transfer direct pe noul server.

După ce mi-am facut copii de rezervă la toate datele pe calculator, am folosit scp să copiez website-urile în noile lor locuri de pe instanța de Linode (puteam folosi și rsync). De acum înainte, cum alegi să servești datele pentru restul lumii poate varia mult, depinzând de scopul website-urilor, gestionare, resurse etc. Am ales să folosesc docker pentru că am vrut să separ mediile website-urilor și să le fac portabile și ușor de construit sau dezmembrat.

Câteva cuvinte despre Docker

Când contruiești mai multe aplicații sau website-uri, vrei să te asiguri că nu vor intra în conflict unele cu altele. Poate o aplicație folosește Python 2, iar alta folosește Python 3. Dacă le instalezi pe ambele în același environment vor apărea probleme fie pentru o aplicație, fie pentru cealaltă. De aceea este o bună practică să separi mediile fiecărei aplicații, iar vagrant și docker se află printre providerii de medii virtuale care te pot ajuta să faci asta.

Principala diferență dintre ele este că vagrant rulează un întreg sistem de operare pentru proiect și este folosit în principal pentru staging, iar docker folosește o metodă bazată pe containerizare, și o strategie copy-on-write (CoW) care reduce timpul de pornire și economisește spațiu (straturile folosesc împreună fișiere read-only, iar fișierele sunt copiate în strat doar dacă/când sunt modificate).

Vagrant de la Hashicorp este o soluție care permite configurarea rapidă și aprovizionarea mașinilor virtuale (VMs) ce ajută la izolarea aplicației în mediul propriu de dezvoltare. Aceste mașini virtuale lucrează pe baza unor servere hardware reale, dar simulează infrastructura virtuală de care are nevoie developer-ul și se asigură că aplicația lucrează la fel indiferent de ce software și hardware stă în spatele ei, atâta timp cât rulează in mașina virtuală. (src)

Docker este o platformă open-source care permite izolarea aplicațiilor în cadrul containerelor de cod similare Containerelor Linux (LXC), totuși Docker s-a mutat de la LXC la containerd pentru a iniția standardizarea pretutindeni. Un container Docker este un pachet de cod cu tot ceea de ce are nevoie pentru a rula aplicația înăuntru. În timp ce un singur container este creat să ruleze o singură aplicație, o mașină virtuală Vagrant poate rula mai multe aplicații ce interacționează în același timp. Pentru containerele Docker, acest lucru este posibil folosind Kubernetes și docker compose. (src)

Voiam să încerc Docker încă de ceva timp, așa că am citit câteva tutoriale și am decis să încerc. Pentru această migrare, am folosit în principal utilitarul docker-compose, care permite utilizatorilor să ruleze comenzi pe mai multe containere deodată, de exemplu, să construiască imagini, să scaleze containere, să ruleze containere care erau oprite, și multe altele. De asemenea poți defini volume persistente pe disk, unde stochezi datele pe care dorești să le păstrezi (de exemplu pentru fișierele website-urilor).

Compose este o unealtă pentru definirea și rularea aplicațiilor Docker multi-container. Cu Compose, folosești un fișier Compose să-ți configurezi serviciile aplicației. Apoi, folosind o singură comandă, creezi și pornești toate serviciile din configurație. (src)

Pentru a comunica cu restul lumii, fiecare host dă acces la serviciile sale folosind port-uri cu etichete numerice, server-ul Web folosește de obicei port-ul 80, server-ul de protocol pentru transferul fișierelor (FTP) folosește port-ul 21 și tot așa. Fiecare server Web de pe Internet se conformează Hypertext Transfer Protocol (HTTP) pe port-ul 80 și HTTPS (HTTP Secure) pe port-ul 443.

HTTPS este un protocol creat prin combinarea protocoalelor HTTP și SSL/TLS. SSL (Secure Sockets Layer) și succesorul său TLS (Transport Layer Security) sunt metode folosite să securizeze și să cripteze informații sensibile ca de exemplu cărțile de credit, numele de utilizatori, parolele, și alte date private trimise prin intermediul Internet-ului.

Dacă aveam doar un singur website de mutat, ar fi fost îndeajuns să creez fișierul pentru docker-compose în directorul website-ului, să rulez docker-compose, și website-ul ar fi fost online. Pentru că nu se poate ca toate blogurile să folosească aceleași port-uri 80 and 443, când un client accesează blog-ul exemplu1.com, în spatele scenei trebuie să îl redirectăm la, să spunem, port-ul 8001, iar când accesează exemplu2.com, îl redirectăm către port-ul 8002, și tot așa. Acest lucru poate fi obținut folosind un server nginx sau apache și câteva directive reverse proxy. Am ales nginx datorită faptului că utilizează resurse puține.

NGINX este un software open source pentru servire web, reverse proxy, caching, load balancing, transmitere de media, și multe altele. A început ca un server web conceput pentru maximă performanță și scalabilitate. În plus față de capabilitățile sale de server HTTP, NGINX poate de asemenea funcționa ca un server proxy pentru email (IMAP, POP3, and SMTP) și reverse proxy și load balancer pentru serverele HTTP, TCP, și UDP. (src)

Elementele cheie ale migrației unui blog au constat într-un fișier docker-compose.yml, un fișier ascuns .env în care trecem informațiile de logare pentru baza de date, un director care conține blogul întreg, fișierul database.sql și fișierul de configurare nginx pentru website. Aș putea rula docker-compose up -d, apoi nginx reload, și website-ul ar fi gata!

În viața reală, lucrurile au devenit puțin mai complicate, pentru că aveam website-uri multiple, iar unul dintre ele răspundea cu bucle de redirecționare din cauza unor setări SSL. Dacă nu ar fi fost problema asta, aș fi folosit două imagini Docker să rezolv reverse proxy-ul și SSL-ul automat, jwilder/nginx-proxy și jrcs/letsencrypt-nginx-proxy-companion. Pentru că am avut nevoie de un control mai granular, am ales să actualizez certificatele SSL folosind certbot și cron, și să fac reverse proxy-ul cu nginx instalat pe host.

Am făcut un director pentru fiecare website, am creat structura directorului, am copiat fișierele deja existente (database.sql și src), am rulat docker-compose din fiecare director, și nginx reload. Apoi am testat conexiunea la baza de date, am urmărit logurile și am examinat website-urile în browser.

Condiții prealabile

Acest ghid va arăta pașii pentru migrarea unui singur website WordPress pe o instanță de server Linode. Fiți puțin sceptici cu privire la instrucțiuni, nu sunt un expert Docker, doar am reușit să-mi pun website-urile sus. 😉

Înainte de a începe migrarea, vei avea nevoie de:

De pe Le blog de Laurel

În următoarea postare, Acomodarea cu Docker, vom parcurge o serie de comenzi în Docker, pentru a ne familiariza puțin cu genul acesta de mediu de lucru.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *