Installare Laravel 9 su Ubuntu 22.04 non significa solo scaricare il framework: la parte che fa perdere tempo, quasi sempre, è allineare bene versione di PHP, estensioni, Composer, database e web server. Se salti un passaggio, il problema di solito emerge dopo, quando la cache, i permessi o il rewrite dell’applicazione iniziano a comportarsi in modo incoerente.
Qui trovi una procedura lineare, pensata per un server Ubuntu 22.04 fresco o quasi fresco. L’obiettivo è avere un’installazione funzionante di Laravel 9 con configurazione pulita, documentando i punti che conviene verificare subito invece di inseguire errori a valle.
1. Requisiti reali prima di partire
Laravel 9 richiede una versione di PHP compatibile con il framework e alcune estensioni comuni. Su Ubuntu 22.04 la scelta più naturale è PHP 8.1, che si integra bene con il repository standard e riduce la necessità di pacchetti terzi. In pratica, prima ancora di installare Laravel, devi avere un runtime PHP coerente, Composer operativo e un database già pronto oppure almeno installabile senza conflitti.
Le componenti minime da tenere sotto controllo sono queste: PHP 8.1, Composer, estensioni PHP per database e gestione stringhe, un web server come Nginx o Apache, e un motore SQL come MySQL/MariaDB o PostgreSQL. Laravel funziona anche con SQLite in sviluppo, ma su una macchina destinata a un sito vero conviene impostare subito il database che userai davvero.
Se non sai ancora quale web server usare, Nginx è spesso la scelta più lineare per Laravel in produzione, perché lavora bene con il front controller e con la directory public. Apache resta valido, soprattutto se hai già stack e abitudini consolidate. La procedura sotto mostra entrambi i casi dove serve, ma l’impostazione del progetto resta identica.
2. Aggiornare il sistema e installare i pacchetti base
Parti aggiornando l’indice pacchetti e installando gli strumenti essenziali. Se il server è appena stato creato, conviene farlo subito; se invece è già in uso, evita di mischiare questo lavoro con altri cambiamenti non documentati.
sudo apt update
sudo apt -y upgrade
sudo apt -y install unzip curl git ca-certificates software-properties-common
Verifica attesa: nessun errore in fase di aggiornamento e pacchetti installati correttamente. Se apt update segnala repository rotti, fermati lì: prima va sistemata la sorgente dei pacchetti, poi si continua.
3. Installare PHP 8.1 e le estensioni richieste
Su Ubuntu 22.04 PHP 8.1 è disponibile nei repository standard. Laravel 9 in genere richiede estensioni come mbstring, xml, curl, zip, mysql o equivalenti, oltre a gd se lavori con immagini.
sudo apt -y install php8.1 php8.1-cli php8.1-fpm php8.1-mysql php8.1-xml php8.1-mbstring php8.1-curl php8.1-zip php8.1-gd
Dopo l’installazione, controlla la versione e le estensioni caricate. Non dare per scontato che il pacchetto sia sufficiente: un modulo mancante emerge spesso solo durante composer install.
php -v
php -m | egrep 'mbstring|xml|curl|zip|mysql|gd'
Se usi Nginx, php8.1-fpm è la scelta corretta. Se usi Apache con mod_php, la configurazione cambia, ma per Laravel e per una gestione pulita dei pool PHP-FPM resta la strada più ordinata. In un ambiente misto, FPM ti permette anche di separare meglio le applicazioni.
4. Installare Composer in modo controllabile
Composer è il gestore dipendenze di Laravel. Evita installazioni improvvisate con script copiati senza verifica: scaricalo, controlla l’hash e installalo in una posizione stabile. Su server, l’ideale è renderlo disponibile globalmente.
cd /tmp
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === trim(file_get_contents('https://composer.github.io/installer.sig'))) { echo 'Installer verified'.PHP_EOL; } else { echo 'Installer corrupt'.PHP_EOL; unlink('composer-setup.php'); exit(1); }"
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
php -r "unlink('composer-setup.php');"
composer --version
Verifica attesa: composer --version deve rispondere senza errori. Se il controllo hash fallisce, non procedere: c’è un problema di download, proxy o connettività che va chiarito prima di installare altro.
5. Creare il database per Laravel
Laravel 9 lavora bene con MySQL o MariaDB. La scelta concreta dipende dal resto della tua piattaforma, ma su Ubuntu 22.04 MariaDB è spesso semplice da gestire. Se hai già MySQL in uso, mantieni coerenza con ciò che hai già in produzione: cambiare motore solo per preferenza personale raramente porta benefici immediati.
sudo apt -y install mariadb-server
sudo systemctl enable --now mariadb
Poi crea database e utente dedicato. Non usare l’account root dell’engine nel file .env dell’applicazione.
sudo mysql
CREATE DATABASE laravel9 CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'laraveluser'@'localhost' IDENTIFIED BY 'password_forte_da_sostituire';
GRANT ALL PRIVILEGES ON laravel9.* TO 'laraveluser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Qui c’è un punto di sicurezza banale ma importante: la password va sostituita con un valore robusto e gestito fuori dal testo operativo. Se devi distribuirla a più persone o ambienti, usa un secret manager o almeno una procedura di redazione e rotazione.
6. Creare il progetto Laravel 9
A questo punto puoi creare il progetto. Conviene farlo in una directory dedicata, ad esempio sotto /var/www se stai preparando un sito web. Usa un utente con permessi adeguati, non root, per evitare di ritrovarti con file generati da Composer che poi il web server non riesce a leggere o scrivere.
cd /var/www
sudo composer create-project laravel/laravel:^9.0 laravel9
Se preferisci lavorare con un utente non privilegiato, crea prima la directory e assegna proprietà coerenti. È una di quelle decisioni che risparmiano problemi di permessi in seguito, soprattutto quando entrano in gioco cache e storage.
Dopo la creazione, verifica che i file principali esistano:
ls -la /var/www/laravel9
ls -la /var/www/laravel9/public
La presenza di artisan, composer.json e della directory public è il segnale minimo che il progetto è stato creato correttamente.
7. Configurare il file .env
Il file .env governa quasi tutta la configurazione dell’applicazione. Dopo la creazione del progetto, imposta nome applicazione, URL e credenziali database. È il punto in cui molti ambienti si rompono perché si lascia la configurazione di default e si spera che l’app si adatti da sola.
cd /var/www/laravel9
cp .env.example .env
php artisan key:generate
Poi modifica il file .env con i parametri corretti. Un esempio minimale:
APP_NAME=Laravel9
APP_ENV=production
APP_KEY=base64:...
APP_DEBUG=false
APP_URL=https://example.com
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel9
DB_USERNAME=laraveluser
DB_PASSWORD=password_forte_da_sostituire
Nota operativa: se il sito è in produzione, APP_DEBUG deve restare false. Lasciare il debug attivo espone dettagli inutili e, in certi casi, informazioni sensibili sulla struttura dell’applicazione.
8. Installare e verificare le dipendenze PHP
Con il progetto creato e il file .env in ordine, installa le dipendenze. Questo passaggio è il primo vero test di compatibilità fra PHP, estensioni e pacchetti del framework.
cd /var/www/laravel9
composer install
Se il comando fallisce, leggi l’errore in modo letterale: di solito mancano estensioni PHP, il binario non è quello atteso oppure il sistema non ha accesso a internet per scaricare i pacchetti. Non partire subito con modifiche al codice: prima chiudi il problema infrastrutturale.
Una verifica utile è eseguire i comandi base di Artisan:
php artisan --version
php artisan route:list
Se route:list risponde, il framework è operativo almeno a livello applicativo. Se invece vedi errori di connessione al database, torna al file .env e alla reachability del servizio SQL.
9. Configurare i permessi corretti
Laravel scrive in storage e bootstrap/cache. Queste directory devono essere scrivibili dall’utente del web server o dal gruppo corretto, altrimenti avrai errori casuali su cache, sessioni e log. È uno dei problemi più frequenti dopo l’installazione, e spesso viene scambiato per un bug dell’app.
sudo chown -R www-data:www-data /var/www/laravel9
sudo find /var/www/laravel9 -type f -exec chmod 644 {} \;
sudo find /var/www/laravel9 -type d -exec chmod 755 {} \;
sudo chmod -R ug+rwx /var/www/laravel9/storage /var/www/laravel9/bootstrap/cache
Se preferisci una gestione più controllata, puoi usare un gruppo condiviso invece di assegnare tutto a www-data. In ambienti con deploy manuali o CI/CD, questa è spesso la soluzione più pulita, perché separa meglio ownership e scrittura.
10. Configurare Nginx per Laravel
Con Nginx, la root del sito deve puntare a /var/www/laravel9/public, non alla directory principale del progetto. È un dettaglio fondamentale: esporre la root sbagliata significa rendere accessibili file che non dovrebbero esserlo.
sudo apt -y install nginx
sudo nano /etc/nginx/sites-available/laravel9
Inserisci una configurazione essenziale come questa:
server {
listen 80;
server_name example.com;
root /var/www/laravel9/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.1-fpm.sock;
}
location ~ /\.(?!well-known).* {
deny all;
}
}
Abilita il sito e ricarica Nginx:
sudo ln -s /etc/nginx/sites-available/laravel9 /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Verifica attesa: nginx -t deve restituire syntax is ok e test is successful. Se fallisce, correggi prima di ricaricare: un reload con configurazione sbagliata è un errore evitabile.
11. Configurare Apache, se lo preferisci
Con Apache, la logica è la stessa: la document root deve essere /var/www/laravel9/public e il modulo rewrite deve essere attivo. Se usi Apache, evita di lasciare la configurazione predefinita che punta alla root generica del sito, perché Laravel dipende dal rewrite delle richieste verso index.php.
sudo apt -y install apache2 libapache2-mod-php8.1
sudo a2enmod rewrite
sudo nano /etc/apache2/sites-available/laravel9.conf
Un VirtualHost minimale può essere questo:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/laravel9/public
<Directory /var/www/laravel9/public>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Poi abilita il sito e ricarica il servizio:
sudo a2ensite laravel9.conf
sudo apache2ctl configtest
sudo systemctl reload apache2
Se AllowOverride All non è presente, le regole di routing di Laravel nel file .htaccess non verranno lette correttamente. È il classico dettaglio che produce pagine 404 nonostante il sito sia “online”.
12. Eseguire la migrazione del database
Quando la connessione al database è corretta, puoi eseguire le migrazioni iniziali. Questo conferma che l’applicazione non solo parte, ma riesce anche a scrivere schema e tabelle.
cd /var/www/laravel9
php artisan migrate
Se le migrazioni falliscono, il messaggio di errore di solito è abbastanza esplicito: database non raggiungibile, credenziali errate, privilegi insufficienti o estensione PHP mancante. Non aggirare il problema con workaround lato codice; sistemare il DB è quasi sempre la strada più veloce.
13. Cache, ottimizzazione e avvio pulito
Su un server reale non basta far partire l’app: conviene impostare cache e ottimizzazioni base. Laravel offre comandi utili per consolidare configurazione, route e view, ma vanno usati con attenzione durante i deploy, non come gesto automatico a caso.
cd /var/www/laravel9
php artisan config:cache
php artisan route:cache
php artisan view:cache
Se stai ancora facendo test, puoi anche svuotare le cache quando cambi file di configurazione o .env:
php artisan config:clear
php artisan route:clear
php artisan view:clear
La regola pratica è semplice: cache prima del go-live, clear quando fai troubleshooting. Mescolare i due approcci senza criterio porta spesso a falsi positivi, soprattutto quando stai verificando URL, environment o driver.
14. Verifica finale dal browser e dalla shell
A questo punto apri il dominio o l’indirizzo IP del server e verifica che la home di Laravel risponda correttamente. Se vedi la pagina di benvenuto standard, il progetto è vivo. Se invece compare un errore 500, vai subito ai log: in Laravel la diagnosi più rapida passa quasi sempre da lì.
tail -n 50 /var/www/laravel9/storage/logs/laravel.log
Se il problema è lato web server, controlla anche i log di Nginx o Apache. Per Nginx, ad esempio, i percorsi tipici sono /var/log/nginx/error.log e /var/log/nginx/access.log. Per Apache, i log stanno spesso sotto /var/log/apache2/. Non limitarti alla prima riga d’errore: cerca la causa, non il sintomo.
15. Abilitare HTTPS dopo l’installazione
Una volta che il sito risponde in HTTP, il passo successivo è il TLS. Su Ubuntu 22.04, se il dominio è già puntato correttamente al server, puoi usare Certbot per ottenere un certificato Let’s Encrypt. Questo non è un dettaglio estetico: in molti casi Laravel viene usato dietro login, sessioni e callback, quindi HTTPS è parte della configurazione base.
sudo apt -y install certbot python3-certbot-nginx
sudo certbot --nginx -d example.com
Dopo l’emissione del certificato, verifica rinnovo automatico e redirect verso HTTPS. Se usi un reverse proxy o una CDN, controlla anche l’intestazione X-Forwarded-Proto e la configurazione di Laravel per i proxy fidati, altrimenti l’app può generare URL incoerenti.
16. Checklist rapida di controllo
Prima di considerare chiusa l’installazione, fai questa verifica minima:
PHP:
php -vmostra 8.1 e le estensioni richieste sono presenti.Composer:
composer --versionrisponde senza errori.Database:
php artisan migratetermina correttamente.Web server: Nginx o Apache punta a
/publice il rewrite funziona.Permessi:
storageebootstrap/cachesono scrivibili dal servizio.Log: non ci sono errori ricorrenti in
storage/logs/laravel.log.
Se uno di questi punti fallisce, non proseguire con ottimizzazioni o temi grafici: risolvi prima la base. In ambienti Linux, le installazioni che sembrano “quasi funzionanti” sono quelle che costano più tempo in manutenzione.
17. Considerazioni operative per un setup pulito
Il punto forte di una installazione fatta bene non è solo far vedere la homepage, ma avere un percorso ripetibile. Se il progetto deve crescere, ti conviene già predisporre una struttura con ownership chiara, file .env fuori dal controllo pubblico, log consultabili e procedure di deploy documentate.
In altre parole: Laravel 9 su Ubuntu 22.04 si installa in poco tempo, ma si mantiene bene solo se il server non viene trattato come un ambiente temporaneo. Un setup ordinato oggi evita troubleshooting inutile domani, soprattutto quando entreranno in gioco queue, scheduler, cache Redis o integrazioni esterne.
Se vuoi andare oltre l’installazione base, il passo successivo sensato è aggiungere un reverse proxy, separare staging e produzione, e introdurre un deploy non interattivo con versioning e rollback. È lì che Laravel smette di essere “solo un sito PHP” e diventa un’applicazione gestibile con criterio.
Commenti (0)
Nessun commento ancora.
Segnala contenuto
Elimina commento
Eliminare definitivamente questo commento?
L'azione non si può annullare.