# Drupal mustikas11 – D7 → D11 migratsioon (ohmu dev) Kataloog: `/opt/docker-compose/third/drupal/mustikas11/` ## Mis see on Drupal 7 (mustikas.maastikuarhitekt.ee) → **Drupal 11** migratsiooni testimiskeskkond arendusserveril `ohmu`. Production (hetzner) jääb täiesti puutumata — migratsioon loeb ainult ohmu-l olevat sünkroonitud `dr_mustikas` koopiat. ## Teenus | Konteiner | Pilt | Port | URL | |-----------|------|------|-----| | drupal_mustikas11 | drupal_mustikas11:latest (põhineb drupal:11) | 127.0.0.1:8010 → 80 | https://ohmu.tail20e23.ts.net:8010/ | - Andmebaas: `dr_mustikas11` (ohmu mariadb, `utf8mb4_general_ci`) - Source DB (D7 koopia): `dr_mustikas` (ohmu mariadb) - D7 failid: bind-mount `/var/lib/docker/volumes/drupal_mustikas-html/_data/sites/default/files` → `/d7-files` (read-only) - Admin: `admin` / `AdminPass2026!`, meil `ardokubjas@gmail.com` (VAJA VAHTADA tootmises) - SMTP: `mail.odamus.com:587` (TLS, `bounce@odamus.com`) — e-kirjad töötavad - `system.site.mail` = `bounce@odamus.com` (NB! peab ühtima SMTP auth kasutajaga, muidu SMTP server lükkab `info@maastikuarhitekt.ee` saatja tagasi) - Reverse proxy: `reverse_proxy = TRUE` settings.php-s (Tailscale serve HTTPS jaoks) - Keeled: `et` (vaikimisi, nagu D7) + `en`. `system.site.default_langcode = et`. NB! et-alias'd (`/liikmed/tanel-breede`) töötavad ilma prefiksita ainult siis, kui default keel on `et`. Kui default oleks `en`, vajaksid nad `/et/` prefiksit. ## Pilt (Dockerfile) Põhineb `drupal:11` + paigaldatud: - `drush/drush` - `drupal/migrate_plus` - `drupal/migrate_tools` - `drupal/migrate_upgrade` - `drupal/smtp` - `drupal/views_aggregator` - `drupal/views_data_export` Ehitamine: `docker compose build` ## Vaated (D7 analoggid) | Path | Vaade | Sisend | |------|-------|--------| | `/liikmed`, `/liikmed/nimekiri` | `liikmed` | emal_liige nimekiri (nimi, e-mail, isikukood) | | `/projektid` | `projektid` | projektide nimekiri | | `/kanded/liikmemaksud` | `kanded` (kande_tyyp=6) | kannete tabel | | `/kanded/projektid` | `kanded` (kande_tyyp=8) | kannete tabel | | `/kanded/tegevuskulud` | `kanded` (kande_tyyp=29) | kannete tabel | | `/kanded/*/saldod` | `kanded` + views_aggregator SUM | summeeritud saldod | | `/kanded/koik-kanded` | `kanded` | kõik kanded | | `/synnipaevad`, `/liikmed/synnipaevad` | `synnipaevad` | emal_liige nimekiri | | `/docs` | `dokumendid` | filedepot_folder nimekiri | | `/liikmed/eksport` | `liikmed` data_export | CSV (nimed, isikukoodid, e-mailid) | | `/contact` | contact moodul | kontaktivorm (feedback) | Custom moodul `mustikas_export` parandab views_data_export rea renderdamist D11-s (fields row plugin tagastab #theme render array, mis ei serialiseeru CSV-ks). Asub `custom_modules/mustikas_export/` ja tuleb image'i sisse kopeerida. ## Migratsiooni jooksutamine ```bash # Täismigratsioon (ka lõppsünk): sudo bash /opt/docker-compose/third/drupal/mustikas11/migrate_mustikas11.sh ``` Drush otse (NB! mälu limiit): ```bash docker exec drupal_mustikas11 sh -c "cd /opt/drupal && php -d memory_limit=1024M /opt/drupal/vendor/drush/drush/drush.php " ``` ## Migratsiooni tulemus (seis 2026-08-26) | Sisutüüp | D7 | D11 | Staatus | |----------|-----|------|---------| | kanne | 7792 | 7792 | 100% ✓ | | emal_liige | 153 | 153 | 100% ✓ | | projekt | 174 | 174 | 100% ✓ | | filedepot_folder | 141 | 141 | 100% ✓ | | book | 9 | 9 | 100% ✓ | | page | 5 | 5 | 100% ✓ | | php | 3 | 3 | 100% ✓ | | **Kokku node** | **8277** | **8277** | **100% ✓** | | kasutajad | 153 | 153 | ✓ | | taxonomy terminid | 108 | 108 | ✓ | | failid | 2675 | 854 (public) | osaline (private jäi) | | URL aliased | 11147 | ~11000 | ✓ | ## Teadaolevad probleemid / edasiarendus 1. **body "plain text" väli** – D7 body on konfigureeritud plain_text-iga, migrate ei too seda üle (teadaolev Drupal issue). Mõjutab book/page/article/phpi sisu teksti. 2. **Custom väljad** (`field_nimi`, `field_isikukood`, `field_emal_kasutaja_oigused`, `field_sunnipaev`) – D7 custom moodulitest (`name`, `est_id_code_field`, `rolereference`, `birthdays_date`). Vajavad kohandatud migratsioonipluginaid. Praegu loon neile lihtsustatud storaged (string/datetime) — andmed ei tule automaatselt üle, aga emal_liige node'id ise migreeruvad. 3. **Panels / Rules / Features / Views** – EI migreeru automaatselt. Vajavad käsitsi uuesti ehitamist (sama nagu kõik D7→D8+ migratsioonid). 4. **Teemad** (metro, rainbow) – PHPTemplate → Twig täisümberkirjutus. Praegu kasutusel vaikimisi Olivero. 5. **Failid private** – private files (filedepot, backup_migrate) ei migreeru public files stream'i. 6. **Parool & turve** – admin parool on ajutine (`AdminPass2026!`), SMTP on seadistatud, SSL on Tailscale serve kaudu. ## Eeltingimused enne tootmist - [ ] Kõik custom moodulid (cpn, est_id_code jne) portida D11 jaoks - [ ] Teemad ümber kirjutada (Twig) - [ ] Panels/Views/Rules uuesti ehitada - [ ] i18n/entity_translation täiendav migratsioon - [ ] Turvaseaded (paroolid, SMTP, SSL) ## Lõppsünk (viimaste andmete ülekandmine) 1. Värskenda D7 koopia hetznerist: `sudo bash /opt/docker-compose/third/drupal/mustikas/sync_from_hetzner.sh` 2. Jooksuta täismigratsioon: `sudo bash /opt/docker-compose/third/drupal/mustikas11/migrate_mustikas11.sh` 3. Kui kõik ok → vaheta prod DNS / traefik uuele saidile. ## Abiskriptid (konteineris /tmp/) - `fix_fields.php` – loob puuduvad custom field storage'id (string/datetime) - `fix_fields2.php` – loob datetime_range → daterange storage'id - `fix_er_sort.php` – parandab entityreference `sort` puuduva võtme (source DB) - `fix_text_maxlength.php` – tõstab liiga lühikese `text` välja max_length=255 (source DB) - `del_kirjeldus.php` – kustutab field_kirjeldus config'i (vajadusel) Need on ka `/tmp/opencode/` kohalikus Dropboxis (kust sai scp).