Примеры развёртываний
Эти руководства показывают, как запустить девять популярных 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. Рецепты расширяют его одним из двух способов:
-
Копирование 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.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 -
Прямое расширение среды выполнения OxPHP (используется WordPress). Этап сборки компилирует расширения на основе подходящего
php:*-zts-alpineи складывает файлы.soв образ OxPHP.
В любом случае 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 — в зависимости от приложения), поэтому все команды установки и обслуживания выполняются внутри работающего контейнера — без отдельного тулчейна:
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 — традиционный режим, сборка с расширением среды выполнения, sidecar-контейнер WP-CLI
- Drupal — режим фреймворка, PDO +
drush - Craft CMS — режим фреймворка, установка через консоль
- October CMS — режим фреймворка с зеркалом
public/иSYMLINK_ALLOW_PATHS