このページはコミュニティによって翻訳されたもので、最新ではない可能性があります。参照用のバージョンをご覧ください。
このページはコミュニティによって翻訳されたもので、最新ではない可能性があります。参照用のバージョンをご覧ください。
このページはコミュニティによって翻訳されたもので、最新ではない可能性があります。参照用のバージョンをご覧ください。
FrankenPHPには、PHPアプリケーションのソースコードやアセットを静的な自己完結型バイナリに埋め込む機能があります。
この機能により、PHPアプリケーション自体に加えて、PHPインタープリターや本番環境対応のWebサーバーCaddyも含んだスタンドアロンバイナリとして配布できます。
この機能について詳しくは、SymfonyCon 2023でKévinが行ったプレゼンテーションをご覧ください。
Laravelアプリケーションの埋め込みについては、こちらの専用ドキュメントをお読みください。
自己完結型バイナリを作成する前に、アプリが埋め込みに対応できる状態にあることを確認してください。
例えば、以下のような作業が必要です:
.git
やテストなどの不要なファイルを除外する例えば、Symfonyアプリの場合、以下のコマンドを使用できます:
# .git/ などを除去するためにプロジェクトをエクスポート
mkdir $TMPDIR/my-prepared-app
git archive HEAD | tar -x -C $TMPDIR/my-prepared-app
cd $TMPDIR/my-prepared-app
# 適切な環境変数を設定
echo APP_ENV=prod > .env.local
echo APP_DEBUG=0 >> .env.local
# テストやその他不要ファイルを削除して容量削減
# あるいは、 .gitattributes の export-ignore 属性にこれらを追加してもよい
rm -Rf tests/
# 依存パッケージをインストール
composer install --ignore-platform-reqs --no-dev -a
# .env を最適化
composer dump-env prod
設定 をカスタマイズするには、埋め込まれるアプリのメインディレクトリ
(前の例では$TMPDIR/my-prepared-app
)にCaddyfile
とphp.ini
ファイルを配置できます。
Linux用バイナリを作成する最も簡単な方法は、提供されているDockerベースのビルダーを使用することです。
アプリのリポジトリにstatic-build.Dockerfile
というファイルを作成します:
FROM --platform=linux/amd64 dunglas/frankenphp:static-builder
# アプリをコピー
WORKDIR /go/src/app/dist/app
COPY . .
# 静的バイナリをビルド
WORKDIR /go/src/app/
RUN EMBED=dist/app/ ./build-static.sh
Caution
一部の
.dockerignore
ファイル(例:デフォルトのSymfony Docker.dockerignore
) はvendor/
ディレクトリと.env
ファイルを無視します。ビルド前に.dockerignore
ファイルを調整または削除してください。
ビルドします:
docker build -t static-app -f static-build.Dockerfile .
バイナリを抽出します:
docker cp $(docker create --name static-app-tmp static-app):/go/src/app/dist/frankenphp-linux-x86_64 my-app ; docker rm static-app-tmp
生成されるバイナリは、現在のディレクトリのmy-app
というファイル名になります。
Dockerを使用したくない場合や、macOSバイナリを作成したい場合は、提供されているシェルスクリプトを使用してください:
git clone https://github.com/php/frankenphp
cd frankenphp
EMBED=/path/to/your/app ./build-static.sh
生成されるバイナリは、dist/
ディレクトリのfrankenphp-<os>-<arch>
という名前のファイルです。
これで完了です!my-app
ファイル(または他のOSではdist/frankenphp-<os>-<arch>
)には、自己完結型アプリが含まれています!
Webアプリを起動するには、以下を実行します:
./my-app php-server
アプリにワーカースクリプトが含まれている場合は、以下のようにワーカーを開始します:
./my-app php-server --worker public/index.php
HTTPS(Let’s Encrypt証明書は自動作成)、HTTP/2、HTTP/3を有効にするには、使用するドメイン名を指定してください:
./my-app php-server --domain localhost
バイナリに埋め込まれたPHP CLIスクリプトも実行できます:
./my-app php-cli bin/console
デフォルトでは、スクリプトはプロジェクトのcomposer.json
ファイルで必要な拡張モジュールをビルドします(存在する場合)。
composer.json
ファイルが存在しない場合、静的ビルドのドキュメントに記載されているデフォルトの拡張モジュールがビルドされます。
拡張モジュールをカスタマイズしたい場合は、PHP_EXTENSIONS
環境変数を使用してください。
バイナリをカスタマイズする方法(拡張モジュール、PHPバージョンなど)については、静的ビルドのドキュメントをお読みください。
Linuxでは、作成されたバイナリはUPXを使用して圧縮されます。
Macでは、送信前にファイルサイズを減らすために圧縮できます。
xz
の使用をお勧めします。