Indice dei Contenuti
È arrivato il momento di pubblicare online la tua applicazione Laravel! Che si tratti del tuo sito personale o di un progetto web sviluppato per un amico, un conoscente o un familiare, non sempre c’è bisogno di soluzioni complesse e costose come VPS o servizi cloud completamente gestiti.
In questa guida pratica ti accompagnerò, passo dopo passo, nel processo di pubblicazione del tuo progetto Laravel su provider che offrono piani di hosting condiviso economici gestiti tramite cPanel. Una soluzione ideale per chi cerca un approccio semplice ed efficace al web hosting.
Provider e Hosting: Cosa sono e come sceglierli
Mi piacerebbe tanto parlarvi di un fantomatico provider a costo zero, ma purtroppo non esistono spazi web affidabili e soprattutto gratuiti.
La soluzione definitiva per la pubblicazione online del nostro progetto Laravel è quella di acquistare un servizio di hosting (Spazio Web) presso un Provider (Fornitore di Servizi).
Questi fornitori di servizi offrono uno spazio web su server potenti e accessibili da chiunque in tutto il mondo. In base alle necessita e alla portata del progetto ci sono varie modalità e range di pagamento.
Tipologia di Hosting
Come spiegato poco sopra, esistono diversi tipi di Hosting:
- Hosting Condiviso
- VPS
- Hosting Dedicato
- Cloud Hosting
In questa guida vedremo solamente la categoria degli Hosting Condivisi.
È sempre una buona idea leggere recensioni, confrontare le caratteristiche tecniche e, se possibile, testare il servizio con un periodo di prova prima di impegnarsi a lungo termine.
Tuttavia, è sempre consigliabile fare una ricerca approfondita e confrontare diverse opzioni prima di prendere una decisione.
Scelta del Provider
Per effettuare il deploy corretto di un progetto Laravel, avremo bisogno di un provider in grado di offrirci uno spazio web con le seguenti caratteristiche essenziali ed obbligatorie:
- Server in Europa: Per rispettare la direttiva GDPR e garantire una migliore latenza per gli utenti europei;
- Dominio: Possibilità di registrare un nuovo dominio o trasferire uno esistente;
- Certificato SSL: Per garantire connessioni sicure e migliorare il posizionamento SEO;
- Memoria e spazio di archiviazione adeguati: Per gestire efficacemente le risorse del progetto Laravel;
- Database MySQL o MariaDB: Compatibili con Laravel e ottimizzati per le prestazioni;
- Accesso SSH: Per una gestione avanzata del server e l’utilizzo di strumenti come Git e Composer;
- Processi Cron: Per eseguire task pianificati e automatizzare operazioni di manutenzione;
-
PHP configurabile:
- Supporto a FastCGI per migliori prestazioni
- Accesso al php.ini per personalizzazioni avanzate
- Possibilità di aggiungere/rimuovere estensioni PHP
- Opzione di aggiornamento manuale di PHP
Ed eventualmente queste opzioni:
- Supporto per Node.js e NPM: Utile per la gestione di asset frontend e l’utilizzo di strumenti come Vite;
- Backup automatici: Per proteggere i dati del progetto da perdite accidentali;
- Redis: Per gestire al meglio queue, sessioni e cache.
Ricordate che la scelta del provider dovrebbe basarsi non solo sul prezzo, ma anche sulla qualità del servizio, sulla scalabilità e sulle specifiche esigenze del vostro progetto Laravel.
Fate anche molta attenzione anche ai valori chiamati SLA(Service Level Agreement) o UPTIME: Visto che in un anno ci sono 8.760 ore:
- Un uptime del 99.99% significa meno di 60 minuti di downtime l’anno.
- Un uptime del 99.00%, invece, sono circa 88 ore l’anno di disservizi!
Deploy di Laravel su Hosting Condiviso: Operazioni Preliminari
Essendo un hosting condiviso (che per definzione sono più economici a differenza dei servizi cloud o VPS) non avremo proprio tutto tutto a disposizione. Per ovviare a queste mancanze prepareremo la repository sul nostro computer locale cosi da ottimizzare le operazioni da fare sul server remoto.
Configurazione File .htaccess
💡 Pro Tip: Il file .htaccess è cruciale per il corretto funzionamento di Laravel su Apache. Non saltare questo passaggio!
Per reindirizzare correttamente tutte le richieste a public/index.php, crea un file .htaccess nella root del progetto:
<IfModule mod_rewrite.c>
RewriteEngine On
# Change Root Directory ...
RewriteRule ^$ public/index.php [L]
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>
Ottimizzazione Assets per Production
🚀 Performance Tip: Compilare gli assets prima del deploy riduce il carico sul server.
- Rimuovi
public/build
dal .gitignore - Esegui
npm run build
- Commita i file generati
Pusha tutto sulla repository
Una volte effettuate queste operazioni, puoi pushare tutto sulla repository in remoto sul servizio di versionamento che preferisci (Github, Bitbucket, GitLab, ecc..)
Deploy di Laravel su Hosting Condiviso: Configuriamo cPanel
Spostiamoci ora sul sito remoto appena acquistato e apriamo cPanel. Dovremo andare a configurare (una tantum, quindi non ogni volta che dobbiamo fare modifiche) l’ambiente remoto.
Setup Ambiente PHP
Dirigiamoci sul tab Software e clicchiamo su Select PHP version
- In MyDomains Impostiamo PHP versione 8.2
- In Extensions abilitiamo:
- OpenSSL
- PDO
- Mbstring
- Tokenizer
- XML
- Ctype
- JSON
- BCMath
- Fileinfo
- OPcache
Creazione Database MySQL
- Da cPanel, dirigiamoci sul tab Database e clicchiamo su Manage My database
- Nella prima maschera di inserimento, inseriamo il nome del Database e clicchiamo su Create Database.
Salvate il nome del Database da qualche parte! Ci servirà più avanti in questa guida.
- Secondo passaggio, impostiamo i dati del form e pigiamo su Crea utente.
Salvate il nome dell’utente e la sua password da qualche parte! Ci servirà più avanti in questa guida.
- In ultimo, dobbiamo associare l’utente appena creato al database creato al punto 2.
- Nella maschera chiamata Aggiungi utente al database andiamo a scegliere questi 2 e clicchiamo su Aggiungi
- Nella schermata successiva, ipotizzando voi siate admin e non abbiate altri account root, selezionate Tutti i privilegi e cliccate su Apporta Modifiche
Chiave SSH
A differenza di un server locale (dove non è necessario conoscere chiavi di accesso particolari in quanto tutto avviene sempre sul nostro PC) quando dobbiamo comunicare con un server remoto è necessario avere una chiave di sicurezza per identificarci: ecco che entra in gioco la chiave SSH (Secure Shell Protocol).
Il nostro obiettivo è mettere in comunicazione la repository Github (che contiene tutto il nostro codice) con il server remoto (appena acquistato e gestito da cPanel.)
- Da cPanel, dirigiamoci sul tab Avanzate e clicchiamo su Terminal
- Incolliamo questo comando
ssh-keygen -t rsa -b 4096
e pigiamo 3 volte su enter- Vuoi inserire un nome al file? No, lasciamo tutto vuoto e clicchiamo su Invio;
- Vuoi impostare una password? No, lasciamo tutto vuoto e clicchiamo su Invio;
- Vuoi confermare password appena inserita? No, lasciamo tutto vuoto e clicchiamo su Invio.
- Adesso da cPanel, dirigiamoci sul tab Avanzate e clicchiamo su Accesso SSH
- Nel tab Chiavi Pubbliche comparirà la chiave appena generata con nome il nome
id_rsa
. - Clicca su Gestione e dentro la nuova schermata clicca sul pulsante azzurro Authorize. Dovresti vedere un messaggio di successo in verde
- Ok, perfetto. Adesso torna su Gestisci Chiavi SSH e sempre nel tab Chiavi Pubbliche clicca su Visualizza/Scarica.
- Vedrai una stringa lunga e strana cosi composta: “ssh-rsa AAAAB ”. Bene, copiala e conservala ci servirà tra pochissimo.
- Adesso colleghiamoci a Github e accedi alla pagina della repository del progetto in questione.
- Vai su Settings/Deploy Keys (ad esempio:
https://github.com/framansi/nome-repository/settings/keys
) - Clicca sul pulsante Add Deploy Key e compila il form come segue:
- Sul Title assegna un titolo alla chiave (ad esempio ssh)
- In Key, invece, incolla la CHIAVE PUBBLICA lasciata in sospeso poco fa
- Spunta Allow write access
Git Version Control
Ora che ci siamo assicurati la corretta comunicazione tra Repository Github e Server cPanel, possiamo configurare il Version Control integrato di cPanel:
-
Da cPanel, dirigiamoci sul tab File e clicchiamo su Git Version Control
-
Clicchiamo sul pulsante azzurro Crea e compiliamo il form:
-
Una volta inserite tutte le informazioni richieste, concludiamo il tutto con il pulsante Crea in basso
-
Avete appena collegato ottimamente il vostro spazio web con la repository privata!
Deploy di Laravel su Hosting Condiviso: Configuriamo Laravel
Il progetto adesso è arrivato a destinazione sul server remoto. Adesso dovrete necessariamente eseguire le operazioni preliminari per configurare una repository Laravel dopo il Clone.
Composer e .env
- Da cPanel, dirigiamoci sul tab Avanzate e clicchiamo su Terminal
- Cambiamo la directory di lavoro con il comando:
cd public_html
- Duplichiamo il file .env.example con questo semplice comando:
cp .env.example .env
- Lanciamo il comando
composer install
per installare le dipendenze php - Generiamo la chiave con il comando artisan
php artisan key:generate
Credenziali per Server SMPT
- Sempre dentro cPanel, dirigiamoci nella sezione Email e clicchiamo su Account e-mail
2. Adesso sul pulsante azzurro + Crea e create un nuovo eccount email che fungerà da server di inoltro, il classico
noreply@dominio.it
3. Cliccando su Connect Devices ti troverai con una schmerata del genere:
Memorizza tutti i dati presenti in foto e procedi con la modifica dell’.env
Modifiche variabili nel file .env
-
Ritorniamo su cPanel, dirigiamoci sul tab File e clicchiamo su Gestione File. Si aprirà il file explorer integrato di cPanel.
-
Dirigiamoci in public_html e apriamo il file .env in modifica
-
Per quanto riguarda la connessione al Database, inserite nel file .env i valori riferiti a:
- DB_DATABASE=(nome database punto 2 del capitolo “2 - Configurazione cPanel, Creazione Database”)
- DB_USERNAME=(username utente punto 3 del capitolo “2 - Configurazione cPanel, Creazione Database”)
- DB_PASSWORD=(password utente punto 3 del capitolo “2 - Configurazione cPanel, Creazione Database”)
-
Sempre con il file .env aperto, andiamo a modificare i valori riferiti a:
- APP_URL=(ad esempio
https://google.it/
) - APP_ENV=production
- APP_DEBUG=FALSE
- APP_URL=(ad esempio
-
Non è finita qui. Ricordate la configurazione del server SMTP? Bene, sostotuiuioamo i parametri mail con questi:
MAIL_MAILER=smtp MAIL_HOST=mail.laraland.it MAIL_PORT=465 MAIL_USERNAME=noreply@laraland.it MAIL_PASSWORD=****** MAIL_ENCRYPTION=tls MAIL_FROM_ADDRESS="noreply@laraland.it" MAIL_FROM_NAME="${APP_NAME}"
-
Salvate tutto e chiudete il file explorer
-
Ritornate sulla pagina principale di cPanel e dirigeteci nuovamente sul tab Avanzate e clicchiamo su Terminal
-
Cambiamo la directory di lavoro con il comando:
cd public_html
-
Lanciamo il comando
php artisan migrate
per migrare finalmente le nostre tabelle.
Storage e Permessi
In ultimo, andremo a lanciare dei comandi utili per godere di tutte le funzionalità di laravel. Da terminale:
-
chmod -R 775 storage bootstrap/cache
-
php artisan storage:link
Cron Tab e Scheduler
- Da cPanel, dirigiamoci sul tab Avanzate e clicchiamo su Processi Cron
- Impostiamo come Impostazioni Comuni la voce
Una volta al minuto (* * * * *)
per entrambi i comandi qui sotto:-
/usr/local/bin/php /home/nome-della-cartella/public_html/artisan schedule:run >> /dev/null 2>&1
-
/usr/local/bin/php /home/nome-della-cartella/public_html/artisan queue:work --stop-when-empty --max-time=3600 --max-jobs=1000 >> /dev/null 2>&1
-
FAQ
Posso usare Laravel su hosting condiviso economico tipo Aruba o Keliweb?
Sì, Laravel può funzionare su hosting condiviso economico, ma verifica questi requisiti minimi:
Quale piano hosting condiviso è consigliato per Laravel?
Per un’applicazione Laravel senza troppe pretese:
- Dominio incluso
- Spazio web: minimo 20GB
- Ram minima 2GB
- CPU minima almeno 2 Core
- Database MySQL incluso (almeno 2, uno per il production e l’altro per lo stage)
- Possibilità di aggiungere sottodomini
- SSL gratuito
- Casella di posta SMTP
Come posso ottimizzare le performance di Laravel su hosting condiviso?
Ecco le principali ottimizzazioni:
- Abilita OPcache in php.ini
- Configura il caching:
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_CONNECTION=database
- Compila le view:
php artisan view:cache
- Ottimizza l’autoloader:
composer install --optimize-autoloader --no-dev
- Configura la cache delle routes:
php artisan route:cache
Perché la mia applicazione Laravel è lenta in production?
Le cause più comuni sono:
- OPcache non configurato
- Debug mode attiva
- Assets non compilati
- Cache non configurata
- Query N+1 non ottimizzate
Come proteggo la mia applicazione Laravel in production?
Implementa queste misure di sicurezza:
- Imposta corrrettamente il file
.env
:
APP_ENV=production
APP_DEBUG=false
APP_URL=https://tuo-dominio.it
SESSION_SECURE_COOKIE=true
- Nascondi la directory
storage
:
# Aggiungi al .htaccess
<FilesMatch "^\.env">
Order allow,deny
Deny from all
</FilesMatch>
- Configura CORS in
config/cors.php
- Abilita HTTPS
- Implementa rate limiting
Come gestisco i permessi dei file su hosting condiviso?
Segui questa struttura di permessi:
- Directories: 755 (drwxr-xr-x)
- Files: 644 (rw-r–r–)
- Storage & Cache: 775
find /path/to/laravel -type f -exec chmod 644 {} \;
find /path/to/laravel -type d -exec chmod 755 {} \;
chmod -R 775 storage bootstrap/cache
Come gestisco gli aggiornamenti dell’applicazione?
Procedura consigliata:
- Backup database e files
- Attiva maintenance mode:
php artisan down
- Pull modifiche da Git
- Aggiorna dipendenze:
composer install --optimize-autoloader --no-dev
- Migra database:
php artisan migrate --force
- Clear cache:
php artisan optimize:clear
php artisan optimize
- Disattiva maintenance mode:
php artisan up
Perché vedo “500 Internal Server Error”?
Controlla:
- Permessi storage/logs
- File .env presente e configurato
- APP_KEY generata
- Log PHP per errori specifici
- Configurazione .htaccess
Il mio .htaccess non funziona, cosa faccio?
Verifica:
- mod_rewrite attivo
- AllowOverride All nel VirtualHost
- Sintassi corretta:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^$ public/index.php [L]
RewriteRule ^(.*)$ public/$1 [L]
</IfModule>