デプロイ例
これらのガイドでは、人気の PHP アプリケーション 9 種類を OxPHP 上で動かす方法を、それぞれ完結した Docker Compose プロジェクトとして紹介します。どのレシピもエンドツーエンドで構築・検証済みです。ストアフロント、管理パネル、静的アセット、そして OxPHP の内部ヘルスエンドポイントがすべて 200 を返すことを確認しています。
各ページは、コピー&ペーストしてそのまま使える完結したレシピになっています。Dockerfile、docker-compose.yml、インストールコマンド、そしてアプリケーション標準のドキュメント(nginx + PHP-FPM 向けに書かれています)ではカバーされていない OxPHP 固有の詳細を掲載しています。
対象アプリケーション
| アプリケーション | 種別 | ルーティングモード | 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 + mirror |
| Magento | E コマース | フレームワーク | 8.4 | MySQL + OpenSearch | bin/magento setup:install |
| OpenCart | E コマース | 従来型 | 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、OxPHP SAPI 拡張、PHP CLI、そして Composer と相性のよいツール群がすでに含まれています。レシピはこれを次の 2 通りのいずれかで拡張します。
-
php:*-zts-alpineベースに OxPHP をコピーする(Laravel、Symfony、Yii3、Craft、Magento、OpenCart、Drupal、October で採用)。マルチステージビルドで、4 つのステージから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 イメージに配置します。
どちらの方法でも、PHP ABI が一致していなければなりません。OxPHP イメージの libphp.so と oxphp_sapi.so は特定の 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 — は …-php8.4-alpine… タグで PHP 8.4 に固定します。これらのコンポーネントスタックは 8.5 より前のものであり、8.5 上では非推奨警告を出すためです。各レシピには、どちらを使うのか、そしてその理由が記載されています。
アプリケーションの構成からルーティングモードを選ぶ
OxPHP のルーティングモードは、アプリケーションのレイアウトの仕方にそのまま対応します。
- フレームワークモード(
ENTRY_FILE=index.php) —public/(またはweb/、pub/)ディレクトリ配下にフロントコントローラーが 1 つあり、既存の静的ファイルはディスクから配信され、それ以外はすべて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 では明示的な設定が必要になるいくつかの保護を、無償で提供します。
- ドットパスブロック —
.env、.git/、.htaccessやその他のドットセグメントを含むパスは、設定なしで404を返します。これが、.envも置かれているディレクトリからアプリを動かしてもそれが漏れない理由です。 - PHP 実行の拒否リスト(
PHP_DENY_PATHS) — 従来型モードのレシピで使われます。OpenCart はsystem/とinstall/のスクリプトをブロックし、WordPress はwp-content/uploads/配下での.php実行をブロックします。(フレームワークモードでは任意の.phpが直接実行されることはないため、何もしません。) - シンボリックリンクの許可パス(
SYMLINK_ALLOW_PATHS) — October CMS で使われます。october:mirror publicが生成するアセットのシンボリックリンクを OxPHP がたどれるようにしつつ、それ以外の場所ではシンボリックリンクによる脱出を引き続きブロックします。
レシピ
ページはアプリケーションの種別ごとにグループ化されており、ディレクトリのレイアウトを反映しています。
examples/
├── framework/ # Laravel, Symfony, Yii3
├── cms/ # WordPress, Drupal, Craft, October
└── ecommerce/ # Magento, OpenCartフレームワーク — framework/
CMS — cms/
- WordPress — 従来型モード、ランタイム拡張ビルド、WP-CLI サイドカー
- Drupal — フレームワークモード、PDO +
drush - Craft CMS — フレームワークモード、コンソール駆動のインストール
- October CMS —
public/ミラーとSYMLINK_ALLOW_PATHSを使うフレームワークモード