クイックスタート
公式の OxPHP イメージには、サーバー、PHP、OxPHP 拡張、そしてすべてのランタイム依存関係がバンドルされています。 そのため、わずか数コマンドで空のディレクトリからアプリを起動できます。
ワンコマンド
すでに public/ ディレクトリを持つ PHP プロジェクトがある場合は、次のようにします。
docker run -p 80:80 -v .:/var/www/html ghcr.io/oxphp/oxphp:0.10.0http://localhost/ を開いてください。アプリケーションが動作しています。
内部サーバー(ヘルス、メトリクス、設定)を有効にするには、次のようにします。
docker run -p 80:80 -p 9090:9090 -e INTERNAL_ADDR=0.0.0.0:9090 -v .:/var/www/html ghcr.io/oxphp/oxphp:0.10.0Docker Compose を使ったステップバイステップのセットアップ
空のディレクトリから、ヘルスチェックと構造化ログを備えた動作する PHP アプリケーションまで、より詳細な手順を説明します。
-
プロジェクトディレクトリを作成します。
mkdir my-oxphp-app && cd my-oxphp-app -
Dockerfile を作成します。
FROM ghcr.io/oxphp/oxphp:0.10.0 COPY --chown=www-data:www-data . /var/www/html公式イメージには、サーバーバイナリ、PHP 8.4 または 8.5 ZTS(デフォルトは 8.5、8.4 を使うには
:0.10.0-php8.4または任意の*-php8.4*タグを取得します)、OxPHP PHP 拡張、そしてすべてのランタイム依存関係が含まれています。 -
compose.yaml を追加します。
services: oxphp: build: . ports: - "80:80" - "9090:9090" environment: - LISTEN_ADDR=0.0.0.0:80 - DOCUMENT_ROOT=/var/www/html/public - INTERNAL_ADDR=0.0.0.0:9090 - LOG_LEVEL=info - ACCESS_LOG=allポート
80はアプリケーションを配信します。ポート9090は、ヘルスチェック、Prometheus メトリクス、 そして現在有効な設定のスナップショットのために内部サーバーを公開します。 -
PHP アプリケーションを作成します。
mkdir -p publicpublic/index.phpを作成します。<?php $requestId = oxphp_request_id(); $info = oxphp_server_info(); echo "<h1>OxPHP</h1>\n"; echo "<p>Request ID: {$requestId}</p>\n"; echo "<p>Worker: {$info['worker_id']}</p>\n"; echo "<p>SAPI: " . php_sapi_name() . "</p>\n"; echo "<p>Version: {$info['version']}</p>\n"; echo "<p>Time: " . date('c') . "</p>\n";oxphp_request_id()は、各リクエストに割り当てられる一意の ID を返します。oxphp_server_info()は、version、worker_id、request_time、worker_modeなど、実行中のサーバーに関する詳細情報を返します。 -
ビルドして起動します。
docker compose up -d --build -
アプリケーションをテストします。
curl http://localhost/期待される出力は次のとおりです。
<h1>OxPHP</h1> <p>Request ID: 67a4b3c11a2b00000001</p> <p>Worker: 0</p> <p>SAPI: cli-server</p> <p>Version: 0.10.0</p> <p>Time: 2026-03-23T12:00:00+00:00</p>各リクエストには一意の ID が付与されます。ワーカー ID は、どの PHP ワーカースレッドがそのリクエストを処理したかを示します。
-
内部エンドポイントを確認します。
# Health check — 200 when healthy, 503 when degraded curl http://localhost:9090/health # Prometheus-compatible metrics curl http://localhost:9090/metrics # Active configuration (TLS paths redacted) curl http://localhost:9090/config -
ログを表示します。
docker compose logs -f oxphpACCESS_LOG=allが設定されているため、すべてのリクエストが、メソッド、パス、ステータス、レスポンスタイム、 リクエスト ID を含む構造化 JSON ログ行として出力されます。
アプリケーションにカスタム PHP 拡張(pdo_pgsql、intl、xdebug など)が必要な場合は、リポジトリ内の
examples/dockerfile/Dockerfile
を参照してください。これは、dev と prod のターゲットを分離した、すぐに使えるマルチステージ Dockerfile です。
OxPHP は意図的に、OPcache が認識する SAPI 名のいずれかで登録します。OPcache は未知の SAPI に対しては自身を無効化します。
このリネームがなければ、PHP の実行は OPcache レイヤーを完全にスキップし、数倍遅く動作してしまいます。トレードオフとして、
php_sapi_name() で OxPHP を検出することはできません。代わりに function_exists('oxphp_request_id') または
OxPHP\Http\Request::current() を使用してください。
次のステップ
- Docker ガイド — 開発用および本番用の Dockerfile、Compose 設定、PHP ini のマウント、ヘルスチェックのセットアップ
- 設定 — 環境変数の完全なリファレンス
- ルーティング — Traditional、Framework、SPA、Worker の各ルーティングモード
- ワーカーモード — 一度ブートストラップして複数のリクエストを処理する永続的な PHP プロセス
- PHP 関数 — OxPHP のすべての組み込み PHP 関数