Seguramente recordarás que hace algunos días publicábamos algunos consejos para mejorar la velocidad de tu blog WordPress. Los cambios que mencionábamos debían aplicarse principalmente del lado del sitio, pero a continuación les mostraremos algunos cambios y optimizaciones que podemos realizar a nivel del servidor para que nuestro WordPress literalmente vuele de rápido.
Optimizar WordPress usando Nginx, PHP-FPM, MySQL y Memcached
Como indica el título, vamos a utilizar Nginx, PHP-FPM, MySQL y Memcached, en este caso en un servidor CentOS 6.x plano (sin panel de control). Ten en cuenta que necesitarás acceso root al servidor y recuerda además realizar todos los respaldos que creas necesarios antes de comenzar. Comencemos!
Instalación y configuración de Nginx
Nginx es el servidor web que está detrás de los sitios más populares del mundo, es rápido, performante, escalable y ofrece un sin fin de configuraciones que harán que tus sitios vayan más rápido que nunca, además es 100% compatible con WordPress. En Infranetworking lo usamos hace años, y por supuesto no podía faltar en esta guía tampoco. Comencemos!
-Vamos a confirmar el sistema operativo y arquitectura del server:
cat /etc/redhat-release ; arch
-Ahora descargaremos la versión correspondiente de Nginx, que será nuestro servidor web:
mkdir /root/temp ; cd /root/temp ; wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
-Agregamos el repo:
rpm -i nginx-release-centos-6-0.el6.ngx.noarch.rpm
-Instalamos Nginx:
yum install nginx
Listo, Nginx ya fue instalado en nuestro servidor CentOS. Por supuesto aún falta configurarlo, así que recuerda editar el archivo /etc/nginx/nginx.conf y agrega tu sitio al virtual host en /etc/nginx/conf.d/tupaginaweb.com.conf
Una configuración básica para WordPress es la siguiente:
### tusitioweb.com server { access_log off; error_log logs/tusitioweb.com-error_log warn; listen 80; server_name tusitioweb.com www.tusitioweb.com; location ~* \.(gif|jpg|jpeg|png|ico|wmv|3gp|avi|mpg|mpeg|mp4|flv|mp3|mid|js|css|wml|swf)$ { root /ruta/al/sitio/tusitioweb.com; expires max; add_header Pragma public; add_header Cache-Control "public, must-revalidate, proxy-revalidate"; } location / { root /ruta/al/sitio/tusitioweb.com; index index.php index.html index.htm; # Rewrite rules de WordPress try_files $uri $uri/ /index.php?$args; } # Pasamos todo PHP a PHP-FPM location ~ \.php$ { root /ruta/al/sitio/tusitioweb.com; try_files $uri =404; fastcgi_pass unix:/tmp/php5-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
Recuerda cambiar /ruta/al/sitio/tusitioweb.com por la ruta (path) real a tu sitio, y por supuesto el nombre «tusitioweb.com» por el nombre real. También recuerda estudiar detalladamente la documentación de Nginx para encontrar la configuración que mejor se adapte a tu blog, esta es sólo una guía genérica.
Instalación y configuración de PHP-FPM
PHP-FPM es un servicio que corre exclusivamente PHP-FASTCGI sin depender de Apache, Nginx u otros servidores, es 100% independiente, escalable y mucho más rápido que sus predecesores. Dependiendo de la versión de PHP que utilices, podrás instalar PHP-FPM desde el repo que viene por defecto en CentOS o bien puede que tengas que usar uno como Epel, Remi, etc.
A la instalación de PHP-FPM le sumaremos algunas librerías comunes:
yum install php-fpm php-mysql php-xcache php-imap php-cli php-devel php-gd php-mbstring php-mcrypt
Los archivos de configuración de PHP-FPM se encuentran en /etc/php-fpm.d/
Esta es una configuración básica de ejemplo:
– En el archivo www.conf añade esta configuración, verás que las variables están entre las primeras líneas:
;listen = 127.0.0.1:9000 listen = /tmp/php5-fpm.sock
listen.owner = nginx listen.group = nginx listen.mode = 0666
La primer línea comenta el uso de puertos en el 9000, la segunda deja establecido el uso de sockets para conectar a php-fpm, y el resto de las líneas aseguran que Nginx tendrá privilegios suficientes para usar el socket de php-fpm sin problemas.
Asegúrate de que /tmp tenga permisos 1777 además:
chmod 1777 /tmp
Iniciemos los dos servicios que hemos configurado (recuerda desactivar Apache en caso de que esté corriendo):
service nginx start service php-fpm start chkconfig nginx on chkconfig php-fpm on
Para profundizar más en PHP-FPM y su configuración aquí te dejamos el enlace a la documentación del mismo. Ahora es el turno de MySQL!
Instalando y configurando MySQL server
-Su instalación es muy sencilla:
yum install mysql mysql-server
Verifiquemos los permisos de /tmp para ver si MySQL puede escribir allí:
chmod 1777 /tmp -v
Ahora inicia MySQL:
service mysqld start chkconfig mysqld on
Y configura la contraseña de root para el servicio:
/usr/bin/mysqladmin -u root password 'AquiVaLaContraseña'
En /etc/my.cnf podemos aplicar algunas configuraciones que son recomendadas para WordPress:
-En la sección «[mysqld]» configuramos lo siguiente:
# Activar query_cache query_cache_limit=2M query_cache_size=64M query_cache_type=1
# Establecer número máximo de conexiones: max_connections=400
# Reducir timeouts interactive_timeout=30 wait_timeout=30 connect_timeout=10
Si el server tiene más de 4GB de RAM, configura el query_cache_size en 128M en lugar de 64M.
Para tomar los cambios:
service mysqld restart
Por cierto, hay que añadir la base de datos para WordPress. Vamos a ingresar a la consola de MySQL:
mysql -u root -p
Ahora debes introducir la contraseña de root de MySQL que elegiste antes.
Posteriormente creamos la base de datos:
create database basededatos;
Asignamos usuario y contraseña:
GRANT ALL PRIVILEGES ON basededatos.* TO 'elusuario'@'localhost' IDENTIFIED BY 'elpassword'; flush privileges;
Salimos de la consola de MySQL:
exit;
Obviamente, reemplaza estos datos por los datos reales que vayas a usar en tu base de datos, usuario y password. Ahora instalaremos el gran componente restante, Memcached.
Instalar Memcached
Memcached es un sistema de cache basado en memoria, que permite a nuestro WordPress reducir el consumo de base de datos casi al mínimo. Vamos a ver el procedimiento de instalación ahora.
-Añadimos el repositorio de Epel:
cd /root/temp wget http://epel.gtdinternet.com/6/x86_64/epel-release-6-8.noarch.rpm rpm -i epel-release-6-8.noarch.rpm
Instalamos Memcached y el módulo «memcache»:
yum install memcached pecl install memcache
Vamos a añadirlo a PHP:
nano -w /etc/php.ini
Agregamos la siguiente línea al final:
extension=memcache.so
Para tomar cambios reiniciamos PHP-FPM:
service php-fpm restart
Es posible que PHP haya añadido la extensión de Memcached automáticamente en el archivo /etc/php.d/memcache.ini, así que en ese caso debemos comentarla en php.ini.
Ahora realizaremos una configuración básica de Memcached, dependiendo de cuanta memoria RAM tengas en tu VPS o Servidor Dedicado asignaremos X parte a Memcached, esto se hace subiendo la variable CACHESIZE, en nuestro caso a 512 en el archivo /etc/sysconfig/memcached
Iniciamos el servicio:
service memcached start chkconfig memcached on
Lo siguiente es instalar WordPress. Puedes hacerlo por el medio que prefieras (FTP, autoinstalador, etc.) pero recuerda instalar la versión más reciente disponible. Una vez WordPress esté listo vamos a instalar el plugin W3 Total Cache. Todo lo referente al mismo puedes verlo en este post. Lo más importante aquí es que una vez tengas W3TC instalado, lo configures para que use Memcached.
Todo listo, ahora ya tienes el servidor configurado para utilizar WordPress con Nginx, PHP-FPM, MySQL y Memcached, además de W3TC. Si quieres mejorar aún más la velocidad, entonces te recomendamos que en lugar de usar discos duros tradicionales en el server optes por unidades SSD, ya que ayudan a despachar la información mucho más rápido, así ganarás puntos en performance.