Instalación y configuración de WordPress desde cero en un VPS Ubuntu con certificados de Let’s Encrypt

Instalación de WordPress en VPS Linux Ubuntu 20.04 paso a paso vía Consola

Entre los sistemas de gestión de contenidos (CMS) más populares y usados de todo internet encontramos a WordPress. En el presente artículo explicaremos el proceso de instalación de WordPress desde cero y paso a paso en un servidor privado virtual (VPS) desde la terminal de comandos forma rápida y sencilla.

Requisitos de software para WordPress

  • Servidor Web
  • PHP
  • Servidor de base de datos (MySQL o MariaDB)

Requisitos para seguir esta guía

  • Unos minutos para leer detenidamente y seguir esta guía
  • Un dominio previamente configurado con un registro de tipo “A” apuntando al servidor (ejemplo: www.misitio.com –> IP público en internet del servidor de hospedaje del sitio)
  • Un servidor privado virtual (VPS) en cualquier proveedor en internet, incluso pudiera ser un servidor real o una computadora que tengamos.
  • Que el servidor tenga acceso a internet para efectuar la instalación
  • Que dispongamos de Linux Ubuntu 20.04 instalado (podemos usar otro, pero en esta guía usaremos esa distribución por ser una de las más populares en servidores VPS).

¿Qué es un VPS?
VPS: Virtual Private Server o en español, Servidor privado virtual, en términos simples, un servidor virtual en al cual disponemos de acceso administrativo completo por ssh. En la mayoría de los servicios que se brindan en internet de este tipo, son máquinas virtuales conocidas como instancias.

¿Qué es LAMP?

LAMP: es una pila de soporte para aplicaciones conformada por Linux, Apache, MySQL y PHP, aunque existen otras como WAMP, LEMP, WEMP, LAPP y muchas más. En esta guía usaremos LAMP por ser la más popular en todos los servicios de hospedaje web (web hosting) para WordPress en internet.

Preparando el linux

Lo primero es acceder al servidor usando SSH u otra vía que de acceso a la shell de comandos. Una vez dentro del servidor para comenzar a preparar el entorno del despliegue, el primer paso es verificar que el servidor linux disponga de los repositorios de software debidamente configurados. En nuestro caso como estamos usando Ubuntu 20.04, usando las siguientes líneas de configuración en el archivo
/etc/apt/sources.list

#--- Repositorios oficiales en internet de Ubuntu 20.04 (Focal) ---

deb http://archive.ubuntu.com/ubuntu focal main universe multiverse restricted
deb http://archive.ubuntu.com/ubuntu focal-security main universe multiverse restricted
deb http://archive.ubuntu.com/ubuntu focal-updates main universe multiverse restricted
deb http://archive.ubuntu.com/ubuntu focal-proposed main universe multiverse restricted
deb http://archive.ubuntu.com/ubuntu focal-backports main universe multiverse restricted

Seguidamente procederemos a recargar los índices de los repositorios usando el comando

sudo apt update

Después para garantizar que el sistema esté actualizado completamente ejecutaremos el comando

sudo apt full-upgrade

Una vez completada la actualización del sistema, verificamos que el servidor tenga la fecha y hora correctamente y la zona horaria debidamente configurada. Atención esto es de suma importancia ya que de la fecha y hora del sistema dependen muchos factores importantes.

Podemos ver la fecha y hora con el comando

date

En caso de la fecha y hora estar incorrecta debemos arreglarla antes de continuar con esta guía.

Instalar MySQL

Para instalar el servidor de base de datos relacionales MySQL desde los propios repositorios de linux usaremos el comando que se muestra a continuación.

sudo apt install mysql-server mysql-client

Una vez completada la instalación ejecutaremos el comando mysql_secure_installation para cambiar algunos valores básicos en la configuracion de nuestro servidor.

sudo mysql_secure_installation
Configuración del MySql server

Presionamos Y y enter para continuar

Configuración del MySql server

Escogemos la opción 2, y presionamos enter

Configuración del MySql server

Presionamos “y” y enter para continuar

Configuración del MySql server

Nuevamente presionamos “y” y enter para continuar

Configuración del MySql server

Volvemos a presionar “y” y enter para continuar

Configuración del MySql server

“y” y enter para finalizar el asistente.

Lo próximo que haremos será asegurar el usuario root con una contraseña robusta. Este usuario debe usarse solamente para tareas adminstrativas dentro del servidor. Nuestro próximo paso será acceder al servidor de base de datos mysql recién instalado y cambiar la contraseña del usuario root.

//-Conectarse al servidor mysql
mysql -h localhost -u root
Conectarse al MySql server por consola

En el promt del servidor mysql cambiaremos la clave del usuario root ejecutando la siguiente consulta. Fíjese que allí especificaremos la contraseña que usará, siéntase libre de escojer una. Tenga presente de que la contraseña debe cumplir con parámetros de complejidad (Más de 8 caracteres, Letras mayúsculas y minúsculas, números y caracteres especiales). Para nuestro ejemplo usaremos como contraseña: My.New.P455w0rd.Strong* , esta es solo un ejemplo, por favor no use esta misma y genere la suya propia. Puede hacer uso de un generador de contraseñas como LastPass Online y anótela igual que los próximos datos importantes para que no se le olvide.

Ahora para cambiar la contraseña del usuario root ejecutamos la siguiente consulta.

ALTER USER 'root'@'localhost' IDENTIFIED BY 'My.New.P455w0rd.Strong*';

La salida debe verse como la imagen a continuación

Cambiar la contraseña al usuario root en el MySql server

El próximo paso que haremos dentro del servidor de base de datos es crear una base de datos para nuestro nuevo wordpress ejecutando la consulta a continuación. En este caso le llamaremos mywpdb pero puede usar el nombre que usted quiera.

//-Crear la base de datos  llamada mywpdb. 
CREATE DATABASE mywpdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
Crear base de datos por consola en el  MySql server

Seguidamente crearemos un usuario que es el que usará la aplicación de wordpress para acceder a la base de datos, ya que no se debe usar el usuario root por cuestiones de seguridad. El nuevo usuario solamente tendrá acceso a la base de datos del wordpress. Nuevamente genere una contraseña robusta para este usuario. Puede hacer uso de un generador de contraseñas como LastPass Online

//-Crear el usuario que se usará para acceder a la base de datos: mywpuser 
CREATE USER 'mywpuser '@'localhost' IDENTIFIED BY 'UW3.s9TF9@*';

El siguiente paso es otorgarle los permisos al usuario que acabamos de crear sobre la base de datos que usará nuestro wordpress.

//-Asignar permisos al usuario creado a la base de datos
grant all on mywpdb .* to 'mywpuser '@'localhost';
Asignar permisos a un usuario en MySql server por consola

Ya solo nos va quedando recargar todos los permisos y salir de la consola del servidor de bases de datos mysql, para eso ejecutaremos los dos comandos a continuación.

//-Recargar los permisos asignados al nuevo usuario sobre la bd que se creó
flush privileges;
//-salir del servidor de base de datos mysql
quit

Llegados a este punto ya tenemos:

  • Cambiada la contraseña del usuario root
  • Creada la base de datos
  • Creado el usuario que usará el wordpress
  • Asignados los permisos del usuario sobre la base de datos

Instalar el servidor web Apache

Para la instalación de WordPress, es necesario instalar el servidor web apache, para ello ejecutaremos el siguiente comando en la consola de nuestro VPS

sudo apt install apache2 openssl

Una ves completada la instalación de apache, si tenemos un registro de dns de tipo “A” apuntando a la dirección IP del servidor ya podemos abrir un navegador web y poner la url que se conformaría de la siguiente forma: http://miregistrotipoa.midominio

Por ejemplo: Si tenemos el dominio “misitio.com” y el IP de nuestro servidor es 120.10.15.1 y agregamos en nuestro proveedor de dominio el registro de tipo “A” llamado www apuntando al IP de nuestro servidor VPS tendríamos la url siguiente: www.misitio.com la cual abrimos en nuestro navegador web favorito. Ya deberíamos poder ver la página del servidor como se muestra en la siguiente imagen.

Página por defecto del Apache2

Si vemos una página como se muestra en la imagen ya tenemos el servidor web instalado, así que procedemos a instalar el intérprete de PHP que usará nuestro servidor web.

Instalar el intérprete de PHP y usar con el módulo de apache.

Para instalar el php usaremos el repositorio de terceros ondrej/php.
Cuando vamos a agregar repositorios de terceros debemos instalar el paquete de software “software-properties-common” el cual instalaremos con el comando

apt install software-properties-common

Para agregar este repositorio a nuestro sistema ejecutaremos el siguiente comando

add-apt-repository ppa:ondrej/php 

Una vez ejecutado el comando nos pedirá que presionemos Enter para continuar o Ctrol+c para cancelar, como se muestra en la siguiente imagen

Instalando el repositorio de PHP

En nuestro caso para agregar el repositorio presionaremos enter.

Una vez agregado el repositorio de terceros vamos a proceder a instalar el PHP 8.2 usando el siguiente comando. Tenga en cuenta que el siguiente comando es una sola línea.

apt install php8.2-cgi php8.2-cli php8.2-common php8.2-curl php8.2-enchant php8.2-gd php8.2-gmp php8.2-igbinary php8.2-imagick php8.2-intl php8.2-ldap php8.2-mbstring php8.2-memcached php8.2-msgpack php8.2-mysql php8.2-odbc php8.2-opcache php8.2-redis php8.2-soap php8.2-sqlite3 php8.2-tidy php8.2-xml php8.2-xsl php8.2-zip php8.2-apcu php8.2-bcmath php8.2-bz2 libapache2-mod-php8.2

Después de instalar el PHP con todas las extensiones especificadas, reiniciamos el apache con el comando a continuación y crearemos el archivo index.php para probar que el php se integró correctamente al servidor web apache.

// Comando para reinciar al servidor web apache
sudo systemctl restart apache2

Comando para crear archivo index.php en la raiz por defecto del servidor web apache llamando a la función de información de PHP.

echo "<?php phpinfo();?>" > /var/www/html/index.php

Si todo se realizó correctamente, ingresamos a la url que probamos anteriormente y agregamos al final de la url /index.php ( ejemplo: http://www.misitio.com/index.php ). Nos debe salir una página como la que se muestra a continuación.

Página por defecto del PHP

Optimizar PHP

Para optimizar el rendimiento del intérprete de PHP para nuestro wordpress realizaremos algunos cambios en el archivo de configuración de PHP. Para hacer los cambios editaremos el archivo de configuración usando en editor nano en la consola pero usted puede usar el que desee.

//-Editar archivo de configuracion de PHP usado por el servidor web apache
nano /etc/php/8.2/apache2/php.ini

El archivo de configuración de PHP es bien extenso y llenos de comentarios que son las líneas que comienzan con “;”

Dentro del archivo de configuración si usamos el editor de consola nano podemos buscar presionando Control+W y escribiendo una parte de lo que desea buscar y presiona la tecla enter.

//-Cambiar estos valores, si está comentado alguno quitar el “;” de delante y asignarle el valor que se muestra en la tabla de abajo.

; parámetro de configuración = valor 

realpath_cache_size = 5M
realpath_cache_ttl = 3600

max_execution_time = 300
max_input_time = 120
max_input_vars = 10000

;Este especifica el límite máximo de memoria que puede usar el PHP
memory_limit = 1024M

;Define el tamaño máximo de contenido de una petición
;Es útil un valor grande cuando se suban archivos grandes 
post_max_size = 1024M
file_uploads = On
upload_max_filesize = 1024M

; Este parámetro se debe adecuar a la zona horaria de donde se encuentra el servidor
date.timezone = Europe/Madrid

opcache.enable = 1
opcache.enable_cli = 1
opcache.memory_consumption = 256M
opcache.max_accelerated_files = 80000
opcache.use_cwd = 1
opcache.save_comments = 1

Después de cambiar los parámetros antes mencionados presionamos Control+X para salir del editor y nos mostrará una mensaje como el siguiente preguntando si queremos guardar los cambios.

Presionaremos Y

Finalmente presionamos enter para que guarde todo en el archivo que se muestra en la línea resaltada.

Seguidamente reiniciamos el servidor web para que tome los parámetros con los valores que hemos configurado previamente.

sudo systemctl restart apache2 

Si todo ha ido bien volvemos a entrar a la url antes vista que termina en /index.php y en la página que sale podemos buscar los valores que cambiamos en los pasos anteriores
ejemplo:

Página por defecto del PHP

Llegados a este punto ya debemos tener instalado el servidor web apache2 y el PHP integrados. Ahora procederemos a configurar el virtualhost de apache para nuestro wordpress.

VirtualHost de apache

//-Crear el archivo de virtualhost de apache para nuestro wordpress.

nano /etc/apache2/sites-available/mywordpress.conf

Cuando abra el editor en la consola ponemos dentro el siguiente contenido, recuerde reemplazar “www.misitio.com” por el nombre de su servidor, el que tiene apuntando a ese servidor mediante el registro de tipo A en su dominio.

 <VirtualHost *:80>
	ServerName  www.misitio.com
	ServerAdmin webmaster@misitio.com
    
	DocumentRoot /var/www/html/wordpress
	DirectoryIndex index.php
	AddDefaultCharset UTF-8
	
	<Directory "/var/www/html/wordpress">
	    Options Indexes FollowSymLinks MultiViews
	    AllowOverride All
	    Order allow,deny
	    allow from all
	    Require all granted
	</Directory>
	
	ErrorLog ${APACHE_LOG_DIR}/error.log
	CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Una vez establecido el contenido cerramos el nano con Control+X, “y” para decirle que si queremos guardar y enter.

Hasta aquí hemos preparado parte del entorno pero todavía no hemos tocado nada de wordpress, así que comenzamos.

Instalación del WordPress

// Movernos hacia la carpeta raiz del servidor web
cd /var/www/html

El próximo paso es descargar el wordpress, el cual podemos descargar desde su sitio oficial. Use cualquiera de los dos comandos según el idioma en el que quiera tenerlo.

//-Descargar el wordpress en inglés
wget https://wordpress.org/latest.zip -O wordpress.zip
//-Descargar el wordpress en español
wget https://es.wordpress.org/latest-es_ES.zip -O wordpress.zip

Si se descargó correctamente entonces continuamos, de lo contrario deberá descargarlo a su pc y subirlo al servidor a la ubicacion /var/www/html/ para continuar con esta guía paso a paso

//-Descomprimir el archivo
unzip wordpress.zip
//-Cambairle los permisos a la carpeta
chmod 755 -R wordpress/
//-Cambiamos el propietario de la carpeta para que el usuario del servidor web (www-data) pueda escribir sin problemas

chown www-data:www-data wordpress -R

a2ensite mywordpress

a2dissite 000-default

systemctl restart apache2

Ahora probamos acceder por el navegador a la url del sitio y debe salir la página del wordpress. Allí todavía no debemos hacer nada, solo es para comprobar que funciona correctamente el virtual host. Falta hacer que funcione por https con los certificados de Let’s Encrypt, que es nuestro próximo paso.

Pantalla1 de la Instalación de WordPress

Conexión con HTTPS de Let’s Encrypt

Instalamos el cliente certbot y los complementos para apache

sudo apt install certbot python3-certbot-apache

Ejecutamos el asistente de configuración para apache

certbot --apache

Se nos solicita el email al cual se enviarán las notificaciones. Allí ponemos el nuestro y presionamos enter

Generar certificado de Let´s Encrypt

Seguidamente nos saldrá para aceptar los términos del servicio, para lo cual presionaremos A y enter para continuar.

Generar certificado de Let´s Encrypt

Luego nos preguntará si deseamos compartir nuestro correo electrónico a lo que podemos decir si o no usando “y” o “n” y luego presionando enter.

Generar certificado de Let´s Encrypt

Ahora nos aparecerá la lista de virtualhost que tengamos configurados para especificar el que queremos habilitarle el certificado para https. En nuestro caso es el único que sale en la lista con el número 1 así que entramos 1 y damos enter.

Generar certificado de Let´s Encrypt

Luego nos preguntará si queremos que el tráfico se redireccione automáticamente al HTTPS o no, a lo que escogeremos la opción 2 y presionamos enter.

Generar certificado de Let´s Encrypt

A continuación se nos mostrará toda la información del proceso de configuración automática como se muestra en la siguiente imagen.

Generar certificado de Let´s Encrypt

Ahora vamos a poner para que se renueve automáticamente el certificado, para eso ejecutaremos el comando.

crontab -e

y agregaremos al final la siguiente línea

14 5 * * * /usr/bin/certbot renew --quiet --post-hook "/usr/sbin/service apache2 reload" > /dev/null 2>&1

debe quedar así

Automatizar el proceso de renovación del certificado de Let´s Encrypt

Si todo salió bien ya podemos entrar por el navegador y debemos ver la página del wordpress. Esta ves por https y con el candado correctamente en la barra de direcciones del navegador. Ahora si procedemos a instalar el wordpress.

Instalar WordPress

Si todo está listo debemos ver la siguiente página en la cual haremos clic en el botón en la esquina inferior izquierda “¡Vamos a ello!”

Pantalla1 de la Instalación de WordPress

Seguidamente entramos los datos que pide el formulario y hacemos clic en el botón enviar en la esquina inferior izquierda.

Pantalla2 de la Instalación de WordPress

Ya esta lista la primera parte de la instalación que es donde se configura el acceso de wordpress a la base de datos. Ahora vamos con la segunda. En la página que se muestra a continuación hacemos clic en el botón que aparece en la esquina inferior izquierda “Realizar la instalación”

Pantalla3 de la Instalación de WordPress

Ahora entraremos el título del sitio, el nombre de usuario que usaremos para administrar nuestro wordpress, la contraseña la cual se genera automática o podemos especificar una, el correo al que wordpress enviará las notificaciones, y debemos marcar el cuadro de selección para que los motores de búsqueda todavía no indexen el sitio. Una vez llenados todos los datos debemos asegurarnos de no olvidar el usuario y la contraseña y hacemos clic en el botón en la esquina inferior izquierda que dice “Instalar wordpress”

Pantalla4 de la Instalación de WordPress

Ya en unos segundos se completa la instalación de wordpress y sale una página como la que se muestra a continuación.

Pantalla5 de la Instalación de WordPress

Podemos hacer clic en acceder y nos aparecerá el formulario de acceso como se muestra en la siguiente imagen.

Pantalla de Login del WordPress

Una ves puesto usuario y contraseña ya accederemos al panel de administración de wordpress desde donde podemos hacer todo el trabajo administrativo con este gestor de contenidos.

Panel de administración del WordPress

Solo nos queda hacer una par de ajustes y habremos acabado.

Configuraciones básicas en WordPress

Por último vamos a agregar estas dos líneas de configuraciones en el archivo de configuración de WordPress. La primera es para desactivar el uso de FTP y que el WordPress pueda escribir directamente en su carpeta y la segunda es para aumentar el límite de memoria de WordPress.

//deshabilitar FTP requerido para actualizaciones de WordPress y complementos, con esto logramos que el WordPress escriba directamente en la carpeta en vez de usar un servidor FTP.
define(‘FS_METHOD’, ‘direct’);

//Aumentar la memoria RAM que usará WordPress
define(‘WP_MEMORY_LIMIT’, ‘256M’);

Para esto volvemos a la terminal de nuestro VPS y editamos el archivo de configuración

//-Editar el archivo de configuración del WordPress
nano /var/www/html/wordpress/wp-config.php
//- Allí agregar después de la linea "define( 'WP_DEBUG', false );"
// Pegar estas 2

define('FS_METHOD', 'direct');
define('WP_MEMORY_LIMIT', '256M');

Agregadas esas dos líneas cerramos el archivo guardando los cambios, con Control+X, luego “Y” y finalmente Enter.

Ya hemos terminado de instalar nuestro WordPress en el VPS desde la terminal.

Accediendo al panel de administración de WordPress

Recuerde que siempre puede acceder al panel de administración de su WordPress escribiendo la url de su sitio+/wp-admin

Antes de concluir haremos una corrección de los permisos de WordPress en sus directorios garantizando que no se puedan modificar los archivos que no deban ser modificados y deshabilitando la ejecución de archivos desde el directorio de subidas.

Para garantizar la seguridad de tu instalación de WordPress en un servidor Linux con Apache2, es importante ajustar correctamente los permisos de archivos y carpetas. Aquí te dejo una configuración recomendada:

Carpeta raíz de WordPress (por ejemplo, /var/www/html/wordpress):
Permisos: 755 (directorios)
Propietario: El usuario que corre el servicio de Apache (por lo general www-data).
Comandos a usar:

sudo chown -R www-data:www-data /var/www/html/wordpress
sudo find /var/www/html/wordpress/ -type d -exec chmod 755 {} \;

Archivos en la carpeta de WordPress:

Permisos: 644 (archivos)
Comandos a usar:

sudo find /var/www/html/wordpress/ -type f -exec chmod 644 {} \;

wp-config.php (archivo sensible de configuración):

Permisos: 600 (solo el propietario puede leer y escribir)
Comando a usar:

sudo chmod 600 /var/www/html/wordpress/wp-config.php

Carpeta wp-content/uploads (donde se suben archivos):

Permisos: 755 o 775 (si necesitas permisos de escritura para el grupo).
Comandos a usar:

    sudo find /var/www/html/wordpress/wp-content/uploads/ -type d -exec chmod 755 {} \;
    sudo find /var/www/html/wordpress/wp-content/uploads/ -type f -exec chmod 644 {} \;

Detalles adicionales:

Asegúrate de que los permisos sean lo más restrictivos posible. Apache solo debe tener permiso para leer los archivos, excepto en carpetas donde es necesario subir contenido, como wp-content/uploads.
El propietario de los archivos debe ser www-data (o el usuario del servidor web), pero evita dar permisos de escritura a nivel global.

Hasta aquí la instalación de WordPress vía terminal de comandos en un VPS con Linux Ubuntu 20.04. En posteriores artículos abordaremos otros temas sobre Worpress y configuraciones más avanzadas en sus despliegues y servidores.

Ir al contenido