Aceasta este configurația de performanță, fără floricele, pe care magazinul tău WooCommerce o merită. Vom porni de la un VPS curat, instalăm un stack LEMP suplu (NGINX, MariaDB, PHP-FPM), adăugăm Redis pentru object caching, conectăm reguli NGINX inteligente care respectă sesiunile WooCommerce și încheiem cu o configurare Cloudflare care accelerează resursele statice, menținând în același timp coșul și checkout-ul necache-uite. Rezultatul: Time To First Byte mic, redare stabilă sub sarcină și o platformă care scalează. Pentru performanță previzibilă, începe pe un VPS de la ENGINYRING și înregistrează un domeniu potrivit prin ENGINYRING Domains. Agențiile care standardizează acest stack pot folosi și Reseller Hosting pentru implementări multi-client.

1) Cerințe preliminare

VPS recomandat: 2–4 vCPU, 4–8 GB RAM, SSD/NVMe rapid, Ubuntu 22.04 LTS sau 24.04 LTS. Magazinele mai grele (1.000+ produse, trafic ridicat sau promoții) ar trebui să vizeze 4–8 vCPU și 8–16 GB RAM. Asigură-te că ai un domeniu (ex.: store.example.com) și că poți indica DNS-ul spre server mai târziu (vom folosi proxy prin Cloudflare).

  • Acces SSH la VPS ca utilizator cu sudo
  • Drepturi root sau sudo
  • Firewall deschis pentru porturile 80 și 443
  • Familiaritate de bază cu linia de comandă

Actualizează mai întâi sistemul:

sudo apt update && sudo apt -y upgrade
sudo apt -y install unzip curl git ufw

Activează un firewall de bază:

sudo ufw allow OpenSSH
sudo ufw allow 80,443/tcp
sudo ufw enable

2) Partea 1: instalarea stack-ului LEMP (NGINX, MariaDB, PHP-FPM)

NGINX

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

MariaDB

sudo apt -y install mariadb-server
sudo systemctl enable --now mariadb
sudo mysql_secure_installation

Creează baza de date și utilizatorul pentru WordPress:

sudo mysql -e "CREATE DATABASE wp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;"
sudo mysql -e "CREATE USER 'wpuser'@'localhost' IDENTIFIED BY 'STRONG_DB_PASSWORD_HERE';"
sudo mysql -e "GRANT ALL PRIVILEGES ON wp.* TO 'wpuser'@'localhost'; FLUSH PRIVILEGES;"

Tuning de bază pentru MariaDB pe VPS (editează /etc/mysql/mariadb.conf.d/50-server.cnf):

[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size    = 256M
innodb_flush_method     = O_DIRECT
max_connections         = 200
query_cache_type        = 0
query_cache_size        = 0
tmp_table_size          = 128M
max_heap_table_size     = 128M

Ajustează valorile în funcție de RAM (pentru 8 GB RAM, încearcă 2–3G buffer pool). Repornește MariaDB:

sudo systemctl restart mariadb

PHP-FPM

Instalează PHP 8.2 sau 8.3 cu extensiile uzuale pentru WooCommerce:

sudo apt -y install php-fpm php-cli php-mysql php-curl php-xml php-zip php-gd php-mbstring php-intl php-bcmath php-imagick

OPcache și setări pentru pool-ul PHP-FPM (editează /etc/php/*/fpm/php.ini):

opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=256
opcache.max_accelerated_files=20000
opcache.validate_timestamps=0
realpath_cache_size=4096k
realpath_cache_ttl=600

Dimensionarea pool-ului (editează /etc/php/*/fpm/pool.d/www.conf), exemplu pentru 4 vCPU și 8 GB RAM:

pm = dynamic
pm.max_children = 24
pm.start_servers = 6
pm.min_spare_servers = 6
pm.max_spare_servers = 12
pm.max_requests = 500

Reîncarcă PHP-FPM:

sudo systemctl restart php*-fpm

3) Partea 2: tuning de performanță cu Redis și caching NGINX inteligent

Instalare și activare Redis

sudo apt -y install redis-server php-redis
sudo sed -i 's/^# maxmemory .*/maxmemory 256mb/' /etc/redis/redis.conf
sudo sed -i 's/^# maxmemory-policy .*/maxmemory-policy allkeys-lru/' /etc/redis/redis.conf
sudo systemctl enable --now redis-server
sudo systemctl restart php*-fpm

Ulterior, în WordPress, instalează pluginul Redis Object Cache și apasă Enable. Astfel reduci interogările la baza de date și accelerezi paginile dinamice.

Server block NGINX care „înțelege” WooCommerce

Creează un fișier de site la /etc/nginx/sites-available/store.conf (înlocuiește domeniul):

map $http_cookie $nocache {
    default                    0;
    ~wordpress_logged_in_      1;
    ~comment_author            1;
    ~woocommerce_cart_hash     1;
    ~woocommerce_items_in_cart 1;
    ~wp_woocommerce_session_   1;
}

upstream php-handler {
    server unix:/run/php/php-fpm.sock;
}

server {
    listen 80;
    server_name store.example.com;
    root /var/www/store/current;

    index index.php;
    client_max_body_size 64M;

    # Gzip pentru resurse text
    gzip on;
    gzip_types text/plain text/css application/json application/javascript application/xml+rss application/xml image/svg+xml;
    gzip_vary on;
    gzip_min_length 1024;

    # Statice - cache lung
    location ~* \.(?:css|js|jpg|jpeg|gif|png|svg|ico|webp|avif|woff|woff2|ttf)$ {
        expires 30d;
        add_header Cache-Control "public, max-age=2592000, immutable";
        try_files $uri =404;
    }

    # Interzice accesul direct la fișiere sensibile
    location ~* /(\.git|\.env|composer\.(json|lock)|readme\.html|license\.txt) { deny all; }

    # PHP + microcache pentru anonimi
    set $skip_cache $nocache;
    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_read_timeout 120s;

        # Buffere FastCGI
        fastcgi_buffers 16 16k;
        fastcgi_buffer_size 32k;

        # Ocolește cache pentru logați sau sesiuni WooCommerce
        fastcgi_no_cache $skip_cache;
        fastcgi_cache_bypass $skip_cache;

        # Cache pentru anonimi
        fastcgi_cache WORDPRESS;
        fastcgi_cache_valid 200 301 302 10s;
        fastcgi_cache_use_stale updating error timeout invalid_header http_500;
        add_header X-FastCGI-Cache $upstream_cache_status;

        fastcgi_pass php-handler;
    }

    # Let's Encrypt HTTP-01
    location ^~ /.well-known/acme-challenge/ {
        root /var/www/letsencrypt;
        default_type "text/plain";
        try_files $uri =404;
    }
}

Definește zona de cache FastCGI (editează /etc/nginx/nginx.conf sau un fișier în /etc/nginx/conf.d/):

fastcgi_cache_path /var/cache/nginx/wordpress levels=1:2 keys_zone=WORDPRESS:100m inactive=60m use_temp_path=off;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

Activează site-ul:

sudo mkdir -p /var/www/store/current
sudo chown -R www-data:www-data /var/www/store
sudo ln -s /etc/nginx/sites-available/store.conf /etc/nginx/sites-enabled/store.conf
sudo nginx -t && sudo systemctl reload nginx

De ce funcționează: coșul, checkout-ul și sesiunile utilizatorilor logați sar peste microcaching astfel încât totalurile și stocurile sunt mereu proaspete. Categoriile și paginile de produs pentru vizitatori anonimi primesc un cache scurt, care absoarbe vârfurile de trafic și îmbunătățește TTFB.

4) Partea 3: instalare și securizare WordPress + WooCommerce

Instalează WP-CLI și WordPress în /var/www/store/current:

cd /tmp
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
php wp-cli.phar --info
chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp

cd /var/www/store/current
sudo -u www-data wp core download
sudo -u www-data wp config create --dbname=wp --dbuser=wpuser --dbpass=STRONG_DB_PASSWORD_HERE --dbhost=localhost --dbprefix=wp_
sudo -u www-data wp core install --url="http://store.example.com" --title="Woo Store" --admin_user="admin" --admin_password="STRONG_WP_ADMIN_PASS" --admin_email="you@example.com"

Întărește wp-config.php (adaugă liniile de mai jos cu sudo -u www-data wp config set sau editează fișierul):

define('DISALLOW_FILE_EDIT', true);
define('AUTOSAVE_INTERVAL', 120);
define('WP_POST_REVISIONS', 10);
define('EMPTY_TRASH_DAYS', 7);
define('WP_CACHE', true);
define('WP_MEMORY_LIMIT', '256M');

Instalează WooCommerce și pluginurile esențiale:

sudo -u www-data wp plugin install woocommerce --activate
sudo -u www-data wp plugin install redis-cache --activate
sudo -u www-data wp plugin install wp-crontrol --activate
# Opțional în timpul configurării: sudo -u www-data wp plugin install query-monitor
sudo -u www-data wp theme install storefront --activate

Activează Redis Object Cache în WP Admin sau prin WP-CLI:

sudo -u www-data wp redis enable

Permisiuni de fișiere (implicite sigure):

sudo find /var/www/store -type d -exec chmod 755 {} \;
sudo find /var/www/store -type f -exec chmod 644 {} \;
sudo chown -R www-data:www-data /var/www/store

Obține un certificat TLS gratuit:

sudo apt -y install certbot python3-certbot-nginx
sudo certbot --nginx -d store.example.com --redirect --agree-tos -m you@example.com -n

Actualizează Site Address și WordPress Address la https în Setări, sau prin WP-CLI:

sudo -u www-data wp option update home 'https://store.example.com'
sudo -u www-data wp option update siteurl 'https://store.example.com'

5) Partea 4: configurarea Cloudflare pentru cache și securitate

Creează un cont gratuit Cloudflare, adaugă domeniul și setează nameserverele conform instrucțiunilor. În panou:

  • DNS: setează un A record pentru store.example.com către IP-ul serverului și pornește norul portocaliu (proxied).
  • SSL/TLS: Mode = Full (strict). Activează TLS 1.3 și Early Hints. Pornește Always Use HTTPS și HSTS dacă știi implicațiile.
  • Speed: activează Brotli și HTTP/2 + HTTP/3.
  • Caching: Caching Level = Standard. Creează reguli pentru a face cache pe căile statice și pentru a ocoli HTML unde este necesar.

Reguli de cache (sau Page Rules) pentru WooCommerce

  • Bypass cache on cookie pentru:
    woocommerce_items_in_cart
    woocommerce_cart_hash
    wp_woocommerce_session_
    wordpress_logged_in_

  • Bypass cache pe URL:
    *store.example.com/wp-admin/*
    *store.example.com/wp-login.php*
    *store.example.com/cart*
    *store.example.com/checkout*
    *store.example.com/my-account*

  • Cache static:
    *store.example.com/wp-content/*  (Edge TTL: ore-zile)
    *store.example.com/wp-includes/* (Edge TTL: ore-zile)

Opțional: Cloudflare APO pentru WordPress (plătit) poate accelera HTML pentru vizitatorii anonimi; păstrează regulile de ocolire pentru paginile WooCommerce.

6) Verificare: măsoară înainte și după

Încălzește cache-urile vizitând câteva pagini de categorie și produs în timp ce ești delogat. Apoi rulează testele:

  • Verificare locală TTFB:
    curl -s -o /dev/null -w "TTFB: %{time_starttransfer}\n" https://store.example.com/

  • Test de încărcare (ușor, din VPS) cu siege:
    sudo apt -y install siege
    siege -c 20 -t 2M https://store.example.com/

  • Teste remote: rulează WebPageTest sau Lighthouse de pe un workstation și compară First Contentful Paint, Largest Contentful Paint și TTFB.

Rezultate așteptate: TTFB sub 100 ms la hituri anonime cache-uite, navigare rapidă pe categorii și checkout stabil (necache-uit) sub sarcină moderată. Dacă rezultatele sunt slabe, mărește vCPU/RAM, verifică dacă Redis este utilizat și reverifică regulile de bypass.

7) Erori comune și remedii

  • 502 Bad Gateway: PHP-FPM a căzut sau pool-ul este prea mic. Mărește pm.max_children; verifică /var/log/php*/fpm/ și /var/log/nginx/error.log.
  • Totalurile din coș nu se actualizează: ceva face cache paginilor WooCommerce. Re-verifică map-ul NGINX $nocache și regulile Cloudflare de ocolire.
  • Redis nu este utilizat: asigură-te că pluginul e activ și că Object Cache arată Connected. Verifică dacă php-redis e instalat și serviciul Redis rulează.
  • Avertismente mixed content: impune https pentru adresa site-ului, actualizează linkurile hardcodate și ia în calcul un search-replace de la http la https.
  • Admin lent: Adminul este intenționat necache-uit. Redu pluginurile grele, dezactivează funcții WooCommerce nefolosite, folosește PHP 8.2/8.3 și mărește memoria OPcache.
  • CPU ridicat la vârf: mărește ușor durata FastCGI cache (ex.: 20–30s), activează cachingul Cloudflare pentru static și adaugă vCPU.

Manual operațional

  • Backupuri: dump-uri ale bazei de date zilnic, backupuri de fișiere zilnic; testează restore-urile lunar.
  • Actualizări: patch-uiește lunar Ubuntu, NGINX, PHP, MariaDB; ține la zi WooCommerce și extensiile.
  • Monitorizare: urmărește disk I/O, CPU steal, rata de hit Redis, slow logs PHP-FPM și ratele de hit ale cache-ului NGINX.
  • Securitate: chei SSH puternice, fail2ban, restricționează /wp-admin pe IP dacă se poate și folosește un WAF (Cloudflare) cu reguli echilibrate.

Scalează cu încredere

Dacă promoțiile îți „țiuie” traficul, pornește cu marjă suficientă. Toate planurile VPS ENGINYRING scalează lin; agențiile care gestionează mai multe magazine pot împacheta acest stack ca standard și îl pot implementa la scară. Pentru site-uri mai simple sau microsite-uri în jurul magazinului, găzduirea web premium poate completa set-up-ul.

Anexă: referință rapidă de comenzi

  • Control servicii:
    sudo systemctl status nginx mariadb php*-fpm redis-server
    sudo systemctl reload nginx
    sudo systemctl restart php*-fpm

  • Golește cache-ul NGINX:
    sudo rm -rf /var/cache/nginx/wordpress/* && sudo systemctl reload nginx

  • Flush Redis (cu grijă în producție):
    redis-cli FLUSHALL

  • WP-CLI esențial:
    sudo -u www-data wp plugin list
    sudo -u www-data wp transient delete --all
    sudo -u www-data wp wc tool run regenerate_product_lookup_tables --user=admin

Sursă și Atribuire

Aceast articol se bazează pe date originale ale ENGINYRING.COM. Pentru metodologia completă și pentru a asigura integritatea datelor, articolul original trebuie citat. Sursa canonică este disponibilă la: Viteză uimitoare: tutorial pas cu pas pentru a construi un VPS de înaltă performanță pentru WooCommerce cu NGINX, Redis și Cloudflare.