Cover image for Configurare LEMP Stack Deploy Laravel 12 pe Ubuntu
Fabian Hanu

Fabian Hanu

Author

Configurare LEMP Stack Deploy Laravel 12 pe Ubuntu

Află cum să instalezi un stack LEMP complet pe Ubuntu și să configurezi Laravel 12. Ghid tehnic pas cu pas: PHP 8.3 FPM, Nginx, MySQL, Composer și depanare.

Pentru confortul dumneavoastră

Cumpără acum

Putem primi un comision din achizițiile făcute prin aceste link-uri.

Configurare LEMP Stack de la Zero și Deploy Laravel 12 pe Ubuntu (plus integrare Vite)

În partea anterioară a acestui ghid, am transformat un VPS Ubuntu proaspăt instalat într-un mediu securizat (non-root, UFW), pregătit cu Node.js 22, Nginx, Homebrew și autentificare Git.

Astăzi, trecem la nivelul următor. Vom construi arhitectura clasică LEMP (Linux, Nginx, MySQL, PHP) peste fundația noastră și vom face deploy unui proiect nou de Laravel 12, configurând atât backend-ul (baza de date), cât și frontend-ul (compilat cu Vite prin Node.js).

Dacă ești dezvoltator web, acesta este setup-ul de producție suprem pentru performanță maximă.


Pasul 1: Instalarea PHP 8.3, PHP-FPM și Composer

Laravel 12 necesită o versiune modernă de PHP. Deoarece Nginx excelează la servirea fișierelor statice dar nu procesează nativ cod PHP, vom folosi PHP-FPM (FastCGI Process Manager) ca intermediar.

# Actualizăm pachetele și instalăm PHP-CLI, FPM și utilitarele necesare
sudo apt update
sudo apt install -y php-cli php-fpm unzip curl

# Instalăm extensiile PHP necesare pentru Laravel
sudo apt install -y php-mbstring php-xml php-bcmath php-curl php-zip php-mysql

# Restartăm serviciul (în cazul nostru, versiunea instalată este 8.3)
sudo systemctl restart php8.3-fpm

Apoi, instalăm Composer la nivel global, managerul de pachete esențial pentru ecosistemul PHP:

curl -sS https://getcomposer.org/installer -o composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
rm composer-setup.php

Pasul 2: Configurarea Bazei de Date (MySQL)

Niciun proiect serios nu este complet fără o bază de date relațională. Vom instala MySQL Server și îl vom securiza imediat.

sudo apt install -y mysql-server
sudo mysql_secure_installation

(Alege o parolă puternică, elimină utilizatorii anonimi, dezactivează login-ul de la distanță pentru root și șterge baza de date de test).

Apoi, creăm baza de date și utilizatorul dedicat pentru aplicația noastră (nu folosi niciodată utilizatorul root în aplicație!):

# sql
sudo mysql > CREATE DATABASE kiteflow_db; > CREATE USER 'kiteflow_user'@'localhost' IDENTIFIED BY 'parola_ta_secreta'; > GRANT ALL PRIVILEGES ON kiteflow_db.* TO 'kiteflow_user'@'localhost'; > FLUSH PRIVILEGES; > EXIT;

Pasul 3: Crearea Proiectului Laravel 12 și Setarea Permisiunilor

Ne mutăm în directorul web standard al sistemelor Linux (/var/www/) și inițializăm noul nostru proiect, pe care îl vom numi generic kiteflow.

cd /var/www/
sudo composer create-project laravel/laravel kiteflow

Crucial: Nginx rulează sub utilizatorul www-data. Pentru ca Laravel să poată scrie log-uri sau fișiere în cache, trebuie să ajustăm permisiunile (ownership):

sudo chown -R www-data:www-data /var/www/kiteflow
sudo chmod -R 775 /var/www/kiteflow/storage
sudo chmod -R 775 /var/www/kiteflow/bootstrap/cache

Pasul 4: Configurarea Server Block-ului Nginx (și Depanarea Erorii 502/404)

Laravel expune pe internet exclusiv folderul public/. Trebuie să instruim Nginx să ruteze traficul acolo și să trimită fișierele .php către socket-ul PHP-FPM corect.

Edităm fișierul sudo nano /etc/nginx/sites-available/default:

# Nginx
server
{ listen 80; root /var/www/kiteflow/public; # Adăugăm index.php ca prioritate index index.php index.html index.htm; # URL-uri curate (fără .php în link) location / { try_files $uri $uri/ /index.php?$query_string; } # Procesarea scripturilor PHP location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.3-fpm.sock; } }

💡 Studiu de caz (Troubleshooting pe viu):

În timpul instalării noastre, ne-am lovit de o eroare Nginx 404 urmată de o eroare în log-uri (verificabilă cu tail -n 10 /var/log/nginx/error.log):

connect() to unix:/run/php/php7.4-fpm.sock failed (2: No such file or directory)

Cauza? Configurația veche de Nginx căuta socket-ul pentru PHP 7.4, dar pe serverul nostru rula o versiune modernă (8.3).

Soluția: Am verificat versiunea reală instalată rulând ls -la /run/php/, am actualizat linia fastcgi_pass în configurația Nginx la php8.3-fpm.sock, am validat cu nginx -t și am restartat cu systemctl restart nginx. Pagina de bun venit Laravel a apărut imediat!

Pasul 5: Conectarea la MySQL și Rularea Migrațiilor

În folderul aplicației (/var/www/kiteflow), edităm fișierul de configurare a mediului:

nano .env

Actualizăm blocurile bazei de date cu informațiile de la Pasul 2:

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=kiteflow_db
DB_USERNAME=kiteflow_user
DB_PASSWORD=parola_ta_secreta

Curățăm memoria cache și rulăm migrațiile pentru a crea tabelele:

php artisan config:clear
php artisan migrate

Dacă output-ul este verde (Running migrations... DONE), conectarea este un succes!

Pasul 6: Compilarea Frontend-ului (Vite + Node.js)

Deoarece în partea 1 am instalat deja Node.js v22 pe server, procesarea asset-urilor (Tailwind, Vue, React, etc.) direct pe VPS este o joacă de copii. Laravel folosește Vite ca bundler nativ.

Rulăm comanda din rădăcina proiectului /var/www/kiteflow pentru a descărca dependențele:

npm install

Apoi, generăm fișierele optimizate pentru producție (care vor fi salvate în public/build):

npm run build

(Nu uita să re-aplici permisiunile chown -R www-data:www-data /var/www/kiteflow/public dacă ai compilat rulând comenzile ca root, pentru ca Nginx să poată servi fișierele proaspăt minificate).


Concluzie

Într-un timp record, am reușit să punem pe picioare o infrastructură avansată:

  1. Server Securizat cu Node.js.

  2. Nginx servind ca Reverse Proxy.

  3. Un mediu de dezvoltare solid cu PHP 8.3, Laravel 12 și un server stabil de baze de date (MySQL).

  4. Asset-uri frontend compilate modern prin Vite.

Ce urmează?

Următorul pas natural pentru a lansa această aplicație în producție este achiziționarea unui nume de domeniu și generarea unui certificat SSL Let's Encrypt prin Certbot, trecând astfel la HTTPS. 

Galerie

5 images • Click to view full size

Tap any image to view • Swipe to navigate

Articole similare

Continue exploring similar topics

Vizualizează toate în Work
Cover image for De la Clawdbot la OpenClaw: Update și primele impresii
Work

De la Clawdbot la OpenClaw: Update și primele impresii

Clawdbot a devenit OpenClaw. Am făcut update-ul, am testat noul asistent AI în terminal și îți spun dacă merită efortul și cât de stabil e noul release.

803 4 min
Image 7 for Clawdbot (Moltbot): Agentul AI care îți "conduce" viata
Work

Clawdbot (Moltbot): Agentul AI care îți "conduce" viata

Am testat Clawdbot (Moltbot), noul agent AI local. Instalare pe macOS, integrare WhatsApp și acces la Apple Notes. Merită riscul de securitate?

735 5 min
Cover image for Configurare OpenClaw cu Ollama și modelul kimi-k2.5:cloud
Work

Configurare OpenClaw cu Ollama și modelul kimi-k2.5:cloud

Învață cum să instalezi și să configurezi OpenClaw folosind Ollama și modelul kimi-k2.5:cloud. Descoperă pașii de la onboarding, rezolvarea erorilor ....

579 5 min