Ubuntu · deploy Laravel

Come fare il deploy di Laravel su un VPS Ubuntu

Di · Ultimo aggiornamento: · lettura gratuita, nessun paywall

Un VPS da $5–7/mese resta il modo più economico e flessibile per far girare Laravel in produzione — se lo configuri bene. Questa guida attraversa l'intero stack di produzione, ogni passo manuale, l'alternativa con un solo comando e le abitudini operative che mantengono un server sano per anni.

In questa guida
  1. Perché un VPS (e quando no)
  2. Lo stack di produzione, spiegato
  3. Il setup manuale, passo per passo
  4. L'alternativa con un solo comando
  5. Operazioni post-deploy che contano
  6. Errori comuni da evitare
  7. FAQ

Perché un VPS (e quando no)

L'hosting condiviso non fa girare queue worker, WebSocket o Laravel Octane correttamente, e le piattaforme PaaS gestite fanno pagare la comodità con pricing a consumo. Un VPS da Hetzner, DigitalOcean, Vultr o Linode ti dà accesso root, fatturazione prevedibile e spazio sufficiente per hostare più app Laravel su una macchina.

Lo stack di produzione, spiegato

Ogni server Laravel in produzione converge sugli stessi componenti. Capisci cosa fa ogni pezzo prima di automatizzare qualsiasi cosa:

ComponenteRuoloNote
NginxWeb server / reverse proxyServe asset statici, fa proxy alle richieste PHP
PHP-FPM o OctaneRuntime PHPFPM è il default affidabile; Octane (FrankenPHP) mantiene l'app avviata per alto throughput
MariaDB / PostgreSQLDatabaseEntrambi funzionano con Laravel; scegli per app
Valkey (compatibile Redis)Cache, sessioni, queueFork Redis open source; drop-in per Laravel
SupervisorProcess managerTiene vivi queue:work e Horizon
CronSchedulerUna voce: artisan schedule:run ogni minuto
UFW + Fail2banFirewall / protezione brute-forceDefault-deny, banna fallimenti SSH ripetuti
CertbotCertificati TLSCertificati Let's Encrypt gratuiti con auto-rinnovo
Release stile DeployerDeploy zero-downtimeDirectory releases + swap symlink

Il setup manuale, passo per passo

Questa è la checklist onesta e integrale. Prevedi 2–4 ore la prima volta, e ricorda che possederai ognuna di queste scelte anche al momento dell'upgrade.

  1. Crea un utente sudo e blinda SSH. adduser deploy, installa la tua chiave pubblica, poi disabilita login root e auth password in /etc/ssh/sshd_config.
  2. Abilita il firewall. ufw allow OpenSSH http https poi ufw enable. Installa Fail2ban per protezione brute-force SSH.
  3. Installa Nginx. apt install nginx.
  4. Installa PHP. Aggiungi un repository PHP mantenuto, poi installa php8.x-fpm con le estensioni che Laravel richiede: mbstring, xml, curl, zip, intl, mysql (o pgsql), redis, gd, opcache.
  5. Ottimizza PHP per produzione. Abilita opcache, imposta memory_limit e upload_max_filesize sensati, disattiva expose_php.
  6. Installa Composer globalmente.
  7. Installa MariaDB, esegui mariadb-secure-installation, crea un database e un utente dedicato per app — non riusare root.
  8. Installa Valkey (o Redis) per cache, sessioni e queue.
  9. Scrivi il server block Nginx. La document root punta a current/public, try_files fa fallback su index.php, FastCGI passa al socket PHP-FPM dell'app.
  10. Spedisci il codice. Clona in una directory releases/, composer install --no-dev --optimize-autoloader, copia .env, esegui php artisan key:generate, storage:link e correggi i permessi così solo storage/ e bootstrap/cache/ sono scrivibili.
  11. Migra e metti in cache. php artisan migrate --force poi config:cache, route:cache, view:cache.
  12. Configura Supervisor per eseguire php artisan queue:work (o Horizon) e riavviarlo a ogni deploy.
  13. Aggiungi il cron dello scheduler: * * * * * php artisan schedule:run.
  14. Emetti certificati TLS con Certbot e forza HTTPS.

Ora moltiplica per ogni app che hosti, e di nuovo per ogni server — e mantieni PHP, Nginx e l'OS patchati per sempre. Si può fare tutto; è solo lavoro indifferenziato.

L'alternativa con un solo comando

Tutto nella sezione precedente è esattamente ciò che Cipi automatizza. Su un VPS Ubuntu 24.04/26.04 fresco:

wget -O - https://cipi.sh/setup.sh | bash

In circa dieci minuti ottieni l'intero stack — Nginx, PHP, MariaDB, Valkey, Supervisor, UFW, Fail2ban, Certbot, Deployer — più hardening che altrimenti faresti a mano: login root disabilitato, SSH solo chiave per l'utente admin e password root casuale salvata in /etc/cipi/server.json. Poi ogni app è un altro comando:

cipi app create # aggiungi --octane per Laravel Octane su FrankenPHP

Questo provisiona un utente di sistema isolato, pool PHP-FPM, vhost Nginx e database per app, collega GitHub o GitLab con deploy key e webhook per deploy Git zero-downtime, e collega queue worker e scheduler. SSL è cipi ssl install; PostgreSQL è cipi db install pgsql. Vedi la guida Primi passi per il walkthrough completo, o l'hub confronti se lo stai valutando rispetto a Forge, Ploi e simili.

Operazioni post-deploy che contano

Arrivare a "funziona" è metà del lavoro. Queste abitudini separano un server che dura anni da uno che ti sorprende:

Errori comuni da evitare

Mettilo in pratica con Cipi

Cipi è la CLI di deploy gratuita e open source citata in tutta questa guida: un comando trasforma un VPS Ubuntu fresco in un server di produzione hardened per Laravel — Nginx, PHP-FPM o Octane, MariaDB o PostgreSQL, queue, scheduler, SSL e deploy Git zero-downtime inclusi.

wget -O - https://cipi.sh/setup.sh | bash

Domande frequenti

Quali sono i requisiti minimi del server per Laravel in produzione?

Un singolo vCPU con 2 GB RAM fa girare comodamente un'app Laravel tipica con database, cache e queue worker; aggiungi swap sotto i 4 GB. Octane, Horizon e build pesanti beneficiano di 4 GB. Cipi installa il suo stack completo su qualsiasi VPS Ubuntu 24.04/26.04 fresco.

Posso hostare più app Laravel su un VPS?

Sì, ed è di solito la configurazione più conveniente. La chiave è l'isolamento: ogni app dovrebbe avere il proprio utente di sistema, pool PHP-FPM e credenziali database così un'app compromessa o malfunzionante non tocca le altre. Cipi provisiona esattamente quell'isolamento automaticamente con cipi app create.

Dovrei usare PHP-FPM o Laravel Octane?

PHP-FPM è il default noioso e affidabile, giusto per la maggior parte delle app. Octane mantiene il framework avviato tra le richieste e brilla su API ad alto traffico ed endpoint sensibili alla latenza. Con Cipi puoi far girare entrambi sullo stesso server e creare app Octane con cipi app create --octane.

Come tengo PHP aggiornato su Ubuntu?

Segui un repository PHP mantenuto e applica patch di sicurezza prontamente invece di aspettare upgrade di distro. Cipi gestisce le patch di sicurezza PHP con un controllo settimanale (cipi php upgrade), così i server non restano indietro in silenzio.

Ho ancora bisogno di Laravel Forge se gestisco il mio VPS?

No. Forge è un SaaS a pagamento che automatizza lo stesso stack descritto in questa guida. Se vuoi quell'automazione senza abbonamento o dipendenza da terze parti, Cipi copre lo stesso workflow gratis e open source — vedi il confronto dettagliato Cipi vs Forge.

Continua a leggere