Laravel
Apa yang dideteksi Zenavo
Repositori dengan composer.json (atau index.php) dibangun dengan zbpack sebagai PHP, dan laravel/framework di composer.json menandainya sebagai Laravel. Image-nya adalah php:<version>-fpm resmi dengan nginx di depannya, mendengarkan di port 8080:
| Langkah | Yang terjadi |
|---|---|
| Versi PHP | ZBPACK_PHP_VERSION; jika tidak ada, runtime Laravel Sail di docker-compose.yml; jika tidak ada, require.php di composer.json; 8 bila tidak ada sama sekali |
| Ekstensi | apcu, bcmath, gd, intl, mysqli, opcache, pcntl, pdo_mysql, sysvsem, dan zip, ditambah setiap ext-* di composer.json (tambahkan "ext-pdo_pgsql": "*" untuk PostgreSQL) |
| Instal | composer install --optimize-autoloader --classmap-authoritative --no-dev, dan npm install bila ada package.json (Node.js 22) |
| Optimasi | php artisan optimize, config:cache, event:cache, route:cache, view:cache, lalu npm run build jika package.json punya skrip build |
| Penyajian | nginx menyajikan public/ dan meneruskan PHP ke php-fpm |
Pengaturan untuk Laravel
Langkah optimasi berjalan saat build, dan build tidak mendapat variabel layanan (Rencana Build). config:cache akan menyimpan konfigurasi tanpa database dan APP_KEY Anda, lalu Laravel mengabaikan variabel saat runtime. Matikan optimasi saat build dan jalankan saat layanan mulai. Di 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_COMMANDmembangun aset Vite, yang sebenarnya dikerjakan langkah optimasi. Hilangkan bila aplikasi tidak punya build front-end._startupmenjalankan nginx dan php-fpm; harus berada paling akhir.php artisan optimizemenyimpan cache konfigurasi, route, event, dan view dengan variabel layanan, dan migrasi berjalan sebelum aplikasi mulai melayani, karena build tidak bisa menjangkau database.
Variabel
Di tab Variable layanan:
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}- Buat
APP_KEYsekali denganphp artisan key:generate --showdi komputer Anda, lalu simpan: menggantinya akan mengeluarkan semua orang dan membuat data terenkripsi tidak terbaca. LOG_CHANNEL=stderrmengirim log Laravel ke Runtime Logs alih-alih ke file di kontainer, yang hilang di setiap deploy.APP_URLmemakai domain port bernamaweb; gunakan nama yang tampil di tab Networking.- Untuk MySQL, gunakan
DB_CONNECTION=mysqldanDB_URL=${MYSQL_CONNECTION_STRING}. Laravel membacaDB_URLsejak versi 11; versi lama memakaiDATABASE_URL. - Redis untuk cache, sesi, dan antrean:
REDIS_URL=${REDIS_CONNECTION_STRING},CACHE_STORE=redis,SESSION_DRIVER=redis.
Deploy
- Tambahkan PostgreSQL (atau MySQL) ke proyek (Database).
- Add Service → GitHub, pilih repositori dan branch, tambahkan variabel di atas, lalu klik Next.
- Pastikan pratinjau menampilkan php, lalu klik Deploy. Atur opsi zbpack di atas di Settings → Build lalu deploy ulang.
- Buat domain atau pasang domain Anda sendiri di tab Networking.
File dan antrean
- Unggahan di
storage/apphilang di setiap deploy. Simpan di penyimpanan yang kompatibel dengan S3 (FILESYSTEM_DISK=s3dengan variabelAWS_*). - Worker antrean dan scheduler berjalan sebagai layanan terpisah dari repositori yang sama: tambahkan repositori itu lagi dengan perintah start
php artisan queue:work(atauphp artisan schedule:work) diZBPACK_START_COMMAND, dan tanpa port HTTP.
Masalah umum
| Gejala | Penyebab |
|---|---|
No application encryption key has been specified | APP_KEY tidak ada, atau konfigurasi di-cache saat build. Atur APP_KEY dan ZBPACK_PHP_OPTIMIZE=false. |
Aplikasi memakai SQLite atau localhost alih-alih database | Konfigurasi di-cache saat build, tanpa variabel. Atur ZBPACK_PHP_OPTIMIZE=false dan jalankan php artisan optimize saat start. |
could not find driver | Ekstensi PDO tidak ada. Tambahkan "ext-pdo_pgsql": "*" ke require di composer.json. |
| CSS dan JavaScript mengembalikan 404 | Build Vite tidak berjalan. Atur ZBPACK_BUILD_COMMAND=npm run build. |
Tautan dan redirect memakai http:// | Laravel tidak memercayai proxy di depannya. Percayai di bootstrap/app.php dengan $middleware->trustProxies(at: '*'). |