Kako instalirati Linux, Nginx, MySQL, PHP (LEMP paket) na Ubuntu
Uvod
LEMP softverski paket služi za posluživanje dinamičkih web stranica i web aplikacija pisanih u PHP-u. To je akronim koji opisuje Linux operacijski sustav, s Nginx (izgovara se kao “Engine-X”) web poslužiteljem. Podaci u pozadini pohranjuju se u MySQL bazu podataka, a dinamičku obradu upravlja PHP.
Ovaj vodič pokazuje kako instalirati LEMP paket na Ubuntu poslužitelju. Operativni sustav Ubuntu brine se za Linux dio paketa. Ovdje ćemo opisati kako pokrenuti preostale komponente.
Napomena: Ovaj vodič prvenstveno je namijenjen Ubuntu 22.04 LTS s PHP 8.1. Za korisnike Ubuntu 24.04 LTS, prilagodite reference na verziju PHP-a iz
php8.1-fpmuphp8.3-fpmu svim naredbama. Također, obavezno ažurirajte sve PHP-FPM socket putanje u vašoj Nginx konfiguraciji (npr. koristite/run/php/php8.3-fpm.sockza Ubuntu 24.04).
Kako instalirati Linux, Nginx, MySQL, PHP (LEMP paket) na Ubuntu
- Instaliranje Nginx web poslužitelja
- Instalacija MySQL-a
- Instalacija PHP-a
- Konfiguriranje Nginxa za korištenje PHP procesora
- Testiranje PHP-a s Nginxom
- Testiranje veze s bazom podataka iz PHP-a
Preduvjeti
Koristite korisnika sudo koji nije root na Ubuntu sustavu s uključenim UFW vatrozidom. Slijedite naš vodič za početno postavljanje servera na Ubuntu kako biste to konfigurirali.
Korak 1 – Instalacija Nginx web poslužitelja
Da biste prikazali web stranice posjetiteljima, koristit ćete Nginx, visokoučinkovit web poslužitelj. Za dobivanje ovog softvera koristit ćete APT paketni upravitelj.
Ažurirajte indeks paketa vašeg poslužitelja, a zatim instalirajte Nginx:
sudo apt updateNakon toga pokrenite apt install kako biste instalirali Nginx:
sudo apt install nginxKad se to zatraži, pritisnite Y i ENTER kako biste potvrdili da želite instalirati Nginx. Nakon završetka instalacije, Nginx web poslužitelj bit će aktivan i pokrenut na vašem Ubuntu poslužitelju.
Provjerite radi li Nginx:
sudo systemctl status nginxTrebali biste vidjeti izlaz koji pokazuje da je Nginx aktivan:
● 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...Na Ubuntuu, Nginx je konfiguriran da se pokrene odmah nakon instalacije.
Dopustite HTTP promet kroz ufw vatrozid. Nginx prilikom instalacije registrira nekoliko UFW aplikacijskih profila. Provjerite dostupne profile:
sudo ufw app listAvailable applications:
Nginx Full
Nginx HTTP
Nginx HTTPS
OpenSSHOmogući najozbiljniji profil koji dopušta potrebni promet. Budući da SSL još nije konfiguriran, dopusti samo HTTP promet na portu 80:
Omogućite ovo pokretanjem sljedećeg:
sudo ufw allow 'Nginx HTTP'
Provjerite promjenu vatrozida:
sudo ufw statusOvaj izlaz prikazuje da je HTTP promet sada dopušten:
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
Nginx HTTP ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Nginx HTTP (v6) ALLOW Anywhere (v6)Za testiranje funkcionalnosti domene Nginx poslužitelja, otvorite http://your_domain u svom omiljenom web pregledniku.
Ako nemate naziv domene usmjeren na vaš poslužitelj i ne znate javnu IP adresu vašeg poslužitelja, možete je pronaći pokretanjem bilo koje od sljedećih naredbi:
ip addr showhostname -IOvo će ispisati nekoliko IP adresa. Svaku od njih možete isprobati redom u svom web pregledniku.
Kao alternativu, možete provjeriti koja je IP adresa dostupna, gledano s drugih lokacija na internetu:
curl -4 icanhazip.comUpišite adresu koju primite u svom web pregledniku i ona će vas odvesti na zadanu početnu stranicu Nginxa:
http://<server_domain_or_IP>Ako ste primili ovu stranicu, to znači da ste uspješno instalirali Nginx i omogućili HTTP promet za vaš web poslužitelj.
Korak 2 — Instalacija MySQL-a
Instalirajte MySQL za pohranu i upravljanje podacima web-mjesta. MySQL je standardni sustav za upravljanje bazama podataka za PHP okruženja.
Opet, koristite apt za preuzimanje i instalaciju ovog softvera:
sudo apt install mysql-serverKada se zatraži, potvrdite instalaciju pritiskom na Y, a zatim ENTER.
Nakon instalacije pokrenite sigurnosni skript kako biste uklonili nesigurne zadane postavke i zaključali pristup bazi podataka:
sudo mysql_secure_installationPojavit će se pitanje želite li konfigurirati VALIDATE PASSWORD PLUGIN.
Napomena: Omogućavanje ove značajke donekle je stvar prosudbe. Ako je omogućena, MySQL će odbiti lozinke koje ne ispunjavaju određene kriterije s pogreškom. Sigurno je ostaviti provjeru onemogućenom, ali uvijek biste trebali koristiti jake, jedinstvene lozinke za pristupne podatke baze podataka.
Odgovorite Y za da, ili bilo što drugo za nastavak bez omogućavanja:
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: Ako odgovorite s „da“, bit će vam zatraženo da odaberete razinu provjere lozinke. Imajte na umu da ako unesete 2 za najjaču razinu, dobit ćete pogreške prilikom pokušaja postavljanja bilo koje lozinke koja ne sadrži brojeve, veliko i malo slovo te posebne znakove:
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: 1Bez obzira na to jeste li odlučili postaviti VALIDATE PASSWORD PLUGIN, vaš će poslužitelj tražiti da odaberete i potvrdite lozinku za MySQL root korisnika. Ovo se ne smije brkati s root korisnikom sustava. Root korisnik baze je administrativni korisnik s punim privilegijama nad sustavom baze podataka. Iako zadana metoda autentifikacije za MySQL root korisnika omogućuje rad bez lozinke, čak i kada je lozinka postavljena, trebali biste ovdje definirati jaku lozinku kao dodatnu mjeru sigurnosti. O tome ćemo razgovarati za trenutak.
Ako ste omogućili provjeru lozinke, bit će vam prikazana jačina lozinke za root lozinku koju ste unijeli i vaš će se server upitati želite li nastaviti s tom lozinkom. Ako ste zadovoljni svojom trenutnom lozinkom, pritisnite Y za "da" kada se pojavi upit:
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) : yZa ostala pitanja, pritisnite Y i pritisnite tipku ENTER na svakom upitu. Ovo će ukloniti neke anonimne korisnike i testnu bazu podataka, onemogućiti udaljene prijave korisnika root i učitati ova nova pravila kako bi MySQL odmah poštivao promjene koje ste napravili.
Kada završite, testirajte možete li se prijaviti u MySQL konzolu:
sudo mysqlOvo će se povezati na MySQL poslužitelj kao administrativni korisnik baze podataka root, što se zaključuje po korištenju sudo prilikom izvođenja ove naredbe. Trebali biste dobiti sljedeći izlaz:
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>Za izlazak iz MySQL konzole, upišite sljedeće:
exitPrimijetite da niste morali unijeti lozinku da biste se povezali kao root korisnik, iako ste ju definirali pri izvršavanju skripte mysql_secure_installation. To je zato što je pri instalaciji na Ubuntu zadana metoda autentifikacije za administrativnog MySQL korisnika auth_socket, umjesto metode koja koristi lozinku. To može u početku izgledati kao sigurnosni problem, ali zapravo čini poslužitelj baze podataka sigurnijim jer su korisnici koji se mogu prijaviti kao root MySQL korisnik samo sistemski korisnici s sudo privilegijama koji se povezuju s konzole ili putem aplikacije koja radi s istim privilegijama. U praktičnom smislu, to znači da nećete moći koristiti administrativnog root MySQL korisnika za povezivanje iz vaše PHP aplikacije.
Za veću sigurnost, najbolje je imati zasebne korisničke račune s manje opsežnim privilegijama za svaku bazu podataka, osobito ako planirate imati više baza podataka na svom poslužitelju.
Napomena: Neka starija izdanja izvorne MySQL PHP biblioteke mysqlnd ne podržavaju caching_sha2_authentication, zadanu metodu autentifikacije za korisnike kreirane u MySQL 8. Iz tog razloga, prilikom kreiranja korisnika baze podataka za PHP aplikacije na MySQL 8, možda ćete morati osigurati da su konfigurirani za korištenje mysql_native_password. Pokazat ćemo kako to učiniti u Koraku 6.
Vaš MySQL poslužitelj je sada instaliran i osiguran. Sljedeće, instalirat ćete PHP, posljednju komponentu u LEMP stogu.
Korak 3 – Instalacija PHP-a
Instalirajte PHP kako biste obrađivali kod i generirali dinamički sadržaj. Nginx zahtijeva vanjski program za obradu PHP-a.
PHP-FPM („fastCGI procesni upravitelj“) učinkovito obrađuje PHP s dodatnim sigurnosnim značajkama, pružajući bolju izvedbu za web stranice temeljene na PHP-u. Instalirajte php-fpm kako biste usmjeravali PHP zahtjeve iz Nginxa, i php-mysql kako biste omogućili komunikaciju između PHP-a i MySQL-a. Osnovni PHP paketi se automatski instaliraju kao ovisnosti.
Za instalaciju paketa php8.1-fpm i php-mysql, pokrenite:
sudo apt install php8.1-fpm php-mysqlKad se zatraži, pritisnite Y i ENTER za potvrdu instalacije.
Provjerite radi li PHP-FPM:
sudo systemctl status php8.1-fpmTrebali biste vidjeti izlaz koji pokazuje da je PHP-FPM aktivan:
● php8.1-fpm.service - The PHP 8.1 FastCGI Process Manager
Loaded: loaded
Active: active (running)Također možete provjeriti verziju PHP-a:
php -vPHP 8.1.x (cli) (built: ...)
Copyright (c) The PHP Group
Zend Engine v4.1.xKonfigurirajte Nginx da koristi ove PHP komponente.
Korak 4 — Konfiguriranje Nginxa za korištenje PHP procesora
Kreirajte Nginx server blokove (slično kao Apache virtualni hostovi) za enkapsulaciju konfiguracije i hostanje više domena na jednom serveru. Ovaj vodič koristi your_domain kao primjer naziva domene.
Info: Za više informacija o postavljanju domenskog imena s Linux-Console.net, pročitajte naš uvod u Linux-Console.net DNS.
Na Ubuntu 22.04, Nginx omogućuje jedan zadani server blok koji poslužuje dokumente iz /var/www/html. Za više web-mjesta, kreirajte strukturu direktorija unutar /var/www za vaš_domena, pritom ostavljajući /var/www/html kao zadani rezervni direktorij.
Kreirajte korijenski web direktorij za your_domain na sljedeći način:
sudo mkdir /var/www/your_domainZatim dodijelite vlasništvo nad direktorijem koristeći $USER varijablu okoline, koja će se odnositi na vaš trenutni korisnički račun na sustavu:
sudo chown -R $USER:$USER /var/www/your_domainZatim otvorite novu konfiguracijsku datoteku u Nginxovom direktoriju sites-available koristeći svoj omiljeni uređivač iz naredbenog retka. Ovdje ćemo koristiti nano:
sudo nano /etc/nginx/sites-available/your_domainOvo će stvoriti novu praznu datoteku. Umetnite sljedeću osnovnu konfiguraciju:
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;
}
}Evo što svaka od ovih direktiva i blokova lokacije radi:
listen— Definira na kojem će portu Nginx slušati. U ovom slučaju, slušat će na portu80, zadani port za HTTP.root— Definira korijenski direktorij dokumenta gdje se pohranjuju datoteke koje poslužuje ova internetska stranica.index— Definira kojim redoslijedom će Nginx prioritizirati index datoteke za ovu web stranicu. Uobičajena je praksa da seindex.htmldatoteke navedu s višim prioritetom odindex.phpdatoteka kako bi se omogućilo brzo postavljanje odredišne stranice za održavanje u PHP aplikacijama. Ove postavke možete prilagoditi kako bi bolje odgovarale potrebama vaše aplikacije.server_name— Definira na koja imena domena i/ili IP adrese ovaj server blok treba odgovarati. Usmjerite ovu direktivu na naziv domene vašeg servera ili javnu IP adresu.location /— Prvi blok lokacije uključuje direktivutry_files, koja provjerava postoji li datoteka ili direktorij koji odgovara URL zahtjevu. Ako Nginx ne može pronaći odgovarajući resurs, vratit će grešku 404.location ~ \.php$— Ovaj blok lokacije upravlja stvarnom PHP obradom usmjeravajući Nginx na konfiguracijsku datotekufastcgi-php.confi datotekuphp8.1-fpm.sock, koja deklarira koji je socket povezan sphp8.1-fpm.location ~ /\.ht— Posljednji blok lokacije se odnosi na.htaccessdatoteke, koje Nginx ne obrađuje. Dodavanjem direktivedeny all, ako se bilo koja.htaccessdatoteka slučajno nađe u korijenu dokumenta, ona neće biti poslužena posjetiteljima.
Kad završite s uređivanjem, spremite i zatvorite datoteku. Ako koristite nano, to možete učiniti pritiskom na CTRL+X, a zatim Y i ENTER za potvrdu.
Aktivirajte svoju konfiguraciju povezivanjem s konfiguracijskom datotekom iz Nginxove sites-enabled direktorije:
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/Zatim odvežite zadanu konfiguracijsku datoteku iz direktorija /sites-enabled/:
sudo unlink /etc/nginx/sites-enabled/defaultNapomena: Ako ikada budete trebali vratiti zadane postavke, to možete učiniti ponovnim stvaranjem simboličke veze, kao u sljedećem primjeru:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/Ovo će Nginxu reći da koristi konfiguraciju sljedeći put kad se ponovno učita. Svoju konfiguraciju možete testirati na sintaksne pogreške pokretanjem sljedećeg:
sudo nginx -tAko se prijave bilo kakve pogreške, vratite se u svoju konfiguracijsku datoteku kako biste pregledali njezin sadržaj prije nego što nastavite.
Kada ste spremni, ponovno učitajte Nginx kako biste primijenili promjene:
sudo systemctl reload nginxVaša nova web stranica je sada aktivna, ali web korijen /var/www/your_domain je još uvijek prazan. Kreirajte index.html datoteku na toj lokaciji kako biste mogli testirati da li vaš novi serverski blok radi kako se očekuje:
nano /var/www/your_domain/index.htmlUključi sljedeći sadržaj u ovu datoteku:
<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>Sada otvorite svoj preglednik i pristupite domenskom imenu svog poslužitelja ili IP adresi, kako je navedeno u server_name direktivi u konfiguracijskoj datoteci vašeg poslužiteljskog bloka:
http://server_domain_or_IPDobit ćete stranicu poput sljedeće:
Ako primite ovu stranicu, to znači da vaš Nginx server blok radi kako se očekuje.
Ovu datoteku možete ostaviti na mjestu kao privremenu odredišnu stranicu za vašu aplikaciju dok ne postavite datoteku index.php koja će je zamijeniti.
Upozorenje: Nakon dodavanja vaše index.php datoteke, pobrinite se da uklonite ili preimenujete index.html datoteku iz korijenskog direktorija. Ako obje datoteke postoje, Nginx će po zadanom poslužiti index.html, a vaša PHP stranica neće biti prikazana — ovo je čest izvor zabune kod novih korisnika.
Vaš LEMP paket je sada potpuno konfiguriran. U sljedećem koraku, kreirat ćete PHP skriptu kako biste testirali je li Nginx zapravo u stanju obrađivati .php datoteke unutar vaše novokonfigurirane web stranice.
Korak 5 – Testiranje PHP-a s Nginxom
Vaš LEMP stack sada bi trebao biti potpuno postavljen. Možete ga testirati kako biste provjerili može li Nginx ispravno proslijediti .php datoteke vašem PHP procesoru.
To možete učiniti tako da u svom korijenskom direktoriju dokumenata stvorite testnu PHP datoteku. Otvorite novu datoteku pod nazivom info.php u svom omiljenom uređivaču teksta u korijenskom direktoriju dokumenata:
nano /var/www/your_domain/info.phpDodajte sljedeće retke u novu datoteku. Ovo je ispravan PHP kod koji će vratiti informacije o vašem poslužitelju:
<?php
phpinfo();Kada završite, spremite i zatvorite datoteku.
Sada možete pristupiti ovoj stranici u svom web pregledniku tako da posjetite naziv domene ili javnu IP adresu koju ste postavili u svojoj Nginx konfiguracijskoj datoteci, a zatim dodate /info.php:
http://server_domain_or_IP/info.phpDobit ćete web stranicu koja sadrži detaljne informacije o vašem poslužitelju:
Nakon što provjerite relevantne informacije o svom PHP serveru putem te stranice, najbolje je ukloniti datoteku koju ste stvorili jer sadrži osjetljive informacije o vašem PHP okruženju i vašem Ubuntu serveru. Možete koristiti rm za uklanjanje te datoteke:
sudo rm /var/www/your_domain/info.phpUvijek možete regenerirati ovu datoteku ako vam zatreba kasnije.
Korak 6 — Testiranje veza s bazom podataka iz PHP-a (Opcionalno)
Ako želite testirati može li PHP povezati se s MySQL-om i izvršavati upite na bazi podataka, možete napraviti testnu tablicu s lažnim podacima i upitom iz PHP skripte dohvatiti njen sadržaj. Prije toga, trebate stvoriti testnu bazu podataka i novog MySQL korisnika pravilno konfiguriranog za pristup istoj.
Napomena: Neki stariji izdanja izvornog MySQL PHP biblioteke mysqlnd ne podržavaju caching_sha2_authentication, zadanu metodu autentifikacije za MySQL 8, možda ćete morati osigurati da su konfigurirani za korištenje mysql_native_password umjesto toga.
Kreirat ćemo bazu podataka nazvanu example_database i korisnika nazvanog example_user, ali možete zamijeniti ove nazive s drugim vrijednostima.
Prvo se povežite na MySQL konzolu koristeći račun root:
sudo mysqlZa stvaranje nove baze podataka, pokrenite sljedeću naredbu iz MySQL konzole:
CREATE DATABASE example_database;Sada možete stvoriti novog korisnika i dodijeliti mu puna prava na prilagođenu bazu podataka koju ste kreirali.
Sljedeća naredba stvara novog korisnika pod imenom example_user, koristeći mysql_native_password kao zadanu metodu autentifikacije. Lozinku za ovog korisnika definiramo kao password, ali trebali biste zamijeniti ovu vrijednost sigurnom lozinkom po vlastitom izboru.
CREATE USER 'example_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password';Sada moramo ovom korisniku dati dopuštenje nad bazom podataka example_database:
GRANT ALL ON example_database.* TO 'example_user'@'%';Ovo će korisniku example_user dati puna ovlaštenja nad bazom podataka example_database, dok će istovremeno spriječiti ovog korisnika da stvara ili mijenja druge baze podataka na vašem poslužitelju.
Sada izađite iz MySQL ljuske sljedećom naredbom:
exitMožete provjeriti ima li novi korisnik odgovarajuća dopuštenja tako da se ponovno prijavite u MySQL konzolu, ovaj put koristeći vjerodajnice prilagođenog korisnika. Obratite pažnju na -p zastavicu u ovoj naredbi, koja će od vas zatražiti lozinku korištenu pri kreiranju korisnika example_user:
mysql -u example_user -pNakon prijave u MySQL konzolu, potvrdite da imate pristup bazi podataka example_database:
SHOW DATABASES;Ovo će vratiti sljedeći ishod:
+--------------------+
| Database |
+--------------------+
| example_database |
| information_schema |
+--------------------+
2 rows in set (0.000 sec)Zatim ćemo stvoriti testnu tablicu pod nazivom todo_list. U MySQL konzoli, pokrenite sljedeću naredbu:
CREATE TABLE example_database.todo_list (
item_id INT AUTO_INCREMENT,
content VARCHAR(255),
PRIMARY KEY(item_id)
);Unesite nekoliko redova sadržaja u testnu tablicu. Možda ćete htjeti nekoliko puta ponoviti sljedeću naredbu, koristeći različite vrijednosti:
INSERT INTO example_database.todo_list (content) VALUES ("My first important item");Da biste potvrdili da su podaci uspješno spremljeni u vašu tablicu, pokrenite:
SELECT * FROM example_database.todo_list;Vaš izlaz trebao bi se prikazati kako slijedi:
+---------+--------------------------+
| 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)Nakon što potvrdite da imate ispravne podatke u svojoj testnoj tablici, možete izaći iz MySQL konzole:
exitSada možete kreirati PHP skriptu koja će se povezati s MySQL-om i dohvatiti vaš sadržaj. Kreirajte novu PHP datoteku u svom prilagođenom direktoriju web korijena koristeći uređivač po vašem izboru. Za to ćemo koristiti nano:
nano /var/www/your_domain/todo_list.phpSljedeći PHP skript povezuje se s MySQL bazom podataka i izvodi upit za sadržaj tablice todo_list, prikazujući rezultate u obliku liste. Ako dođe do problema s povezivanjem na bazu podataka, bit će bačena iznimka.
Dodajte sljedeći sadržaj u vaš todo_list.php skriptu:
<?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();
}
Spremite i zatvorite datoteku kada završite s uređivanjem.
Sada možete pristupiti ovoj stranici u svom web pregledniku tako da posjetite naziv domene ili javnu IP adresu konfiguriranu za vašu web stranicu, nakon čega slijedi /todo_list.php:
http://server_domain_or_IP/todo_list.phpTrebali biste primiti stranicu poput sljedeće, koja prikazuje sadržaj koji ste unijeli u svoju testnu tablicu:
To znači da je vaše PHP okruženje spremno za povezivanje i interakciju s vašim MySQL poslužiteljem.
Često postavljana pitanja
Za što se koristi LEMP paket?
LEMP paket hosta dinamičke web stranice i aplikacije temeljene na PHP-u, uključujući WordPress, Laravel, Magento, Drupal i prilagođene PHP projekte. Posebno je učinkovit za web stranice s visokim prometom koje zahtijevaju učinkovito upravljanje istovremenim vezama.
Koja je razlika između LEMP i LAMP stackova?
LEMP koristi Nginx, koji upravlja vezama asinhrono s arhitekturom vođenom događajima—efikasan za istovremene korisnike. LAMP koristi Apache, koji tradicionalno stvara thread po zahtjevu (iako moderni Apache podržava režime vođene događajima). LEMP općenito nudi bolje performanse za statički sadržaj i scenarije visoke konkurentnosti, dok LAMP omogućuje jednostavniju .htaccess konfiguraciju i širu podršku za module.
Koju verziju Ubuntua bih trebao koristiti za LEMP?
Ubuntu 22.04 LTS je glavni cilj ovog vodiča, sadrži PHP 8.1, MySQL 8.0 i Nginx s dugoročnom podrškom. Ubuntu 24.04 LTS (najnovije izdanje) uključuje PHP 8.3 prema zadanim postavkama i radi s ovim vodičem prilagodbom putanja PHP-FPM soketa i brojeva verzija prema potrebi.
Kako instalirati LEMP paket na Ubuntu 24.04?
Slijedite ove osnovne korake:
- Instalirajte Nginx:
sudo apt install nginx - Instalirajte MySQL:
sudo apt install mysql-server - Pokrenite MySQL sigurnosni skript:
sudo mysql_secure_installation - Instalirajte PHP-FPM:
sudo apt install php-fpm php-mysql - Konfigurirajte Nginx server blok s integracijom PHP-FPM-a
- Test s
info.phpi povezivanjem na bazu podataka
Pogledajte cjeloviti vodič u Koracima 1-6 iznad.
Koju verziju PHP-a trebam instalirati s Nginxom i MySQL-om?
Za najbolju kompatibilnost koristite zadanu verziju PHP-a svoje Ubuntu distribucije:
- Ubuntu 22.04: PHP 8.1 (instaliran putem
php8.1-fpm) - Ubuntu 24.04: PHP 8.3 (prilagodite naredbe za
php8.3-fpmza ovu verziju)
Obje verzije izvrsno rade s Nginxom i MySQL-om 8.0, podržavaju moderne okvire te primaju aktivna sigurnosna ažuriranja.
Kako konfigurirati Nginx da obrađuje PHP datoteke?
Dodajte location ~ \.php$ blok u konfiguraciju vašeg Nginx poslužitelja koji usmjerava PHP zahtjeve na PHP-FPM putem Unix socketa:
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;
}Prilagodite putanju utičnice prema verziji PHP-a, testirajte s sudo nginx -t, i ponovno učitajte s sudo systemctl reload nginx.
Zašto dobivam pogrešku „502 Bad Gateway“ nakon instalacije PHP-FPM-a?
Greške 502 označavaju da Nginx ne može komunicirati s PHP-FPM. Uobičajeni uzroci:
- PHP-FPM ne radi: Provjerite s
sudo systemctl status php8.1-fpmi pokrenite ako je potrebno - Pogrešna putanja utičnice: Provjerite postoji li
/run/php/php8.1-fpm.socki odgovara li vašoj Nginx konfiguraciji - Problem s dopuštenjima: Provjerite može li Nginx korisnik (www-data) pristupiti socketu
- Greška u konfiguraciji PHP-FPM-a: Provjerite logove u
/var/log/php8.1-fpm.log
Rješenje: Ponovno pokrenite obje usluge:
sudo systemctl restart php8.1-fpm nginxKako osigurati MySQL nakon instalacije?
Pokrenite ugrađeni sigurnosni skript:
sudo mysql_secure_installationSlijedite upute kako biste:
- Omogući dodatak za provjeru lozinke
- Postavite snažnu root lozinku
- Ukloni anonimne korisnike
- Onemogući udaljeni prijavu za root korisnika
- Ukloni testnu bazu podataka
- Ponovno učitaj ovlasti
Za baze podataka aplikacija, stvorite namjenske korisnike s ograničenim privilegijama umjesto korištenja root računa.
Mogu li pokretati više web stranica na jednom LEMP serveru?
Da, stvorite odvojene Nginx server blokove za svaku domenu:
- Stvorite direktorij:
sudo mkdir -p /var/www/second_domain - Kreirajte blok poslužitelja:
sudo nano /etc/nginx/sites-available/second_domain - Konfigurirajte s jedinstvenim
server_nameirootdirektivama - Omogući:
sudo ln -s /etc/nginx/sites-available/second_domain /etc/nginx/sites-enabled/ - Testiraj i ponovno učitaj:
sudo nginx -t && sudo systemctl reload nginx
Svaka stranica može imati zasebne PHP postavke i korisnike baze podataka.
Kako nadograditi PHP na noviju verziju?
Nadogradnje Ubuntu paketa automatski upravljaju manjim verzijama. Za nadogradnje glavnih verzija:
Dodajte Ondřejev PHP PPA (pouzdano spremište treće strane):
sudo add-apt-repository ppa:ondrej/php sudo apt updateInstalirajte novu verziju PHP-FPM-a:
sudo apt install php8.3-fpm php8.3-mysql -yAžurirajte putanju soketa Nginx konfiguracije na
/run/php/php8.3-fpm.sockTestiraj i ponovno učitaj Nginx
Po želji uklonite staru verziju:
sudo apt purge php8.1-fpm
Uvijek testirajte u staging okruženju prije nadogradnje produkcijskih sustava.
Rješavanje uobičajenih problema
502 Pogreška lošeg posrednika
Najčešći problem s LEMP stackom pojavljuje se kada Nginx ne može komunicirati s PHP-FPM-om:
Provjerite status PHP-FPM-a:
sudo systemctl status php8.1-fpmProvjeri putanju utičnice:
ls -la /run/php/Očekivani rezultat trebao bi prikazati datoteku php8.1-fpm.sock.
Zajednička rješenja:
- Ponovno pokrenite PHP-FPM:
sudo systemctl restart php8.1-fpm - Provjerite podudara li putanja Nginx server bloka s stvarnom PHP-FPM socket putanjom
- Provjerite dozvole datoteka:
sudo chown www-data:www-data /run/php/php8.1-fpm.sock
Pogreške zbog odbijenih dopuštenja
Popravi dozvole web direktorija:
sudo chown -R www-data:www-data /var/www/your_domain
sudo chmod -R 755 /var/www/your_domainProblemi s MySQL vezom
Resetiraj MySQL root lozinku:
sudo mysql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
FLUSH PRIVILEGES;
EXIT;Provjeri MySQL uslugu:
sudo systemctl status mysqlPHP ne obrađuje
Provjerite PHP module:
php -m | grep -E 'mysql|fpm'Provjerite PHP-FPM konfiguraciju:
sudo nginx -t
sudo php-fpm8.1 -tOtklanjanje pogrešaka 404:
- Provjerite je li
index.phpnaveden u Nginxindexdirektivi - Provjerite postoji li datoteka:
ls -la /var/www/your_domain/ - Pregledajte Nginx dnevnik pogrešaka:
sudo tail -f /var/log/nginx/error.log
Zaključak
U ovom vodiču izgradili ste fleksibilnu osnovu za pružanje PHP web stranica i aplikacija svojim posjetiteljima, koristeći Nginx kao web poslužitelj i MySQL kao sustav baze podataka. Ovo možete učiniti i s Apache web poslužiteljem, pogledajte naš vodič o Kako instalirati Linux, Apache, MySQL, PHP (LAMP) na Ubuntu. Također možete osigurati svoju stranicu s Let’s Encrypt, koji pruža besplatne, pouzdane certifikate. Saznajte kako to učiniti uz naš vodič za Let’s Encrypt za Apache.
Hvala što učite s Linux-Console.net zajednicom.



