Cum să instalezi Linux, Nginx, MySQL, PHP (stack LEMP) pe Ubuntu


Introducere

Pachetul software LEMP servește pagini web dinamice și aplicații web scrise în PHP. Acesta este un acronim care descrie un sistem de operare Linux, cu un server web Nginx (pronunțat ca „Engine-X”). Datele din backend sunt stocate în baza de date MySQL, iar procesarea dinamică este gestionată de PHP.

Acest ghid demonstrează cum să instalați un stack LEMP pe un server Ubuntu. Sistemul de operare Ubuntu se ocupă de partea Linux a stack-ului. Vom descrie cum să punem în funcțiune restul componentelor.

Notă: Acest tutorial se adresează în principal Ubuntu 22.04 LTS cu PHP 8.1. Pentru utilizatorii de Ubuntu 24.04 LTS, modificați referințele la versiunea PHP de la php8.1-fpm la php8.3-fpm în toate comenzile. De asemenea, asigurați-vă că actualizați toate căile socket PHP-FPM în configurația Nginx (de exemplu, folosiți /run/php/php8.3-fpm.sock pentru Ubuntu 24.04).

Cum să instalezi Linux, Nginx, MySQL, PHP (stack LEMP) pe Ubuntu

  1. Instalarea serverului web Nginx
  2. Instalarea MySQL
  3. Instalarea PHP
  4. Configurarea Nginx pentru a utiliza procesorul PHP
  5. Testarea PHP cu Nginx
  6. Testarea conexiunii la baza de date din PHP

Cerințe prealabile

Folosește un utilizator sudo care nu are drepturi de root pe Ubuntu, cu firewall-ul UFW activat. Urmează ghidul nostru de configurare inițială a serverului pentru Ubuntu pentru a configura acest lucru.

Pasul 1 – Instalarea serverului web Nginx

Pentru a afișa pagini web vizitatorilor site-ului, vei folosi Nginx, un server web de înaltă performanță. Vei folosi managerul de pachete APT pentru a obține acest software.

Actualizează indexul pachetelor serverului tău, apoi instalează Nginx:

sudo apt update

După aceasta, rulează apt install pentru a instala Nginx:

sudo apt install nginx

Când vi se solicită, apăsați Y și ENTER pentru a confirma că doriți să instalați Nginx. Odată ce instalarea este finalizată, serverul web Nginx va fi activ și va rula pe serverul dvs. Ubuntu.

Verificați dacă Nginx rulează:

sudo systemctl status nginx

Ar trebui să vezi un rezultat care indică faptul că Nginx este activ:

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

Pe Ubuntu, Nginx este configurat să pornească automat la instalare.

Permite traficul HTTP prin firewall-ul ufw. Nginx înregistrează mai multe profiluri de aplicație UFW la instalare. Verificați profilurile disponibile:

sudo ufw app list
Available applications:
  Nginx Full
  Nginx HTTP
  Nginx HTTPS
  OpenSSH

Activează cel mai restrictiv profil care permite traficul necesar. Deoarece SSL nu este configurat încă, permite doar traficul HTTP pe portul 80:

Activează acest lucru rulând următoarele:

sudo ufw allow 'Nginx HTTP'

Verificați modificarea firewall-ului:

sudo ufw status

Această ieșire arată că traficul HTTP este acum permis:

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx HTTP                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Pentru a testa funcționalitatea domeniului serverului Nginx, accesați http://your_domain folosind browserul web preferat.

Dacă nu aveți un nume de domeniu îndreptat către serverul dvs. și nu cunoașteți adresa IP publică a serverului, o puteți afla rulând oricare dintre următoarele comenzi:

ip addr show
hostname -I

Acest lucru va afișa câteva adrese IP. Le poți încerca pe rând în browserul tău web.

Ca alternativă, poți verifica care adresă IP este accesibilă, așa cum este văzută din alte locații de pe internet:

curl -4 icanhazip.com

Scrie adresa pe care o primești în browserul tău și aceasta te va duce la pagina de start implicită a Nginx:

http://<server_domain_or_IP>

Dacă primiți această pagină, înseamnă că ați instalat cu succes Nginx și ați activat traficul HTTP pentru serverul dumneavoastră web.

Pasul 2 — Instalarea MySQL

Instalează MySQL pentru a stoca și gestiona datele site-ului. MySQL este sistemul standard de gestionare a bazelor de date pentru mediile PHP.

Din nou, folosește apt pentru a achiziționa și instala acest software:

sudo apt install mysql-server

Când vi se solicită, confirmați instalarea apăsând Y, apoi ENTER.

După instalare, rulează scriptul de securitate pentru a elimina setările implicite nesigure și a restricționa accesul la baza de date:

sudo mysql_secure_installation

Vi se va afișa o întrebare care vă va întreba dacă doriți să configurați VALIDATE PASSWORD PLUGIN.

Notă: Activarea acestei funcții este oarecum o chestiune de judecată. Dacă este activată, parolele care nu corespund criteriilor specificate vor fi respinse de MySQL cu o eroare. Este sigur să lăsați validarea dezactivată, dar ar trebui să folosiți întotdeauna parole puternice și unice pentru acreditările bazei de date.

Răspundeți Y pentru da sau orice altceva pentru a continua fără a activa:

VALIDATE PASSWORD COMPONENT can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD component?

Press y|Y for Yes, any other key for No: 

Dacă răspundeți „da”, vi se va cere să selectați un nivel de validare a parolei. Țineți cont că, dacă introduceți 2 pentru cel mai puternic nivel, veți primi erori atunci când încercați să setați o parolă care nu conține cifre, litere mari și mici și caractere speciale:

There are three levels of password validation policy:

LOW    Length >= 8
MEDIUM Length >= 8, numeric, mixed case, and special characters
STRONG Length >= 8, numeric, mixed case, special characters and dictionary              file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1

Indiferent dacă ați ales să configurați VALIDATE PASSWORD PLUGIN, serverul vă va cere să selectați și să confirmați o parolă pentru utilizatorul MySQL root. Acesta nu trebuie confundat cu root-ul sistemului. Utilizatorul root al bazei de date este un utilizator administrativ cu privilegii complete asupra sistemului de baze de date. Chiar dacă metoda implicită de autentificare pentru utilizatorul root MySQL permite omisiunea parolei, chiar și când una este setată, ar trebui să definiți aici o parolă puternică ca măsură suplimentară de siguranță. Vom discuta despre aceasta în curând.

Dacă ați activat validarea parolei, vi se va afișa forța parolei pentru parola root pe care ați introdus-o și serverul vă va întreba dacă doriți să continuați cu acea parolă. Dacă sunteți mulțumit de parola dvs. actuală, apăsați Y pentru „da” la prompt:

Estimated strength of the password: 100 
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y

Pentru restul întrebărilor, apăsați Y și tastați ENTER la fiecare prompt. Aceasta va elimina câțiva utilizatori anonimi și baza de date de test, va dezactiva autentificările root de la distanță și va încărca aceste noi reguli astfel încât MySQL să respecte imediat modificările făcute.

Când ai terminat, testează dacă poți să te conectezi la consola MySQL:

sudo mysql

Aceasta se va conecta la serverul MySQL ca utilizator administrativ al bazei de date root, ceea ce este dedus prin utilizarea sudo atunci când rulați această comandă. Ar trebui să primiți următorul rezultat:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.28-0ubuntu4 (Ubuntu)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

Pentru a ieși din consola MySQL, scrie următoarele:

exit

Observați că nu a fost necesar să furnizați o parolă pentru a vă conecta ca utilizator root, chiar dacă ați definit una la rularea scriptului mysql_secure_installation. Acest lucru se datorează faptului că, atunci când este instalat pe Ubuntu, metoda implicită de autentificare pentru utilizatorul administrativ MySQL este auth_socket, și nu o metodă care folosește parolă. La prima vedere, acest lucru poate părea o problemă de securitate, dar face serverul de baze de date mai sigur, deoarece singurii utilizatori care au voie să se autentifice ca utilizatorul MySQL root sunt utilizatorii de sistem cu privilegii sudo care se conectează din consolă sau printr-o aplicație care rulează cu aceleași privilegii. În termeni practici, aceasta înseamnă că nu veți putea folosi utilizatorul administrativ de baze de date root pentru a vă conecta din aplicația PHP.

Pentru o securitate sporită, este mai bine să aveți conturi de utilizator dedicate cu privilegii mai restrânse pentru fiecare bază de date, în special dacă plănuiți să găzduiți mai multe baze de date pe serverul dvs.

Notă: Unele versiuni mai vechi ale bibliotecii native PHP pentru MySQL mysqlnd nu suportă caching_sha2_authentication, metoda implicită de autentificare pentru utilizatorii creați în MySQL 8. Din acest motiv, atunci când creați utilizatori de baze de date pentru aplicații PHP pe MySQL 8, poate fi necesar să vă asigurați că sunt configurați să folosească mysql_native_password. Vom demonstra cum să faceți acest lucru în Pasul 6.

Serverul tău MySQL este acum instalat și securizat. Următorul pas este să instalezi PHP, componenta finală din stiva LEMP.

Pasul 3 – Instalarea PHP

Instalează PHP pentru a procesa codul și a genera conținut dinamic. Nginx necesită un program extern pentru procesarea PHP.

PHP-FPM („manager de procese FastCGI”) gestionează procesarea PHP eficient, cu funcții suplimentare de securitate, oferind performanțe mai bune pentru site-urile web bazate pe PHP. Instalează php-fpm pentru a direcționa cererile PHP de la Nginx și php-mysql pentru a permite comunicarea PHP-MySQL. Pachetele de bază PHP se instalează automat ca dependențe.

Pentru a instala pachetele php8.1-fpm și php-mysql, executați:

sudo apt install php8.1-fpm php-mysql

Când vi se solicită, apăsați Y și ENTER pentru a confirma instalarea.

Verificați dacă PHP-FPM rulează:

sudo systemctl status php8.1-fpm

Ar trebui să vezi un rezultat care arată că PHP-FPM este activ:

● php8.1-fpm.service - The PHP 8.1 FastCGI Process Manager
     Loaded: loaded
     Active: active (running)

De asemenea, poți verifica versiunea PHP:

php -v
PHP 8.1.x (cli) (built: ...)
Copyright (c) The PHP Group
Zend Engine v4.1.x

Configurează Nginx pentru a folosi aceste componente PHP.

Pasul 4 — Configurarea Nginx pentru a utiliza procesorul PHP

Creează blocuri de server Nginx (similar cu gazdele virtuale Apache) pentru a încadra configurația și a găzdui mai multe domenii pe un singur server. Acest ghid folosește your_domain ca exemplu de nume de domeniu.

Informații: Pentru a afla mai multe despre configurarea unui nume de domeniu cu Linux-Console.net, citiți introducerea noastră despre DNS-ul Linux-Console.net.

Pe Ubuntu 22.04, Nginx activează un bloc de server implicit care servește documente din /var/www/html. Pentru mai multe site-uri, creează o structură de directoare în interiorul /var/www pentru your_domain, lăsând /var/www/html ca director implicit de rezervă.

Creează directorul web rădăcină pentru your_domain după cum urmează:

sudo mkdir /var/www/your_domain

Apoi, atribuiți proprietatea directorului utilizând variabila de mediu $USER, care va face referire la utilizatorul curent al sistemului:

sudo chown -R $USER:$USER /var/www/your_domain

Apoi, deschideți un fișier de configurare nou în directorul sites-available al Nginx folosind editorul de linie de comandă preferat. Aici, vom folosi nano:

sudo nano /etc/nginx/sites-available/your_domain

Acest lucru va crea un fișier nou și gol. Introduceți următoarea configurație de bază:

server {
    listen 80;
    server_name your_domain www.your_domain;
    root /var/www/your_domain;

    index index.html index.htm index.php;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/run/php/php8.1-fpm.sock;
     }

    location ~ /\.ht {
        deny all;
    }

}

Iată ce face fiecare dintre aceste directive și blocuri de locație:

  • listen — Define pe ce port va asculta Nginx. În acest caz, va asculta pe portul 80, portul implicit pentru HTTP.
  • root — Definește rădăcina documentului unde sunt stocate fișierele servite de acest website.
  • index — Definește în ce ordine Nginx va prioritiza fișierele index pentru acest site web. Este o practică obișnuită să se listeze fișierele index.html cu o precedență mai mare decât fișierele index.php pentru a permite configurarea rapidă a unei pagini de întreținere în aplicațiile PHP. Poți ajusta aceste setări pentru a se potrivi mai bine nevoilor aplicației tale.
  • server_name — Definește pentru ce nume de domenii și/sau adrese IP ar trebui să răspundă acest bloc de server. Indică această directivă către numele de domeniu al serverului tău sau adresa IP publică.
  • location / — Primul bloc de locație include o directivă try_files, care verifică existența fișierelor sau directoarelor care corespund unei cereri URL. Dacă Nginx nu poate găsi resursa corespunzătoare, va returna o eroare 404.
  • location ~ \.php$ — Acest bloc de locație gestionează procesarea efectivă a PHP-ului prin indicarea către Nginx a fișierului de configurare fastcgi-php.conf și a fișierului php8.1-fpm.sock, care declară ce socket este asociat cu php8.1-fpm.
  • location ~ /\.ht — Ultimul bloc de locație se ocupă de fișierele .htaccess, pe care Nginx nu le procesează. Adăugând directiva deny all, dacă vreun fișier .htaccess ajunge în rădăcina documentului, acesta nu va fi oferit vizitatorilor.

Când ați terminat de editat, salvați și închideți fișierul. Dacă folosiți nano, puteți face acest lucru apăsând CTRL+X, apoi Y și ENTER pentru a confirma.

Activează configurația ta prin conectarea la fișierul de configurație din directorul sites-enabled al Nginx:

sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/

Apoi, dezlegați fișierul de configurare implicit din directorul /sites-enabled/:

sudo unlink /etc/nginx/sites-enabled/default

Notă: Dacă vreodată vei avea nevoie să restaurezi configurația implicită, poți face acest lucru recreând linkul simbolic, astfel:

sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/

Acest lucru va indica Nginx să folosească configurația data viitoare când va fi reîncărcat. Puteți testa configurația pentru erori de sintaxă rulând următorul lucru:

sudo nginx -t

Dacă sunt raportate erori, reveniți la fișierul de configurare pentru a-i verifica conținutul înainte de a continua.

Când ești pregătit, reîncarcă Nginx pentru a aplica modificările:

sudo systemctl reload nginx

Noua ta pagină web este acum activă, dar rădăcina web /var/www/your_domain este încă goală. Creează un fișier index.html în acea locație pentru a testa dacă blocul tău de server funcționează așa cum te aștepți:

nano /var/www/your_domain/index.html

Includeți următorul conținut în acest fișier:

<html>
  <head>
    <title>your_domain website</title>
  </head>
  <body>
    <h1>Hello World!</h1>

    <p>This is the landing page of <strong>your_domain</strong>.</p>
  </body>
</html>

Acum accesează browserul și introdu numele de domeniu al serverului tău sau adresa IP, așa cum este listată în directiva server_name din fișierul de configurare al blocului de server:

http://server_domain_or_IP

Vei primi o pagină precum următoarea:

Dacă primiți această pagină, înseamnă că blocul de server Nginx funcționează conform așteptărilor.

Poți lăsa acest fișier așa cum este ca o pagină de destinație temporară pentru aplicația ta până când creezi un fișier index.php pentru a-l înlocui.

Atenție: După ce adăugați fișierul index.php, asigurați-vă că eliminați sau redenumiți fișierul index.html din rădăcina documentului. Dacă ambele fișiere există, Nginx va servi implicit index.html, iar pagina dvs. PHP nu va fi afișată — acesta este o sursă comună de confuzie pentru utilizatorii noi.

Stack-ul tău LEMP este acum complet configurat. În pasul următor, vei crea un script PHP pentru a testa dacă Nginx poate într-adevăr să gestioneze fișiere .php în cadrul site-ului tău abia configurat.

Pasul 5 –Testarea PHP cu Nginx

Stack-ul tău LEMP ar trebui să fie acum complet configurat. Îl poți testa pentru a valida că Nginx poate transmite corect fișierele .php către procesorul tău PHP.

Poți face acest lucru creând un fișier PHP de test în rădăcina documentelor tale. Deschide un fișier nou numit info.php în rădăcina documentelor tale, în editorul tău de text preferat:

nano /var/www/your_domain/info.php

Adaugă următoarele linii în fișierul nou. Acesta este cod PHP valid care va returna informații despre serverul tău:

<?php
phpinfo();

Când termini, salvează și închide fișierul.

Acum poți accesa această pagină în browserul tău web vizitând numele de domeniu sau adresa IP publică pe care ai configurat-o în fișierul tău de configurare Nginx, urmată de /info.php:

http://server_domain_or_IP/info.php

Veți primi o pagină web care conține informații detaliate despre serverul dvs.:

După ce verificați informațiile relevante despre serverul dumneavoastră PHP prin acea pagină, este mai bine să ștergeți fișierul creat, deoarece conține informații sensibile despre mediul dumneavoastră PHP și serverul Ubuntu. Puteți folosi rm pentru a șterge acel fișier:

sudo rm /var/www/your_domain/info.php

Întotdeauna poți regenera acest fișier dacă îl vei avea nevoie mai târziu.

Pasul 6 — Testarea conexiunii la baza de date din PHP (Opțional)

Dacă vrei să testezi dacă PHP poate să se conecteze la MySQL și să execute interogări pe baza de date, poți crea un tabel de test cu date fictive și să interoghezi conținutul acestuia dintr-un script PHP. Înainte de a face acest lucru, trebuie să creezi o bază de date de test și un utilizator MySQL nou, configurat corespunzător pentru a avea acces la aceasta.

Notă: Unele versiuni mai vechi ale bibliotecii native MySQL PHP mysqlnd nu suportă caching_sha2_authentication, metoda implicită de autentificare pentru MySQL 8, poate fi necesar să vă asigurați că sunt configurate să utilizeze mysql_native_password în schimb.

Vom crea o bază de date numită example_database și un utilizator numit example_user, dar puteți înlocui aceste nume cu valori diferite.

Mai întâi, conectați-vă la consola MySQL folosind contul root:

sudo mysql

Pentru a crea o bază de date nouă, rulează următoarea comandă din consola ta MySQL:

CREATE DATABASE example_database;

Acum poți crea un utilizator nou și să-i acorzi privilegii complete pe baza de date personalizată pe care ai creat-o.

Comanda următoare creează un utilizator nou numit example_user, folosind mysql_native_password ca metodă implicită de autentificare. Setăm parola acestui utilizator ca password, dar ar trebui să înlocuiți această valoare cu o parolă sigură aleasă de dumneavoastră.

CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

Acum trebuie să acordăm acestui utilizator permisiunea asupra bazei de date example_database:

GRANT ALL ON example_database.* TO 'example_user'@'%';

Acest lucru va acorda utilizatorului example_user privilegii complete asupra bazei de date example_database, în timp ce îl va împiedica să creeze sau să modifice alte baze de date pe serverul tău.

Acum ieșiți din shell-ul MySQL cu următoarea comandă:

exit

Poți verifica dacă noul utilizator are permisiunile corespunzătoare conectându-te din nou la consola MySQL, de data aceasta folosind datele de autentificare ale utilizatorului personalizat. Observă semnul -p din această comandă, care te va invita să introduci parola folosită la crearea utilizatorului example_user:

mysql -u example_user -p

După ce vă conectați la consola MySQL, confirmați că aveți acces la baza de date example_database:

SHOW DATABASES;

Acest lucru va returna următorul rezultat:

+--------------------+
| Database           |
+--------------------+
| example_database   |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)

Următorul pas este să creăm un tabel de test denumit todo_list. Din consola MySQL, rulează următoarea comandă:

CREATE TABLE example_database.todo_list (

 item_id INT AUTO_INCREMENT,

 content VARCHAR(255),

 PRIMARY KEY(item_id)

);

Introduceți câteva rânduri de conținut în tabelul de test. Este posibil să doriți să repetați comanda următoare de câteva ori, folosind valori diferite:

INSERT INTO example_database.todo_list (content) VALUES ("My first important item");

Pentru a confirma că datele au fost salvate cu succes în tabelul dvs., rulați:

SELECT * FROM example_database.todo_list;

Ieșirea dvs. ar trebui să fie afișată astfel:

+---------+--------------------------+
| item_id | content                  |
+---------+--------------------------+
|       1 | My first important item  |
|       2 | My second important item |
|       3 | My third important item  |
|       4 | and this one more thing  |
+---------+--------------------------+
4 rows in set (0.000 sec)

După ce confirmați că aveți date valide în tabelul de test, puteți ieși din consola MySQL:

exit

Acum poți crea scriptul PHP care se va conecta la MySQL și va interoga conținutul tău. Creează un fișier PHP nou în directorul rădăcină web personalizat folosind editorul tău preferat. Vom folosi nano pentru asta:

nano /var/www/your_domain/todo_list.php

Următorul script PHP se conectează la baza de date MySQL și interoghează conținutul tabelului todo_list, afișând rezultatele într-o listă. Dacă există o problemă cu conexiunea la baza de date, va arunca o excepție.

Adaugă următorul conținut în scriptul tău todo_list.php:

<?php
$user = "example_user";
$password = "password";
$database = "example_database";
$table = "todo_list";

try {
  $db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
  echo "<h2>TODO</h2><ol>"; 
  foreach($db->query("SELECT content FROM $table") as $row) {
    echo "<li>" . $row['content'] . "</li>";
  }
  echo "</ol>";
} catch (PDOException $e) {
    print "Error!: " . $e->getMessage() . "<br/>";
    die();
}

Salvați și închideți fișierul când ați terminat de editat.

Acum poți accesa această pagină în browserul tău web vizitând numele de domeniu sau adresa IP publică configurată pentru site-ul tău, urmată de /todo_list.php:

http://server_domain_or_IP/todo_list.php

Ar trebui să primiți o pagină precum următoarea, care arată conținutul pe care l-ați introdus în tabelul dvs. de test:

Asta înseamnă că mediul tău PHP este pregătit să se conecteze și să interacționeze cu serverul tău MySQL.

Întrebări frecvente

La ce se folosește stiva LEMP?

Stack-ul LEMP găzduiește site-uri și aplicații dinamice bazate pe PHP, inclusiv WordPress, Laravel, Magento, Drupal și proiecte PHP personalizate. Este deosebit de eficient pentru site-urile cu trafic ridicat care necesită gestionarea eficientă a conexiunilor simultane.

Care este diferența dintre stivele LEMP și LAMP?

LEMP folosește Nginx, care gestionează conexiunile asincron cu o arhitectură bazată pe evenimente—eficientă pentru utilizatori concurenți. LAMP folosește Apache, care în mod tradițional creează un thread pentru fiecare cerere (deși Apache modern suportă moduri bazate pe evenimente). LEMP oferă în general performanțe mai bune pentru conținut static și scenarii cu concurență ridicată, în timp ce LAMP oferă o configurare mai ușoară a .htaccess și un suport mai larg pentru module.

Ce versiune de Ubuntu ar trebui să folosesc pentru LEMP?

Ubuntu 22.04 LTS este ținta principală a acestui ghid, având PHP 8.1, MySQL 8.0 și Nginx cu suport pe termen lung. Ubuntu 24.04 LTS (ultima versiune) include implicit PHP 8.3 și funcționează cu acest ghid prin ajustarea căilor și numerelor de versiune ale socket-ului PHP-FPM corespunzător.

Cum instalez pachetul LEMP pe Ubuntu 24.04?

Urmează acești pași de bază:

  1. Instalează Nginx: sudo apt install nginx
  2. Instalează MySQL: sudo apt install mysql-server
  3. Rulează scriptul de securitate MySQL: sudo mysql_secure_installation
  4. Instalează PHP-FPM: sudo apt install php-fpm php-mysql
  5. Configurează blocul de server Nginx cu integrare PHP-FPM
  6. Test cu info.php și conexiunea la baza de date

Consultați ghidul complet în pașii 1-6 de mai sus.

Ce versiune de PHP ar trebui să instalez cu Nginx și MySQL?

Folosește versiunea implicită de PHP a Ubuntu pentru cea mai bună compatibilitate:

  • Ubuntu 22.04: PHP 8.1 (instalat prin php8.1-fpm)
  • Ubuntu 24.04: PHP 8.3 (ajustați comenzile la php8.3-fpm pentru această versiune)

Ambele versiuni funcționează excelent cu Nginx și MySQL 8.0, suportă framework-uri moderne și primesc actualizări de securitate active.

Cum configurez Nginx pentru a procesa fișiere PHP?

Adaugă un bloc location ~ \.php$ în configurația serverului tău Nginx care direcționează cererile PHP către PHP-FPM printr-un socket Unix:

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/run/php/php8.1-fpm.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

Ajustați calea socket-ului în funcție de versiunea PHP, testați cu sudo nginx -t și reîncărcați cu sudo systemctl reload nginx.

De ce primesc eroarea „502 Bad Gateway” după instalarea PHP-FPM?

Erorile 502 indică faptul că Nginx nu poate comunica cu PHP-FPM. Cauze comune:

  1. PHP-FPM nu rulează: Verificați cu sudo systemctl status php8.1-fpm și porniți dacă este necesar
  2. Cale greșită a socket-ului: Verificați dacă /run/php/php8.1-fpm.sock există și corespunde configurației dvs. Nginx
  3. Problema permisiunilor: Asigurați-vă că utilizatorul Nginx (www-data) poate accesa socket-ul
  4. Eroare de configurare PHP-FPM: Verificați jurnalele la /var/log/php8.1-fpm.log

Soluție: Reporniți ambele servicii:

sudo systemctl restart php8.1-fpm nginx

Cum îmi securizez MySQL după instalare?

Rulați scriptul de securitate încorporat:

sudo mysql_secure_installation

Urmează instrucțiunile pentru a:

  • Activează pluginul de validare a parolei
  • Setează o parolă puternică pentru root
  • Eliminați utilizatorii anonimi
  • Dezactivează autentificarea root la distanță
  • Șterge baza de date de test
  • Reîncarcă privilegiile

Pentru bazele de date ale aplicațiilor, creează utilizatori dedicați cu privilegii limitate în loc să folosești contul root.

Pot să rulez mai multe site-uri web pe un singur server LEMP?

Da, creează blocuri de server Nginx separate pentru fiecare domeniu:

  1. Creează directorul: sudo mkdir -p /var/www/second_domain
  2. Creează blocul de server: sudo nano /etc/nginx/sites-available/second_domain
  3. Configurează cu directive server_name și root unice
  4. Activează: sudo ln -s /etc/nginx/sites-available/second_domain /etc/nginx/sites-enabled/
  5. Testează și reîncarcă: sudo nginx -t && sudo systemctl reload nginx

Fiecare site poate avea setări PHP și utilizatori de bază de date separate.

Cum pot să fac upgrade la o versiune mai nouă de PHP?

Actualizările pachetelor Ubuntu gestionează automat versiunile minore. Pentru actualizările versiunilor majore:

  1. Adăugați PHP PPA al lui Ondřej (repozitivul terță parte de încredere):

    sudo add-apt-repository ppa:ondrej/php
    sudo apt update
  2. Instalează o nouă versiune de PHP-FPM:

    sudo apt install php8.3-fpm php8.3-mysql -y
  3. Actualizează calea socket-ului din configurația Nginx la /run/php/php8.3-fpm.sock

  4. Testează și reîncarcă Nginx

  5. Opțional, eliminați versiunea veche: sudo apt purge php8.1-fpm

Testați întotdeauna în mediul de testare înainte de a actualiza sistemele de producție.

Depanarea problemelor comune

Eroare 502 Bad Gateway

Cea mai frecventă problemă a stivei LEMP apare atunci când Nginx nu poate comunica cu PHP-FPM:

Verifică starea PHP-FPM:

sudo systemctl status php8.1-fpm

Verifică calea conectorului:

ls -la /run/php/

Rezultatul așteptat ar trebui să afișeze fișierul php8.1-fpm.sock.

Remedieri comune:

  1. Repornește PHP-FPM: sudo systemctl restart php8.1-fpm
  2. Verificați dacă calea socket-ului din blocul server Nginx corespunde cu socket-ul real PHP-FPM
  3. Verificați permisiunile fișierului: sudo chown www-data:www-data /run/php/php8.1-fpm.sock

Erori de permisiune refuzată

Remediați permisiunile directorului web:

sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domain

Probleme de conectare MySQL

Resetează parola root MySQL:

sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
FLUSH PRIVILEGES;
EXIT;

Verificați serviciul MySQL:

sudo systemctl status mysql

PHP nu procesează

Verificați modulele PHP:

php -m | grep -E 'mysql|fpm'

Verificați configurația PHP-FPM:

sudo nginx -t
sudo php-fpm8.1 -t

Depanare erori 404:

  • Verificați dacă index.php este listat în directiva index din Nginx
  • Verifică dacă fișierul există: ls -la /var/www/your_domain/
  • Verificați jurnalele de erori Nginx: sudo tail -f /var/log/nginx/error.log

Concluzie

În acest ghid, ați construit o bază flexibilă pentru a oferi site-uri și aplicații PHP vizitatorilor dvs., folosind Nginx ca server web și MySQL ca sistem de baze de date. Puteți face acest lucru și cu un server web Apache; consultați tutorialul nostru despre Cum să instalați stiva Linux, Apache, MySQL, PHP (LAMP) pe Ubuntu. De asemenea, vă puteți securiza site-ul cu Let’s Encrypt, care oferă certificate gratuite și de încredere. Aflați cum să faceți acest lucru cu ghidul nostru despre Let’s Encrypt pentru Apache.

Mulțumim că ați învățat împreună cu comunitatea Linux-Console.net.