PHP プロジェクトのデプロイ

Zeabur は、従来の複数ファイル PHP プロジェクトや index.php をエントリポイントとするプロジェクトの他、LaravelSymfony、ThinkPHP、CodeIgniter などのフレームワークをワンクリックでデプロイすることもサポートしています。

PHP 環境

Zeabur は、デフォルトで PHP 8 の最新バージョンと NGINX + php-fpm サーバーを使用してコードを実行します。

Zeabur の PHP 環境には Composer、apcubcmathgdintlmysqliopcachepcntlpdo_mysqlsysvsemzip などの PHP 拡張モジュールが組み込まれています。さらに、composer.jsonext- で始まる他の拡張モジュールが記載されている場合、Zeabur は自動的に対応するモジュールをインストールします。それ以外にも、Node.js、Crontab、cURL、gettext、Git、grep、pkg-config、unzip などのツールがデフォルトでインストールされます。

Zeabur はデフォルトで環境変数 APP_ENV=prodAPP_DEBUG=true をアプリケーションに適用しますが、Zeabur コンソールの「環境変数」セクションでこれらを手動で上書きすることができます。

完全なベースイメージ設定については、zbpack のコードリポジトリ を参照してください。

NPM サポート

プロジェクトに package.json が含まれている場合、Zeabur は npm install を実行して依存関係をインストールします。

また、package.jsonbuild スクリプトがある場合、Zeabur は自動的に npm run build を実行して成果物をビルドします。

カスタムビルドおよび起動コマンド

Zeabur では、環境変数または設定ファイルを使用して PHP のビルドおよび起動コマンドをカスタマイズできます。

「ビルドコマンド」は、CSS や JavaScript などのカスタム成果物をダウンロードまたはビルドしたり、設定ファイルを構成する必要がある状況に適しています。たとえば、/etc ディレクトリに設定ファイルを書き込みたい場合、環境変数を設定できます。

ZBPACK_BUILD_COMMAND=echo 'your-configuration' > /etc/somewhere

または、zbpack.json に以下の設定を追加します。

zbpack.json
{
    "build_command": "echo 'your-configuration' > /etc/somewhere"
}

ここで、他の npm コマンドを実行することも可能です。

zbpack.json
{
    "build_command": "npm run build:dist"
}

ビルドコマンドは、Zeabur の既存のビルドプロセスには影響を与えません。そのため、Zeabur がデフォルトで実行するコマンドを手動で再指定する必要はありません。

「起動コマンド」は、PHP サーバーを起動する際に実行するコマンドに適しています。たとえば、php artisan migrate を追加してデータベースのテーブルを作成する場合、以下のように環境変数を設定できます。

ZBPACK_START_COMMAND="php artisan migrate && _startup"

または、zbpack.json に以下の設定を追加します。

zbpack.json
{
    "start_command": "php artisan migrate && _startup"
}

注意:継続的に実行する必要があるサービスの場合、起動コマンドを () で囲み、& を使用してタスクをバックグラウンドで実行する必要があります:

ZBPACK_START_COMMAND="(php artisan reverb:start &); _startup"

または、

zbpack.json
{
    "start_command": "(php artisan reverb:start &); _startup"
}

ここで、_startup は Zeabur のデフォルトの起動コマンドです(zbpack で確認可能)。カスタム start_command を設定する場合、_startup を必ず含める必要があります。含めない場合、PHP サーバーが起動しません。

build_commandstart_command は、POSIX 互換のシェルで実行されるため、&& を使用して複数のコマンドを接続したり、; を使用して複数のコマンドを区切ることができます。

複雑な起動コマンドの処理方法

起動コマンドが複雑な場合(たとえば、スケジュールタスクの設定や複数のサービスの起動など)、start_command が複雑になり、デバッグが困難になる可能性があります。これらのコマンドを Config Editor を使用してスクリプトにまとめることをお勧めします。例えば worker.sh のように:

worker.sh
#!/usr/bin/env bash
 
php artisan migrate
php artisan queue:work &
# その他のコマンド

そして、start_command でこのスクリプトを実行します:

zbpack.json
{
    "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.jsonrequire に PHP バージョンの範囲を指定します。

composer.json
{
    "require": {
        "php": "7.4"
    }
}

上記の例では、Zeabur は PHP 7.4 の最新パッチバージョンを使用してプロジェクトを実行します。

composer.json
{
    "require": {
        "php": "^7.4"
    }
}

この場合、Zeabur は PHP 7 の最新マイナーバージョンを使用します。

Laravel Sail

プロジェクトが Laravel Sail を使用している場合、Zeabur は docker-compose.yml で定義された PHP バージョンを自動的に検出して使用します。

Laravel Sail の Docker Compose 定義

zbpack 設定

Laravel Sail や Composer を使用していない場合でも、PHP バージョンを変更したい場合は、ZBPACK_PHP_VERSION 環境変数を使用できます。

ZBPACK_PHP_VERSION=8.0

または、zbpack.json に以下の設定を追加します。

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 ファイルを作成し、以下の内容を記述します。

/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; に変更します。

/etc/nginx/sites-enabled/default
location / {
    try_files $uri $uri/ /index.php$is_args$args;
    gzip_static off;
}