Sviluppare un'applicazione web con Laravel è un'esperienza gratificante. Tuttavia, il deploy su un hosting condiviso può risultare complicato, soprattutto se non si ha un accesso SSH a disposizione. In questo articolo, vi mostro la procedura che ho seguito: magari può essere utile a qualcun altro.
P.S. Se avete disponibile l'accesso SSH, vi consiglio di seguire invece questa guida del mio amico Marco Lancellotti.
Premessa
Lo spazio hosting messo a disposizione dal cliente è uno spazio condiviso con pannello di controllo cPanel, senza accesso SSH, con una struttura "rigida" e predefinita delle cartelle, in cui la cartella pubblica sia chiama public_html e non può essere rinominata.
Le cartelle del progetto
Lo scaffold standard di un progetto Laravel ha in genere questo aspetto:
e quindi come primo step è stato necessario rinominare la cartella public in public_html
Per separare la cartella pubblica dal resto, ho creato una nuova cartella laravel_core, spostandoci dentro tutto il resto:
Le modifiche ai file
La modifica alla struttura delle cartelle del progetto ha comportato la necessità di modificare alcuni riferimenti anche nei file.
Nel file index.php presente nella cartella pubblica public_html ho modificato le righe
in
Modifichiamo quindi il file AppServiceProvider.php presente in laravel_core\app\Providers integrando la funzione register in questo modo:
Il mio progetto prevede l'utilizzo di Vite, quindi è stato necessario intervenire anche sul file vite.config.js nella cartella laravel_core, parametrizzando la cartella pubblica
Le modiche principali sono terminate e si possono testare avviando il progetto nel solito modo (attenzione, i comandi composer, npm e artisan vanno lanciati dalla cartella laravel_core):
E i link simbolico ?
Nota per Laravel 10
Se state usando Laravel 10 (grazie al mio amico Umberto per la segnalazione), la modifica per il link simbolico non risulta necessaria, ma occorre una modifica al file app.php presente in laravel_core\bootstrap aggiungendo la seguente riga
$app->usePublicPath(realpath(base_path('/../public_html')));
immediatamente dopo la definizione della variabile $app.
Nota per Laravel 11
Se state usando Laravel 11, la modifica al file app.php presente in laravel_core\bootstrap è questa:
$app = Application::configure(basePath: dirname(__DIR__)) ->withRouting( web: __DIR__ . '/../routes/web.php', api: __DIR__ . '/../routes/api.php', commands: __DIR__ . '/../routes/console.php', health: '/up', ) ->withMiddleware(function (Middleware $middleware) { $middleware->statefulApi(); }) ->withExceptions(function (Exceptions $exceptions) { // })->create();
$app->usePublicPath(realpath(base_path('/../public_html')));
return $app;
Carichiamo i file nello spazio
La configurazione finale
In questo modo, basterà visitare questa rotta per avviare i comandi di base (e con una procedura simile sarà possibile avviare in seguito anche eventuali migrazioni di aggiornamento).
Chiaramente la rotta va rimossa dopo l'utilizzo.
Conclusioni
Con un po' di attenzione ai dettagli, è possibile deployare un progetto Laravel su un hosting condiviso senza accesso SSH. Seguendo le istruzioni di questo articolo, anche voi sarete in grado di mettere online il vostro sito web in pochissimo tempo.
Commenti
Posta un commento