本文へスキップ

Laravel ​

Zenavo が検出する内容 ​

composer.json(または index.php)があるリポジトリは zbpack で PHP としてビルドされ、composer.json に laravel/framework があれば Laravel と判断されます。イメージは公式の php:<version>-fpm に nginx を前段に置いたもので、ポート 8080 で待ち受けます。

ステップ内容
PHP のバージョンZBPACK_PHP_VERSION、なければ docker-compose.yml の Laravel Sail ランタイム、なければ composer.json の require.php。どれもなければ 8
拡張apcu、bcmath、gd、intl、mysqli、opcache、pcntl、pdo_mysql、sysvsem、zip と、composer.json のすべての ext-*(PostgreSQL なら "ext-pdo_pgsql": "*" を追加)
インストールcomposer install --optimize-autoloader --classmap-authoritative --no-dev。package.json があれば npm install(Node.js 22)
最適化php artisan optimize、config:cache、event:cache、route:cache、view:cache、package.json に build スクリプトがあれば npm run build
配信nginx が public/ を配信し、PHP を php-fpm に渡します

Laravel 向けの設定 ​

最適化はビルド中に実行されますが、ビルドにはサービスの変数が渡りません(ビルドプラン)。config:cache はデータベースや APP_KEY のない設定をキャッシュし、Laravel は実行時に変数を無視するようになります。ビルド時の最適化をオフにし、サービスの起動時に実行してください。Settings → Build → zbpack options で:

sh
ZBPACK_PHP_OPTIMIZE=false
ZBPACK_BUILD_COMMAND=npm run build
ZBPACK_START_COMMAND=php artisan migrate --force && php artisan optimize && _startup
  • ZBPACK_BUILD_COMMAND は、本来最適化ステップが行う Vite アセットのビルドを行います。フロントエンドのビルドがないアプリなら不要です。
  • _startup は nginx と php-fpm を起動するもので、最後に置く必要があります。php artisan optimize はサービスの変数で設定、ルート、イベント、ビューをキャッシュします。ビルドからはデータベースに届かないので、マイグレーションはアプリが配信を始める前に実行します。

変数 ​

サービスの Variable タブで:

sh
APP_KEY=base64:…
APP_ENV=production
APP_DEBUG=false
APP_URL=${ZENAVO_WEB_URL}
LOG_CHANNEL=stderr
DB_CONNECTION=pgsql
DB_URL=${POSTGRESQL_CONNECTION_STRING}
  • APP_KEY は手元で php artisan key:generate --show を実行して一度だけ作り、保管してください。変えると全員がログアウトされ、暗号化したデータが読めなくなります。
  • LOG_CHANNEL=stderr にすると、Laravel のログがデプロイごとに消えるコンテナ内のファイルではなく、Runtime Logs に送られます。
  • APP_URL は web という名前のポートのドメインを使います。Networking タブに表示される名前を使ってください。
  • MySQL なら DB_CONNECTION=mysql と DB_URL=${MYSQL_CONNECTION_STRING}。DB_URL を読むのは Laravel 11 からで、それより前は DATABASE_URL です。
  • キャッシュ、セッション、キューに Redis を使うなら:REDIS_URL=${REDIS_CONNECTION_STRING}、CACHE_STORE=redis、SESSION_DRIVER=redis。

デプロイ ​

  1. プロジェクトに PostgreSQL(または MySQL)を追加します(データベース)。
  2. Add Service → GitHub でリポジトリとブランチを選び、上の変数を追加して Next をクリックします。
  3. プレビューに php と表示されていることを確認して Deploy をクリックします。Settings → Build で上の zbpack のオプションを設定し、再デプロイします。
  4. Networking タブでドメインを生成するか、自分のドメインを設定します。

ファイルとキュー ​

  • storage/app のアップロードはデプロイのたびに消えます。S3 互換のストレージに保存してください(FILESYSTEM_DISK=s3 と AWS_* の変数)。
  • キューワーカーとスケジューラーは、同じリポジトリから別のサービスとして動かします。リポジトリをもう一度追加し、ZBPACK_START_COMMAND で起動コマンドを php artisan queue:work(または php artisan schedule:work)にし、HTTP ポートは設定しません。

よくある問題 ​

症状原因
No application encryption key has been specifiedAPP_KEY がないか、設定がビルド中にキャッシュされています。APP_KEY と ZBPACK_PHP_OPTIMIZE=false を設定してください。
データベースではなく SQLite や localhost を使ってしまう設定が変数のないビルド中にキャッシュされています。ZBPACK_PHP_OPTIMIZE=false にし、起動時に php artisan optimize を実行してください。
could not find driverPDO 拡張がありません。composer.json の require に "ext-pdo_pgsql": "*" を追加してください。
CSS と JavaScript が 404Vite のビルドが実行されていません。ZBPACK_BUILD_COMMAND=npm run build を設定してください。
リンクやリダイレクトが http:// になるLaravel が前段のプロキシを信頼していません。bootstrap/app.php で $middleware->trustProxies(at: '*') を設定してください。

Zeabur とは関係ありません。