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 && _startupZBPACK_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。
デプロイ
- プロジェクトに PostgreSQL(または MySQL)を追加します(データベース)。
- Add Service → GitHub でリポジトリとブランチを選び、上の変数を追加して Next をクリックします。
- プレビューに php と表示されていることを確認して Deploy をクリックします。Settings → Build で上の zbpack のオプションを設定し、再デプロイします。
- 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 specified | APP_KEY がないか、設定がビルド中にキャッシュされています。APP_KEY と ZBPACK_PHP_OPTIMIZE=false を設定してください。 |
データベースではなく SQLite や localhost を使ってしまう | 設定が変数のないビルド中にキャッシュされています。ZBPACK_PHP_OPTIMIZE=false にし、起動時に php artisan optimize を実行してください。 |
could not find driver | PDO 拡張がありません。composer.json の require に "ext-pdo_pgsql": "*" を追加してください。 |
| CSS と JavaScript が 404 | Vite のビルドが実行されていません。ZBPACK_BUILD_COMMAND=npm run build を設定してください。 |
リンクやリダイレクトが http:// になる | Laravel が前段のプロキシを信頼していません。bootstrap/app.php で $middleware->trustProxies(at: '*') を設定してください。 |