Примеры развёртываний

Эти руководства показывают, как запустить девять популярных PHP-приложений на OxPHP — каждое в виде самодостаточного проекта Docker Compose. Каждый рецепт был собран и проверен от начала до конца: витрина магазина, панель администратора, статические файлы и внутренний эндпоинт проверки работоспособности OxPHP — всё отвечает 200.

Каждая страница — это законченный рецепт, готовый к копированию: 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. Рецепты расширяют его одним из двух способов:

  1. Копирование OxPHP в базовый образ php:*-zts-alpine (используется Laravel, Symfony, Yii3, Craft, Magento, OpenCart, Drupal, October). Многоэтапная сборка формирует образ dev из четырёх этапов:

    Dockerfile
    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
  2. Прямое расширение среды выполнения OxPHP (используется WordPress). Этап сборки компилирует расширения на основе подходящего php:*-zts-alpine и складывает файлы .so в образ OxPHP.

Note

В любом случае ABI PHP должен совпадать. Файлы 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, wp, bin/magento, php yii, php craft, php artisan — в зависимости от приложения), поэтому все команды установки и обслуживания выполняются внутри работающего контейнера — без отдельного тулчейна:

bash
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, при этом по-прежнему блокируя выход за пределы через симлинки повсюду в других местах.

Рецепты

Страницы сгруппированы по типу приложения, повторяя структуру каталогов:

text
examples/ ├── framework/ # Laravel, Symfony, Yii3 ├── cms/ # WordPress, Drupal, Craft, October └── ecommerce/ # Magento, OpenCart

Фреймворки — framework/

  • Laravel — каноничное приложение в режиме фреймворка
  • Symfony — минимальный скелет, без базы данных
  • Yii3 — самый лёгкий из всех; только базовые расширения

CMS — cms/

  • WordPress — традиционный режим, сборка с расширением среды выполнения, sidecar-контейнер WP-CLI
  • Drupal — режим фреймворка, PDO + drush
  • Craft CMS — режим фреймворка, установка через консоль
  • October CMS — режим фреймворка с зеркалом public/ и SYMLINK_ALLOW_PATHS

Электронная коммерция — ecommerce/

  • Magento — самый тяжёлый: OpenSearch, PHP 8.4, симлинк версии для статических файлов
  • OpenCart — традиционный режим с двумя фронт-контроллерами и PHP_DENY_PATHS