Blog

 / 

Drupal 7 Upgrade s pomocí Docker (Compose)

Podpora starého dobrého Drupalu 7 skončí po úctyhodných 14 letech v lednu 2025.

Je tedy pomalu nejvyšší čas upgradovat na vyšší verzi. Postup upgradu by měl probíhat následovně:

  1. zálohovat soubory a databázi Drupalu 7
  2. vytvořit čistou instalaci aktuálního Drupalu
  3. stáhnout a aktivovat moduly používané na Drupalu 7
  4. Aktivovat “Migration” modul
  5. proklikat průvodce, pomodlit se, a spustit migraci

“Migration” modul požaduje přístup k databázi Drupalu 7, stejně tak jako k jeho (veřejným a privátním) souborům.

Záloha Drupalu 7 je poměrně jednoduchá díky modulu Backup and Migrate.

Čistou instalaci Drupalu 10, MariaDB serveru, i import stávající DB Drupalu 7 můžeme zajistit celkem snadno díky Dockeru (compose).

Vytvoříme adresář “drupal_migration”, do kterého rozbalíme zálohu vytvořenou modulem Backup and Migrate zmíněným výše.

Adresářová struktura by měla vypadat takto:

1drupal_migration
2|   database.sql
3|   MANIFEST.ini
4|   
5\---docroot
6    | soubory drupalu
7    |...

V adresáři “drupal_migration” vytvoříme docker-compose.yaml:

 1version: '3.1'
 2
 3services:
 4
 5  drupal:
 6    image: drupal:10-apache
 7    ports:
 8      - 8000:80
 9    volumes:
10      - ./docroot:/d7
11    restart: always
12    depends_on:
13      - db
14
15  db:
16    image: mariadb:10.3.35
17    restart: always
18    environment:
19      MARIADB_USER: drupal10
20      MARIADB_PASSWORD: drupal10
21      MARIADB_DATABASE: drupal10
22      MARIADB_ROOT_PASSWORD: drupal10
23    volumes:
24      - ./:/d7/
25    ports:
26      - 3306:3306

Spustíme docker compose up --build. Poté je Drupal je automaticky dostupný na http://localhost:8000/. Otevřeme localhost a proklikáme instalaci Drupalu. “Database host” je třeba změnit na hodnotu “db”, localhost odkazuje na localhost v kontejneru.

K instalaci a aktivaci modulů. Je samozřejmě možné to provést ručně, ale lepší je využít composer a drush.

Připojme se do docker kontejneru: docker exec -it <nazev kontejneru s instalací drupalu> bash

 1# nainstalovat aktualne pouzivane moduly
 2composer require \
 3	'drupal/aggregator:^2.2'\
 4	'drupal/antibot:^2.0'\
 5	'drupal/backup_migrate:^5.0'\
 6	'drupal/blog:^3.1'\
 7	'drupal/color:^1.0'\
 8	'drupal/colorbox:^2.0'\
 9	'drupal/comment_notify:^1.4'\
10	'drupal/entity:^1.4'\
11	'drupal/eu_cookie_compliance:^1.24'\
12	'drupal/filefield_paths:^1.0@beta'\
13	'drupal/google_analytics:^4.0'\
14	'drupal/imageapi_optimize:^4.0'\
15	'drupal/imce:^3.0'\
16	'drupal/insert:^3.0@beta'\
17	'drupal/pathauto:^1.12'\
18	'drupal/rdf:^2.0'\
19	'drupal/yoast_seo:^1.8'\
20	'drupal/scheduler:^1.5'\
21	'drupal/sharethis:^3.0'\
22	'drupal/taxonomy_menu:^3.6'\
23	'drupal/metatag:^2.0'\
24	'drupal/recaptcha:^3.2'\
25	'drupal/xmlsitemap:^1.5'
26
27# nainstalovat drush 
28composer require --dev drush/drush
29
30# zapnout moduly 
31drush en -y \
32	aggregator \
33	antibot \
34	backup_migrate \
35	blog \
36	color \
37	colorbox \
38	comment_notify \
39	entity \
40	eu_cookie_compliance \
41	filefield_paths \
42	google_analytics \
43	imageapi_optimize \
44	imce \
45	insert \
46	pathauto \
47	rdf \
48	yoast_seo \
49	scheduler \
50	sharethis \
51	taxonomy_menu \
52	metatag \
53	recaptcha \
54	xmlsitemap
55
56# prepnout web do rezimu udrzby
57drush sset system.maintenance_mode 1
58
59# zapnout "migrate drupal modul"
60drush en -y \
61	migrate \
62	migrate_drupal \
63	migrate_drupal_ui 

To nainstaluje a zapne všechny potřebné moduly. Poslední co je potřeba před migrací udělat, je vytvořit databázi a obnovit do ní zálohu staršího Drupalu

připojíme se do kontejneru s MySQL: docker exec -it <nazev kontejneru s instalací MariaDB> bash

1# vytvorit DB 'old_drupal_7'
2mysql -u root -p -e "CREATE DATABASE old_drupal_7;"
3
4# obnovit backup
5# je namountovaný pomocí docker compose do /d7/database.sql
6mysql -u root -p old_drupal_7 < /d7/database.sql

OK, hotovo. Teď už stačí následovat instrukce Migrate modulu. Průvodce chce kromě přístupu k DB Drupalu 7 (v tomto případě “old_drupal_7”) přístup k souborům, resp. Document root for public files a Document root for private files. Cesty jsou následující:

/d7/sites/default/files - public files

/d7/sites/default/files/backup_migrate - private files