Multe site-uri PHP trăiesc pe hosting partajat administrat prin cPanel. Laravel cere ca doar directorul `public` să fie servit de Apache sau LiteSpeed; restul proiectului trebuie să rămână în afara document root. Întrebarea adună capcanele frecvente la primul deploy, nu un manual exhaustiv al fiecărei opțiuni din panou.
Mută sau pointează domeniul către `.../proiect/public`, nu către rădăcina unde stă `.env`. Dacă hostul nu permite schimbarea root-ului, folosește un `.htaccess` la rădăcină care redirecționează spre `public`, cu atenție la bucle. Verifică că `index.php` din public găsește autoloaderul — path-urile relative diferă când structura e nestandardă. Fișierele `.env` și `composer.json` nu trebuie accesibile prin URL — un request direct către ele e semn de root greșit.
Utilizatorul web serverului trebuie să scrie în `storage/logs`, `storage/framework` și `bootstrap/cache`. `775` pe directoare și proprietar corect evită erori la cache config/routes/views. Nu seta `777` ca soluție permanentă — e un risc de securitate pe shared hosting. Link-ul simbolic `public/storage` se creează cu `artisan storage:link`; fără el, fișierele încărcate nu sunt servite. Log rotation prin cPanel sau logrotate previne umplerea discului când `storage/logs` crește neobservat.
Scheduler-ul Laravel necesită o intrare cron care rulează `schedule:run` each minute. Job-urile din coadă nu rulează singure — fie un worker long-running (rar pe shared), fie cron care pornește `queue:work --stop-when-empty` la interval. Mail-urile tranzacționale blocate în coadă fără worker par „bug-uri de aplicație” deși codul e corect. Calea absolută către PHP CLI în cron diferă de modul Apache — folosește `which php` sau path din MultiPHP.
Nu comite `.env`; pe server, restricționează permisiunile fișierului. Capturile de ecran pentru forum nu trebuie să conțină parole FTP sau chei API. Backup-ul prin cPanel salvează fișiere și DB, dar restore-ul Laravel cere atenție la path-uri și la versiunea PHP selectată în MultiPHP Manager. După restore, rulează migrări dacă backup-ul DB e mai vechi decât codul deployat.
Document root corect
Mută sau pointează domeniul către `.../proiect/public`, nu către rădăcina unde stă `.env`. Dacă hostul nu permite schimbarea root-ului, folosește un `.htaccess` la rădăcină care redirecționează spre `public`, cu atenție la bucle. Verifică că `index.php` din public găsește autoloaderul — path-urile relative diferă când structura e nestandardă. Fișierele `.env` și `composer.json` nu trebuie accesibile prin URL — un request direct către ele e semn de root greșit.
Permisiuni storage și bootstrap/cache
Utilizatorul web serverului trebuie să scrie în `storage/logs`, `storage/framework` și `bootstrap/cache`. `775` pe directoare și proprietar corect evită erori la cache config/routes/views. Nu seta `777` ca soluție permanentă — e un risc de securitate pe shared hosting. Link-ul simbolic `public/storage` se creează cu `artisan storage:link`; fără el, fișierele încărcate nu sunt servite. Log rotation prin cPanel sau logrotate previne umplerea discului când `storage/logs` crește neobservat.
Cron și cozi
Scheduler-ul Laravel necesită o intrare cron care rulează `schedule:run` each minute. Job-urile din coadă nu rulează singure — fie un worker long-running (rar pe shared), fie cron care pornește `queue:work --stop-when-empty` la interval. Mail-urile tranzacționale blocate în coadă fără worker par „bug-uri de aplicație” deși codul e corect. Calea absolută către PHP CLI în cron diferă de modul Apache — folosește `which php` sau path din MultiPHP.
Secrete și backup
Nu comite `.env`; pe server, restricționează permisiunile fișierului. Capturile de ecran pentru forum nu trebuie să conțină parole FTP sau chei API. Backup-ul prin cPanel salvează fișiere și DB, dar restore-ul Laravel cere atenție la path-uri și la versiunea PHP selectată în MultiPHP Manager. După restore, rulează migrări dacă backup-ul DB e mai vechi decât codul deployat.