BLACKBOXCentru de ajutor

WordPress pe LEMP (nginx, MariaDB, PHP)

Instalarea pas cu pas a unui site WordPress pe un server Ubuntu sau Debian, cu HTTPS, copii de rezervă zilnice și setări de bază.

generalActualizat 2026-10-09~10 min de citit
Pe această pagină

Ghidul arată cum instalați un site WordPress pe stiva LEMP: Linux, nginx (serverul web), MariaDB (baza de date) și PHP-FPM, cu un certificat HTTPS gratuit de la Let's Encrypt. Toate comenzile se rulează pe server, ca root, într-o sesiune SSH: Conectarea la server prin SSH (Windows, macOS, Linux). Adresa IP a serverului este în panoul app.blackbox.md, „Infrastructură” → „Serverele mele” (app.blackbox.md/my-servers), în câmpul „IP” de pe cardul serverului.

Disponibil pentru: titularul unui server VPS BLACKBOX fără panou de control, cu acces root prin SSH. Pașii sunt scriși pentru Ubuntu 24.04 LTS și Debian 12; diferențele pentru AlmaLinux 9 și CentOS Stream 9 sunt într-o secțiune separată. Pe un plan „VPS hosting” cu panou de control, site-urile se creează din panou: Planurile „VPS hosting” cu panou de control.

Ce plan și ce sistem alegeți

Pentru un site obișnuit, un plan Standard S sau Standard M este un început bun:

Plan vCPU RAM Disc Preț Potrivit pentru
Standard S 1 2 GB 20 GB 443 MDL/lună site de prezentare, blog
Standard M 2 4 GB 40 GB 578 MDL/lună magazin online, site cu multe plugin-uri

Toate planurile sunt în Planurile VPS: cum alegeți. Când site-ul crește, treceți la un plan mai mare: Upgrade server: trecerea la un plan mai mare.

Ca sistem de operare, alegeți Ubuntu 24.04 LTS (selectat implicit la comandă) sau Debian 12. Ubuntu 20.04 LTS și Debian 11 vin cu PHP 7.4, pe care proiectul PHP nu-l mai actualizează: nu le folosiți pentru un site nou.

Înainte de instalare, verificați:

În toate comenzile, înlocuiți DOMENIU cu numele site-ului fără www, de exemplu example.com.

Pasul 1. Instalați nginx, MariaDB și PHP

  1. Actualizați lista de pachete și instalați componentele. Pe Ubuntu și Debian, serviciile pornesc automat după instalare.

    apt update
    apt install -y nginx mariadb-server php-fpm php-mysql php-curl php-gd php-mbstring php-xml php-zip php-intl curl
  2. Aflați versiunea PHP instalată după numele socket-ului PHP-FPM:

    ls /run/php/
    Sistem PHP Socket PHP-FPM Serviciul PHP-FPM
    Ubuntu 24.04 LTS 8.3 /run/php/php8.3-fpm.sock php8.3-fpm
    Debian 12 8.2 /run/php/php8.2-fpm.sock php8.2-fpm
    Ubuntu 22.04 LTS 8.1 /run/php/php8.1-fpm.sock php8.1-fpm

    Important Exemplele folosesc PHP 8.3 (Ubuntu 24.04 LTS). Pe alt sistem, înlocuiți 8.3 cu versiunea dvs. peste tot: în căile /etc/php/8.3/…, în numele serviciului php8.3-fpm și în socket-ul din configurația nginx.

  3. Măriți mărimea maximă a fișierelor încărcate în WordPress (implicit, PHP acceptă doar 2 MB) și reporniți PHP-FPM:

    printf 'upload_max_filesize = 64M\npost_max_size = 64M\n' > /etc/php/8.3/fpm/conf.d/99-wordpress.ini
    systemctl restart php8.3-fpm

Pasul 2. Creați baza de date

  1. Rulați scriptul de securizare MariaDB și răspundeți ca în tabel:

    mariadb-secure-installation
    Întrebarea Răspunsul
    Enter current password for root (enter for none): Enter
    Switch to unix_socket authentication [Y/n] n
    Change the root password? [Y/n] n, dacă scriptul a scris „You already have your root account protected, so you can safely answer 'n'.”; altfel Y și o parolă puternică
    Remove anonymous users?, Disallow root login remotely?, Remove test database and access to it?, Reload privilege tables now? Y la toate

    Utilizatorul root al MariaDB intră prin contul root al sistemului (autentificare unix_socket), cu comanda mariadb, fără parolă.

  2. Generați o parolă puternică pentru utilizatorul bazei de date și notați-o. Mai jos, ea apare ca PAROLA_DB:

    openssl rand -hex 20
  3. Deschideți consola MariaDB:

    mariadb
  4. Creați baza de date wordpress și utilizatorul wpuser, cu drepturi doar pe această bază, apoi ieșiți:

    CREATE DATABASE wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
    CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'PAROLA_DB';
    GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost';
    FLUSH PRIVILEGES;
    EXIT;

Utilizatorul wpuser se poate conecta doar de pe server (localhost). Nu deschideți portul 3306 spre internet. Mai multe despre MariaDB: Baze de date: MariaDB/MySQL și PostgreSQL.

Pasul 3. Copiați fișierele WordPress

  1. Descărcați ultima versiune de pe wordpress.org și dezarhivați-o în /var/www/DOMENIU:

    mkdir -p /var/www/DOMENIU
    cd /tmp
    curl -O https://wordpress.org/latest.tar.gz
    tar -xzf latest.tar.gz -C /var/www/DOMENIU --strip-components=1
    rm latest.tar.gz
  2. Creați wp-config.php și scrieți în el datele bazei de date. Înlocuiți PAROLA_DB cu parola din pasul 2.

    cd /var/www/DOMENIU
    cp wp-config-sample.php wp-config.php
    sed -i "s/database_name_here/wordpress/; s/username_here/wpuser/; s/password_here/PAROLA_DB/" wp-config.php
  3. Înlocuiți cele 8 chei de securitate (salts) cu valori unice, generate de serviciul WordPress.org:

    curl -s https://api.wordpress.org/secret-key/1.1/salt/ -o /tmp/wp-salts.txt
    sed -i '/put your unique phrase here/d' wp-config.php
    sed -i '/#@-/r /tmp/wp-salts.txt' wp-config.php
    rm /tmp/wp-salts.txt
  4. Verificați rezultatul. Trebuie să vedeți 3 rânduri DB_ cu datele dvs. și 8 rânduri, de la AUTH_KEY la NONCE_SALT, cu șiruri lungi aleatorii.

    grep -E "DB_(NAME|USER|PASSWORD)|_KEY'|_SALT'" wp-config.php
  5. Treceți fișierele în proprietatea utilizatorului www-data, cu care rulează nginx și PHP-FPM, și setați permisiunile:

    chown -R www-data:www-data /var/www/DOMENIU
    find /var/www/DOMENIU -type d -exec chmod 755 {} +
    find /var/www/DOMENIU -type f -exec chmod 644 {} +
    chmod 640 /var/www/DOMENIU/wp-config.php

    Astfel, WordPress își poate instala singur actualizările și plugin-urile, iar wp-config.php, cu parola bazei de date și cheile, nu poate fi citit de ceilalți utilizatori ai sistemului.

Pasul 4. Configurați nginx

  1. Creați fișierul site-ului:

    nano /etc/nginx/sites-available/DOMENIU
  2. Lipiți configurația de mai jos, înlocuiți DOMENIU, salvați cu Ctrl+O și Enter, apoi ieșiți cu Ctrl+X:

    server {
        listen 80;
        server_name DOMENIU www.DOMENIU;
    
        root /var/www/DOMENIU;
        index index.php index.html;
    
        client_max_body_size 64M;
    
        location / {
            try_files $uri $uri/ /index.php?$args;
        }
    
        location ~* /wp-content/uploads/.*\.php$ {
            deny all;
        }
    
        location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/run/php/php8.3-fpm.sock;
        }
    
        location ~ /\.(?!well-known) {
            deny all;
        }
    }
    Rândul Ce face
    try_files $uri $uri/ /index.php?$args; servește fișierele existente și trimite restul cererilor la WordPress (necesar pentru legăturile permanente)
    fastcgi_pass unix:/run/php/php8.3-fpm.sock; trimite fișierele .php la PHP-FPM; calea trebuie să fie exact socket-ul din pasul 1
    client_max_body_size 64M; mărimea maximă a unui fișier încărcat, aceeași ca în PHP
    location ~* /wp-content/uploads/.*\.php$ interzice rularea scripturilor PHP din folderul cu fișiere încărcate
    location ~ /\.(?!well-known) blochează fișierele ascunse (.htaccess, .git), dar lasă accesibil /.well-known/ pentru Let's Encrypt
  3. Activați site-ul, verificați configurația și reîncărcați nginx:

    ln -s /etc/nginx/sites-available/DOMENIU /etc/nginx/sites-enabled/
    nginx -t
    systemctl reload nginx

    nginx -t trebuie să afișeze syntax is ok și test is successful. Dacă afișează o eroare, corectați rândul indicat și repetați testul înainte de reîncărcare.

Pasul 5. Activați HTTPS

  1. Instalați certbot cu modulul pentru nginx:

    apt install -y certbot python3-certbot-nginx
  2. Obțineți certificatul pentru ambele nume:

    certbot --nginx -d DOMENIU -d www.DOMENIU
  3. La prima rulare, certbot cere o adresă de email și acceptarea condițiilor Let's Encrypt. Dacă întreabă dacă să redirecționeze HTTP spre HTTPS, alegeți redirecționarea. La final apare un mesaj care începe cu „Congratulations!”: certbot a adăugat certificatul în configurația nginx și a reîncărcat nginx.

  4. Certificatul este valabil 90 de zile și se reînnoiește automat. Verificați reînnoirea:

    certbot renew --dry-run

Detalii și erori frecvente: Server web cu HTTPS: nginx sau Apache și Let's Encrypt.

Pasul 6. Finalizați instalarea în browser

  1. Deschideți https://DOMENIU. Apare asistentul de instalare WordPress.
  2. Alegeți limba site-ului și continuați.
  3. Completați titlul site-ului, numele administratorului, parola și adresa de email. Nu folosiți admin ca nume și păstrați parola puternică propusă de WordPress.
  4. Confirmați instalarea, apoi intrați în panoul de administrare la https://DOMENIU/wp-admin.

Instalați WordPress după pasul 5: așa, site-ul își salvează de la început adresa cu https://.

Securitate

Dezactivați și editorul de cod din panoul WordPress, ca un cont de administrator compromis să nu poată modifica direct fișierele PHP:

sed -i "/That's all, stop editing/i define( 'DISALLOW_FILE_EDIT', true );" /var/www/DOMENIU/wp-config.php

Copii de rezervă zilnice

Salvați în fiecare zi baza de date și folderul wp-content, cu temele, plugin-urile și fișierele încărcate. Scriptul de mai jos rulează zilnic prin cron. Dacă folderul /etc/cron.daily nu există pe server, instalați întâi pachetul cron (Ubuntu, Debian) sau cronie (AlmaLinux, CentOS Stream).

  1. Creați folderul pentru copii și fișierul scriptului:

    mkdir -p /root/backup
    nano /etc/cron.daily/wordpress-backup
  2. Lipiți conținutul de mai jos, înlocuiți DOMENIU și salvați:

    #!/bin/sh
    D=$(date +%F)
    mysqldump --single-transaction wordpress | gzip > /root/backup/wordpress-db-$D.sql.gz
    tar -czf /root/backup/wp-content-$D.tar.gz -C /var/www/DOMENIU wp-content
    find /root/backup -type f -mtime +7 -delete
  3. Faceți scriptul executabil și rulați-l o dată pentru test:

    chmod +x /etc/cron.daily/wordpress-backup
    /etc/cron.daily/wordpress-backup
    ls -lh /root/backup

    Trebuie să apară două fișiere cu data de azi. De acum, scriptul rulează zilnic, iar copiile mai vechi de 7 zile se șterg singure. Pe un disc mic (Standard S are 20 GB), urmăriți spațiul ocupat: Discul serverului este plin.

Atenție Copiile din /root/backup stau pe același server și se pierd odată cu el. Copiați-le regulat în altă parte: pe alt server sau într-un spațiu de stocare extern. BLACKBOX nu face automat copii de rezervă ale datelor de pe server: Strategia de backup pentru serverul dvs..

Performanță

OPcache. Cache-ul de cod PHP este activ implicit. Verificați: rezultatul trebuie să conțină Zend OPcache.

php-fpm8.3 -m | grep -i opcache

Cache de pagini. Instalați din panoul WordPress un singur plugin de cache al paginilor, de exemplu WP Super Cache. Pluginul salvează paginile gata generate și le servește din nou fără interogări la baza de date, deci mult mai repede.

Memorie swap. Pe planurile cu 2 GB RAM, cum este Standard S, adăugați 1–2 GB de swap, ca vârfurile de trafic să nu oprească MariaDB din lipsă de memorie: Adăugarea memoriei swap. Dacă serverul folosește swap tot timpul, treceți la un plan mai mare. Cum vedeți încărcarea: Diagnosticarea încărcării serverului (CPU, RAM, disc, rețea).

AlmaLinux 9 și CentOS Stream 9

Pașii sunt aceiași, cu diferențele de mai jos. SELinux este activ: nu-l dezactivați, ci setați etichetele corecte.

  1. Activați PHP 8.3 (implicit, sistemul instalează PHP 8.0), instalați pachetele și porniți serviciile, care aici nu pornesc singure. Extensia curl este inclusă în pachetul de bază PHP.

    dnf module enable -y php:8.3
    dnf install -y nginx mariadb-server php-fpm php-mysqlnd php-gd php-mbstring php-xml php-intl php-opcache php-pecl-zip nano tar
    systemctl enable --now nginx mariadb php-fpm
  2. Folosiți căile și numele din coloana din dreapta:

    Ce Ubuntu și Debian AlmaLinux și CentOS Stream
    Utilizatorul PHP-FPM și proprietarul fișierelor www-data apache
    Socket-ul PHP-FPM /run/php/php8.3-fpm.sock /run/php-fpm/www.sock
    Fișierul site-ului nginx /etc/nginx/sites-available/DOMENIU și link în sites-enabled /etc/nginx/conf.d/DOMENIU.conf, fără link
    Limitele de încărcare PHP /etc/php/8.3/fpm/conf.d/99-wordpress.ini /etc/php.d/99-wordpress.ini
    Serviciul PHP-FPM php8.3-fpm php-fpm
  3. MariaDB ascultă aici pe toate interfețele: legați-l la 127.0.0.1 ca în Baze de date: MariaDB/MySQL și PostgreSQL.

  4. În configurația nginx, înlocuiți blocul location ~ \.php$ cu acesta (fișierul snippets/fastcgi-php.conf nu există aici):

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }
  5. Treceți fișierele în proprietatea utilizatorului apache, apoi permiteți prin SELinux scrierea în folderul site-ului (încărcări, actualizări) și conexiunile PHP spre internet (descărcarea actualizărilor și a plugin-urilor):

    chown -R apache:apache /var/www/DOMENIU
    dnf install -y policycoreutils-python-utils
    semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/DOMENIU(/.*)?"
    restorecon -Rv /var/www/DOMENIU
    setsebool -P httpd_can_network_connect 1

    Dacă mai târziu mutați (mv) în folderul site-ului fișiere din alt folder, refaceți etichetele SELinux:

    restorecon -Rv /var/www/DOMENIU
  6. Instalați certbot din depozitul EPEL și porniți timerul de reînnoire, care aici nu pornește singur:

    dnf install -y epel-release
    dnf install -y certbot python3-certbot-nginx
    systemctl enable --now certbot-renew.timer
  7. Verificarea OPcache se face cu php-fpm în loc de php-fpm8.3:

    php-fpm -m | grep -i opcache

Probleme frecvente

Mesaj sau simptom Cauza Ce faceți
502 Bad Gateway PHP-FPM este oprit sau fastcgi_pass indică alt socket verificați systemctl status php8.3-fpm și comparați fastcgi_pass cu rezultatul ls /run/php/
Browserul descarcă fișierul PHP sau afișează pagina implicită nginx fișierul site-ului nu este activat sau lipsește blocul pentru .php verificați linkul din sites-enabled, rulați nginx -t și reîncărcați nginx
„Error establishing a database connection” (sau traducerea lui) date greșite în wp-config.php ori MariaDB oprit comparați rândurile DB_ cu pasul 2; verificați systemctl status mariadb
413 Request Entity Too Large fișierul depășește client_max_body_size măriți limita în nginx și în fișierul 99-wordpress.ini, apoi reîncărcați nginx și reporniți PHP-FPM
WordPress cere date FTP când instalați un plugin fișierele nu aparțin utilizatorului PHP-FPM rulați din nou chown din pasul 3 (apache:apache pe AlmaLinux)
Încărcările sau actualizările eșuează pe AlmaLinux, cu „Permission denied” etichetele SELinux repetați comenzile semanage, restorecon și setsebool de mai sus
certbot nu obține certificatul domeniul nu indică serverul sau portul 80 este blocat verificați înregistrările A; vedeți Site-ul nu se deschide

Erorile nginx sunt în /var/log/nginx/error.log.

Întrebări frecvente

Pot pune mai multe site-uri WordPress pe același server? Da. Pentru fiecare site, repetați pașii 2–6 cu o bază de date, un utilizator, un folder în /var/www/ și un fișier nginx separate; scriptul mariadb-secure-installation nu se mai rulează. Adăugați baza de date și folderul noului site și în scriptul de copii de rezervă. Urmăriți memoria și spațiul pe disc.

WordPress nu trimite emailuri (resetarea parolei, formularele de contact). Pe un server nou, de regulă nu este configurat un serviciu de trimitere a emailurilor. Instalați un plugin SMTP și conectați-l la contul unui serviciu de email.

Am deja un site WordPress la alt furnizor. Cum îl mut aici? Pregătiți serverul cu pașii 1, 2 și 4, apoi urmați Mutarea unui site pe serverul BLACKBOX: copiați fișierele, importați baza de date și schimbați DNS-ul la final.

Poate BLACKBOX să instaleze WordPress în locul meu? Da, ca serviciu profesional la cerere, prin suport. Volumul lucrării, prețul și condițiile le primiți în oferta echipei: Servicii profesionale la cerere: administrare, DevOps, migrare.

N-ați găsit răspunsul?Scrieți-ne și echipa de suport vă răspunde. support@blackbox.md
Deschideți un tichet