LOEMIND.md 11 KB

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 (täispika hierarhilise teega)
/filedepot dokumendid (page_filedepot) sama nimekiri, täispika teega
/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

# Täismigratsioon (ka lõppsünk):
sudo bash /opt/docker-compose/third/drupal/mustikas11/migrate_mustikas11.sh

Drush otse (NB! mälu limiit):

docker exec drupal_mustikas11 sh -c "cd /opt/drupal && php -d memory_limit=1024M /opt/drupal/vendor/drush/drush/drush.php <cmd>"

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

Juurdepääsuõigused (seis 2026-08)

Juurdekontroll on viidud D7-ga vastavusse:

  • Anonüümsele kasutajale on EEMALDATUD access content (View published content). Selle tulemusena:
    • / (Avaleht, node/5) -> 403 "Ligipääs keelatud" + juhendtekst + sisselogimisplokk külgribal
    • /liikmed, /projektid, /kanded/*, /docs, /filedepot, /synnipaevad, kõik /node/* -> 403
    • /contact -> 200 (kõigile)
    • /user/login, /user/password -> 200; /user/register -> 403 (admin_only)
    • Peamenüüs anonüümsele ainult "Avaleht" ja "Kontakt"
  • Eemaldatud standard profiili "Home" menüülink (standard.front_page) peamenüüst (hook_menu_links_discovered_alter mustikas_export moodulis).
  • Lisa juhendteksti blokk (anonymous_front_instruction), nähtav ainult anonüümsele, content regionis (D7 node/3 "Anonüümse kasutaja avalehe info" analogg).
  • metro_user_login blokk piiratud ainult anonüümsele.
  • tools_sidebar menüü peidetud anonüümsele.
  • D7 footer taastatud: metro_block_4-7 (telefon, e-mail, lahtiolekuajad, "Kirjuta meile" -> /contact) paigutatud footer_top regioni.
  • Tõlked (et): "Access denied" -> "Ligipääs keelatud", "You are not authorized to access this page." -> "Sul puudub õigus antud lehte vaadata.", kontaktvormi pealkiri "Website feedback" -> "Kontakt".

Skriptid (kordustäitmiseks):

  • revoke_anon_access.php – eemaldab anonüümselt access content
  • add_instruction_block.php – loob juhendteksti bloki
  • restrict_login_block.php – metro_user_login anonüümsele
  • restore_footer.php – footer blokid footer_top
  • restrict_tools_sidebar.php – tools_sidebar peidetud anonüümsele

Rollide ja õiguste vastavus (seis 2026-08)

Rollide kaardistus D7 -> D11 on 1:1 (kasutajate jaotus säilis):

D7 roll D11 roll Õigused D11-s
anonymous anonymous contact form + filtered_html (access content EEMALDATUD)
authenticated authenticated access content, view files, comments, contact form
administrator administrator is_admin (kõik)
EMAL liikmemaksud emal_liikmemaksud contact form
EMAL juhatuse liige emal_juhatuse_liige access filedepot, contact form
EMAL süsteemi administraator emal_susteemi_administraator 41+ õigust (admin pages, users, taxonomy, content create/edit/delete) + access filedepot + administer filedepot + contact form
EMAL liige emal_liige contact form
EMAL projektid emal_projektid contact form
EMAL raamatupidamine emal_raamatupidamine contact form
filedepot filedepot access filedepot + administer filedepot
EMAL kutsekomisjon emal_kutsekomisjon access filedepot

Lehtede juurdepääs (D7-ga vastavuses)

Leht Juurdepääs
/liikmed, /projektid, /docs access content (kõik autenditud)
/filedepot access filedepot õigus
/kanded/liikmemaksud, /kanded/projektid, /kanded/tegevuskulud rollid admin, juhatus, süsteemi admin VÕI projekti juurdepääsu väljal olev kasutaja
/kanded/liikmemaksud/saldod rollid admin, juhatus, raamatupidamine, süsteemi admin
/kanded/projektid/saldod rollid admin, juhatus, raamatupidamine, süsteemi admin
/kanded/koik-kanded access content (kõik autenditud)
/liikmed/eksport rollid admin, süsteemi admin
/liikmed/synnipaevad access content

Tehtud muudatused

  • Loodud custom permissionid: access filedepot, administer filedepot (mustikas_export.permissions.yml)
  • Loodud kanded Views access plugin mustikas_kanded_access + route access check mustikas_export.kanded_access (src/Access/KandedAccessCheck.php)
  • Migreeritud field_projekt_juurdepaas (projekti juurdepääsu õigused) D7-st D11-sse (11 rida, projektid 13550/13563/13565/13791/13885/13906)
  • Rakendatud kanded vaate display'dele D7-vastased access-id (defaults.access=false)
  • Liikmed CSV eksport piiratud admin+süsteemi admin rollidele
  • /filedepot vaade piiratud access filedepot õigusega
  • FileDownloadHooks nõuab nüüd access filedepot õigust (mitte ainult sisselogimist)

Skriptid (kordustäitmiseks):

  • migrate_projekt_juurdepaas.php – projekti juurdepääsu andmete migratsioon
  • grant_role_perms.php – rollipõhiste õiguste andmine
  • apply_kanded_access4.php – kanded vaate access-ide seadistamine
  • restrict_export.php – CSV eksporti piiramine
  • restrict_filedepot.php – filedepot vaate piiramine

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)
  • migrate_filedepot.php – migreerib filedepot failid (file_managed + node__filedepot_folder_file)
  • migrate_filedepot_hierarchy.php – loob field_folder_parent välja ja täidab D7 filedepot_categories.pid järgi kaustade hierarhia
  • custom_modules/mustikas_export/src/Plugin/views/field/FolderPath.php – Views väli "Kausta täispikk tee" (filedepot_folder_path)

Need on ka /tmp/opencode/ kohalikus Dropboxis (kust sai scp).