LEMP diegimas Ubuntu: Nginx, PHP-FPM, MySQL

Paleiskite serveryje viena komanda (pirmiausia patikrinkite skripto turinį žemiau):

curl -sSL https://cp.lv/scripts/ustanovit-lemp-ubuntu.sh | sudo bash

…arba su wget:

wget -qO- https://cp.lv/scripts/ustanovit-lemp-ubuntu.sh | sudo bash

Skripto turinys ustanovit-lemp-ubuntu.sh:

#!/usr/bin/env bash
set -e
export DEBIAN_FRONTEND=noninteractive

# 1. Update the system
sudo apt-get update
sudo apt-get upgrade -y

# 2. Nginx, MySQL, PHP-FPM and the extensions a CMS needs
sudo apt-get install -y nginx mysql-server php-fpm php-mysql \
  php-cli php-curl php-gd php-mbstring php-xml php-zip
sudo systemctl enable --now nginx mysql

# 3. Site root and a test index.php
sudo mkdir -p /var/www/example.com
sudo chown -R www-data:www-data /var/www/example.com
echo "<?php phpinfo();" | sudo tee /var/www/example.com/index.php > /dev/null

# 4. server block (quoted 'EOF' leaves Nginx variables alone)
sudo tee /etc/nginx/sites-available/example.com > /dev/null << 'EOF'
server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

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

    location ~ /\.ht {
        deny all;
    }
}
EOF

# 5. Enable the site
sudo ln -sf /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/example.com
sudo nginx -t && sudo systemctl reload nginx
echo "LEMP is ready: open http://example.com"

LEMP yra Linux, Nginx, MySQL ir PHP derinys — tipinė aplinka PHP svetainėms (WordPress, Laravel, savos kūrybos projektams). Žemiau pateikta paruošta komandų seka Ubuntu 22.04/24.04. Visas procesas trunka 10–15 minučių.

Ko reikia iš anksto

  • VPS su Ubuntu 22.04 arba 24.04 ir SSH prieiga.
  • Vartotojas su sudo teisėmis (nedirbkite nuolat kaip root).
  • Domenas, kurio A įrašas nukreiptas į serverio IP (veikiančiai svetainei).

Pirmiausia atnaujinkite sistemą:

sudo apt update && sudo apt upgrade -y

1 žingsnis. Nginx diegimas

sudo apt install nginx -y
sudo systemctl enable --now nginx

Patikrinkite būseną ir atidarykite prievadus ugniasienėje:

sudo systemctl status nginx
sudo ufw allow 'Nginx Full'
sudo ufw allow OpenSSH
sudo ufw enable

Atidarykite serverio IP naršyklėje — turi pasirodyti puslapis „Welcome to nginx“.

2 žingsnis. MySQL diegimas

sudo apt install mysql-server -y
sudo systemctl enable --now mysql

Paleiskite interaktyvią duomenų bazės serverio apsaugą:

sudo mysql_secure_installation

Čia nustatykite root slaptažodį, pašalinkite anoniminius vartotojus, uždrauskite nuotolinį root prisijungimą ir ištrinkite testinę duomenų bazę. Tada sukurkite duomenų bazę ir atskirą vartotoją svetainei:

sudo mysql
CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

3 žingsnis. PHP-FPM diegimas

Nginx pats PHP neapdoroja — jis perduoda užklausas PHP-FPM procesui per soketą.

sudo apt install php-fpm php-mysql -y

Patikrinkite versiją ir serviso pavadinimą (Ubuntu 24.04 tai php8.3-fpm):

php -v
systemctl status php8.3-fpm

Naudingas plėtinių rinkinys CMS poreikiams:

sudo apt install php-cli php-curl php-gd php-mbstring php-xml php-zip -y

4 žingsnis. Server block konfigūracija

Sukurkite svetainės šakninį katalogą ir testinį failą:

sudo mkdir -p /var/www/example.com
sudo chown -R www-data:www-data /var/www/example.com
echo "<?php phpinfo();" | sudo tee /var/www/example.com/index.php

Atidarykite konfigūraciją /etc/nginx/sites-available/example.com redaktoriuje:

sudo nano /etc/nginx/sites-available/example.com

Failo turinys:

server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

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

    location ~ /\.ht {
        deny all;
    }
}

Arba sukurkite visą konfigūraciją viena komanda — nukopijuokite ir įklijuokite į konsolę (kabutės 'EOF' svarbios, kad Nginx kintamieji $uri liktų nepakeisti):

sudo tee /etc/nginx/sites-available/example.com > /dev/null << 'EOF'
server {
    listen 80;
    server_name example.com www.example.com;
    root /var/www/example.com;
    index index.php index.html;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

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

    location ~ /\.ht {
        deny all;
    }
}
EOF

Aktyvuokite svetainę ir perkraukite Nginx:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx

5 žingsnis. PHP patikra

Atidarykite http://example.com — pamatysite phpinfo() puslapį su PHP versija ir prijungtais moduliais. Įsitikinkite, kad sąraše yra mysqli arba pdo_mysql. Po patikros būtinai ištrinkite testinį failą — jis atskleidžia serverio konfigūraciją:

sudo rm /var/www/example.com/index.php

Greita komponentų patikra

Komponentas Patikros komanda Laukiamas rezultatas
Nginx sudo nginx -t syntax is ok
PHP-FPM systemctl is-active php8.3-fpm active
MySQL mysqladmin -u root -p status Uptime: …
PHP soketas ls /run/php/ php8.3-fpm.sock

Dažni klausimai

Kodėl svetainė rodo PHP kodą kaip tekstą? Nginx neperduoda užklausos PHP-FPM. Patikrinkite bloką location ~ \.php$ ir soketo kelią direktyvoje fastcgi_pass.

Klaida 502 Bad Gateway — ką daryti? Dažniausiai PHP-FPM nepaleistas arba nurodytas neteisingas soketas. Įvykdykite systemctl status php8.3-fpm ir palyginkite .sock failo pavadinimą su konfigūracija.

Kaip sužinoti PHP versiją savo Ubuntu? Komanda php -v. Ubuntu 22.04 pagal numatytuosius nustatymus yra PHP 8.1, o 24.04 — PHP 8.3. Serviso ir soketo pavadinimas priklauso nuo versijos.

Ar vietoje MySQL galima įdiegti MariaDB? Taip. MariaDB yra suderinama ir diegiama komanda apt install mariadb-server. Kliento komandos ir SQL sintaksė identiškos.

LEMP gerai veikia ir nedideliame serveryje, tačiau realiam krūviui rinkitės NVMe diską ir pakankamą RAM kiekį. Paruoštus planus rasite puslapyje VPS serverio nuoma, o apkrautoms svetainėms tiks WordPress VPS.

Inga Vītola