Instalar WordPress 5 con Apache en Debian 9

Este tutorial te mostrará cómo instalar y configurar la última versión de WordPress 5 sobre una pila LAMP en Debian 9 – Stretch. WordPress, sin duda, es uno de los Sistemas de Gestión de Contenidos o CMS de código abierto más populares que se utilizan en la actualidad para la publicación en Internet, que impulsa más de 60 millones de sitios web en todo el mundo, ya sean pequeños sitios de blogs o grandes marcas de renombre. Basado en el motor PHP y MySQL, WordPress se asocia a menudo con la colección LAMP, ya sea instalado en servidores dedicados o servidores privados virtuales o en proveedores de alojamiento web compartido. El acrónimo LAMP describe una colección de software, también conocido como paquete de software, que suele consistir en el núcleo de código abierto de Linux, independientemente de la distribución elegida, el servidor HTTP Apache, que es uno de los servidores web de código abierto más populares en Internet debido a su estabilidad, flexibilidad y rendimiento, el lenguaje de programación interpretado del lado del servidor PHP y el sistema de gestión de bases de datos relacionales (RDBMS) MariaDB, que es uno de los software de bases de datos más populares, bifurcado y desarrollado simultáneamente por la comunidad de código abierto a partir del MySQL original.

Requisitos

  • Una instalación limpia del sistema operativo Debian 9 en un servidor privado virtual o en una máquina virtual o directamente en una máquina dedicada bare-metal.
  • Acceso remoto SSH en el caso de un VPS o un servidor remoto o acceso directo a la consola
  • Al menos una dirección IP estática para una interfaz de red configurada en el servidor
  • En caso de que la página web esté disponible públicamente en Internet, necesitarás un nombre de dominio público registrado con los registros DNS adecuados configurados. Durante este tutorial, utilizaremos el ejemplo.com como dominio de ejemplo y una dirección IP estática del espacio privado, en NAT, detrás del router principal. El dominio será accesible desde Internet mediante el reenvío de los puertos Apache 80 y 443 desde el lado del router a la LAN interna de la máquina virtual autoalojada.

Instalar el paquete de software LAMP

Lo primero que debes hacer antes de empezar a instalar todos los componentes de LAMP es entrar en el servidor de Debian 9 y realizar un procedimiento de actualización de todos los componentes del sistema, como las actualizaciones del kernel, de los paquetes o de los parches de seguridad, emitiendo los siguientes comandos con privilegios de root.

apt-get update
apt-get upgrade
apt-get dist-upgrade

En el siguiente paso, debes configurar el nombre de tu máquina sustituyendo la variable hostname por tu propio nombre descriptivo ejecutando el siguiente comando. Ten en cuenta que es posible que tengas que reiniciar el sistema para aplicar el nuevo nombre de host como corresponde.

hostnamectl set-hostname hostname.yourdomain.com

También deberías instalar las siguientes utilidades, que te serán útiles más adelante para solucionar diversos problemas.

apt install net-tools sudo wget curl bash-completion

Una vez aplicado el nombre de host de la máquina, inicia sesión de nuevo con privilegios de root e instala el servidor HTTP Apache, que está precompilado por defecto en un paquete binario y que se proporciona en los repositorios de Debian 9.

apt install apache2

A continuación, instala la última versión del intérprete del lenguaje PHP y todos los módulos necesarios para el servidor web Apache con el fin de desplegar el CMS de WordPress, emitiendo el siguiente comando.

apt install libapache2-mod-php7.0 php7.0 php7.0-gd php7.0-xml php7.0-curl php7.0-mbstring php7.0-mcrypt php7.0-xmlrpc

El último componente que falta ahora para que la pila LAMP esté completa es el servidor de bases de datos MariaDB. Ejecuta el siguiente comando para instalar el servidor MariaDB junto con el módulo PHP necesario para acceder a la base de datos desde el servidor HTTP Apache.

apt install php7.0-mysql mariadb-server mariadb-client

Una vez instalada la base de datos MariaDB, inicia el demonio y asegura la base de datos ejecutando el script mysql_secure_installation como se ilustra en el siguiente extracto. Responde principalmente con un «sí» a todas las preguntas que te plantee el script. Además, asegúrate de elegir una contraseña fuerte para la cuenta raíz. Ten en cuenta que la cuenta raíz de MySQL no es idéntica a la cuenta raíz de Linux. La primera se utiliza sólo para gestionar la base de datos MariaDB y la segunda es la cuenta de superusuario en todos los sistemas Linux. Estas cuentas nunca se solapan en un sistema.

systemctl start mariadb
mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
 
In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
 
Enter current password for root (enter for none):
OK, successfully used password, moving on...
 
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
 ... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
 ... Success!
Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
 ... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
 - Dropping test database...
 ... Success!
 - Removing privileges on test database...
 ... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
 ... Success!
Cleaning up...
All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!

Todavía no hemos terminado de asegurar la base de datos MariaDB. Por defecto, puedes iniciar sesión en MariaDB desde localhost con la cuenta raíz de la base de datos sin que se te pida una contraseña. Para evitar posibles problemas de seguridad, accede a la base de datos con el usuario root y emite los siguientes comandos.

mysql -u root -p
MariaDB> use mysql;
MariaDB> update user set plugin='' where User='root';
MariaDB> flush privileges;
MariaDB> quit

Eliminar el plugin del usuario raíz de MySQL

Ahora, prueba la base de datos intentando entrar con la cuenta root sin la contraseña. Debería denegarse el acceso a la base de datos MariaDB.

En el siguiente paso, habilitaremos y configuraremos los módulos TLS y de reescritura para el servidor web Apache, que por defecto están desactivados. Ejecuta los siguientes comandos para habilitar ambos módulos.

a2enmod rewrite ssl
a2ensite default-ssl.conf

A continuación, abre los archivos de configuración de Apache de los dos sitios habilitados y añade el siguiente bloque debajo de la directiva DocumentRoot como se muestra en la siguiente captura de pantalla.

nano /etc/apache2/sites-enabled/000-default.conf
nano /etc/apache2/sites-enabled/default-ssl.conf

En ambos archivos de configuración añade el siguiente bloque de código:

    <Directory /var/www/html>
       Options Indexes FollowSymLinks MultiViews
       AllowOverride All
       Require all granted
    </Directory>

Conceder acceso al directorio /var/www/html y permitir anulaciones

En apache default-ssl.conf TLS puedes añadir también el siguiente contenido, si no existe, para mejorar la seguridad del protocolo SSL de Apache. Estas líneas de código deberían solucionar las vulnerabilidades SSL más comunes.

SSLProtocol all -SSLv2 -SSLv3
# Add SSL Cipher in one long line
SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
SSLOptions +StrictRequire
 
Header always set Strict-Transport-Security "max-age=63072000; includeSubdomains"
Header always set X-Frame-Options DENY
Header always set X-Content-Type-Options nosniff

Establecer una configuración SSL estricta en apache2

Si las líneas ilustradas en el extracto anterior ya existen en el archivo de configuración SSL de Apache, asegúrate de modificarlas para que tengan el aspecto descrito anteriormente. Para aplicar estos ajustes, activa el módulo Apache cabeceras y reinicia el servicio ejecutando los siguientes comandos:

a2enmod headers
systemctl restart apache2.service

Para un sitio web de producción, debería ser obligatorio habilitar el módulo TLS de Apache, ya que el CMS de WordPress genera la mayoría de los contenidos dinámicos a través de la pasarela PHP y también se encarga del proceso de autenticación de sus usuarios internos. El uso de la tecnología TLS garantiza que la información transferida está encriptada en ambos extremos y que la conexión es segura. Un tercero o un hombre en el medio puede interceptar el tráfico pero no puede descifrar el contenido, porque la información no se entrega en texto plano.

Una vez que hayas realizado todos los cambios anteriores, prueba la configuración de Apache para detectar posibles errores de sintaxis y, si todo está bien, reinicia los demonios LAMP para reflejar todos los cambios realizados hasta el momento y habilita los servicios en todo el sistema mediante los siguientes comandos.

apache2ctl -t
systemctl restart apache2.service mariadb.service
systemctl enable apache2.service mariadb.service

Por último, comprueba si los servicios Apache y MariaDB tienen puertos abiertos en estado de escucha emitiendo el comando netstat y filtrando la salida con egrep En este momento, el servidor web Apache debería tener expuestos los puertos 80 y 443 (correspondientes a los protocolos HTTP y https) de forma general y MariaDB debería estar vinculado únicamente al socket localhost:3306. Utiliza la bandera -n contra el comando netstat para suprimir la visualización de los nombres de los servicios.

netstat -tlp| egrep 'http|mysql'

Comprueba si MariaDB está iniciada

Para asegurarte de que tu servidor web es accesible desde Internet a través de los protocolos HTTP y HTTPS, abre un navegador y navega hasta tu nombre de dominio. Al navegar a través del protocolo HTTPS, se mostrará un error de certificado en el navegador. Esto se debe a que el archivo de configuración TLS por defecto de Apache está configurado para utilizar certificados autofirmados. Debes aceptar el error TLS y continuar navegando por la página web por defecto, como se ilustra a continuación.

http://www.yourdomain.com

Página de prueba de Apache2

https://www.yourdomain.com

Página de prueba de Apache 2 en modo SSL

En caso de que no puedas visitar la página web por defecto de tu dominio desde Internet, debes comprobar primero si algunas reglas del cortafuegos del sistema están bloqueando las peticiones o asegurarte de que los puertos adecuados del router se reenvían a tu LAN interna en caso de que el servidor se encuentre detrás de una red con NAT. También podrías comprobar los registros DNS en el panel de tu registrador de dominios y asegurarte de que apuntan a tu IP WAN y si los registros terminaron de propagarse en internet.

Para comprobar si PHP funciona como se espera en el lado del servidor, crea un archivo PHP php en la ruta del sistema /var/www/html/, que es la ruta raíz del documento web por defecto del servidor web Apache, emitiendo el siguiente comando y navega a la siguiente URI desde el navegador para obtener el resultado: http://www.yourdomain.com/info.php

echo '<?php phpinfo(); ?>' > /var/www/html/info.php

Página de prueba de información PHP

Instala WordPress 5.0

Ahora que la pila LAMP está totalmente configurada, la instalación del CMS WordPress es relativamente sencilla. En primer lugar, entra en la base de datos MariaDB y crea una base de datos de instalación para WordPress y un usuario con la contraseña adecuada para instalar y gestionar el CMS de WordPress, ejecutando los siguientes comandos. Siéntete libre de sustituir el nombre de la base de datos y las credenciales de la base de datos para que se ajusten a tus propios requisitos.

mysql -u root -p
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO 'wordpress-user'@'localhost' IDENTIFIED BY 'wordpress-pass';
FLUSH PRIVILEGES;

Crear la base de datos MySQL de WordPress y el usuario de la base de datos

A continuación, descarga el último tarball de WordPress del sitio web oficial utilizando la utilidad wget y extrae el archivo comprimido con la utilidad tar. Copia los archivos de instalación en la ruta raíz del documento del servidor web Apache ejecutando los siguientes comandos. Además, asegúrate de eliminar la página web index. html por defecto.

cd /tmp
wget http://wordpress.org/latest.tar.gz
tar xfz latest.tar.gz
cp -rf wordpress/* /var/www/html/
rm /var/www/html/index.html

Descarga y descomprime WordPress en tu servidor

Modifica los permisos de la ruta raíz web de Apache como se describe a continuación para conceder al grupo www-data del servidor web permisos completos de escritura en el directorio de instalación. Esta configuración permitirá al servidor web Apache crear o modificar archivos y directorios bajo esta ruta específica del sistema. Los más importantes serían el directoriouploads y el archivo .htaccess que pueden utilizarse para controlar y ampliar la funcionalidad de Apache.

chmod -R 775 /var/www/html/
chgrp -R www-data /var/www/html/
ls -al /var/www/html

Archivos de WordPress

Ahora, que todo está en su sitio, vamos a empezar a instalar WordPress. El proceso de instalación se realizará desde el navegador. Abre un navegador y visita tu dominio a través del protocolo HTTPS. En la primera pantalla de la instalación pulsa el botón Vamos para iniciar la instalación.

Instalador web de WordPress

En la siguiente pantalla de instalación, añade el nombre de la base de datos, las credenciales de acceso a la base de datos y el host de la base de datos que has creado antes para la instalación de WordPress y pulsa el botón Enviarpara continuar. La configuración de la base de datos se guardará en /var/www/html/wp-config.php Puedes modificar manualmente el archivo más adelante para fines especiales de WordPress.

Configuración de la base de datos

En la siguiente pantalla pulsa el botón Ejecutar la instalación y rellena el título de tu sitio web, las credenciales de administrador del sitio web y la dirección de correo electrónico. Los scripts de instalación deberían generar automáticamente una contraseña segura. Puedes elegir guardar esta contraseña o proporcionar tu propia contraseña fuerte. Cuando hayas terminado, pulsa el botón Instalar WordPress para completar el proceso de instalación.

Ejecutar la instalación

Información sobre el sitio de WordPress

Por último, una vez que la instalación se haya completado con éxito, inicia sesión en el panel de control de WordPress con las credenciales creadas durante el proceso de instalación y empieza a gestionar tu propio sitio web.

Éxito en la instalación de WordPress

Inicio de sesión del administrador de WordPress

Entra en el backend de WordPress.

El backend de WordPress

Tablero de administración de WordPress.

Editando una entrada en el nuevo Editor Gutenberg de WordPress.

Frontend de WordPress 5.0 con el nuevo tema TwentyNineteen.

Enhorabuena! Has instalado con éxito la última versión del CMS WordPress sobre el paquete de software LAMP en Debian 9, nombre en clave Stretch.

Descarga de la imagen de la máquina virtual de este tutorial

Este tutorial está disponible como imagen de máquina virtual lista para usar en formato ovf/ova que es compatible con VMWare y Virtualbox. La imagen de la máquina virtual utiliza los siguientes datos de acceso:

Inicio de sesión SSH / Shell

Nombre de usuario: administrador
Contraseña: howtoforge

Este usuario tiene derechos su.

Nombre de usuario: root
Contraseña: howtoforge

Inicio de sesión en WordPress

Nombre de usuario: admin
Contraseña: howtoforge

Inicio de sesión en MySQL

Nombre de usuario: root
Contraseña: howtoforge

La IP de la máquina virtual es 192.168.1.100, se puede cambiar en el archivo /etc/network/interfaces. Por favor, cambia todas las contraseñas anteriores para asegurar la máquina virtual.

También te podría gustar...