このページはコミュニティによって翻訳されたもので、最新ではない可能性があります。参照用のバージョンをご覧ください。
このページはコミュニティによって翻訳されたもので、最新ではない可能性があります。参照用のバージョンをご覧ください。
このページはコミュニティによって翻訳されたもので、最新ではない可能性があります。参照用のバージョンをご覧ください。
FrankenPHP、Caddy、そしてMercureやVulcainモジュールは、Caddyでサポートされる形式を使用して設定できます。
最も一般的な形式はCaddyfileで、シンプルで人間が読めるテキスト形式です。
デフォルトでは、FrankenPHPは現在のディレクトリにあるCaddyfileを探します。
-cまたは--configオプションでカスタムパスを指定できます。
PHPアプリケーションを配信するための最小限のCaddyfileを以下に示します:
# レスポンスするホスト名
localhost
# オプションで、ファイルを配信するディレクトリ。指定しない場合は現在のディレクトリがデフォルト
#root public/
php_server
より多くの機能を有効にし、便利な環境変数を提供するより高度なCaddyfileは、FrankenPHPリポジトリおよびDockerイメージに同梱されています。
PHP自体は、php.ini ファイルを使用して設定できます。
インストール方法に応じて、FrankenPHPとPHPインタープリターは以下の場所に記載された設定ファイルを探します。
FrankenPHP:
/etc/frankenphp/Caddyfile: メインの設定ファイル/etc/frankenphp/Caddyfile.d/*.caddyfile: 自動的にロードされる追加の設定ファイルPHP:
php.ini: /usr/local/etc/php/php.ini(デフォルトではphp.iniは含まれていません)/usr/local/etc/php/conf.d/*.ini/usr/local/lib/php/extensions/no-debug-zts-<YYYYMMDD>/FROM dunglas/frankenphp
# Production:
RUN cp $PHP_INI_DIR/php.ini-production $PHP_INI_DIR/php.ini
# Or development:
RUN cp $PHP_INI_DIR/php.ini-development $PHP_INI_DIR/php.ini
FrankenPHP:
/etc/frankenphp/Caddyfile: メインの設定ファイル/etc/frankenphp/Caddyfile.d/*.caddyfile: 自動的にロードされる追加の設定ファイルPHP:
php.ini: /etc/php-zts/php.ini(本番環境向けのプリセットのphp.iniファイルがデフォルトで提供されます)/etc/php-zts/conf.d/*.iniFrankenPHP:
CaddyfilePHP:
php.ini: frankenphp runまたはfrankenphp php-serverを実行したディレクトリ内、なければ/etc/frankenphp/php.iniを参照/etc/frankenphp/php.d/*.iniphp.ini-productionまたはphp.ini-developmentのいずれかをコピーしてください。php_serverまたはphpのHTTPディレクティブは、サイトブロック内で使用してPHPアプリを配信できます。
最小構成の例:
localhost {
# 圧縮を有効化(オプション)
encode zstd br gzip
# 現在のディレクトリ内のPHPファイルを実行し、アセットを配信
php_server
}
FrankenPHPは、frankenphpのグローバルオプションを使用して明示的に設定することもできます:
{
frankenphp {
num_threads <num_threads> # 開始するPHPスレッド数を設定します。デフォルト: 利用可能なCPU数の2倍。
max_threads <num_threads> # 実行時に追加で開始できるPHPスレッドの最大数を制限します。デフォルト: num_threads。 'auto'を設定可能。
max_wait_time <duration> # リクエストがタイムアウトする前にPHPのスレッドが空くのを待つ最大時間を設定します。デフォルト: 無効。
max_idle_time <duration> # 自動スケーリングされたスレッドが非アクティブ化されるまでにアイドル状態である最大時間を設定します。デフォルト: 5秒。
php_ini <key> <value> # php.iniのディレクティブを設定します。複数のディレクティブを設定するために何度でも使用できます。
worker {
file <path> # ワーカースクリプトのパスを設定します。
num <num> # 開始するPHPスレッド数を設定します。デフォルト: 利用可能なCPU数の2倍。
env <key> <value> # 追加の環境変数を指定された値に設定する。複数の環境変数に対して複数回指定することができます。
watch <path> # ファイル変更を監視するパスを設定します。複数のパスに対して複数回指定できます。
name <name> # ワーカーの名前を設定します。ログとメトリクスで使用されます。デフォルト: ワーカーファイルの絶対パス
max_consecutive_failures <num> # workerが不健全とみなされるまでの、連続失敗の最大回数を設定します。 -1 はワーカーを常に再起動することを意味します。デフォルトは 6 です。
}
}
}
# ...
代わりに、workerオプションのワンライナー形式を使用することもできます:
{
frankenphp {
worker <file> <num>
}
}
# ...
同じサーバーで複数のアプリを提供する場合は、複数のワーカーを定義することもできます:
app.example.com {
root /path/to/app/public
php_server {
root /path/to/app/public # キャッシュ効率を高める
worker index.php <num>
}
}
other.example.com {
root /path/to/other/public
php_server {
root /path/to/other/public
worker index.php <num>
}
}
# ...
通常はphp_serverディレクティブを使えば十分ですが、
より細かい制御が必要な場合は、より低レベルのphpディレクティブを使用できます。
phpディレクティブは、対象がPHPファイルかどうかを確認せず、すべての入力をPHPに渡します。
詳しくはパフォーマンスページをお読みください。
php_serverディレクティブの使用は、以下の設定と同等です:
route {
# ディレクトリへのリクエストに末尾スラッシュを追加
@canonicalPath {
file {path}/index.php
not path */
}
redir @canonicalPath {path}/ 308
# 要求されたファイルが存在しない場合は、indexファイルを試行
@indexFiles file {
try_files {path} {path}/index.php index.php
split_path .php
}
rewrite @indexFiles {http.matchers.file.relative}
# FrankenPHP!
@phpFiles path *.php
php @phpFiles
file_server
}
php_serverとphpディレクティブには以下のオプションがあります:
php_server [<matcher>] {
root <directory> # サイトのルートフォルダを設定します。デフォルト: `root`ディレクティブ。
split_path <delim...> # URIを2つの部分に分割するための部分文字列を設定します。最初にマッチする部分文字列がURIから「パス情報」を分割するために使用されます。最初の部分はマッチする部分文字列で接尾辞が付けられ、実際のリソース(CGIスクリプト)名とみなされます。2番目の部分はスクリプトが使用する PATH_INFO に設定されます。デフォルト: `.php`
resolve_root_symlink false # シンボリックリンクが存在する場合`root`ディレクトリをシンボリックリンクの評価によって実際の値に解決することを無効にする(デフォルトで有効)。
env <key> <value> # 追加の環境変数を指定された値に設定する。複数の環境変数を指定する場合は、複数回指定することができます。
file_server off # 組み込みのfile_serverディレクティブを無効にします。
worker { # このサーバー固有のワーカーを作成します。複数のワーカーに対して複数回指定できます。
file <path> # ワーカースクリプトへのパスを設定します。php_serverのルートからの相対パスとなります。
num <num> # 起動するPHPスレッド数を設定します。デフォルトは利用可能なCPU数の2倍です。
name <name> # ログとメトリクスで使用されるワーカーの名前を設定します。デフォルト: ワーカーファイルの絶対パス。php_server ブロックで定義されている場合は、常にm#で始まります。
watch <path> # ファイルの変更を監視するパスを設定する。複数のパスに対して複数回指定することができる。
env <key> <value> # 追加の環境変数を指定された値に設定する。複数の環境変数を指定する場合は、複数回指定することができます。このワーカーの環境変数もphp_serverの親から継承されますが、 ここで上書きすることもできます。
match <path> # ワーカーをパスパターンにマッチさせます。try_filesを上書きし、php_serverディレクティブでのみ使用できます。
}
worker <other_file> <num> # グローバルfrankenphpブロックのような短縮形式も使用できます。
}
ワーカーはアプリケーションを一度だけ起動してメモリに保持するため、 PHPファイルに変更を加えても即座には反映されません。
代わりに、watchディレクティブを使用してファイル変更時にワーカーを再起動させることができます。
これは開発環境において有用です。
{
frankenphp {
worker {
file /path/to/app/public/worker.php
watch
}
}
}
この機能は、ホットリロードと組み合わせてよく使用されます。
watchディレクトリが指定されていない場合、./**/*.{env,php,twig,yaml,yml}にフォールバックします。
これは、FrankenPHPプロセスが開始されたディレクトリおよびそのサブディレクトリ内のすべての.env、.php、.twig、.yaml、.ymlファイルすべてを監視します。
代わりに、シェルのファイル名パターンを使用して
1つ以上のディレクトリを指定することもできます:
{
frankenphp {
worker {
file /path/to/app/public/worker.php
watch /path/to/app # /path/to/app以下すべてのサブディレクトリのファイルを監視
watch /path/to/app/*.php # /path/to/app内の.phpで終わるファイルを監視
watch /path/to/app/**/*.php # /path/to/appおよびサブディレクトリのPHPファイルを監視
watch /path/to/app/**/*.{php,twig} # /path/to/appおよびサブディレクトリ内のPHPとTwigファイルを監視
}
}
}
** パターンは再帰的な監視を意味しますファイルウォッチャーはe-dant/watcherに基づいています。
従来のPHPアプリケーションでは、スクリプトは常にpublicディレクトリに配置されます。
これはワーカースクリプトにも当てはまり、他のPHPスクリプトと同様に扱われます。
ワーカースクリプトをpublicディレクトリの外に配置したい場合は、matchディレクティブを使用して実現できます。
matchディレクティブは、try_filesの最適化された代替手段であり、php_serverおよびphpの中でのみ使用できます。
次の例では、public ディレクトリ内にファイルが存在すればそれを配信し、
存在しなければ、パスパターンに一致するワーカーにリクエストを転送します。
{
frankenphp {
php_server {
worker {
file /path/to/worker.php # ファイルはpublicパス外でも可
match /api/* # /api/で始まるすべてのリクエストはこのワーカーで処理される
}
}
}
}
以下の環境変数を使用することで、Caddyfileを直接変更せずにCaddyディレクティブを注入できます:
SERVER_NAME: 待ち受けアドレスを変更し、指定したホスト名はTLS証明書の生成にも使用されますSERVER_ROOT: サイトのルートディレクトリを変更します。デフォルトはpublic/CADDY_GLOBAL_OPTIONS: グローバルオプションを注入しますFRANKENPHP_CONFIG: frankenphpディレクティブの下に設定を注入しますFPM や CLI SAPI と同様に、環境変数はデフォルトで$_SERVERスーパーグローバルで公開されます。
variables_order PHPディレクティブのS値は、このディレクティブ内でのEの位置にかかわらず常にESと同等です。
追加のPHP設定ファイルを読み込むには、
PHP_INI_SCAN_DIR環境変数を使用できます。
設定されると、PHPは指定されたディレクトリに存在する.ini拡張子を持つすべてのファイルを読み込みます。
また、Caddyfileのphp_iniディレクティブを使用してPHP設定を変更することもできます:
{
frankenphp {
php_ini memory_limit 256M
# or
php_ini {
memory_limit 256M
max_execution_time 15
}
}
}
デフォルトでは、FrankenPHPはlocalhostを含むすべてのホスト名に対してHTTPSを自動的に有効にします。
HTTPSを無効にしたい場合(例えば開発環境で)、SERVER_NAME環境変数をhttp://または:80に設定できます:
または、Caddyのドキュメントに記載されている他のすべての方法を使用することもできます。
localhostホスト名の代わりに127.0.0.1 IPアドレスでHTTPSを使用したい場合は、既知の問題セクションを読んでください。
HTTP/1.xを使用する場合、全体のボディが読み取られる前にレスポンスを書き込めるようにするため、 フルデュプレックスモードを有効にすることが望ましい場合があります(例:Mercure、WebSocket、Server-Sent Eventsなど)。
これは明示的に有効化する必要がある設定で、Caddyfileのグローバルオプションに追加する必要があります:
{
servers {
enable_full_duplex
}
}
Caution
このオプションを有効にすると、フルデュプレックスをサポートしない古いHTTP/1.xクライアントでデッドロックが発生する可能性があります。 これは
CADDY_GLOBAL_OPTIONS環境設定を使用しても設定できます:
CADDY_GLOBAL_OPTIONS="servers {
enable_full_duplex
}"
この設定の詳細については、Caddyドキュメントをご覧ください。
Dockerイメージを使用する場合、CADDY_GLOBAL_OPTIONS環境変数にdebugを設定するとデバッグモードが有効になります:
docker run -v $PWD:/app/public \
-e CADDY_GLOBAL_OPTIONS=debug \
-p 80:80 -p 443:443 -p 443:443/udp \
dunglas/frankenphp
FrankenPHPはBash、Zsh、Fish、およびPowerShell用のシェル補完機能を内蔵しています。これにより、すべてのコマンド(php-server、php-cli、extension-initなどのカスタムコマンドを含む)とそのフラグのオートコンプリートが可能になります。
現在のシェルセッションで補完を読み込むには:
source <(frankenphp completion bash)
新しいセッションごとに補完を読み込むには、以下を実行してください:
Linux:
frankenphp completion bash > /usr/share/bash-completion/completions/frankenphp
macOS:
frankenphp completion bash > $(brew --prefix)/share/bash-completion/completions/frankenphp
シェル補完がまだ環境で有効になっていない場合は、有効にする必要があります。以下のコマンドを一度実行してください:
echo "autoload -U compinit; compinit" >> ~/.zshrc
各セッションで補完を読み込むには、一度実行してください:
frankenphp completion zsh > "${fpath[1]}/_frankenphp"
この設定を有効にするには、新しいシェルを起動する必要があります。
現在のシェルセッションで補完を読み込むには:
frankenphp completion fish | source
新しいセッションごとに補完を読み込むには、一度実行してください:
frankenphp completion fish > ~/.config/fish/completions/frankenphp.fish
現在のシェルセッションで補完を読み込むには:
frankenphp completion powershell | Out-String | Invoke-Expression
新しいセッションごとに補完を読み込むには、一度実行してください:
frankenphp completion powershell | Out-File -FilePath (Join-Path (Split-Path $PROFILE) "frankenphp.ps1")
Add-Content -Path $PROFILE -Value '. (Join-Path (Split-Path $PROFILE) "frankenphp.ps1")'
この設定を有効にするには、新しいシェルを起動する必要があります。
この設定を有効にするには、新しいシェルを起動する必要があります。
このページを編集