Langsung ke konten

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:

LangkahYang terjadi
Versi PHPZBPACK_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
Ekstensiapcu, bcmath, gd, intl, mysqli, opcache, pcntl, pdo_mysql, sysvsem, dan zip, ditambah setiap ext-* di composer.json (tambahkan "ext-pdo_pgsql": "*" untuk PostgreSQL)
Instalcomposer install --optimize-autoloader --classmap-authoritative --no-dev, dan npm install bila ada package.json (Node.js 22)
Optimasiphp artisan optimize, config:cache, event:cache, route:cache, view:cache, lalu npm run build jika package.json punya skrip build
Penyajiannginx 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 && _startup
  • ZBPACK_BUILD_COMMAND membangun aset Vite, yang sebenarnya dikerjakan langkah optimasi. Hilangkan bila aplikasi tidak punya build front-end.
  • _startup menjalankan nginx dan php-fpm; harus berada paling akhir. php artisan optimize menyimpan 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_KEY sekali dengan php artisan key:generate --show di komputer Anda, lalu simpan: menggantinya akan mengeluarkan semua orang dan membuat data terenkripsi tidak terbaca.
  • LOG_CHANNEL=stderr mengirim log Laravel ke Runtime Logs alih-alih ke file di kontainer, yang hilang di setiap deploy.
  • APP_URL memakai domain port bernama web; gunakan nama yang tampil di tab Networking.
  • Untuk MySQL, gunakan DB_CONNECTION=mysql dan DB_URL=${MYSQL_CONNECTION_STRING}. Laravel membaca DB_URL sejak versi 11; versi lama memakai DATABASE_URL.
  • Redis untuk cache, sesi, dan antrean: REDIS_URL=${REDIS_CONNECTION_STRING}, CACHE_STORE=redis, SESSION_DRIVER=redis.

Deploy ​

  1. Tambahkan PostgreSQL (atau MySQL) ke proyek (Database).
  2. Add Service → GitHub, pilih repositori dan branch, tambahkan variabel di atas, lalu klik Next.
  3. Pastikan pratinjau menampilkan php, lalu klik Deploy. Atur opsi zbpack di atas di Settings → Build lalu deploy ulang.
  4. Buat domain atau pasang domain Anda sendiri di tab Networking.

File dan antrean ​

  • Unggahan di storage/app hilang di setiap deploy. Simpan di penyimpanan yang kompatibel dengan S3 (FILESYSTEM_DISK=s3 dengan variabel AWS_*).
  • Worker antrean dan scheduler berjalan sebagai layanan terpisah dari repositori yang sama: tambahkan repositori itu lagi dengan perintah start php artisan queue:work (atau php artisan schedule:work) di ZBPACK_START_COMMAND, dan tanpa port HTTP.

Masalah umum ​

GejalaPenyebab
No application encryption key has been specifiedAPP_KEY tidak ada, atau konfigurasi di-cache saat build. Atur APP_KEY dan ZBPACK_PHP_OPTIMIZE=false.
Aplikasi memakai SQLite atau localhost alih-alih databaseKonfigurasi di-cache saat build, tanpa variabel. Atur ZBPACK_PHP_OPTIMIZE=false dan jalankan php artisan optimize saat start.
could not find driverEkstensi PDO tidak ada. Tambahkan "ext-pdo_pgsql": "*" ke require di composer.json.
CSS dan JavaScript mengembalikan 404Build 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: '*').

Tidak berafiliasi dengan Zeabur.