Weboldal keresés

Hogyan telepítsük a Linuxot, Nginxet, MySQL-t és PHP-t (LEMP stack) Ubuntun


Bevezetés

A LEMP szoftvercsomag dinamikus weboldalakat és PHP-ben írt webalkalmazásokat szolgál ki. Ez egy olyan mozaikszó, amely egy Linux operációs rendszert jelöl, amelyen Nginx (kiejtve: „Engine-X”) webszerver fut. A háttéradatok a MySQL adatbázisban tárolódnak, a dinamikus feldolgozást pedig a PHP végzi.

Ez az útmutató bemutatja, hogyan lehet LEMP-stacket telepíteni egy Ubuntu szerverre. Az Ubuntu operációs rendszer gondoskodik a stack Linux részéről. Leírjuk, hogyan lehet a többi komponenst beüzemelni és működésbe hozni.

Megjegyzés: Ez a bemutató elsősorban Ubuntu 22.04 LTS és PHP 8.1 rendszerekre készült. Az Ubuntu 24.04 LTS felhasználók esetében a PHP verzióra vonatkozó hivatkozásokat a parancsokban php8.1-fpm-ről php8.3-fpm-re kell módosítani. Ne feledkezzünk meg a PHP-FPM socket útvonalak frissítéséről sem az Nginx konfigurációban (pl. Ubuntu 24.04 esetén használjuk a /run/php/php8.3-fpm.sock útvonalat).

Hogyan telepítsük a Linuxot, Nginxet, MySQL-t és PHP-t (LEMP stack) Ubuntun

  1. A Nginx webkiszolgáló telepítése
  2. MySQL telepítése
  3. PHP telepítése
  4. Az Nginx konfigurálása a PHP feldolgozó használatához
  5. PHP tesztelése Nginx-szel
  6. Adatbázis-kapcsolat tesztelése PHP-ből

Előfeltételek

Használjon nem-root sudo felhasználót Ubuntun, ahol engedélyezve van az UFW tűzfal. A konfigurációhoz kövesse az Ubuntu kezdeti szerverbeállítási útmutatónkat.

1. lépés – Az Nginx webkiszolgáló telepítése

Ahhoz, hogy weboldalakat jeleníts meg a látogatóknak, az Nginxet fogod használni, egy nagy teljesítményű webszervert. Ehhez az APT csomagkezelőt fogod használni a szoftver beszerzéséhez.

Frissítse a szerver csomagindexét, majd telepítse az Nginxet:

sudo apt update

Ezután futtasd a apt install-t az Nginx telepítéséhez:

sudo apt install nginx

Amikor a rendszer kéri, nyomja meg a Y és ENTER gombot annak megerősítéséhez, hogy telepíteni kívánja az Nginx-et. A telepítés befejezése után az Nginx webkiszolgáló aktív lesz és futni fog az Ubuntu szerverén.

Ellenőrizze, hogy az Nginx fut-e:

sudo systemctl status nginx

Látnod kell egy üzenetet, ami azt jelzi, hogy az Nginx aktív:

● 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...

Ubuntun az Nginx úgy van beállítva, hogy telepítéskor automatikusan elinduljon.

Engedélyezze a HTTP forgalmat a ufw tűzfalon keresztül. Az Nginx a telepítés során több UFW alkalmazásprofilt regisztrál. Ellenőrizze az elérhető profilokat:

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

Engedélyezze a legszigorúbb profilt, amely lehetővé teszi a szükséges forgalmat. Mivel az SSL még nincs konfigurálva, csak a 80 porton lévő HTTP-forgalmat engedélyezze:

Engedélyezze ezt a következő parancs futtatásával:

sudo ufw allow 'Nginx HTTP'

Ellenőrizze a tűzfal módosítását:

sudo ufw status

Ez a kimenet megmutatja, hogy az HTTP-forgalom most már engedélyezett:

Status: active

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

A Nginx szerver domainek működésének teszteléséhez nyissa meg a http://your_domain címet a kedvenc webböngészőjében.

Ha nincs a szerverére mutató domain neve, és nem ismeri a szerver nyilvános IP-címét, a következő parancsok egyikének futtatásával megtalálhatja azt:

ip addr show
hostname -I

Ez ki fog nyomtatni néhány IP-címet. Mindegyiket sorban kipróbálhatod a webböngésződben.

Alternatívaként ellenőrizheted, melyik IP-cím elérhető, ahogyan az az internet más pontjairól látható:

curl -4 icanhazip.com

Írd be a webböngésződben kapott címet, és az elvisz az Nginx alapértelmezett kezdőoldalára:

http://<server_domain_or_IP>

Ha ezt az oldalt látja, az azt jelenti, hogy sikeresen telepítette az Nginx-et, és engedélyezte a HTTP forgalmat a webkiszolgálóján.

2. lépés — A MySQL telepítése

Telepítse a MySQL-t a webhely adatainak tárolásához és kezeléséhez. A MySQL a szabványos adatbázis-kezelő rendszer a PHP környezetekhez.

Ismét, használd az apt-et a szoftver beszerzéséhez és telepítéséhez:

sudo apt install mysql-server

Amikor a rendszer kéri, erősítse meg a telepítést a Y gomb megnyomásával, majd nyomja meg az ENTER-t.

A telepítés után futtassa a biztonsági szkriptet a nem biztonságos alapértelmezések eltávolításához és az adatbázis-hozzáférés lezárásához:

sudo mysql_secure_installation

Megjelenik egy kérdés, amely arra kérdez rá, hogy szeretné-e konfigurálni a VALIDATE PASSWORD PLUGIN bővítményt.

Megjegyzés: Ennek a funkciónak az engedélyezése egyfajta mérlegelést igényel. Ha engedélyezve van, a megadott kritériumoknak nem megfelelő jelszavakat a MySQL hibaüzenettel elutasítja. Biztonságos a validáció kikapcsolva hagyása, de mindig erős, egyedi jelszavakat kell használni az adatbázis-hitelesítő adatokhoz.

Válasz Y az igenhez, vagy bármi mást a folytatáshoz engedélyezés nélkül:

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: 

Ha arra válaszol, hogy „igen”, ki kell választania a jelszóellenőrzés szintjét. Ne feledje, hogy ha a legerősebb szinthez 2-t ad meg, hibaüzenetet kap, ha olyan jelszót próbál beállítani, amely nem tartalmaz számokat, nagy- és kisbetűket, valamint speciális karaktereket:

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

Függetlenül attól, hogy beállítottad-e a VALIDATE PASSWORD PLUGIN-et, a szervered meg fogja kérni, hogy válassz és erősíts meg egy jelszót a MySQL root felhasználó számára. Ezt ne tévesszük össze a rendszer root felhasználóval. A adatbázis root felhasználó egy adminisztratív felhasználó, teljes jogosultságokkal az adatbázis rendszer felett. Bár a MySQL root felhasználó alapértelmezett hitelesítési módja nem követeli meg a jelszó használatát, még akkor sem, ha be van állítva, érdemes itt egy erős jelszót megadni további biztonsági intézkedésként. Ezt kicsit később részletezzük.

Ha engedélyezted a jelszóellenőrzést, megjelenik a megadott root jelszó erőssége, és a szerver megkérdezi, hogy folytatni szeretnéd-e ezzel a jelszóval. Ha elégedett vagy a jelenlegi jelszóval, nyomd meg a Y billentyűt az „igen” megerősítéséhez:

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

A további kérdésekhez nyomja meg a Y billentyűt, majd minden kérést követően az ENTER gombot. Ez eltávolít néhány anonim felhasználót és a teszt adatbázist, letiltja a távoli root bejelentkezéseket, és betölti ezeket az új szabályokat, így a MySQL azonnal figyelembe veszi a végrehajtott változtatásokat.

Amikor elkészültél, teszteld, hogy be tudsz-e lépni a MySQL konzolba:

sudo mysql

Ez a parancs a MySQL szerverhez az root adminisztrátori adatbázis-felhasználóként csatlakozik, amit a parancs futtatásakor a sudo használata jelez. A következő kimenetet kellene kapnia:

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>

A MySQL konzolból való kilépéshez írja be a következőt:

exit

Észreveheted, hogy nem kellett jelszót megadnod a root felhasználóként való csatlakozáshoz, annak ellenére, hogy a mysql_secure_installation szkript futtatásakor definiáltál egyet. Ennek oka, hogy Ubuntu telepítésnél az adminisztratív MySQL felhasználó alapértelmezett hitelesítési módszere a auth_socket, és nem egy jelszót használó módszer. Ez elsőre biztonsági problémának tűnhet, de valójában biztonságosabbá teszi az adatbázis-szervert, mivel a root MySQL felhasználóként való bejelentkezésre csak azok a rendszerfelhasználók jogosultak, akik sudo jogosultsággal rendelkeznek, és a konzolon csatlakoznak, vagy egy, ugyanezekkel a jogosultságokkal futó alkalmazáson keresztül. Gyakorlatilag ez azt jelenti, hogy az adminisztratív adatbázis root felhasználóját nem lesz lehetőséged használni a PHP alkalmazásodból való csatlakozáshoz.

A megnövelt biztonság érdekében érdemes minden adatbázishoz külön felhasználói fiókokat létrehozni, kevesebb jogosultsággal, különösen akkor, ha azt tervezed, hogy több adatbázis lesz a szervereden.

Megjegyzés: A natív MySQL PHP könyvtár bizonyos régebbi kiadásai, a mysqlnd nem támogatják a caching_sha2_authentication módszert, amely a MySQL 8-ban létrehozott felhasználók alapértelmezett hitelesítési módszere. Emiatt, amikor adatbázis-felhasználókat hozunk létre PHP alkalmazások számára MySQL 8 alatt, ellenőriznünk kell, hogy azok a mysql_native_password használatára legyenek beállítva. A 6. lépésben bemutatjuk, hogyan lehet ezt megtenni.

A MySQL szerver most már telepítve van és biztonságossá téve. Ezután a PHP-t fogja telepíteni, amely az utolsó összetevő a LEMP csomagban.

3. lépés – PHP telepítése

Telepíts PHP-t a kód feldolgozásához és dinamikus tartalom generálásához. Az Nginx-nek külső programra van szüksége a PHP feldolgozásához.

A PHP-FPM („fastCGI folyamatkezelő”) hatékonyan kezeli a PHP feldolgozást további biztonsági funkciókkal, jobb teljesítményt biztosítva a PHP-alapú webhelyek számára. Telepítse a php-fpm-et a PHP-kérések Nginx-ből történő továbbításához, és a php-mysql-t a PHP és MySQL közötti kommunikáció engedélyezéséhez. A fő PHP-csomagok automatikusan települnek függőségként.

A php8.1-fpm és a php-mysql csomagok telepítéséhez futtassa a következőt:

sudo apt install php8.1-fpm php-mysql

Amikor a rendszer kéri, nyomja meg a Y és a ENTER gombot a telepítés megerősítéséhez.

Ellenőrizze, hogy a PHP-FPM fut-e:

sudo systemctl status php8.1-fpm

Látnod kell egy kimenetet, amely azt mutatja, hogy a PHP-FPM aktív:

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

A PHP verzióját is ellenőrizheti:

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

Konfigurálja az Nginxet, hogy használja ezeket a PHP-összetevőket.

4. lépés — Nginx konfigurálása a PHP feldolgozó használatára

Hozz létre Nginx kiszolgáló blokkokat (hasonlóan az Apache virtuális hosztjaihoz), hogy elkülönítsd a konfigurációt és több domaint is üzemeltethess egy szerveren. Ez az útmutató a your_domain példadomain nevet használja.

Info: Ha többet szeretnél megtudni a domain név beállításáról a Linux-Console.net-en, olvasd el a Linux-Console.net DNS-ről szóló bevezetőnket.

Az Ubuntu 22.04 rendszerben az Nginx egy alapértelmezett szerverblokkot engedélyez, amely a /var/www/html könyvtárból szolgál ki dokumentumokat. Több webhely esetén hozz létre egy könyvtárszerkezetet a /var/www alatt a your_domain számára, miközben a /var/www/html könyvtár marad az alapértelmezett fallback könyvtár.

Hozza létre a gyökér webkönyvtárat a your_domain számára a következő módon:

sudo mkdir /var/www/your_domain

Ezután rendelje hozzá a könyvtár tulajdonjogát a $USER környezeti változóval, amely a jelenlegi rendszerfelhasználójára hivatkozik:

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

Ezután nyiss meg egy új konfigurációs fájlt az Nginx sites-available könyvtárában a kedvenc parancssori szerkesztőddel. Itt a nano-t fogjuk használni:

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

Ez egy új, üres fájlt hoz létre. Illessze be a következő alap konfigurációt:

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;
    }

}

Így működik mindegyik ilyen utasítás és helyblokk:

  • listen — Meghatározza, melyik portot figyelje az Nginx. Ebben az esetben a 80 porton fog figyelni, ami az HTTP alapértelmezett portja.
  • root — Meghatározza a dokumentum gyökerét, ahol ennek a weboldalnak a fájljai találhatók.
  • index — Meghatározza, hogy milyen sorrendben részesíti az Nginx előnyben az indexfájlokat ezen a webhelyen. Gyakorlatilag megszokott, hogy a index.html fájlokat magasabb prioritással sorolják a index.php fájlok elé, hogy lehetővé tegyék egy karbantartási kezdőoldal gyors beállítását PHP-alkalmazásokban. Ezeket a beállításokat módosíthatja, hogy jobban megfeleljenek az alkalmazás igényeinek.
  • server_name — Meghatározza, hogy mely domain nevekre és/vagy IP-címekre kell válaszolnia ennek a szerverblokknek. Állítsa be ezt az utasítást a szerverének domain nevére vagy nyilvános IP-címére.
  • location / — Az első location blokk tartalmaz egy try_files direktívát, amely ellenőrzi, hogy léteznek-e az URL-kérésnek megfelelő fájlok vagy könyvtárak. Ha az Nginx nem talál megfelelő erőforrást, 404-es hibát ad vissza.
  • location ~ \.php$ — Ez a location blokk a tényleges PHP feldolgozást kezeli azzal, hogy az Nginx-et a fastcgi-php.conf konfigurációs fájlra és a php8.1-fpm.sock fájlra irányítja, amely meghatározza, melyik socket kapcsolódik a php8.1-fpm-hez.
  • location ~ /\.ht — Az utolsó location blokk a .htaccess fájlokkal foglalkozik, amelyeket az Nginx nem dolgoz fel. A deny all direktíva hozzáadásával, ha bármely .htaccess fájl véletlenül a dokumentumgyökérbe kerülne, azok nem lesznek kiszolgálva a látogatóknak.

Amikor befejezted a szerkesztést, mentsd el és zárd be a fájlt. Ha a nano-t használod, ezt a CTRL+X megnyomásával, majd a Y és ENTER megnyomásával teheted meg a megerősítéshez.

Aktiválja a konfigurációt úgy, hogy hivatkozik a konfigurációs fájlra az Nginx sites-enabled könyvtárából:

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

Ezután válaszd le az alapértelmezett konfigurációs fájlt a /sites-enabled/ könyvtárról:

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

Megjegyzés: Ha valaha vissza kell állítania az alapértelmezett konfigurációt, megteheti a szimbolikus hivatkozás újbóli létrehozásával, például az alábbi módon:

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

Ez meg fogja mondani az Nginxnek, hogy a következő újratöltéskor használja a konfigurációt. A konfigurációt szintaxis hibák szempontjából a következő parancs futtatásával tesztelheted:

sudo nginx -t

Ha bármilyen hiba jelentkezik, térjen vissza a konfigurációs fájlhoz, és ellenőrizze a tartalmát a folytatás előtt.

Amikor készen áll, töltse újra az Nginxet a változtatások alkalmazásához:

sudo systemctl reload nginx

Az új weboldalad most már aktív, de a webgyökér /var/www/your_domain még üres. Hozz létre egy index.html fájlt ebben a helyen, hogy tesztelni tudd, hogy az új szerverblokk a várakozásoknak megfelelően működik:

nano /var/www/your_domain/index.html

A következő tartalmat illessze be ebbe a fájlba:

<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>

Most nyissa meg a böngészőt, és lépjen a szervere domain nevére vagy IP-címére, ahogyan azt a server_name direktíva tartalmazza a szerver blokk konfigurációs fájljában:

http://server_domain_or_IP

Egy ilyen oldal fog megjelenni:

Ha ezt az oldalt kapja, az azt jelenti, hogy az Nginx szerverblokkja a vártnak megfelelően működik.

Hagyhatod ezt a fájlt ideiglenes kezdőlapként az alkalmazásod számára, amíg létre nem hozol egy index.php fájlt, ami helyettesíti azt.

Figyelem: Miután hozzáadtad a index.php fájlodat, győződj meg róla, hogy eltávolítod vagy átnevezed a index.html fájlt a dokumentumgyökérből. Ha mindkét fájl létezik, az Nginx alapértelmezés szerint az index.html fájlt fogja kiszolgálni, és a PHP oldalad nem fog megjelenni – ez gyakori zavar forrása az új felhasználók számára.

A LEMP-készleted most már teljesen be van állítva. A következő lépésben létrehozol egy PHP-szkriptet, amellyel letesztelheted, hogy az Nginx valóban képes kezelni a .php fájlokat az újonnan konfigurált webhelyeden.

5. lépés – PHP tesztelése Nginx-szel

A LEMP-készletednek most már teljesen fel kell készülnie. Tesztelheted is, hogy ellenőrizd, az Nginx helyesen tudja-e átadni a .php fájlokat a PHP feldolgozódnak.

Ezt úgy teheti meg, hogy létrehoz egy teszt PHP-fájlt a dokumentumgyökérben. Nyisson meg egy új fájlt info.php néven a dokumentumgyökérben a választott szövegszerkesztőjében:

nano /var/www/your_domain/info.php

Add hozzá a következő sorokat az új fájlhoz. Ez érvényes PHP kód, amely információt ad a szerveredről:

<?php
phpinfo();

Amikor végzett, mentse el és zárja be a fájlt.

Most már hozzáférhetsz ehhez az oldalhoz a web böngésződben úgy, hogy meglátogatod a Nginx konfigurációs fájlodban beállított domain nevet vagy nyilvános IP címet, majd hozzáadod a /info.php részt:

http://server_domain_or_IP/info.php

Olyan weboldalt fog kapni, amely részletes információkat tartalmaz a szerveréről:

Miután ellenőrizted a PHP szervereddel kapcsolatos releváns információkat azon az oldalon, a legjobb eltávolítani a létrehozott fájlt, mivel érzékeny információkat tartalmaz a PHP környezetedről és az Ubuntu szerveredről. Ehhez használhatod a rm parancsot a fájl törléséhez:

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

Bármikor újra létrehozhatod ezt a fájlt, ha később szükséged lenne rá.

6. lépés — Adatbázis-kapcsolat tesztelése PHP-ből (Opcionális)

Ha szeretnéd letesztelni, hogy a PHP képes-e kapcsolódni a MySQL-hez és végrehajtani adatbázis-lekérdezéseket, létrehozhatsz egy teszttáblát dummy adatokkal, majd lekérdezheted annak tartalmát egy PHP scriptből. Mielőtt ezt megtennéd, létre kell hoznod egy teszt adatbázist és egy új MySQL felhasználót, amely megfelelően van konfigurálva az hozzáféréshez.

Megjegyzés: A natív MySQL PHP könyvtár bizonyos régebbi kiadásai, a mysqlnd nem támogatják a caching_sha2_authentication módszert, ami a MySQL 8 alapértelmezett hitelesítési módja, ezért előfordulhat, hogy biztosítanod kell, hogy azok a mysql_native_password használatára legyenek konfigurálva.

Létrehozunk egy example_database nevű adatbázist és egy example_user nevű felhasználót, de ezeket a neveket lecserélheted más értékekre is.

Először csatlakozzon a MySQL konzolhoz a root fiókkal:

sudo mysql

Új adatbázis létrehozásához futtassa a következő parancsot a MySQL konzoljából:

CREATE DATABASE example_database;

Most már létrehozhatsz egy új felhasználót, és teljes jogosultságot adhatasz neki az általad létrehozott egyedi adatbázison.

A következő parancs létrehoz egy új felhasználót example_user néven, a mysql_native_password használatával alapértelmezett hitelesítési módszerként. A felhasználó jelszavát password értékre állítjuk, de ezt az értéket cserélned kell egy általad választott biztonságos jelszóra.

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

Most meg kell adnunk ennek a felhasználónak a jogosultságot az example_database adatbázishoz:

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

Ez teljes jogosultságot ad a example_user felhasználónak az example_database adatbázis felett, miközben megakadályozza, hogy ez a felhasználó más adatbázisokat hozzon létre vagy módosítson a szervereden.

Most lépj ki a MySQL shellből a következő parancs segítségével:

exit

Tesztelheted, hogy az új felhasználónak megvannak-e a megfelelő jogosultságai, ha újra bejelentkezel a MySQL konzolba, ezúttal a saját felhasználói adatokkal. Figyeld meg a -p kapcsolót ebben a parancsban, amely a example_user felhasználó létrehozásakor megadott jelszót fogja kérni:

mysql -u example_user -p

A MySQL konzolba való bejelentkezés után erősítse meg, hogy hozzáfér az example_database adatbázishoz:

SHOW DATABASES;

Ez a következő kimenetet fogja adni:

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

Ezután létrehozunk egy todo_list nevű teszt táblát. A MySQL konzolból futtassa a következő parancsot:

CREATE TABLE example_database.todo_list (

 item_id INT AUTO_INCREMENT,

 content VARCHAR(255),

 PRIMARY KEY(item_id)

);

Szúrj be néhány sort a teszt táblába. Lehet, hogy érdemes megismételni a következő parancsot néhányszor, különböző értékekkel:

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

Annak megerősítéséhez, hogy az adatok sikeresen elmentődtek a táblázatodba, futtasd a következőt:

SELECT * FROM example_database.todo_list;

A kimeneted a következőképpen jelenjen meg:

+---------+--------------------------+
| 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)

Miután megerősítetted, hogy érvényes adatok vannak a teszt tábládban, kiléphetsz a MySQL konzolból:

exit

Most létrehozhatod a PHP szkriptet, amely csatlakozik a MySQL-hez, és lekérdezi a tartalmadat. Hozz létre egy új PHP fájlt az egyedi webgyökér könyvtáradban a kedvenc szerkesztőddel. Ehhez mi a nano-t fogjuk használni:

nano /var/www/your_domain/todo_list.php

A következő PHP szkript csatlakozik a MySQL adatbázishoz, és lekérdezi a todo_list tábla tartalmát, majd listában jeleníti meg az eredményeket. Ha problémába ütközik az adatbáziskapcsolat, kivételt dob.

Add hozzá a következő tartalmat a todo_list.php szkriptedhez:

<?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();
}

Mentsd el a fájlt, és zárd be, amikor befejezted a szerkesztést.

Mostantól hozzáférhet ehhez az oldalhoz a webböngészőjében, ha meglátogatja a webhelyéhez konfigurált domain nevet vagy nyilvános IP-címet, majd a /todo_list.php kódot:

http://server_domain_or_IP/todo_list.php

Olyan oldalt kellene kapnod, mint a következő, amely megmutatja az általad a teszt táblába bevitt tartalmat:

Ez azt jelenti, hogy a PHP környezeted készen áll a MySQL szerverhez való csatlakozásra és azzal való interakcióra.

Gyakran Ismételt Kérdések

Mire használják a LEMP technológiai csomagot?

A LEMP stack dinamikus, PHP-alapú weboldalakat és alkalmazásokat hosztol, beleértve a WordPress, Laravel, Magento, Drupal és egyedi PHP-projekteket. Különösen hatékony nagy forgalmú webhelyeknél, amelyek hatékony egyidejű kapcsolatkezelést igényelnek.

Mi a különbség a LEMP és a LAMP csomagok között?

A LEMP Nginx-et használ, amely az eseményvezérelt architektúrával aszinkron módon kezeli a kapcsolatokat – hatékony a párhuzamos felhasználók számára. A LAMP Apache-ot használ, amely hagyományosan kéréseként egy szálat hoz létre (bár a modern Apache támogatja az eseményvezérelt módokat). A LEMP általában jobb teljesítményt nyújt statikus tartalom és magas párhuzamosságú helyzetek esetén, míg a LAMP könnyebb .htaccess konfigurációt és szélesebb modul támogatást biztosít.

Melyik Ubuntu verziót használjam LEMP-hez?

Ubuntu 22.04 LTS ez az útmutató elsődleges célja, PHP 8.1-gyel, MySQL 8.0-val és hosszú távú támogatással rendelkező Nginx-szel. A Ubuntu 24.04 LTS (legújabb kiadás) alapértelmezés szerint PHP 8.3-at tartalmaz, és az útmutató szerint a PHP-FPM socket útvonalak és verziószámok megfelelő módosításával használható.

Hogyan telepíthetem a LEMP csomagot az Ubuntu 24.04-re?

Kövesse ezeket az alaplépéseket:

  1. Telepítsd az Nginx-et: sudo apt install nginx
  2. Telepítsd a MySQL-t: sudo apt install mysql-server
  3. Futtassa a MySQL biztonsági szkriptet: sudo mysql_secure_installation
  4. Telepítsd a PHP-FPM-et: sudo apt install php-fpm php-mysql
  5. Nginx szerverblokk konfigurálása PHP-FPM integrációval
  6. Teszt info.php-vel és adatbázis-kapcsolattal

Lásd a teljes útmutatót az 1-6. lépésekben fent.

Milyen PHP-verziót kell telepítenem Nginx és MySQL mellé?

A legjobb kompatibilitás érdekében használd az Ubuntu verziód alapértelmezett PHP-jét:

  • Ubuntu 22.04: PHP 8.1 (a php8.1-fpm segítségével telepítve)
  • Ubuntu 24.04: PHP 8.3 (egyéni parancsokhoz állítsd be php8.3-fpm erre a verzióra)

Mindkét verzió kiválóan működik Nginx-szel és MySQL 8.0-val, támogatja a modern keretrendszereket, és aktív biztonsági frissítéseket kap.

Hogyan konfiguráljam az Nginx-et PHP fájlok feldolgozására?

Adj hozzá egy location ~ \.php$ blokkot az Nginx szerver konfigurációjához, amely a PHP-kéréseket Unix socketen keresztül a PHP-FPM-nek továbbítja:

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;
}

Állítsd be a socket útvonalát a PHP verziódnak megfelelően, teszteld a sudo nginx -t paranccsal, majd töltsd újra a sudo systemctl reload nginx segítségével.

Miért kapok „502 Bad Gateway” hibát a PHP-FPM telepítése után?

502-es hibák azt jelzik, hogy az Nginx nem tud kommunikálni a PHP-FPM-mel. Gyakori okok:

  1. PHP-FPM nem fut: Ellenőrizd a sudo systemctl status php8.1-fpm paranccsal, és indítsd el, ha szükséges
  2. Hibás socket útvonal: Ellenőrizd, hogy a /run/php/php8.1-fpm.sock létezik-e, és megegyezik-e az Nginx konfigurációddal
  3. Engedélyprobléma: Győződjön meg arról, hogy az Nginx felhasználó (www-data) hozzá tud férni a sockethez
  4. PHP-FPM konfigurációs hiba: Ellenőrizze a naplókat a /var/log/php8.1-fpm.log fájlban

Megoldás: Indítsa újra mindkét szolgáltatást:

sudo systemctl restart php8.1-fpm nginx

Hogyan biztosíthatom a MySQL-t a telepítés után?

Futtassa a beépített biztonsági szkriptet:

sudo mysql_secure_installation

Kövesse az utasításokat a következőhöz:

  • Jelszóellenőrző bővítmény engedélyezése
  • Állítson be erős root jelszót
  • Anonim felhasználók eltávolítása
  • A távoli root bejelentkezés letiltása
  • Tesztadatbázis eltávolítása
  • Újratöltési jogosultságok

Az alkalmazás adatbázisaihoz hozzon létre dedikált felhasználókat korlátozott jogosultságokkal a root fiók használata helyett.

Futtathatok több weboldalt egy LEMP szerveren?

Igen, hozz létre külön Nginx szerverblokkokat minden domainhez:

  1. Könyvtár létrehozása: sudo mkdir -p /var/www/second_domain
  2. Szerverblokk létrehozása: sudo nano /etc/nginx/sites-available/second_domain
  3. Konfigurálja egyedi server_name és root direktívákkal
  4. Engedélyezés: sudo ln -s /etc/nginx/sites-available/second_domain /etc/nginx/sites-enabled/
  5. Teszteld és töltsd újra: sudo nginx -t && sudo systemctl reload nginx

Minden webhelynek lehet külön PHP-beállítása és adatbázis-felhasználója.

Hogyan tudom frissíteni a PHP-t egy újabb verzióra?

Az Ubuntu csomagfrissítések automatikusan kezelik a kisebb verziókat. A főverzió-frissítések esetén:

  1. Add hozzá Ondřej PHP PPA-ját (megbízható harmadik féltől származó adattár):

    sudo add-apt-repository ppa:ondrej/php
    sudo apt update
  2. Új PHP-FPM verzió telepítése:

    sudo apt install php8.3-fpm php8.3-mysql -y
  3. Frissítse az Nginx konfigurációs socket útvonalát /run/php/php8.3-fpm.sock értékre

  4. Nginx tesztelése és újratöltése

  5. Opcionálisan távolítsa el a régi verziót: sudo apt purge php8.1-fpm

Mindig tesztelj a staging környezetben, mielőtt frissítenéd az éles rendszereket.

Gyakori problémák elhárítása

502 Hibás átjáró

A leggyakoribb LEMP-készlet probléma akkor fordul elő, amikor az Nginx nem tud kommunikálni a PHP-FPM-mel:

PHP-FPM állapot ellenőrzése:

sudo systemctl status php8.1-fpm

Foglalat elérési útjának ellenőrzése:

ls -la /run/php/

A várt kimenetnek meg kellene jelenítenie a php8.1-fpm.sock fájlt.

Gyakori javítások:

  1. PHP-FPM újraindítása: sudo systemctl restart php8.1-fpm
  2. Ellenőrizze, hogy az Nginx szerverblokk socket útvonala megegyezik-e a tényleges PHP-FPM socket útvonalával
  3. Ellenőrizze a fájl jogosultságokat: sudo chown www-data:www-data /run/php/php8.1-fpm.sock

Hozzáférés megtagadva hiba

Javítsa meg a webkiszolgáló könyvtárainak jogosultságait:

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

MySQL kapcsolat problémák

MySQL root jelszó visszaállítása:

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

MySQL szolgáltatás ellenőrzése:

sudo systemctl status mysql

PHP nem dolgoz fel

PHP modulok ellenőrzése:

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

Ellenőrizze a PHP-FPM beállításait:

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

404 hiba hibakeresése:

  • Ellenőrizze, hogy az index.php szerepel-e az Nginx index direktívájában
  • Ellenőrizze, hogy létezik-e a fájl: ls -la /var/www/your_domain/
  • Nginx hibanaplók ellenőrzése: sudo tail -f /var/log/nginx/error.log

Következtetés

Ebben az útmutatóban rugalmas alapot építettél weboldalak és alkalmazások PHP-vel történő kiszolgálásához a látogatóknak, Nginx használatával webszerverként és MySQL adatbázis-rendszerként. Ezt Apache webszerverrel is megteheted, nézd meg az útmutatónkat a Linux, Apache, MySQL, PHP (LAMP) stack Ubuntu-ra történő telepítéséről. Webhelyedet a Let’s Encrypt segítségével is biztonságossá teheted, amely ingyenes, megbízható tanúsítványokat biztosít. Tanuld meg, hogyan teheted ezt meg a Let’s Encrypt for Apache útmutatónk segítségével.

Köszönjük, hogy a Linux-Console.net közösséggel tanultál.