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-fpmlaphp8.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.sockpentru Ubuntu 24.04).
Cum să instalezi Linux, Nginx, MySQL, PHP (stack LEMP) pe Ubuntu
- Instalarea serverului web Nginx
- Instalarea MySQL
- Instalarea PHP
- Configurarea Nginx pentru a utiliza procesorul PHP
- Testarea PHP cu Nginx
- 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 updateDupă aceasta, rulează apt install pentru a instala Nginx:
sudo apt install nginxCâ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 nginxAr 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 listAvailable applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSHActivează 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 statusAceastă 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 showhostname -IAcest 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.comScrie 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-serverCâ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_installationVi 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: 1Indiferent 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) : yPentru 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 mysqlAceasta 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:
exitObservaț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-mysqlCâ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-fpmAr 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 -vPHP 8.1.x (cli) (built: ...)
Copyright (c) The PHP Group
Zend Engine v4.1.xConfigurează 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_domainApoi, 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_domainApoi, 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_domainAcest 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 portul80, 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șiereleindex.htmlcu o precedență mai mare decât fișiereleindex.phppentru 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 configurarefastcgi-php.confși a fișieruluiphp8.1-fpm.sock, care declară ce socket este asociat cuphp8.1-fpm.location ~ /\.ht— Ultimul bloc de locație se ocupă de fișierele.htaccess, pe care Nginx nu le procesează. Adăugând directivadeny all, dacă vreun fișier.htaccessajunge î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/defaultNotă: 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 -tDacă 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 nginxNoua 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.htmlIncludeț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_IPVei 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.phpAdaugă 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.phpVeț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 mysqlPentru 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ă:
exitPoț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 -pDupă 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:
exitAcum 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.phpUrmă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.phpAr 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ă:
- Instalează Nginx:
sudo apt install nginx - Instalează MySQL:
sudo apt install mysql-server - Rulează scriptul de securitate MySQL:
sudo mysql_secure_installation - Instalează PHP-FPM:
sudo apt install php-fpm php-mysql - Configurează blocul de server Nginx cu integrare PHP-FPM
- 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-fpmpentru 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:
- PHP-FPM nu rulează: Verificați cu
sudo systemctl status php8.1-fpmși porniți dacă este necesar - Cale greșită a socket-ului: Verificați dacă
/run/php/php8.1-fpm.sockexistă și corespunde configurației dvs. Nginx - Problema permisiunilor: Asigurați-vă că utilizatorul Nginx (www-data) poate accesa socket-ul
- 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 nginxCum îmi securizez MySQL după instalare?
Rulați scriptul de securitate încorporat:
sudo mysql_secure_installationUrmează 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:
- Creează directorul:
sudo mkdir -p /var/www/second_domain - Creează blocul de server:
sudo nano /etc/nginx/sites-available/second_domain - Configurează cu directive
server_nameșirootunice - Activează:
sudo ln -s /etc/nginx/sites-available/second_domain /etc/nginx/sites-enabled/ - 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:
Adăugați PHP PPA al lui Ondřej (repozitivul terță parte de încredere):
sudo add-apt-repository ppa:ondrej/php sudo apt updateInstalează o nouă versiune de PHP-FPM:
sudo apt install php8.3-fpm php8.3-mysql -yActualizează calea socket-ului din configurația Nginx la
/run/php/php8.3-fpm.sockTestează și reîncarcă Nginx
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-fpmVerifică calea conectorului:
ls -la /run/php/Rezultatul așteptat ar trebui să afișeze fișierul php8.1-fpm.sock.
Remedieri comune:
- Repornește PHP-FPM:
sudo systemctl restart php8.1-fpm - Verificați dacă calea socket-ului din blocul server Nginx corespunde cu socket-ul real PHP-FPM
- 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_domainProbleme 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 mysqlPHP 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 -tDepanare erori 404:
- Verificați dacă
index.phpeste listat în directivaindexdin 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.



