Instalación de WordPress con MariaDB en Nginx

  En entradas anteriores se ha hablado del sistema de gestión de contenidos WordPress.
  Del mismo modo, se han explicado ya los pormenores básicos del gestor de bases de datos MariaDB, y, con una mayor profundidad, las características del servidor de red Nginx.
  En la presente entrada, se unirán estos tres elementos para formar la estructura, vista anteriormente, de servidor de red, gestor de contenidos y sistema de gestión de bases de datos para crear la base para un sitio web.
  Los ejemplos necesarios para ilustrar la siguiente explicación se han hecho con el sistema operativo Debian 9, el servidor de red Nginx 1.14, y el gestor de bases de datos MariaDB 10.1.

  Con el servidor de red Nginx perfectamente instalado y configurado de base (si no es así, ver este enlace), se hace necesario instalar el gestor de bases de datos MariaDB.


INSTALACIÓN Y CONFIGURACIÓN BÁSICA DE MARIADB

    Al igual que como se ha explicado en anteriores ocasiones, lo primero que hay que hacer antes de instalar un paquete nuevo en una distribución de Linux es actualizar su lista de paquetes [comando apt update (anteponiendo sudo si no se es administrador)] y, si es necesario, actualizar los paquetes que ya tenga instalados [comando apt upgrade (anteponiendo sudo si no se es administrador)].
  Tras este paso preliminar, se instalará el servidor utilizando el comando apt install mariadb-server y, si es necesario (a veces ya se instalan los dos juntos) el cliente del gestor de bases de datos mediante el comando apt install mariadb-client.
  Una vez instalado el sistema de gestión de bases de datos, se debe configurar mediante el comando mysql_secure_installation (anteponiendo sudo si no se es administrador), que comenzará a realizar una serie de preguntas relativas a la seguridad de MariaDB. Las preguntas (y sus respuestas más adecuadas) son:
  • Enter current password for root (enter for none): Pulsar tecla "Enter".
  • Set root password? [Y/n]: Y.
  • New password: <Escribir contraseña>.
  • Re-enter new password: <Repetir contraseña>.
  • Remove anonymous users? [Y/n]: Y.
  • Disallow root login remotely? [Y/n]: Y.
  • Remove test database and access to it? [Y/n]:  Y.
  • Reload privilege tables now? [Y/n]:  Y.
  Tras responder al "cuestionario", es preferible crear un usuario con los mismos privilegios que el administrador ("root") para el manejo del sistema operativo, pero, como la modificación del archivo "debian.cnf" (alojado en la ruta "/etc/mysql/") es dinámica (es decir, puede ser eliminada, por ejemplo, si se actualiza el gestor de bases de datos o el sistema), la mejor opción es utilizar el siguiente comando en el propio MariaDB (se activa escribiendo mysql): GRANT ALL ON *.* TO '<nombre de usuario>'@'<nombre del host>' IDENTIFIED BY '<contraseña>' WITH GRANT OPTION;. A continuación, se emplea el comando FLUSH PRIVILEGES; para guardar al nuevo usuario y sus privilegios en el sistema de gestión de bases de datos, y se escribe exit para salir de MariaDB.
  Puede verse el resultado de estas gestiones utilizando el comando systemctl status mariadb (anteponiendo sudo si no se es administrador) para ver el estado del servicio, o bien comprobando la versión del gestor de bases de datos con el comando mysqladmin -u <nombre del usuario con privilegios> -p version.


INSTALACIÓN Y CONFIGURACIÓN DEL INTÉRPRETE DE PHP

  Debido a que el servidor Nginx no está preparado para servir contenidos dinámicos, carece de un intérprete de lenguaje PHP, al contrario de lo que sucede con otros servidores de red (como Apache, por ejemplo), se hace imprescindible instalar uno.
  El intérprete de PHP (llamado directamente PHP) debe ser de una versión igual o superior a la que acepte Nginx, lo que puede verse en la sección para PHP del archivo "default" situado dentro de la ruta "/etc/nginx/sites-available", concretamente en la línea "       #       fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;", como puede apreciarse en la imagen siguiente (donde la versión de PHP es la 7.0).
  Al igual que antes, lo primero que hay que hacer es actualizar la lista de paquetes y los propios paquetes instalados. Tras esto, es una buena práctica instalar los paquetes "apt-transport-https", "lsb-release", "ca-certificates" si no están instalados ya en el sistema [comando apt install apt-transport-https lsb-release ca-certificates (anteponiendo sudo si no se es administrador)].
  Ahora, como se utilizará el Archivo de Paquetes Debian ["Debian Package Archive" ("DPA"), en inglés], ya que la versión de PHP del repositorio oficial no está tan actualizada, es necesario añadirlo a la lista de repositorios del sistema, para lo cual se emplean los siguientes comandos: wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpgsh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' (en ambos casos, anteponiendo sudo si no se es administrador). Acto seguido, se vuelve a actualizar la lista de paquetes.
  Luego, se consultan los paquetes disponibles en DPA de la versión que interesa de PHP utilizando el comando apt-cache search php<nº de versión> (anteponiendo sudo si no se es administrador).
  Finalmente, se instalarán los paquetes necesarios mediante el comando apt install php<versión> php<versión>-common php<versión>-cli php<versión>-fpm php<versión>-mysql php<versión>-xml php<versión>-curl php<versión>-mbstring php<versión>-zip (anteponiendo sudo si no se es administrador). Si no ha aparecido ningún aviso de error durante la instalación, puede verificarse que todo está perfectamente instalado mediante el comando php -v (en el ejemplo se ha utilizado la versión 7.3).

  Una vez instalado el intérprete, se debe configurar para que trabaje bien con Nginx. El archivo de configuración de PHP, "php.ini", se encuentra en la ruta "/etc/php/<versión del programa>/cli/"; es necesario editarlo y cambiar las siguientes líneas para que sean como las aquí mostradas:
cgi.fix_pathinfo=0
file_uploads = On
max_execution_time = 180
memory_limit = 256M
upload_max_filesize = 64M

  Al terminar, se guarda el archivo y se sale del editor de textos. También es recomendable reiniciar el serrvicio mediante el comando systemctl restart php<versión>-fpm (anteponiendo sudo si no se es administrador).

PREPARACIÓN DEL ENTORNO PARA WORDPRESS

  Como sucedía con su instalación en el servidor de red Apache, es necesario realizar ciertos preparativos previos para poder alojar WordPress en Nginx. Parte de estos preparativos son los mismos que hay que hacer para alojar cualquier sitio web o aplicación web en el mencionado servidor de red, pero algunos otros son más concretos para un CMS.
  Primeramente, se descarga la última versión de WordPress de su página oficial (https://wordpress.org/), lo que puede hacerse desde un navegador de red o desde terminal (comando wget https://wordpress.org/latest.tar.gz), donde lo habitual es descargarlo al directorio "tmp".

  A continuación, se deben crear los directorios donde se descomprimirá el directorio del gestor de contenidos (o bien donde se enviará lo que hay en su interior). Se utilizará el comando mkdir -p <nombre del directorio a crear> en la ruta "/var/www" para crear un nuevo directorio y, dentro de él, los directorios "html" y "log" (o bien se pueden transferir directamente, tras hacer los siguientes pasos, los archivos del directorio "wordpress" al directorio existente "html"; aunque sería conveniente crear el directorio "log"), a los que se cambiará de dueño y grupo a "www-data" utilizando el comando chown -R www-data:www-data /var/www/<nombre del directorio recién creado> (anteponiendo sudo si no se es administrador), y a los que se les cambiarán los permisos utilizando el comando chmod -R 755 /var/www/<nombre del directorio recién creado> (anteponiendo sudo si no se es administrador). Dentro del directorio "log" se deben crear dos archivos de registro mediante un editor de texto; dichos archivos deberán tener el nombre "<nombre del directorio donde se alojará WordPress>.access.log" y "<nombre del directorio donde se alojará WordPress>.error.log" y los mismos dueño, grupo y permisos que el directorio donde están alojados (en este ejemplo, se ha creado el directorio "svelb2.net", dentro del cual se encuentran el directorio "html" y el directorio "log", que, a su vez, contiene los archivos de registro "svelb2.net.access.log" y "svelb2.net.error.log").

  Hecho esto, puede descomprimirse el archivo descargado de WordPress justo en el directorio donde se encuentra (comando tar -zxvf wordpress-<versión>.tar.gz), o bien en su directorio de destino (comando tar -zxvf wordpress-<versión>.tar.gz -C <directorio de destino>). Hecho esto, se debe crear un directorio "uploads" dentro del directorio "wp_content" (que es uno de los directorios de WordPress). Luego, si no se ha descomprimido en su directorio de uso, se mueve el directorio "wordpress", o su contenido, al directorio desde donde se va a trabajar con él gracias a Nginx (el que se creó antes en "/var/www/", o el directorio "html" de la misma ruta).
  Seguidamente, se le cambia el dueño y el grupo, así como los permisos a los mismos que tiene la carpeta donde está ahora alojado WordPress (otra opción válida, aunque más trabajosa, es darle permisos "755" a los directorios y "644" a los archivos de este gestor de contenidos).


CREACIÓN DE LA BASE DE DATOS PARA WORDPRESS

  El siguiente paso, pues, consiste en crear una base de datos en MariaDB para que WordPress pueda instalar sus tablas y sus datos.
  Primeramente, se accede al sistema de gestión de bases de datos mediante el comando mysql. A continuación, se crea la base de datos utilizando el comando de SQL create database <nombre de la base de datos a crear>;;  se proporcionarán privilegios totales sobre la base de datos recién creada al usuario de MariaDB creado anteriormente utilizando el comando grant all privileges on <nombre de base de datos>.* to <nombre del usuario>@<nombre del host> identified by '<contraseña>';; finalmente, se sale del gestor de bases de datos mediante el comando exit (en el ejemplo, la base de datos es "svelb2_wp" ).



CONFIGURACIÓN DE NGINX

  Antes de configurar nada nuevo en Nginx, se deben crear tres archivos en el directorio "/usr/share/nginx/html", dos ".html" ("404.html" y "50x.html", donde es conveniente, al menos, indicar de qué es cada una), y un ".php" ("info.php", donde se debe escribir la línea <?php phpinfo(); ?>). Además, en el directorio "html" donde esté alojado WordPress, se debe crear el archivo ".well-known" (si no se ha hecho durante la configuración básica de Nginx)
  Partiendo, como ya se ha dicho, de la configuración básica de este servidor de red, se creará un archivo en el directorio "sites-available" utilizando un editor de texto. Dentro del cual hay que añadir (justo antes de la línea "root /var/www/html;"), las siguientes líneas:
error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;

    }
 Y, justo antes del cierre de la directiva "<server>", agregar las siguientes directivas "<location>":
  location / {
        try_files $uri $uri/ /index.php?$args;
        }


        location ~ \.php$ {
             fastcgi_split_path_info ^(.+\.php)(/.+)$;
         #
         # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
         # With php7.3-cgi alone:
         #fastcgi_pass 127.0.0.1:9000;     #
         # With php7.3-fpm:
         fastcgi_pass unix:/run/php/php<versión>-fpm.sock;
         fastcgi_index index.php;
         include fastcgi_params;
         fastcgi_param PATH_INFO $fastcgi_path_info;
         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

         }
  Naturalmente, hay que sustituir las rutas por las que se crearon previamente y donde está alojado Wordpress, y añadir "index.php" a la lista de archivos bajo la línea "root /var/www/html;".
  De este modo, la configuración del archivo debería quedar, aproximadamente, como la de la siguiente imagen.

  Preparado el archivo, hay que crear un enlace simbólico al mismo en el directorio "sites-enabled" utilizando el comando ln -s /etc/nginx/sites-available/<nombre del archivo> /etc/nginx/sites-enabled/ (anteponiendo sudo si no se es administrador).


CONFIGURACIÓN DE WORDPRESS

  Ahora sólo queda configurar WordPress para que se conecte a la base de datos hecha para él en MariaDB. Para ello, se debe editar el archivo "wp-config-sample.php", situado en el directorio del gestor de contenidos, y cambiar, principalmente, los 3 primeros parámetros de la siguiente imagen...
   ...a esta otra imagen.
  Naturalmente, se pueden cambiar más parámetros al gusto del usuario, pero con los tres acabados de mencionar ya son suficientes para que funcione el sitio de WordPress.
  Por otra parte, para mayor seguridad, también es conveniente cambiar la cabecera de los nombres de las tablas en la siguiente línea del mismo archivo (aquí se ha dejado por defecto):
  Tras editarlo, el archivo debe guardarse con el nombre de "wp-config.php".

  Finalizadas todas estas configuraciones, se reinicia el servidor de red [comando systemctl restart nginx (anteponiendo sudo si no se es administrador)] y el intérprete de PHP [comando systemctl restart php<versión>-fpm (anteponiendo sudo si no se es administrador)].
  Si todo funciona como debe ser, si se escribe en la barra de direcciones la que corresponda al sitio de WordPress (en este caso, "svelb2.net") debe aparecer la primera página de la instalación del mismo (sólo hay que seguir las mismas pautas para esta instalación que las explicadas en la entrada sobre su instalación en Apache). Finalmente, si todo ha ido bien, puede verse, del mismo modo, el escritorio de WordPress.


  Espero que la presente entrada haya sido del gusto del lector; de ser así, aguardo que este la comparta y/o la comente, por favor.

1 comentario:

  1. Poder tener Wordpress en local es muy bueno, en lo particular para mi que me gusta crear contenido en mi web, me ahorra tiempo y esfuerzo tenerlo en local, no importa si somos wordpress funciona para principiantes, pues es muy fácil de usar. Cuando estamos iniciando, es recomendable conocer como utilizar esta herramienta.

    ResponderEliminar

Deje aquí su comentario, si no puede comentar, pruebe a hacerlo desde otro navegador de red u otro equipo.