DDEV pentru Drupal: un flux local pe care îl poți recrea

Laptop cu un site Drupal local și containere legate de repository, bază de date și fișiere încărcate.

Când preiau un proiect Drupal sau îl mut pe un calculator nou, nu încerc să „instalez Drupal” din memorie. Încerc să reproduc mediul proiectului: aceeași versiune de PHP, aceeași bază de date, aceleași dependențe și aceleași fișiere încărcate. DDEV face această reproducere mult mai previzibilă, pentru că descrie mediul în .ddev/config.yaml și rulează serviciile în containere.

În acest ghid parcurg trei situații uzuale: pornirea unui proiect nou, aducerea unei instalări existente pe calculatorul meu și pregătirea unui pachet complet pentru alt mediu. Ideea-cheie este să nu confund codul cu site-ul întreg: baza de date și fișierele publice fac parte din transfer, iar secretele trebuie gestionate separat.

Ce trebuie să ai înainte de import

Pentru o instalare existentă, cer versiunea de cod care corespunde dumpului bazei de date, composer.json și composer.lock, un export SQL, directorul de fișiere publice și orice arhivă de fișiere private de care proiectul depinde. Notez și versiunile PHP, MariaDB sau MySQL, plus servicii externe precum Redis ori Solr.

Nu folosesc dumpuri care conțin date reale ale utilizatorilor dacă pot lucra cu o copie anonimizată. Arhivele le păstrez în afara rădăcinii publice a site-ului. Înainte să pornesc aplicația importată, verific setările locale și dezactivez integrările care ar putea trimite emailuri ori apeluri către servicii de producție.

Un proiect nou în DDEV

După instalarea DDEV și a unui furnizor Docker compatibil, creez directorul proiectului, îl configurez și pornesc containerele. Pentru un proiect Drupal 11 nou, documentația DDEV recomandă quickstart-ul Drupal; comenzile de bază arată astfel:

mkdir -p ~/projects/drupal-local
cd ~/projects/drupal-local
ddev config --project-type=drupal11 --docroot=web
ddev start
ddev composer create-project drupal/recommended-project:^11 .
ddev composer require drush/drush

Apoi instalez site-ul o singură dată și verific adresa locală. Acest pas este pentru o bază de date nouă. Nu rulez site:install când scopul este să păstrez conținutul unui site existent.

Aducerea unui site existent pe calculator

Clonăm repository-ul la commitul potrivit, apoi comparăm configurația DDEV cu mediul sursă. În proiectul meu curent, de exemplu, mediul este definit pentru PHP 8.4 și MariaDB 11.8; într-o clonă a altui proiect păstrez versiunile cerute de acel proiect, în loc să copiez automat aceste valori.

git clone https://example.com/echipa/proiect-drupal.git ~/projects/proiect-drupal
cd ~/projects/proiect-drupal
ddev start
ddev composer install
composer install</code> instalează exact dependențele din lockfile. <code>composer update</code> ar rezolva alte versiuni și ar schimba condițiile importului, așa că îl rezerv pentru o actualizare planificată.</p>
<p>Înainte de baza de date, mă uit la <code>settings.php</code> și la override-urile locale. DDEV configurează conexiunea de bază prin <code>settings.ddev.php</code>; credențialele de producție nu au ce căuta în fișierele locale sau în repository. Dacă proiectul folosește servicii suplimentare, le configurez pentru dezvoltare ori aleg fallbackul documentat.</p>
<p>Importul bazei de date și al fișierelor este separat:</p>
<p><code>ddev import-db --file=/cale/catre/database.sql.gz
ddev import-files --source=/cale/catre/files.tar.gz
ddev drush cr
ddev drush status

Arhiva de fișiere trebuie să aibă la rădăcină conținutul directorului public files, nu un alt director files în interior. Importul înlocuiește fișierele din destinație; nu îl folosesc ca metodă de combinare a două colecții. Fișierele private și obiectele din stocare externă cer transfer separat.

Verificarea nu se oprește la pagina principală

După rebuild, verific autentificarea, câteva articole, imaginile, atașamentele, formularele, căutarea și funcționalitățile specifice proiectului. Deschid raportul de status și logurile, apoi creez sau editez conținut de test. Un site care încarcă homepage-ul poate avea în continuare fișiere lipsă ori cron și integrări nefuncționale.

Un export bun conține mai mult decât SQL

Pentru o copie ce poate fi restaurată, pregătesc separat baza de date, fișierele încărcate și codul. Exportul de configurație Drupal descrie structura și setările, dar nu include conținutul sau utilizatorii. Codul trebuie să corespundă commitului din care provin celelalte exporturi.

mkdir -p ../handoff
ddev export-db --file=../handoff/database.sql.gz
tar -czf ../handoff/files.tar.gz -C web/sites/default/files .
ddev drush config:export -y
git archive --format=tar.gz --output=../handoff/code.tar.gz HEAD

Înainte de a trimite pachetul, verific dacă exportul de configurație conține doar schimbările intenționate și dacă arhiva Git include fișierele necesare. git archive nu include modificări necomise, fișiere ignorate sau submodule. Documentez commitul, versiunile PHP și ale bazei de date și serviciile suplimentare; secretele le transmit prin managerul aprobat al echipei, separat de arhive.

Restaurarea pe un al doilea calculator

Cel mai bun test al unui handoff este restaurarea lui într-un director nou. Despachetez codul, configurez un nume DDEV diferit, instalez dependențele din lockfile, import baza de date și fișierele, apoi rulez rebuild-ul de cache. Repet verificările funcționale. Dacă lipsește o extensie, un fișier privat ori o configurare de serviciu, o aflu înainte ca proiectul să ajungă la alt coleg.

Un astfel de export este o fotografie a site-ului la un moment dat. Nu este o metodă de publicare în producție: importarea bazei de date peste un site activ poate suprascrie conținut și activitate apărute între timp. Pentru deployment folosesc fluxul de release al proiectului, cu cod și configurație revizuite, și păstrez conținutul live.

Comenzile pe care le țin aproape

  • ddev start pornește proiectul.
  • ddev describe arată URL-urile și serviciile.
  • ddev drush status verifică instalarea.
  • ddev drush cr reconstruiește cache-ul Drupal.
  • ddev export-db și ddev import-db mută baza de date.
  • ddev import-files aduce fișierele publice.

Documentația oficială DDEV pentru Drupal și ghidul DDEV pentru importul bazei de date sunt referințele mele pentru opțiunile care se pot schimba între versiuni.

Articol original de Pavel Culacov. Scris independent, pe baza experienței de lucru cu Drupal și DDEV; documentația oficială este indicată pentru detaliile comenzilor.