LAMP + WordPress en Debian

Si tienes un servidor y no se te ocurre qué partido sacarle o necesitas alicientes para comprar uno, en esta guía desgloso el que seguramente sea uno de los más típicos: una web con hosting propio. Los pasos que a continuación desgloso servirían en un equipo convencional (Debian no hace distribuciones diferentes para equipos y servidores), pero tendría el inconveniente principal que todo equipo tiene frente a un servidor: no es práctico tenerlo todo el día encendido ni está pensado para ello.

Servidor HTTP Nginx

En primer lugar, vamos a instalar el servidor web Nginx, cuya función es atender las peticiones HTTP que se hagan a la página, gestionar logs e incluso configurar un hosting virtual que nos permita acoger varias webs en el mismo servidor. Para ello, desde la terminal de Debian, ejecutamos:

apt -y install nginx

A continuación se nos muestra una larga lista de los paquetes que se instalarán, pidiéndonos en algún momento confirmación para continuar, algo que siempre concederemos. Una vez comprobemos en la salida estándar que la instalación ha finalizado sin errores, iniciamos el servicio (aunque ya suele activarse automáticamente según termina la instalación) y lo habilitamos para que se inicie con el sistema:

systemctl start nginx ; systemctl enable nginx

El siguiente paso consiste en habilitar un host para nuestro WordPress. Lo más habitual, si queremos que nuestro sitio sea accesible desde Internet, es tener un dominio registrado, ya que en caso contrario los visitantes tendrían que saber nuestra IP pública para acceder a nuestro sitio. Dando por supuesto que tenemos un dominio con un registro A a nuestra IP pública, lo primero que debemos hacer será crear un host virtual en el Nginx de nuestro servidor:

nano /etc/nginx/sites-available/nuestrositio.com

Una creado el archivo y en el modo edición, añadimos la siguiente configuración para habilitar nuestro host. Esta es una configuración sencilla; un host de un servidor seguro añadiría, además de una entrada en el puerto :443 para la conexión SSL, restricciones con objeto de aumentar la seguridad.

server {
listen 80;
root /var/www/nuestrositio.com
server_name nuestrositio.com;
access_log /var/log/nginx/wp_client_access.log;
error_log /var/log/nginx/wp_client_error.log;

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

# Habría que ser mongolo para usar otra codi
charset utf-8;

# Aun, sabes
gzip off;

# Con wp-admin ni media
rewrite /wp-admin$ $scheme://$host$uri/ permanent;

# La prevensió
location ~ /\. {
access_log off;
log_not_found off;
deny all;
}

# geeeeeet off

location ~* ^.+.(xml|ogg|ogv|svg|svgz|eot|otf|woff|mp4|ttf|css|rss|atom|js|jpg|jpeg|gif|png|ico|zip|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf)$ {
access_log off;
log_not_found off;
expires max;
}

# La movidita de los sockets
location ~ \.php$ {
try_files $uri =404;
include /etc/nginx/fastcgi_params;
fastcgi_read_timeout 3600s;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 128k;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php7.0-fpm.sock;
fastcgi_index index.php;
}

# Roboces

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

# Restricciones
location ~* /(?:uploads|files)/.*\.php$ {
deny all;
}
}

Una vez terminada la edición del archivo, salimos guardando los cambios (Ctrl+X y S/Y). Más adelante, debemos acordarnos del directorio que hemos definido en DocumentRoot para situar el WordPress o, en caso de que lo instalemos en otro directorio, volver a cambiar la ruta. Por último, para habilitar el sitio en el servidor web debemos crear un enlace simbólico desde los sitios disponibles:

ln -s /etc/nginx/sites-available/nuestrositio.com /etc/nginx/sites-enabled/

Si bien el host estará disponible desde que recarguemos la configuración (systemctl reload nginx), es posible que si hemos dado de alta el dominio al mismo tiempo todavía no esté operativo debido a la dispersión de las DNS, que en casos excepcionales puede prolongarse hasta uno o dos días. A través de esta herramienta web se puede comprobar el curso de la propagación de las mismas. En cualquier caso, una vez esté habilitado el host, en nuestro sitio web debería aparecernos la página por defecto de Nginx, como confirmación de que el dominio apunta a nuestro servidor.

Servidor MariaDB

MariaDB es un sistema gestor de bases de datos derivado de MySQL. Es el servidor de bases de datos genérico para MySQL en Debian 9 (sustituyendo a MySQL 5.1). Lo instalamos de la siguiente manera:

apt-get install mysql-server
systemctl start mariadb
systemctl enable mariadb

Para instalar MariaDB de forma segura (deberíamos curarnos en salud accediendo a todas las políticas preventivas que nos plantea), usaremos este comando:

mysql_secure_installation

Servidor PHP y extensiones

El último componente de LAMP sólo requiere un paso, no es necesario habilitar ni iniciar el servicio:

apt-get install php php-{fpm,pear,cgi,common,zip,mbstring,net-socket,gd,xml-util,mysql,gettext,bcmath}

Como veis, la instalación del servidor LAMP dejando todas las opciones por defecto es rápida sencilla. Los problemas suelen sobrevenirse cuando se busca una configuración específica o cuando versiones de diferentes paquetes no son compatibles entre sí. Pero este no es nuestro caso, ya que, por suerte, para instalar WordPress no es necesario realizar ningún proceso particularmente enrevesado.

Importante esto

Es posible que si copias el archivo íntegro de Nginx y ha pasado mucho tiempo desde este post te encuentres con el siguiente error: connect() to unix:/run/php/php7.0-fpm.sock failed (2: No such file or directory. Esto ocurre porque la versión que instala php con el anterior comando, al no especificar, es la más reciente del repositorio. A día de hoy es la 7.0, pero en el futuro no sea así, por lo que si ves que tras terminar la instalación no carga el WordPress vía web y en el log de errores(/var/log/nginx/wp_client_error.log) figura el mensaje anterior deberás actualizar el parámetro fastcgi_pass unix. La versión de php actual la puedes conocer mediante el comando php –version o listando el directorio /run/php.

WordPress

Una vez instalado el servidor LAMP, antes de la instalación propia del WordPress, no queda sino batirse crear una base de datos (y un usuario para la misma) que almacenará y organizará todo el contenido de la web.

Entramos en Maria DB (mysql -u root -p). A continuación, creamos una base de datos y un usuario (al que le concederemos todos los permisos) introduciendo los siguientes comandos:

create database nombrebd;
create user usuariowp@localhost identified by ‘contraseña’;
grant all privileges on nombrebd.* to usuariowp@localhost;
flush privileges;
exit

Hecho esto, ya tenemos base de datos MySQL y usuario para WordPress. Nos falta instalar WordPress en nuestro servidor, lo cual remediamos tras los siguientes comandos:

cd /tmp
wget httpwordpress.orglatest.tar.gzp

Una vez descargado, lo extraemos (tar -xvf latest.tar.gz), lo renombramos como nuestro sitio (mv wordpress nuestrositio.com), movemos su contenido al directorio definido en el host de Nginx y cambiamos los permisos (chown -R www-data /var/www/nuestrositio.com).

El último paso consiste en configurar el propio WordPress para su uso. Esto podemos hacerlo de dos maneras vía web (la más sencilla e interactiva) o modificando los parámetros que indico más abajo en el archivo wp-config-sample.php, ubicado en la raíz de WordPress (cd var/www/html/wordpress) y renombrándolo como wp-config.php una vez hecho (ren wp-config-sample.php wp-config.php). Al hacerlo vía web únicamente introducimos unos datos en un formulario, y ya se encarga el programa de hacer el resto. En el navegador tecleamos la URL de nuestro sitio y si la pantalla que se muestra es la siguiente significará que todo ha ido sobre ruedas:

A continuación, se nos muestra el formulario antes mencionado. En él introducimos el nombre de la base de datos, el usuario y la contraseña, lo cuál, si hubiésemos introducido los datos que he puesto de ejemplo, quedaría de la siguiente manera:

Nombre de la base de datos: nombrebd
Nombre de usuario: usuariowp
Contraseña: contraseña
Servidor de la base de datos: localhost
Prefijo de tabla: wp_

Una vez hecho esto accedemos a WordPress tal y como lo haríamos si nos hubiésemos creado una cuenta en el sitio oficial. Únicamente queda configurarlo a nuestro gusto, asociarlo a un dominio (si queremos), y publicar hasta que se acaben las letras.