Linux15 dicembre 2025 549 visualizzazioni

Come installare Laravel su un VPS Linux (Debian 13 / Ubuntu 24.04)

Come installare Laravel su un VPS Linux (Debian 13 / Ubuntu 24.04)

Tempo stimato : 30-45 minuti
Difficoltà : Intermedia ⭐⭐
Sistema : Debian 13 (Trixie) / Ubuntu 24.04 LTS


📋 Introduzione

Questa guida ti spiega come installare Laravel 12 (ultima versione) su un VPS Linux con Debian 13 o Ubuntu 24.04. Alla fine di questo tutorial, avrai un ambiente di produzione pronto con :

  • PHP 8.3 (richiesto per Laravel 12)
  • Composer (gestore di dipendenze PHP)
  • Nginx (server web ad alte prestazioni)
  • MariaDB (database)
  • Laravel 12 (framework PHP)

Requisiti

Requisiti Descrizione
🖥️ VPS Linux Debian 13 o Ubuntu 24.04 con accesso root
🔑 Accesso SSH Connessione come root o utente sudo
🌐 Nome di dominio (Opzionale) Per accedere tramite un URL
💾 RAM Minimo 1 GB raccomandato
💿 Storage Minimo 10 GB

Configurazione richiesta per Laravel 12

Componente Versione minima
PHP 8.2 (8.3 o 8.4 raccomandato)
Composer 2.x
Database MySQL 5.7+ / MariaDB 10.3+ / PostgreSQL 10+ / SQLite 3.26+

🔄 Passo 1 : Aggiornare il Sistema

Prima di qualsiasi installazione, aggiorna il tuo sistema.

Connessione SSH

ssh root@il-tuo-ip-server

Aggiornamento dei pacchetti

# Aggiornare la lista dei pacchetti
apt update

# Aggiornare i pacchetti installati
apt upgrade -y

Risultato atteso : Tutti i pacchetti sono aggiornati.


🐘 Passo 2 : Installare PHP 8.3

Laravel 12 richiede PHP 8.2 minimo. Installeremo PHP 8.3 per migliori prestazioni.

Per Debian 13

Debian 13 (Trixie) include PHP 8.4 di default. Per installare PHP 8.3, aggiungi il repository Sury :

# Installare le dipendenze
apt install -y apt-transport-https lsb-release ca-certificates curl gnupg


# Scaricare la chiave GPG del repository Sury
curl -fsSL https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /usr/share/keyrings/sury-php.gpg


# Aggiungere il repository Sury
echo "deb [signed-by=/usr/share/keyrings/sury-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/sury-php.list


# Aggiornare la lista dei pacchetti
apt update

Per Ubuntu 24.04

Ubuntu 24.04 include PHP 8.3 di default. Se desideri una versione più recente, aggiungi il PPA Ondřej :

# Installare le dipendenze
apt install -y software-properties-common


# Aggiungere il PPA PHP (opzionale per PHP 8.4)
add-apt-repository ppa:ondrej/php -y


# Aggiornare la lista dei pacchetti
apt update

Installare PHP 8.3 e le estensioni richieste

apt install -y php8.3 php8.3-fpm php8.3-cli php8.3-common \
    php8.3-mysql php8.3-pgsql php8.3-sqlite3 \
    php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml \
    php8.3-zip php8.3-bcmath php8.3-intl php8.3-readline \
    php8.3-tokenizer php8.3-opcache
Estensione Utilità
php8.3-fpm FastCGI Process Manager (per Nginx)
php8.3-mysql Connessione MySQL/MariaDB
php8.3-curl Richieste HTTP
php8.3-gd Manipolazione delle immagini
php8.3-mbstring Stringhe multibyte (UTF-8)
php8.3-xml Elaborazione XML
php8.3-zip Compressione ZIP
php8.3-bcmath Calcoli di precisione
php8.3-intl Internazionalizzazione

Verificare l'installazione

php -v

Risultato atteso :

PHP 8.3.x (cli) (built: ...)
Copyright (c) The PHP Group
Zend Engine v4.3.x, Copyright (c) Zend Technologies
    with Zend OPcache v8.3.x, Copyright (c), by Zend Technologies

📦 Passo 3 : Installare Composer

Composer è il gestore di dipendenze PHP, indispensabile per Laravel.

Scaricare e installare Composer

# Scaricare l'installatore
curl -sS https://getcomposer.org/installer -o composer-setup.php


# Installare Composer globalmente
php composer-setup.php --install-dir=/usr/local/bin --filename=composer


# Rimuovere l'installatore
rm composer-setup.php

Verificare l'installazione

composer --version

Risultato atteso :

Composer version 2.x.x 2024-xx-xx xx:xx:xx

🌐 Passo 4 : Installare Nginx

Nginx è un server web performante, ideale per Laravel.

Installare Nginx

apt install -y nginx

Avviare e abilitare Nginx

# Avviare Nginx
systemctl start nginx
# Abilitare all'avvio
systemctl enable nginx
# Verificare lo stato
systemctl status nginx

Risultato atteso :

● nginx.service - A high performance web server and a reverse proxy server
     Loaded: loaded (/lib/systemd/system/nginx.service; enabled; ...)
     Active: active (running) since ...

Testare Nginx

Apri il tuo browser e accedi a http://il-tuo-ip-server. Dovresti vedere la pagina predefinita di Nginx.


🗄️ Passo 5 : Installare MariaDB

MariaDB è un database compatibile con MySQL, performante e open source.

Installare MariaDB

apt install -y mariadb-server mariadb-client

Avviare e abilitare MariaDB

# Avviare MariaDB
systemctl start mariadb
# Abilitare all'avvio
systemctl enable mariadb
# Verificare lo stato
systemctl status mariadb

Mettere in sicurezza l'installazione

mysql_secure_installation

Rispondi alle domande :

Domanda Risposta raccomandata
Enter current password for root Premi Invio (vuoto)
Switch to unix_socket authentication n
Change the root password Y poi inserisci una password forte
Remove anonymous users Y
Disallow root login remotely Y
Remove test database Y
Reload privilege tables Y

Creare un database per Laravel

# Connettersi a MariaDB
mysql -u root -p
-- Creare il database
CREATE DATABASE laravel CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Creare un utente
CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'LaTuaPasswordSicura123!';

-- Dare i permessi
GRANT ALL PRIVILEGES ON laravel.* TO 'laravel_user'@'localhost';

-- Applicare le modifiche
FLUSH PRIVILEGES;

-- Uscire
EXIT;

📝 Nota : Tieni queste informazioni per la configurazione di Laravel :

  • Database : laravel
  • Utente : laravel_user
  • Password : LaTuaPasswordSicura123!

🚀 Passo 6 : Installare Laravel 12

Creare la directory del progetto

# Creare la cartella per i siti web
mkdir -p /var/www

# Andare nella directory
cd /var/www

Installare Laravel tramite Composer

composer create-project laravel/laravel iltuosito

💡 Sostituisci iltuosito con il nome del tuo progetto.

Risultato atteso :

Creating a "laravel/laravel" project at "./iltuosito"
Installing laravel/laravel (v12.x.x)
  - Downloading laravel/laravel (v12.x.x)
  - Installing laravel/laravel (v12.x.x): Extracting archive
...
Application ready! Build something amazing.

Struttura del progetto Laravel

📁 /var/www/iltuosito/
├── 📁 app/              ← Codice dell'applicazione
├── 📁 bootstrap/        ← File di avvio
├── 📁 config/           ← Configurazione
├── 📁 database/         ← Migrazioni e seeds
├── 📁 public/           ← Punto di ingresso web (index.php)
├── 📁 resources/        ← Viste, CSS, JS
├── 📁 routes/           ← Rotte dell'applicazione
├── 📁 storage/          ← File generati, log, cache
├── 📁 tests/            ← Test unitari
├── 📁 vendor/           ← Dipendenze Composer
├── 📄 .env              ← Variabili d'ambiente
├── 📄 artisan           ← CLI Laravel
└── 📄 composer.json     ← Dipendenze del progetto

⚙️ Passo 7 : Configurare Laravel

Configurare il file .env

cd /var/www/iltuosito
nano .env

Modifica le seguenti righe :

APP_NAME="Il Mio Sito Laravel"
APP_ENV=production
APP_DEBUG=false
APP_URL=http://il-tuo-dominio.com

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=laravel_user
DB_PASSWORD=LaTuaPasswordSicura123!

⚠️ Importante : In produzione, imposta APP_DEBUG=false per non esporre informazioni sensibili.

Generare la chiave dell'applicazione

php artisan key:generate

Risultato atteso :

INFO  Application key set successfully.

Eseguire le migrazioni

php artisan migrate

Risultato atteso :

INFO  Running migrations.

2024_01_01_000000_create_users_table ............... 45ms DONE
2024_01_01_000001_create_password_reset_tokens_table  12ms DONE
2024_01_01_000002_create_sessions_table ............ 18ms DONE
...

📁 Passo 8 : Configurare i Permessi

Laravel richiede che alcune cartelle siano accessibili in scrittura.

Definire il proprietario

# Cambiare il proprietario verso l'utente web
chown -R www-data:www-data /var/www/iltuosito

Definire i permessi

# Permessi per le cartelle
find /var/www/iltuosito -type d -exec chmod 755 {} \;

# Permessi per i file
find /var/www/iltuosito -type f -exec chmod 644 {} \;

# Permessi speciali per storage e bootstrap/cache
chmod -R 775 /var/www/iltuosito/storage
chmod -R 775 /var/www/iltuosito/bootstrap/cache

🔧 Passo 9 : Configurare Nginx per Laravel

Creare la configurazione del sito

nano /etc/nginx/sites-available/iltuosito

Incolla la seguente configurazione :

server {
    listen 80;
    listen [::]:80;
    
    # Sostituisci con il tuo dominio o IP
    server_name il-tuo-dominio.com www.il-tuo-dominio.com;
    
    # Radice del sito (cartella pubblica di Laravel)
    root /var/www/iltuosito/public;
    
    # File index
    index index.php index.html index.htm;
    
    # Codifica
    charset utf-8;
    
    # Log
    access_log /var/log/nginx/iltuosito.access.log;
    error_log /var/log/nginx/iltuosito.error.log;
    
    # Gestione delle richieste
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }
    
    # File statici
    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }
    
    # Errore 404 → Laravel
    error_page 404 /index.php;
    
    # Elaborazione PHP tramite PHP-FPM
    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_hide_header X-Powered-By;
    }
    
    # Bloccare l'accesso ai file nascosti
    location ~ /\.(?!well-known).* {
        deny all;
    }
}

Attivare il sito

# Creare un link simbolico
ln -s /etc/nginx/sites-available/iltuosito /etc/nginx/sites-enabled/

# Disabilitare il sito predefinito (opzionale)
rm /etc/nginx/sites-enabled/default

# Testare la configurazione
nginx -t

Risultato atteso :

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Riavviare Nginx

systemctl restart nginx

✅ Passo 10 : Testare l'Installazione

Accedere al sito

Apri il tuo browser e accedi a :

  • http://il-tuo-ip-server (se non hai un dominio)
  • http://il-tuo-dominio.com (se il dominio è configurato)

Dovresti vedere la pagina iniziale di Laravel :

Verificare la salute dell'applicazione

Laravel 12 include una rotta di health check :

curl http://localhost/up

Risultato atteso : Codice HTTP 200 (OK)


🔒 Passo 11 : Mettere in Sicurezza con HTTPS (Let's Encrypt)

Installare Certbot

apt install -y certbot python3-certbot-nginx

Ottenere un certificato SSL

certbot --nginx -d il-tuo-dominio.com -d www.il-tuo-dominio.com

Segui le istruzioni :

  1. Inserisci la tua email
  2. Accetta i termini
  3. Scegli di reindirizzare HTTP verso HTTPS (raccomandato)

Verificare il rinnovo automatico

certbot renew --dry-run

Risultato atteso :

Congratulations, all simulated renewals succeeded

✅ Il tuo sito è ora accessibile tramite https://il-tuo-dominio.com


🛠️ Comandi Laravel Utili

Artisan (CLI Laravel)

# Andare nella cartella del progetto
cd /var/www/iltuosito

# Vedere tutti i comandi disponibili
php artisan list

# Svuotare la cache
php artisan cache:clear
php artisan config:clear
php artisan route:clear
php artisan view:clear

# Ottimizzare per la produzione
php artisan optimize

# Creare un controller
php artisan make:controller NomeController

# Creare un modello con migrazione
php artisan make:model NomeModello -m

# Eseguire le migrazioni
php artisan migrate

# Tornare indietro
php artisan migrate:rollback

# Modalità manutenzione
php artisan down
php artisan up

📊 Ottimizzazione per la Produzione

Ottimizzare Laravel

cd /var/www/iltuosito

# Mettere in cache la configurazione
php artisan config:cache

# Mettere in cache le rotte
php artisan route:cache

# Mettere in cache le viste
php artisan view:cache

# Ottimizzazione globale
php artisan optimize

Configurare OPcache

nano /etc/php/8.3/fpm/conf.d/10-opcache.ini

Aggiungi o modifica :

opcache.enable=1
opcache.memory_consumption=256
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.validate_timestamps=0
opcache.save_comments=1

Riavvia PHP-FPM :

systemctl restart php8.3-fpm

🔧 Risoluzione dei Problemi

Errore 500 - Internal Server Error

❌ Causa ✅ Soluzione
Permessi errati chown -R www-data:www-data /var/www/iltuosito
Storage non accessibile chmod -R 775 /var/www/iltuosito/storage
Chiave APP_KEY mancante php artisan key:generate
.env mal configurato Controlla i parametri del database
# Vedere gli errori Laravel
tail -f /var/www/iltuosito/storage/logs/laravel.log

Errore 502 Bad Gateway

❌ Causa ✅ Soluzione
PHP-FPM non avviato systemctl start php8.3-fpm
Socket PHP errato Controlla /var/run/php/php8.3-fpm.sock
Versione PHP errata update-alternatives --config php

Errore di connessione al database

❌ Causa ✅ Soluzione
MariaDB non avviata systemctl start mariadb
Credenziali errate Controlla .env (DB_DATABASE, DB_USERNAME, DB_PASSWORD)
Database non creato Crea il database tramite mysql -u root -p
# Testare la connessione
php artisan tinker
>>> DB::connection()->getPdo();

Pagina bianca

# Attivare il debug temporaneamente
nano /var/www/iltuosito/.env
# Cambiare APP_DEBUG=true

# Svuotare la cache
php artisan cache:clear
php artisan config:clear

# Controllare i log
tail -50 /var/www/iltuosito/storage/logs/laravel.log

📝 Riepilogo dei Comandi

# === AGGIORNAMENTO SISTEMA ===
apt update && apt upgrade -y

# === INSTALLAZIONE PHP 8.3 (Debian 13) ===
apt install -y apt-transport-https lsb-release ca-certificates curl gnupg
curl -fsSL https://packages.sury.org/php/apt.gpg | gpg --dearmor -o /usr/share/keyrings/sury-php.gpg
echo "deb [signed-by=/usr/share/keyrings/sury-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" | tee /etc/apt/sources.list.d/sury-php.list
apt update
apt install -y php8.3 php8.3-fpm php8.3-cli php8.3-common php8.3-mysql php8.3-curl php8.3-gd php8.3-mbstring php8.3-xml php8.3-zip php8.3-bcmath php8.3-intl

# === INSTALLAZIONE COMPOSER ===
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# === INSTALLAZIONE NGINX ===
apt install -y nginx
systemctl enable nginx && systemctl start nginx

# === INSTALLAZIONE MARIADB ===
apt install -y mariadb-server mariadb-client
systemctl enable mariadb && systemctl start mariadb
mysql_secure_installation

# === CREAZIONE DATABASE ===
mysql -u root -p -e "CREATE DATABASE laravel; CREATE USER 'laravel_user'@'localhost' IDENTIFIED BY 'Password'; GRANT ALL ON laravel.* TO 'laravel_user'@'localhost'; FLUSH PRIVILEGES;"

# === INSTALLAZIONE LARAVEL ===
cd /var/www
composer create-project laravel/laravel monsite
cd monsite
php artisan key:generate
php artisan migrate

# === PERMESSI ===
chown -R www-data:www-data /var/www/monsite
chmod -R 775 /var/www/monsite/storage /var/www/monsite/bootstrap/cache

# === HTTPS (Let's Encrypt) ===
apt install -y certbot python3-certbot-nginx
certbot --nginx -d vostro-dominio.com

🎉 Conclusione

Congratulazioni! Hai installato con successo:

  • PHP 8.3 con tutte le estensioni Laravel
  • Composer 2.x per la gestione delle dipendenze
  • Nginx configurato per Laravel
  • MariaDB con un database dedicato
  • Laravel 12 pronto per la produzione
  • HTTPS con Let's Encrypt (opzionale)

Prossimi passi

  • 📖 Consulta la documentazione Laravel
  • 🎨 Installa un starter kit: php artisan breeze:install o php artisan jetstream:install
  • 📊 Configura le code con Redis o Supervisor
  • 📧 Configura l'invio di email (SMTP, Mailgun, ecc.)