デプロイ例

これらのガイドでは、人気の PHP アプリケーション 9 種類を OxPHP 上で動かす方法を、それぞれ完結した Docker Compose プロジェクトとして紹介します。どのレシピもエンドツーエンドで構築・検証済みです。ストアフロント、管理パネル、静的アセット、そして OxPHP の内部ヘルスエンドポイントがすべて 200 を返すことを確認しています。

各ページは、コピー&ペーストしてそのまま使える完結したレシピになっています。Dockerfiledocker-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 通りのいずれかで拡張します。

  1. php:*-zts-alpine ベースに OxPHP をコピーする(Laravel、Symfony、Yii3、Craft、Magento、OpenCart、Drupal、October で採用)。マルチステージビルドで、4 つのステージから 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

どちらの方法でも、PHP ABI が一致していなければなりません。OxPHP イメージの libphp.sooxphp_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(および必要に応じて drushwpbin/magentophp yiiphp craftphp 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 では明示的な設定が必要になるいくつかの保護を、無償で提供します。

  • ドットパスブロック.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 がたどれるようにしつつ、それ以外の場所ではシンボリックリンクによる脱出を引き続きブロックします。

レシピ

ページはアプリケーションの種別ごとにグループ化されており、ディレクトリのレイアウトを反映しています。

text
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 CMSpublic/ ミラーと SYMLINK_ALLOW_PATHS を使うフレームワークモード

E コマース — ecommerce/

  • Magento — 最も重量級: OpenSearch、PHP 8.4、静的アセットのバージョンシンボリックリンク
  • OpenCart — フロントコントローラーが 2 つと PHP_DENY_PATHS を使う従来型モード