Cara Deploy Aplikasi Laravel pada Shared Hosting: Panduan Lengkap

Deploy aplikasi Laravel pada shared hosting boleh jadi mencabar, terutamanya bila anda guna cPanel, kebenaran server terhad, atau persekitaran tanpa akses SSH penuh.

Walaupun VPS dan cloud hosting lebih fleksibel, shared hosting tetap pilihan praktikal dan mampu milik untuk banyak laman web, perniagaan kecil, dan projek klien.

Dalam panduan ini, saya akan pandu anda melalui langkah penting untuk deploy aplikasi Laravel pada shared hosting, daripada menyediakan projek, mengkonfigurasi database, mengoptimumkan prestasi, hinggalah mengelakkan kesilapan deployment yang biasa.

1. Semak Keperluan Hosting Anda

Sebelum upload projek Laravel anda, pastikan penyedia hosting menyokong keperluan versi Laravel tertentu yang anda deploy.

Biasanya anda perlukan:

  • Versi PHP yang serasi dan extension PHP yang diperlukan
  • MySQL, MariaDB, atau database lain yang disokong
  • Composer atau keupayaan untuk upload dependencies yang telah dipasang
  • Apache dengan URL rewriting diaktifkan, atau konfigurasi web server yang serupa
  • Akses File Manager atau FTP
  • Akses SSH (disyorkan tetapi tidak semestinya diperlukan)
  • Cron Jobs (jika aplikasi anda guna tugas berjadual)

Sentiasa semak dokumentasi rasmi Laravel untuk versi yang anda deploy.

2. Sediakan Projek Laravel Anda

Sebelum deployment, pastikan aplikasi berfungsi dengan betul dalam persekitaran lokal anda.

Jika projek anda guna Vite untuk compile frontend assets, jalankan:

npm ci
npm run build

Ia menghasilkan fail CSS dan JavaScript yang siap untuk production, biasanya dalam public/build.

Pastikan fail yang dijana itu disertakan dalam deployment anda.

Penting: Jangan sesekali guna npm run dev sebagai strategi aset production. Vite development server memang untuk pembangunan lokal.

3. Upload Projek Anda dengan Selamat

Salah satu aspek paling penting dalam deployment Laravel ialah memilih document root yang betul.

Web entry point Laravel terletak di dalam direktori public.

Struktur direktori yang disyorkan lebih kurang seperti ini:

/home/username/
laravel-app/
app/
bootstrap/
config/
database/
public/
index.php
.htaccess
build/
resources/
routes/
storage/
vendor/
.env

Domain anda perlu menunjuk terus ke:

/home/username/laravel-app/public

Ini memastikan fail Laravel yang sensitif berada di luar direktori yang boleh diakses umum.

Jika penyedia hosting anda membenarkan anda tukar document root dalam cPanel, konfigurasikan supaya menunjuk ke folder public.

Bagaimana jika domain utama anda terkunci pada public_html?

Sesetengah pelan shared hosting tidak membenarkan anda menukar document root domain utama.

Dalam keadaan itu, alternatifnya ialah menyimpan aplikasi di luar public_html, menyalin hanya kandungan direktori public Laravel ke public_html, dan mengemas kini laluan bootstrap dalam index.php supaya sepadan dengan struktur direktori sebenar.

Anda juga mesti memastikan aset awam dan pautan storage menunjuk ke lokasi yang betul.

Jangan sekali-kali memuat naik seluruh projek Laravel anda ke direktori yang boleh diakses umum tanpa melindunginya dengan betul.

4. Pasang Dependencies Composer

Jika akses SSH tersedia, pergi ke direktori projek Laravel anda:

cd /home/username/laravel-app

Pasang dependencies untuk production:

composer install --no-dev --optimize-autoloader

Ini akan memasang dependencies daripada lock file anda tanpa pakej development.

Jika hosting provider anda tidak menyokong Composer, mungkin anda perlu menyediakan dependencies yang serasi dalam persekitaran lain dan memuat naik vendor directory yang dijana.

Pastikan dependencies itu serasi dengan versi PHP yang berjalan pada hosting server anda.

5. Konfigurasi Fail Environment Anda

Buat fail .env production anda di root aplikasi Laravel, di luar document root web.

Konfigurasi tipikal biasanya seperti ini:

APP_NAME="My Laravel App"
APP_ENV=production
APP_DEBUG=false
APP_URL=https://example.com

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=your_database
DB_USERNAME=your_username
DB_PASSWORD=your_password

Gantikan nilai contoh ini dengan konfigurasi hosting sebenar anda.

Pastikan juga aplikasi anda mempunyai APP_KEY yang sah.

Untuk aplikasi baharu sepenuhnya, anda boleh menjana satu dengan:

php artisan key:generate

Jangan sekali-kali menjana semula application key semasa mengedarkan aplikasi sedia ada yang sudah menggunakan penyulitan. Melakukannya boleh menjadikan data tersulit dan sesi tidak sah.

Dua tetapan production yang penting ialah:

APP_ENV=production
APP_DEBUG=false

Membiarkan mod debug aktif dalam production boleh mendedahkan maklumat aplikasi yang sensitif.

Jangan sekali-kali commit fail .env production anda ke Git.

6. Tetapkan Database Anda

Buka cPanel dan pergi ke bahagian pengurusan database.

Bergantung pada hosting provider anda, mungkin anda perlu:

  1. Buat database MySQL baharu.
  2. Buat pengguna database.
  3. Kaitkan pengguna itu dengan database.
  4. Beri kebenaran yang diperlukan.
  5. Kemas kini konfigurasi .env anda.

Jika anda mengedarkan aplikasi sedia ada, import backup database menggunakan phpMyAdmin atau alat pengurusan database lain.

Untuk aplikasi yang menggunakan Laravel migrations, jalankan:

php artisan migrate --force

Dengan flag –force, migration boleh berjalan dalam production tanpa pengesahan interaktif.

Sentiasa backup database anda sebelum menjalankan migration di production.

Elakkan command merosakkan seperti migrate:fresh pada aplikasi live.

7. Konfigurasi Kebenaran Direktori

Laravel perlukan akses tulis kepada dua direktori penting:

storage/
bootstrap/cache/

Kebenaran yang tepat bergantung pada persekitaran hosting anda serta pemilikan proses PHP.

Konfigurasi biasa menggunakan kebenaran direktori seperti 755 atau 775, selagi proses yang berkaitan mempunyai akses tulis.

Elakkan menetapkan keseluruhan projek Laravel anda kepada 777.

Jika anda mengalami ralat yang melibatkan log, session, caching, atau compiled views, semak dahulu pemilikan dan kebenaran direktori-direktori ini.

8. Buat Storage Link

Jika aplikasi anda menyimpan fail public menggunakan public disk Laravel, jalankan:

php artisan storage:link

Ini biasanya akan mencipta symbolic link:

public/storage
-> storage/app/public

Sesetengah penyedia shared hosting mengehadkan symbolic links.

Jika command ini gagal, semak sama ada persekitaran hosting anda menyokongnya dan sahkan konfigurasi direktori public anda.

Jika anda menggunakan struktur deployment public_html yang diubah suai, pastikan storage link dicipta dalam web document root sebenar.

9. Optimize Laravel untuk Production

Laravel menyediakan beberapa command optimization bawaan.

Untuk deployment production, jalankan:

php artisan optimize:clear
php artisan optimize

Command optimize akan cache configuration, routes, events, dan views yang berkenaan untuk mengurangkan kerja tidak perlu semasa request.

Anda juga boleh jalankan command berasingan bila sesuai:

php artisan config:cache
php artisan route:cache
php artisan view:cache

Satu perkara untuk diingatkan: selepas cache configuration, anda tidak sepatutnya bergantung pada panggilan env() secara terus daripada application code di luar fail configuration.

Gunakan helper config() Laravel sebagai gantinya.

10. Konfigurasi Laravel Scheduler

Jika aplikasi anda menggunakan command berjadual, anda perlu tetapkan Cron Job.

Buka cPanel dan pergi ke Cron Jobs.

Entri scheduler yang biasa kelihatan seperti ini:

* * * * * cd /home/username/laravel-app && /usr/bin/php artisan schedule:run >> /dev/null 2>&1

Gantikan path dengan path projek dan PHP executable yang betul pada server anda.

Ini akan menjalankan scheduler Laravel setiap minit.

Task berjadual anda selepas itu boleh ditakrifkan dalam Laravel tanpa perlu cipta cron entry berasingan untuk setiap task.

Perhatikan bahawa sesetengah penyedia shared hosting mengehadkan frekuensi minimum cron.

Untuk aplikasi yang sangat bergantung pada worker queue yang berjalan berterusan, WebSockets, atau proses yang berjalan lama, VPS atau penyelesaian hosting Laravel terurus mungkin lebih sesuai.

11. Masalah Lazim Deployment Laravel

Berikut ialah beberapa isu biasa yang mungkin anda hadapi.

500 Internal Server Error

Antara punca yang mungkin ialah:

  • Versi PHP tidak betul atau extension tidak ada
  • Dependency Composer tidak ada
  • Konfigurasi environment tidak sah
  • Kebenaran fail tidak betul
  • Document root tidak betul
  • Masalah konfigurasi web server

Mulakan dengan menyemak log aplikasi dan log ralat hosting anda.

CSS dan JavaScript Tidak Dimuatkan

Jika aplikasi anda dimuatkan tetapi kelihatan rosak, periksa sama ada aset produksi Vite dimuat naik dengan betul.

Jalankan:

npm run build

Kemudian deploy aset yang dijana.

Pastikan juga web server anda boleh mengakses direktori public/build dan tiada konfigurasi development-server Vite lama yang masih tertinggal pada produksi.

Imej Tidak Dipaparkan

Semak disk filesystem yang dikonfigurasi, lokasi fail yang dimuat naik, dan pautan public storage.

Untuk aplikasi yang menggunakan public disk Laravel, pautan storage selalunya ialah bahagian yang tertinggal.

Routes Laravel Kembalikan 404

Jika halaman utama berfungsi tetapi routes lain mengembalikan ralat 404, pastikan:

  • Domain menunjuk ke direktori public yang betul.
  • Apache rewrite rules diaktifkan.
  • public/.htaccess Laravel wujud apabila menggunakan Apache.
  • Web server anda menghantar permintaan aplikasi ke index.php.

Perubahan Tidak Muncul

Konfigurasi atau views aplikasi yang di-cache mungkin menjelaskan mengapa perubahan terkini tidak kelihatan.

Selepas menyemak deployment anda, kosongkan dan bina semula cache yang berkenaan.

12. Senarai Semak Akhir Deployment

Sebelum menganggap deployment Laravel anda selesai, pastikan perkara berikut:

  • [ ] Domain menunjuk ke direktori public yang betul.
  • [ ] Mod debug produksi dimatikan.
  • [ ] Fail konfigurasi sensitif tidak boleh diakses secara awam.
  • [ ] Dependency Composer dipasang.
  • [ ] Ketersambungan database berfungsi.
  • [ ] Migration telah diterapkan dengan selamat.
  • [ ] Aset produksi frontend tersedia.
  • [ ] Direktori yang diperlukan boleh ditulis.
  • [ ] Public file storage berfungsi.
  • [ ] Tugas terjadual dikonfigurasi apabila diperlukan.
  • [ ] HTTPS diaktifkan.
  • [ ] Log aplikasi tidak menunjukkan ralat tidak dijangka.
  • [ ] Pengesahan, borang, muat naik, dan ciri aplikasi kritikal telah diuji.

Fikiran akhir

Shared hosting bukan penyelesaian sempurna untuk setiap projek Laravel, tapi ia boleh jadi pilihan yang boleh dipercayai dan mampu milik untuk aplikasi yang lebih kecil jika dikonfigurasi dengan betul.

Yang paling penting ialah menjaga keselamatan fail aplikasi, mengarahkan domain ke direktori public yang betul, menggunakan aset yang siap untuk produksi, dan mengekalkan proses deployment yang boleh dijangka.

Apabila aplikasi anda semakin berkembang, anda boleh pertimbangkan untuk berpindah ke VPS, hosting Laravel terurus, atau platform cloud yang memberi kawalan lebih baik terhadap queue, worker, scaling, dan deployment automatik.

Tentang Penulis

Saya Fares Youssef, seorang Full-Stack Developer yang pakar dalam Laravel, PHP, React, REST APIs, dan aplikasi web tersuai.

Saya suka membina penyelesaian perisian yang praktikal dan berkongsi ilmu tentang pembangunan web.

Anda boleh terokai kerja dan projek saya di laman web peribadi saya.

Rujukan:

  • Dokumentasi Deployment Laravel
  • Dokumentasi Laravel Vite
  • Penjadualan Tugas Laravel
  • Penyimpanan Fail Laravel

Pernahkah anda deploy Laravel pada shared hosting? Kongsi cabaran yang anda hadapi dalam ruangan komen!


Sumber Rujukan:

  • Artikel asal: Dev.to PHP
  • Diterjemah daripada artikel asal ke Bahasa Melayu oleh AI Editorial – haqis.com
Comments

Similar Posts