Приклади розгортання
Ці посібники показують, як запустити дев’ять популярних PHP-застосунків на OxPHP, кожен як самодостатній проєкт Docker Compose. Кожен рецепт зібрано й перевірено від початку до кінця. У його розділі «Перевірка» перелічено запити, які перевірялися, і статус, що повертає кожен із них.
Кожна сторінка — це повний рецепт, який можна просто скопіювати: Dockerfile, docker-compose.yml, команди встановлення та специфічні для OxPHP деталі, яких не охоплює стандартна документація застосунку (написана для nginx + PHP-FPM).
Застосунки
| Застосунок | Тип | Режим маршрутизації | PHP | Додаткові сервіси | Спосіб встановлення |
|---|---|---|---|---|---|
| Laravel | Фреймворк | Фреймворковий | 8.5 | MySQL | composer create-project |
| Symfony | Фреймворк | Фреймворковий | 8.5 | — | composer create-project |
| Yii3 | Фреймворк | Фреймворковий | 8.5 | — | composer create-project |
| WordPress | CMS | Традиційний | 8.5 | MySQL | WP-CLI |
| Drupal | CMS | Фреймворковий | 8.4 | MySQL | drush site:install |
| Craft CMS | CMS | Фреймворковий | 8.5 | MySQL | craft install |
| October CMS | CMS | Фреймворковий + дзеркало | 8.4 | MySQL | october:migrate + дзеркало |
| Magento | Електронна комерція | Фреймворковий | 8.4 | MySQL + OpenSearch | bin/magento setup:install |
| OpenCart | Електронна комерція | Традиційний | 8.4 | MySQL | CLI-інсталятор |
Що спільного в усіх рецептах
Збірка на основі опублікованого образу OxPHP
OxPHP постачає готове середовище виконання PHP як ghcr.io/oxphp/oxphp (типово PHP 8.5; варіант із PHP 8.4 публікується як ghcr.io/oxphp/oxphp:<ver>-php8.4-alpine<X>). Опублікований образ уже містить бінарний файл oxphp, libphp.so, SAPI-розширення OxPHP, PHP CLI та інструменти, зручні для Composer. Рецепти розширюють його одним із двох способів:
-
Копіювання OxPHP в базовий образ
php:*-zts-alpine(так зроблено для Laravel, Symfony, Yii3, Craft, Magento, OpenCart, Drupal, October). Багатоетапна збірка складає образdevіз чотирьох етапів: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.13.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 -
Безпосереднє розширення середовища виконання OxPHP (так зроблено для WordPress). Етап збирання компілює розширення з відповідним
php:*-zts-alpineі кладе файли.soв образ OxPHP.
У будь-якому разі PHP ABI має збігатися. libphp.so та oxphp_sapi.so в образі OxPHP скомпільовані для однієї версії PHP (наприклад, 8.4 → no-debug-zts-20240924); етап php-base/збирання має використовувати той самий php:<X.Y>-zts-alpine<Z>, щоб скомпільовані вами розширення були ABI-сумісними. Якщо змішати версії, oxphp_sapi.so відмовиться завантажуватися або пошкодить musl TLS під час запуску.
Канонічний багатоетапний шаблон див. у посібнику з Docker, а готову до копіювання версію — у examples/dockerfile/ в репозиторії.
Обирайте версію PHP свідомо
Типовий образ ghcr.io/oxphp/oxphp:<ver> — це PHP 8.5. Для сучасних фреймворків (Laravel, Symfony, Yii3, Craft) це підходить. Старіші або консервативніші кодові бази — Magento, OpenCart, Drupal, October CMS — фіксують PHP 8.4 через тег …-php8.4-alpine…, бо їхні стеки компонентів старші за 8.5 і видають на ньому попередження про застарілість. У кожному рецепті зазначено, яку версію він використовує і чому.
Обирайте режим маршрутизації за структурою застосунку
Режим маршрутизації OxPHP безпосередньо відповідає тому, як організовано застосунок:
- Фреймворковий режим (
ENTRY_FILE=index.php) — один фронт-контролер у каталозіpublic/(абоweb/,pub/); наявні статичні файли віддаються з диска, усе інше передається вindex.php. Використовуйте для Laravel, Symfony, Yii3, Craft, Magento, Drupal, October. - Традиційний режим (без
ENTRY_FILE) — кілька фізичних точок входу PHP (наприклад,index.phpплюс каталогadmin/), які віддаються як справжні файли. Використовуйте для WordPress і OpenCart.
Встановлення через той самий контейнер
Образ dev містить PHP CLI і Composer (а також, залежно від застосунку, drush, bin/magento, php yii, php craft, php artisan), тож команди встановлення й обслуговування виконуються всередині запущеного контейнера — без окремого набору інструментів. Виняток — WordPress: його образ розширює середовище виконання OxPHP, у якому немає бінарника wp, тому WP-CLI працює в окремому sidecar-контейнері wpcli. Для решти рецептів:
docker compose exec app php artisan migrate # Laravel
docker compose exec app vendor/bin/drush cr # Drupal
docker compose run --rm app composer install # anyТипові захисти, що діють усюди
OxPHP безкоштовно надає кілька захистів, які в nginx + PHP-FPM потребують явного налаштування:
- Блокування dot-шляхів —
.env,.git/,.htaccessта будь-який інший шлях із сегментом, що починається з крапки, повертають404без жодного налаштування. Саме тому запуск застосунку з каталогу, де також лежить.env, не призводить до його витоку. - Список заборони виконання PHP (
PHP_DENY_PATHS) — використовується в рецептах із традиційним режимом: OpenCart блокує скрипти вsystem/таinstall/; WordPress блокує виконання.phpуwp-content/uploads/. (У фреймворковому режимі це нічого не змінює, бо довільні.phpтам ніколи не виконуються напряму.) - Дозволені шляхи для символьних посилань (
SYMLINK_ALLOW_PATHS) — використовується в October CMS, щоб OxPHP переходив за символьними посиланнями на ресурси, створенимиoctober:mirror public, і водночас блокував виходи через символьні посилання в усіх інших місцях.
Рецепти
Сторінки згруповано за типом застосунку відповідно до структури каталогів:
examples/
├── framework/ # Laravel, Symfony, Yii3
├── cms/ # WordPress, Drupal, Craft, October
└── ecommerce/ # Magento, OpenCartФреймворки — framework/
- Laravel — канонічний застосунок у фреймворковому режимі
- Symfony — мінімальний каркас, без бази даних
- Yii3 — найлегший з усіх; лише базові розширення
CMS — cms/
- WordPress — традиційний режим, збірка з розширенням середовища виконання, допоміжний контейнер WP-CLI
- Drupal — фреймворковий режим, PDO +
drush - Craft CMS — фреймворковий режим, встановлення через консоль
- October CMS — фреймворковий режим із дзеркалом
public/таSYMLINK_ALLOW_PATHS