Velocizzare il proprio server per WordPress

Questa vuole essere una breve guida per chi ha la necessità di velocizzare il proprio server di hosting linux (in questa guida utilizzerò uno dei miei server con CentOS). Velocizzare i siti web ospitati non è legato solo al server, ma naturalmente anche a tanti altri fattori che riguardano i propri siti, che devono essere sviluppati con cura e professionalità. Nel caso di WordPress ci sono tante cose che si possono fare e tanti plugin, questa guida vuole semplicemente essere un buon punto di partenza: lascio a voi sperimentare quale configurazione vada meglio per voi, la fase di test e di verifica continua dei log e delle prestazioni del proprio server è come sempre fondamentale.

PREMESSA: se non siete pratici di server, Linux, console e terminali, questa guida non fa per voi: non è una guida completa, ma una raccolta di suggerimenti e indicazioni per chi mastica almeno un po’ l’argomento. Per questo motivo non è approfondita ma lascio ai link ai siti ufficiali l’onere di descrivervi nel dettaglio tutto quanto, e a questo video tratto dal Wordcamp di Torino del 2016 (cui ho partecipato) in cui viene ben illustrato il quadro generale sull’argomento.

Analisi dei siti

Innazitutto partiamo da uno dei più famosi siti di test online, che ci può dare ottime indicazioni sui siti ospitati sul nostro server: GT Metrix

check website speed

Inserite l’URL del vostro sito e verificate i valori di performance: scorrendo la pagina troverete molte informazioni e suggerimenti utili da attuare. Riuscire a migliorare i valori è il vostro obbiettivo.

In questa guida seguirò questo schema:

Memcached

Serve a ridurre il carico sul database per i siti dinamici come WordPress. Su CentOS si installa così da terminale del proprio server:

yum install libevent-devel
yum install memcached php-pear php-pecl-memcache

Dopodichè si può personalizzare la configurazione:

vi /etc/sysconfig/memcached
PORT="11211" 
USER="memcached" 
MAXCONN="1024" 
CACHESIZE="2048" 
OPTIONS=

ora bisogna finire la configurazione:

chkconfig --levels 235 memcached on
service memcached start

Nginx

E’ un  reverse proxy server, serve a utilizzare in maniera efficiente le risorse di sistema quando si forniscono contenuti statici.

Per installarlo su CentOS:

sudo yum install epel-release
sudo yum install nginx
sudo systemctl start nginx

oppure seguire la guida ufficiale.

GZip

Innazitutto potete verificare se GZip è attivo utilizzando il sito Check GZ Compression o direttamente da terminale:

/etc/init.d/nginx status

Se non è attivo, occorre configurarlo, aprendo il file di configurazione:

vi /etc/nginx/nginx.conf

cercate questa riga di codice:

#gzip on;

e sostituitela con queste:

gzip on;
gzip_comp_level 4;
gzip_http_version 1.0;
gzip_proxied any;
gzip_min_length 1100;
gzip_buffers 16 8k;
gzip_types text/plain text/html text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_vary on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)"

dove “gzip_comp_level 4” indica il livello di compressione richiesto con indice massimo di 9.

Abilitate Gzip:

/usr/local/psa/admin/sbin/nginxmng -e
service nginx restart

Plugin

Si può ora procedere a installare diversi plugin utili sui siti WordPress ospitati sul vostro server (consultate i siti ufficiali per tutte le informazioni sulla loro configurazione avanzata):

Batcache: serve a far sfruttare Memcached al vostro sito.

BJ Lazy Load: velocizza il caricamento della pagina nel browser.

Autoptimize: serve a minimizzare i file JS, CSS e HTML.

WP Super Cache: un potente motore di caching che crea file HTML per velocizzare l’esecuzione del sito. Nelle configurazioni avanzate scegliete inizialmente le opzioni indicate con “raccomandata“.

Problema Plesk: “New configuration files for the Apache web server were not created due to the errors in configuration templates: mkdir: cannot create directory …”

Ecco un problema che si è presentato su Plesk (versione 12.0.18) rinominando, in una sottoscrizione, un dominio utilizzando la scheda Hosting Settings presente in Websites and Domains. Per esempio ipotizzeremo di rinominare il dominio simonezanella.com in simonezanella.it:
errore_pleskDopo l’operazione, Plesk mostra questo errore:
New configuration files for the Apache web server were not created due to the errors in configuration templates: mkdir: cannot create directory `/var/www/vhosts/system/simonezanella.it/conf': No such file or directory mktemp: failed to create file via template `/var/www/vhosts/system/simonezanella.it/conf/httpd.conf.XXXXXX': No such file or directory Can not create temporary file . Detailed error descriptions were sent to you by email. Please resolve the issues and click here to generate broken configuration files once again or here to generate all configuration files.
Cliccando come suggerito i problemi non vengono corretti, ma si visualizza il seguente errore:
Unable to configure the web server: Execution failed. Command: httpdmng Arguments: Array ( [0] => --reconfigure-all ) Details: Error occured while sending feedback. HTTP code returned: 502 Error occured while sending feedback. HTTP code returned: 502 Execution failed. Command: httpdmng Arguments: Array ( [0] => --reconfigure-domains [1] => simonezanella.com,simonezanella.it )

Anche rinominando la sottoscrizione originaria il problema rimane. Se non si ha a disposizione un backup della sottoscrizione in Plesk (ripristinandola il problema si risolve automaticamente), si seguono questi passi (verificare che il vostro problema sia esattamente lo stesso) una volta loggati via SSH al vostro server:

si verifica che la directory radice (root directory) per il dominio simonezanella.com non esiste, ovvero: “/var/www/vhosts/simonezanella.com/httpdocs” non è presente sul server, mentre la root directory per il dominio simonezanella.it invece esiste:
“/var/www/vhosts/simonezanella.it” ma manca la cartella httpdocs, ovvero: “/var/www/vhosts/simonezanella.it/httpdocs”

in /var/www/vhosts/simonezanella.it/ bisogna ora lanciare i seguenti comandi:

mkdir httpdocs
chown simone:psaserv httpdocs
chmod 750 httpdocs
mettendo al posto di simone ovviamente il vostro utente per la cartella, poi bisogna settare i valori corretti nel database del server nelle tabelle “hosting” e “sys_users” del database “psa”:
mysql> update hosting set www_root='/var/www/vhosts/simonezanella.it/httpdocs' where dom_id=3;
mysql> update sys_users set home='/var/www/vhosts/simonezanella.it' where id=2;
(verificate gli id nel database, i valori indicati sono di esempio, potete anche farlo direttamente da Plesk via PHPMyAdmin)
dopodichè si lancia il comando di riconfigurazione dominio:
/usr/local/psa/admin/bin/httpdmng --reconfigure-domain simonezanella.it

se tutto è stato fatto correttamente, il problema dovrebbe essere risolto.

Riprendere una installazione con YUM su server Linux

Nel caso si interrompa una installazione con il gestore di pacchetti YUM su un server Linux, si può riprendere utilizzando un apposito comando fornito col pacchetto YUM-utils, che va installato con la riga di comando:

install yum-utils

dopodichè è sufficiente lanciare il comando:

yum-complete-transaction