Przykładowe wdrożenia
Te przewodniki pokazują, jak uruchomić dziewięć popularnych aplikacji PHP na OxPHP, każdą jako samodzielny projekt Docker Compose. Każdy przepis został zbudowany i zweryfikowany od początku do końca: witryna sklepu, panel administracyjny, statyczne zasoby oraz wewnętrzny endpoint kontroli stanu OxPHP — wszystko odpowiada kodem 200.
Każda strona to kompletny przepis gotowy do skopiowania i wklejenia: Dockerfile, docker-compose.yml, polecenia instalacyjne oraz szczegóły specyficzne dla OxPHP, których standardowa dokumentacja aplikacji (napisana dla nginx + PHP-FPM) nie obejmuje.
Aplikacje
| Aplikacja | Typ | Tryb routingu | PHP | Dodatkowe usługi | Metoda instalacji |
|---|---|---|---|---|---|
| Laravel | Framework | Framework | 8.5 | MySQL | composer create-project |
| Symfony | Framework | Framework | 8.5 | — | composer create-project |
| Yii3 | Framework | Framework | 8.5 | — | composer create-project |
| WordPress | CMS | Tradycyjny | 8.5 | MySQL | WP-CLI |
| Drupal | CMS | Framework | 8.4 | MySQL | drush site:install |
| Craft CMS | CMS | Framework | 8.5 | MySQL | craft install |
| October CMS | CMS | Framework + kopia lustrzana | 8.4 | MySQL | october:migrate + kopia lustrzana |
| Magento | E-commerce | Framework | 8.4 | MySQL + OpenSearch | bin/magento setup:install |
| OpenCart | E-commerce | Tradycyjny | 8.4 | MySQL | Instalator CLI |
Co łączy każdy przepis
Budowanie na opublikowanym obrazie OxPHP
OxPHP dostarcza gotowe środowisko uruchomieniowe PHP jako ghcr.io/oxphp/oxphp (domyślnie PHP 8.5; wariant PHP 8.4 jest publikowany jako ghcr.io/oxphp/oxphp:<ver>-php8.4-alpine<X>). Opublikowany obraz zawiera już plik binarny oxphp, libphp.so, rozszerzenie SAPI OxPHP, PHP CLI oraz narzędzia współpracujące z Composerem. Przepisy rozszerzają go na jeden z dwóch sposobów:
-
Skopiowanie OxPHP do bazy
php:*-zts-alpine(używane przez Laravel, Symfony, Yii3, Craft, Magento, OpenCart, Drupal, October). Wieloetapowa budowa składa obrazdevz czterech etapów:FROM php:8.4-zts-alpine3.23 AS php-base # your app's PHP extensions FROM composer:2 AS composer # the Composer binary FROM ghcr.io/oxphp/oxphp:0.10.0-php8.4-alpine3.23 AS oxphp # OxPHP artifacts FROM php-base AS dev # final image # ... copy the oxphp binary, bridge library, and SAPI extension across: COPY --from=oxphp /usr/local/bin/oxphp /usr/local/bin/oxphp COPY --from=oxphp /usr/local/lib/liboxphp_bridge.so /usr/local/lib/ COPY --from=oxphp /usr/local/lib/php/extensions/ /tmp/oxphp-ext/ RUN cp /tmp/oxphp-ext/*/oxphp_sapi.so "$(php -r 'echo ini_get("extension_dir");')/" \ && echo "extension=oxphp_sapi.so" > /usr/local/etc/php/conf.d/oxphp-ext.ini -
Rozszerzenie środowiska uruchomieniowego OxPHP bezpośrednio (używane przez WordPress). Etap budowania kompiluje rozszerzenia względem pasującego
php:*-zts-alpinei umieszcza pliki.sow obrazie OxPHP.
Tak czy inaczej, ABI PHP musi się zgadzać. libphp.so oraz oxphp_sapi.so z obrazu OxPHP są skompilowane dla jednej wersji PHP (np. 8.4 → no-debug-zts-20240924); etap php-base/budowania musi używać tego samego php:<X.Y>-zts-alpine<Z>, aby kompilowane przez ciebie rozszerzenia były zgodne pod względem ABI. Mieszanie wersji sprawia, że oxphp_sapi.so odmawia załadowania lub uszkadza musl TLS podczas uruchamiania.
Zobacz Przewodnik po Dockerze, aby poznać kanoniczny szablon wieloetapowej budowy, oraz examples/dockerfile/ w repozytorium, aby uzyskać gotową do skopiowania wersję.
Świadomie wybierz wersję PHP
Domyślny obraz ghcr.io/oxphp/oxphp:<ver> to PHP 8.5. Jest to odpowiednie dla nowoczesnych frameworków (Laravel, Symfony, Yii3, Craft). Starsze lub bardziej konserwatywne bazy kodu — Magento, OpenCart, Drupal, October CMS — przypinają PHP 8.4 za pomocą taga …-php8.4-alpine…, ponieważ ich zestawy komponentów powstały przed 8.5 i emitują na nim ostrzeżenia o przestarzałych elementach. Każdy przepis podaje, której wersji używa i dlaczego.
Wybierz tryb routingu na podstawie kształtu aplikacji
Tryb routingu OxPHP odwzorowuje bezpośrednio to, jak zbudowana jest aplikacja:
- Tryb framework (
ENTRY_FILE=index.php) — jeden kontroler wejściowy w katalogupublic/(lubweb/,pub/); istniejące pliki statyczne są serwowane z dysku, a wszystko inne jest kierowane doindex.php. Stosuj dla Laravel, Symfony, Yii3, Craft, Magento, Drupal, October. - Tryb tradycyjny (bez
ENTRY_FILE) — wiele fizycznych punktów wejścia PHP (np.index.phpplus katalogadmin/) serwowanych jako prawdziwe pliki. Stosuj dla WordPress i OpenCart.
Instaluj przez ten sam kontener
Obraz dev zawiera PHP CLI oraz Composera (a także drush, wp, bin/magento, php yii, php craft, php artisan — w zależności od potrzeb), więc każde polecenie instalacyjne i konserwacyjne uruchamia się wewnątrz działającego kontenera — bez osobnego zestawu narzędzi:
docker compose exec app php artisan migrate # Laravel
docker compose exec app vendor/bin/drush cr # Drupal
docker compose run --rm app composer install # anyDomyślne zabezpieczenia, które obowiązują wszędzie
OxPHP daje ci za darmo kilka zabezpieczeń, które w przypadku nginx + PHP-FPM wymagają jawnej konfiguracji:
- Blokowanie ścieżek z kropką —
.env,.git/,.htaccessoraz każda inna ścieżka z segmentem zaczynającym się od kropki zwracają404bez konfiguracji. To dlatego uruchomienie aplikacji z katalogu, który zawiera również.env, nie ujawnia go. - Lista blokowania wykonywania PHP (
PHP_DENY_PATHS) — używana przez przepisy w trybie tradycyjnym: OpenCart blokuje skryptysystem/iinstall/; WordPress blokuje wykonywanie.phpwwp-content/uploads/. (W trybie framework nie ma to znaczenia, ponieważ dowolne.phpnigdy nie jest wykonywane bezpośrednio.) - Ścieżki dozwolone dla dowiązań symbolicznych (
SYMLINK_ALLOW_PATHS) — używane przez October CMS, aby OxPHP podążał za dowiązaniami symbolicznymi zasobów tworzonymi przezoctober:mirror public, wciąż blokując ucieczki przez dowiązania symboliczne wszędzie indziej.
Przepisy
Strony są pogrupowane według typu aplikacji, odzwierciedlając układ katalogów:
examples/
├── framework/ # Laravel, Symfony, Yii3
├── cms/ # WordPress, Drupal, Craft, October
└── ecommerce/ # Magento, OpenCartFramework — framework/
- Laravel — kanoniczna aplikacja w trybie framework
- Symfony — minimalny szkielet, bez bazy danych
- Yii3 — najbardziej odchudzony ze wszystkich; wyłącznie rozszerzenia rdzenia
CMS — cms/
- WordPress — tryb tradycyjny, budowa z rozszerzeniem środowiska uruchomieniowego, sidecar WP-CLI
- Drupal — tryb framework, PDO +
drush - Craft CMS — tryb framework, instalacja sterowana z konsoli
- October CMS — tryb framework z kopią lustrzaną
public/orazSYMLINK_ALLOW_PATHS