PHP / Magento Dev Blog

  • Publikacje
  • O autorze
  • Kontakt

Magento 2.4.8 – PHP 8.4 wsparcie, migracja Elasticsearch → OpenSearch, checklist upgrade

by Henryk Tews / wtorek, 31 grudnia 2024 / Opublikowano w Magento 2

Ostatni dzień 2024 roku to dobry moment na podsumowanie zmian w Magento 2.4.8 które pojawiło się w tym roku. Największa zmiana techniczna to oficjalne wsparcie PHP 8.4 i przejście z Elasticsearch na OpenSearch jako domyślny silnik wyszukiwania. Przeglądam co to oznacza dla istniejących projektów i jak wygląda migracja.

PHP 8.4 – oficjalne wsparcie

Magento 2.4.8 jako pierwsza wersja oficjalnie wspiera PHP 8.4. Co to oznacza w praktyce:

  • Możesz używać property hooks, asymmetric visibility i BcMath\Number w module kodzie bez obaw o kompatybilność z platformą
  • Core Magento został zaktualizowany żeby nie generować deprecated warnings na PHP 8.4 (głównie implicit nullable parameters)
  • Zewnętrzne moduły nadal mogą nie być gotowe – sprawdź przed upgrade
# Sprawdź kompatybilność zainstalowanych modułów z PHP 8.4
composer require --dev phpcompatibility/php-compatibility

# Skanuj vendor/
vendor/bin/phpcs \
    --standard=PHPCompatibility \
    --runtime-set testVersion 8.4 \
    --extensions=php \
    vendor/VENDOR_NAME/ 2>/dev/null | grep -E "ERROR|WARNING" | head -50

# Sprawdź konkretny moduł zewnętrzny
vendor/bin/phpcs \
    --standard=PHPCompatibility \
    --runtime-set testVersion 8.4 \
    vendor/some-vendor/some-module/

OpenSearch jako domyślny silnik wyszukiwania

Elasticsearch 7.x zbliża się do End of Life, a Elastic zmienił licencję na SSPL (niekompatybilną z Open Source). Magento 2.4.8 ustawia OpenSearch 2.x jako domyślny i zalecany silnik wyszukiwania. OpenSearch to fork Elasticsearch 7.x pod Apache 2.0 – API jest kompatybilne, migracja jest prosta.

# Konfiguracja OpenSearch w Magento 2.4.8
bin/magento config:set catalog/search/engine opensearch

bin/magento config:set catalog/search/opensearch_server_hostname opensearch
bin/magento config:set catalog/search/opensearch_server_port 9200
bin/magento config:set catalog/search/opensearch_index_prefix magento2

# Reindeksacja po zmianie silnika
bin/magento indexer:reindex catalogsearch_fulltext
bin/magento cache:flush
# docker-compose - zamień Elasticsearch na OpenSearch
services:
  opensearch:
    image: opensearchproject/opensearch:2.11.0
    environment:
      - discovery.type=single-node
      - "OPENSEARCH_JAVA_OPTS=-Xms1g -Xmx1g"
      - plugins.security.disabled=true  # wyłącz w dev
      - bootstrap.memory_lock=true
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - opensearch_data:/usr/share/opensearch/data
    ports:
      - "9200:9200"

  opensearch-dashboards:
    image: opensearchproject/opensearch-dashboards:2.11.0
    ports:
      - "5601:5601"
    environment:
      OPENSEARCH_HOSTS: '["http://opensearch:9200"]'
    depends_on:
      - opensearch

Migracja z Elasticsearch 7 na OpenSearch 2

# Opcja 1: Czysta instalacja OpenSearch (zalecane dla nowych projektów)
# Zatrzymaj ES, uruchom OpenSearch, reindeksuj

# Opcja 2: Migracja danych (istniejące projekty)
# OpenSearch może odczytać snapshoty z Elasticsearch 7.x

# Krok 1: Utwórz snapshot w Elasticsearch
curl -X PUT "http://elasticsearch:9200/_snapshot/my_backup" -H 'Content-Type: application/json' -d '{
    "type": "fs",
    "settings": { "location": "/tmp/es-snapshot" }
}'

curl -X PUT "http://elasticsearch:9200/_snapshot/my_backup/snapshot_1" -d '{
    "indices": "magento2*",
    "include_global_state": false
}'

# Krok 2: Zarejestruj repozytorium w OpenSearch
curl -X PUT "http://opensearch:9200/_snapshot/my_backup" -H 'Content-Type: application/json' -d '{
    "type": "fs",
    "settings": { "location": "/tmp/es-snapshot" }
}'

# Krok 3: Przywróć snapshot
curl -X POST "http://opensearch:9200/_snapshot/my_backup/snapshot_1/_restore"

# Krok 4: Zaktualizuj konfigurację Magento i uruchom reindeksację
bin/magento config:set catalog/search/engine opensearch
bin/magento indexer:reindex catalogsearch_fulltext

Nowe funkcje Magento 2.4.8

Async reindex – indeksowanie bez blokowania

# Magento 2.4.8 wprowadza asynchroniczne reindeksowanie
# Zmiany są kolejkowane i przetwarzane w tle przez consumer

# Włącz async reindex dla indekserów
bin/magento config:set indexer/reindex_schedule/enabled 1

# Uruchom consumer który przetwarza zmiany z kolejki
bin/magento queue:consumers:start indexer.reindex.all.indexers

# Status indekserów w trybie async
bin/magento indexer:status

Ulepszone Adobe Commerce Services

<?php

// Magento 2.4.8 - ulepszone App Framework dla modułów SaaS
// (dotyczy głównie Adobe Commerce, nie Community Edition)

// Nowe interfejsy dla pluginów katalogowych przez Adobe Commerce Services:
// - Live Search 4.x - natywne wyszukiwanie przez SaaS
// - Product Recommendations 6.x - rekomendacje ML
// - Catalog Service 1.x - GraphQL API dla headless

// Dla Community Edition - bez większych zmian w tym obszarze
// Skupienie na PHP 8.4 compat i OpenSearch migracji

Zmiany w Composer i autoloader

# Magento 2.4.8 wymaga Composer 2.7+
composer --version  # sprawdź wersję

# Nowe reguły dla generated/ directory
# PHP 8.4 Lazy Objects częściowo zastępują generowane Proxy
# Magento może w przyszłości zrezygnować z generowania niektórych klas

# Upgrade projektu do Magento 2.4.8
composer require magento/product-community-edition:2.4.8 --no-update
composer update --with-all-dependencies

# Po update
bin/magento setup:upgrade
bin/magento setup:di:compile
bin/magento setup:static-content:deploy -f
bin/magento cache:flush

Checklist upgrade do Magento 2.4.8

Krok Polecenie / akcja Uwagi
Backup bazy i plików mysqldump + rsync Obowiązkowe
Sprawdź PHP 8.4 compat modułów phpcs –standard=PHPCompatibility Zewnętrzne moduły mogą mieć problemy
Uruchom upgrade na staging composer update + setup:upgrade Nigdy nie zaczynaj od produkcji
Migracja na OpenSearch config:set + reindeksacja Jeśli używałeś Elasticsearch 7
Smoke tests Checkout, logowanie, wyszukiwanie Kluczowe flow biznesowe
Performance test Blackfire / k6 Porównaj z wersją przed upgrade

Podsumowanie roku 2024

2024 był rokiem PHP 8.4 i dojrzewania ekosystemu Magento headless. Property hooks i asymmetric visibility wchodzą do codziennego kodu. OpenSearch zastępuje Elasticsearch jako domyślny silnik wyszukiwania – migracja jest prostsza niż można się spodziewać. Hyvä Theme umocniło swoją pozycję jako de facto standard dla nowych projektów gdzie SEO i wydajność są priorytetem. Na 2025 rok patrzę z ciekawością na to jak PHP 8.4 features wejdą do core Magento i jak ewoluuje ekosystem AI tooling dla PHP developerów.

About Henryk Tews

Co możesz przeczytać następne

Hyvä zaawansowane wzorce – Alpine.js Store, eventy, lazy loading, reużywalne komponenty
Cron – grupy, własne joby, harmonogram z panelu admina, debugowanie
Własny indekser – mview.xml, flat table, full/partial reindeksacja, triggerowane przez cron
  • Publikacje
  • O autorze
  • Kontakt

© 2026 Created by

GÓRA
Zarządzaj zgodą
Aby zapewnić jak najlepsze wrażenia, korzystamy z technologii, takich jak pliki cookie, do przechowywania i/lub uzyskiwania dostępu do informacji o urządzeniu. Zgoda na te technologie pozwoli nam przetwarzać dane, takie jak zachowanie podczas przeglądania lub unikalne identyfikatory na tej stronie. Brak wyrażenia zgody lub wycofanie zgody może niekorzystnie wpłynąć na niektóre cechy i funkcje.
Funkcjonalne Zawsze aktywne
Przechowywanie lub dostęp do danych technicznych jest ściśle konieczny do uzasadnionego celu umożliwienia korzystania z konkretnej usługi wyraźnie żądanej przez subskrybenta lub użytkownika, lub wyłącznie w celu przeprowadzenia transmisji komunikatu przez sieć łączności elektronicznej.
Preferencje
Przechowywanie lub dostęp techniczny jest niezbędny do uzasadnionego celu przechowywania preferencji, o które nie prosi subskrybent lub użytkownik.
Statystyka
Przechowywanie techniczne lub dostęp, który jest używany wyłącznie do celów statystycznych. Przechowywanie techniczne lub dostęp, który jest używany wyłącznie do anonimowych celów statystycznych. Bez wezwania do sądu, dobrowolnego podporządkowania się dostawcy usług internetowych lub dodatkowych zapisów od strony trzeciej, informacje przechowywane lub pobierane wyłącznie w tym celu zwykle nie mogą być wykorzystywane do identyfikacji użytkownika.
Marketing
Przechowywanie lub dostęp techniczny jest wymagany do tworzenia profili użytkowników w celu wysyłania reklam lub śledzenia użytkownika na stronie internetowej lub na kilku stronach internetowych w podobnych celach marketingowych.
  • Zarządzaj opcjami
  • Zarządzaj serwisami
  • Zarządzaj {vendor_count} dostawcami
  • Przeczytaj więcej o tych celach
Zobacz preferencje
  • {title}
  • {title}
  • {title}