PHP プロジェクトのデプロイ
Zeabur は、従来の複数ファイル PHP プロジェクトや index.php
をエントリポイントとするプロジェクトの他、Laravel、Symfony、ThinkPHP、CodeIgniter などのフレームワークをワンクリックでデプロイすることもサポートしています。
PHP 環境
Zeabur は、デフォルトで PHP 8 の最新バージョンと NGINX + php-fpm サーバーを使用してコードを実行します。
Zeabur の PHP 環境には Composer、apcu
、bcmath
、gd
、intl
、mysqli
、opcache
、pcntl
、pdo_mysql
、sysvsem
、zip
などの PHP 拡張モジュールが組み込まれています。さらに、composer.json
に ext-
で始まる他の拡張モジュールが記載されている場合、Zeabur は自動的に対応するモジュールをインストールします。それ以外にも、Node.js、Crontab、cURL、gettext、Git、grep、pkg-config、unzip などのツールがデフォルトでインストールされます。
Zeabur はデフォルトで環境変数 APP_ENV=prod
と APP_DEBUG=true
をアプリケーションに適用しますが、Zeabur コンソールの「環境変数」セクションでこれらを手動で上書きすることができます。
完全なベースイメージ設定については、zbpack のコードリポジトリ を参照してください。
NPM サポート
プロジェクトに package.json
が含まれている場合、Zeabur は npm install
を実行して依存関係をインストールします。
また、package.json
に build
スクリプトがある場合、Zeabur は自動的に npm run build
を実行して成果物をビルドします。
カスタムビルドおよび起動コマンド
Zeabur では、環境変数または設定ファイルを使用して PHP のビルドおよび起動コマンドをカスタマイズできます。
「ビルドコマンド」は、CSS や JavaScript などのカスタム成果物をダウンロードまたはビルドしたり、設定ファイルを構成する必要がある状況に適しています。たとえば、/etc
ディレクトリに設定ファイルを書き込みたい場合、環境変数を設定できます。
ZBPACK_BUILD_COMMAND=echo 'your-configuration' > /etc/somewhere
または、zbpack.json
に以下の設定を追加します。
{
"build_command": "echo 'your-configuration' > /etc/somewhere"
}
ここで、他の npm コマンドを実行することも可能です。
{
"build_command": "npm run build:dist"
}
ビルドコマンドは、Zeabur の既存のビルドプロセスには影響を与えません。そのため、Zeabur がデフォルトで実行するコマンドを手動で再指定する必要はありません。
「起動コマンド」は、PHP サーバーを起動する際に実行するコマンドに適しています。たとえば、php artisan migrate
を追加してデータベースのテーブルを作成する場合、以下のように環境変数を設定できます。
ZBPACK_START_COMMAND="php artisan migrate && _startup"
または、zbpack.json
に以下の設定を追加します。
{
"start_command": "php artisan migrate && _startup"
}
注意:継続的に実行する必要があるサービスの場合、起動コマンドを ()
で囲み、&
を使用してタスクをバックグラウンドで実行する必要があります:
ZBPACK_START_COMMAND="(php artisan reverb:start &); _startup"
または、
{
"start_command": "(php artisan reverb:start &); _startup"
}
ここで、_startup
は Zeabur のデフォルトの起動コマンドです(zbpack で確認可能)。カスタム start_command
を設定する場合、_startup
を必ず含める必要があります。含めない場合、PHP サーバーが起動しません。
build_command
と start_command
は、POSIX 互換のシェルで実行されるため、&&
を使用して複数のコマンドを接続したり、;
を使用して複数のコマンドを区切ることができます。
複雑な起動コマンドの処理方法
起動コマンドが複雑な場合(たとえば、スケジュールタスクの設定や複数のサービスの起動など)、start_command
が複雑になり、デバッグが困難になる可能性があります。これらのコマンドを Config Editor を使用してスクリプトにまとめることをお勧めします。例えば worker.sh
のように:
#!/usr/bin/env bash
php artisan migrate
php artisan queue:work &
# その他のコマンド
そして、start_command
でこのスクリプトを実行します:
{
"start_command": "(bash worker.sh &); _startup"
}
ZBPACK_START_COMMAND=(bash worker.sh &); _startup
Workers の処理方法
キューの処理やスケジュールタスクについては、サービスを分けて処理することをお勧めします。
キューワーカーを起動したい場合、メインサービスとは別に queue-worker
というサービスを配置し、その start_command
を以下のように設定します:
ZBPACK_START_COMMAND="php artisan queue:work"
PHP サーバーが起動しないように ; _startup
を追加しないように注意してください。これにより、非同期タスクを処理する専用のサービスが作成されます。
スケジュールタスクを処理する追加のサービスが必要な場合は、cron-worker
という別のサービスを配置し、その start_command
を以下のように設定します:
ZBPACK_START_COMMAND="php artisan schedule:work"
このようにすることで、いずれかのワーカーに問題が発生しても、他のワーカーやメインサービスには影響を与えません。
PHP バージョンのカスタマイズ
Zeabur はデフォルトで PHP 8 を使用しますが、composer.json
や zbpack の設定を使用して PHP バージョンを指定できます。Laravel Sail を使用している場合、docker-compose.yml
に基づいて自動的に判断します。優先順位は、zbpack の設定が最優先、次に composer.json
、最後に Laravel Sail です。
composer.json
composer.json
の require
に PHP バージョンの範囲を指定します。
{
"require": {
"php": "7.4"
}
}
上記の例では、Zeabur は PHP 7.4 の最新パッチバージョンを使用してプロジェクトを実行します。
{
"require": {
"php": "^7.4"
}
}
この場合、Zeabur は PHP 7 の最新マイナーバージョンを使用します。
Laravel Sail
プロジェクトが Laravel Sail を使用している場合、Zeabur は docker-compose.yml
で定義された PHP バージョンを自動的に検出して使用します。
zbpack 設定
Laravel Sail や Composer を使用していない場合でも、PHP バージョンを変更したい場合は、ZBPACK_PHP_VERSION
環境変数を使用できます。
ZBPACK_PHP_VERSION=8.0
または、zbpack.json
に以下の設定を追加します。
{
"php": {
"version": "8.0"
}
}
これで PHP バージョンをカスタマイズできます。
php.ini
設定のカスタマイズ
Zeabur の設定ファイルエディタを使用して、/usr/local/etc/php/conf.d
ディレクトリに .ini
拡張子を持つ設定ファイルを作成し、上書きしたい PHP 設定を直接記述します。
たとえば、アップロード可能な最大ファイルサイズを 100MB に設定したい場合は、/usr/local/etc/php/conf.d/upload.ini
ファイルを作成し、以下の内容を記述します。
upload_max_filesize = 100M
NGINX 設定のカスタマイズ
Zeabur の設定ファイルエディタを使用して、/etc/nginx/sites-enabled/default
パスに設定ファイルを作成し、Zeabur のデフォルトの NGINX 設定を上書きします。作成後、現在の NGINX 設定が自動的に取り込まれるため、それを基に編集できます。
たとえば、gzip
圧縮を無効にしたい場合は、テンプレートの gzip_static on;
を gzip_static off;
に変更します。
location / {
try_files $uri $uri/ /index.php$is_args$args;
gzip_static off;
}