Cómo instalar WordPress en Ubuntu 20.04

Vamos a instalar WordPress en un VPS recién contratado que hemos configurado con Ubuntu 20.04 como sistema operativo.

Configuración del servidor recién instalado

Lo primero que debemos hacer es actualizar el sistema operativo para asegurarnos de que tiene los ultimos paquetes de la versión que hayamos seleccionado.

sudo apt update

Preparando el entorno LAMP

WordPress es una aplicación escrita en PHP, que necesita un entorno de ejecución determinado, conocido como entorno LAMP, (Linux, Apache, MySQL y PHP). Un sistema operativo (Linux), un servidor de aplicaciones web (Apache), una base de datos (MySQL) y un lenguaje de scripting (PHP).

Instalación entorno LAMP

sudo apt install apache2

Una vez terminada la instalación, tendrá que ajustar la configuración de su cortafuegos para permitir el tráfico HTTP. UFW tiene diferentes perfiles de aplicación que puedes aprovechar para conseguirlo. Para listar todos los perfiles de aplicación de UFW disponibles actualmente, puede ejecutar:

sudo ufw app list

Verás un resultado como este:

Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH

Por ahora, es mejor permitir sólo las conexiones en el puerto 80, ya que se trata de una instalación fresca de Apache y todavía no tiene un certificado TLS/SSL configurado para permitir el tráfico HTTPS en su servidor.

sudo ufw allow in "OpenSSH"

Activamos el Firewall para activar la seguridad de nuestro servidor y evitar así que haya peticiones a otros puertos que no sean los que el firewall tenga permitidos, en este caso hemos habilitado la comunicación por el puerto 22, que es el destinado a la conexión ssh.

Permite tambien la conexión por el puerto 80, que es el que usa el servidor web apache en comunicaciones http.

sudo ufw allow in "Apache"

Activamos el firewall

sudo ufw enable

Comprobamos como progresa la configuración de nuestro firewall.

sudo ufw status

Y tendrás una respuesta similar a esta.

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                                
Apache                     ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)                    
Apache (v6)                ALLOW       Anywhere (v6)

Puedes hacer una comprobación puntual de inmediato para verificar que todo ha ido según lo previsto visitando la dirección IP pública de tu servidor en tu navegador web.

http://direccion_ip_de_tu_servidor

Instalando Mysql

Ahora que tienes un servidor web en funcionamiento, necesitas instalar el sistema de base de datos para poder almacenar y gestionar los datos de tu sitio. MySQL es un popular sistema de gestión de bases de datos utilizado en entornos PHP.

sudo apt install mysql-server

Cuando te pida confirmación presiona “Y” y luego ENTER.

Cuando la instalación haya finalizado, te recomiendo ejecutar un script de seguridad que viene preinstalado con MySQL. Este script eliminará algunas configuraciones inseguras por defecto y bloqueará el acceso a su sistema de base de datos.

Inicia el script interactivo ejecutando:

sudo mysql_secure_installation

A la pregunta

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

Respondemos que NO y ponemos una contraseña para el usuario *root de mysql

Ante la pregunta:

Remove anonymous users? (Press y|Y for Yes, any other key for No) :

Responde Yes

Ante la pregunta:

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? (Press y|Y for Yes, any other key for No) :

Responde Yes

Ante la pregunta:

By default, MySQL 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? (Press y|Y for Yes, any other key for No) :

Responde Yes

Ante la pregunta:

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) :

Responde Yes

Una vez instalado comprueba que puedes acceder a mysql

sudo mysql -u root -p

Y sal con el comando:

exit;

Instalar PHP

Tienes Apache instalado para servir tu contenido y MySQL instalado para almacenar y gestionar tus datos. PHP es el componente de nuestra configuración que procesará el código para mostrar el contenido dinámico al usuario final.

Además del paquete php, necesitarás php-mysql, un módulo PHP que permite a PHP comunicarse con bases de datos basadas en MySQL. También necesitará libapache2-mod-php para que Apache pueda manejar archivos PHP. Los paquetes principales de PHP se instalarán automáticamente como dependencias.

Para instalar estos paquetes:

sudo apt install php libapache2-mod-php php-mysql

Una vez terminada la instalación, puede ejecutar el siguiente comando para confirmar su versión de PHP:

php -v

La respuesta debería ser algo similar a esto:

Output
PHP 7.4.3 (cli) (built: Jul  5 2021 15:13:35) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
	with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

En este punto, tu pila LAMP está completamente operativa, pero antes de que puedas probar tu configuración con un script PHP, es mejor que configures un “host virtual” en Apache adecuado para mantener los archivos y carpetas de tu sitio web. Lo haremos en el siguiente paso.

Creación de un alojamiento virtual para su sitio web

Crea una carpeta llamada “laboratorio” dentro del directorio que Apache ha creado como directorio raíz para las aplicaciones web. El texto que resalto en Azul deberías cambiarlo por el nombre de tu sitio web

sudo mkdir /var/www/html/laboratorio

A continuación, abra un nuevo archivo de configuración en el directorio sites-available de Apache utilizando su editor de línea de comandos preferido. En este caso, usaremos el editor de texto ‘nano’. Sustituye el nombre de laboratorio.charliealonso.com por tu propio dominio o subdominio.

sudo nano /etc/apache2/sites-available/laboratorio.charliealonso.com.conf

Copia este texto dentro del fichero que acabas de crear:

<VirtualHost *:80>
	ServerName laboratorio.charliealonso.com
	ServerAlias laboratorio.charliealonso.com
	ServerAdmin webmaster@localhost
	DocumentRoot /var/www/html/laboratorio
	
	<Directory /var/www/html/laboratorio/>
		AllowOverride All
	</Directory>

	ErrorLog ${APACHE_LOG_DIR}/laboratorio_error.log
	CustomLog ${APACHE_LOG_DIR}/laboratorio_access.log combined
</VirtualHost>

Fíjate en la palabras en negrita y sustituye estas palabras por tu propio dominio, nombre de la carpeta que hayas creado para tu y el nombre de los ficheros log para tenerlos identificados en caso de que en un mismo servidor quieras instalar varios sitios web.

Habilita el host virtual en apache

sudo a2ensite laboratorio.charliealonso.com

Prueba la configuración de Apache antes de recargar el servicio

sudo apache2ctl configtest

Recarga la configuración de Apache

sudo systemctl reload apache2

Instalar Certificados SSL

Vamos a instalar certificado Let’s Encrypt, que es un servicio de certificación SSL de software libre, que certifica mas de 260 millones de web actualmente y que se puede actualizar de forma automática usando el programador de tareas de Linux.

Si no tienes un nombre de dominio para tu web y vas a probar tu instalación con la dirección IP, no instales los certificados.

Para instalar los certificados ejecuta el siguiente comando:

sudo apt install certbot

Ahora instala el plugin de Apache para el certbot que instalar los certificados

sudo apt install python3-certbot-apache

Ejecuta el comando para solicitar el certificado

sudo certbot --apache

Esta secuencia de comandos te solicitará que responda a una serie de preguntas para configurar tu certificado SSL. Primero, te solicitará una dirección de correo electrónico válida. Esta dirección se utilizará para las notificaciones de renovación y los avisos de seguridad:

Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): tu@correo_valido

Después de proporcionar una dirección de correo electrónico válida, presiona ENTER para continuar con el siguiente paso. Luego, te solicitará que confirmes si aceptas las condiciones de servicio de Let’s Encrypt. Puede confirmar pulsando A y, luego, ENTER:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
(A)gree/(C)ancel: A

A continuación, te solicitará que confirmes si deseas compartir tu dirección de correo electrónico con Electronic Frontier Foundation para recibir noticias y otra información. Si no deseas suscribirte a su contenido, escribe ‘N‘. De lo contrario, escribe ‘Y‘. Luego, presiona ENTER para continuar con el siguiente paso.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
(Y)es/(N)o: N

En el siguiente paso te mostrará una lista con los dominios que haya configurados en este servidor y debes seleccionar el dominio que quieras certificar, pulsando el numero del dominio y ENTER, en el caso de querer certificar varios dominios, escribe sus números separados por comas.

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: laboratorio.charliealonso.com
2: dominio.com

3: www.dominio.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel):

Verás un resultado como este:

Obtaining a new certificate
Performing the following challenges:
http-01 challenge for your_domain
http-01 challenge for www.your_domain
Enabled Apache rewrite module
Waiting for verification...
Cleaning up challenges
Created an SSL vhost at /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabled Apache socache_shmcb module
Enabled Apache ssl module
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf
Enabling available site: /etc/apache2/sites-available/your_domain-le-ssl.conf
Deploying Certificate to VirtualHost /etc/apache2/sites-available/your_domain-le-ssl.conf

A continuación, te solicitará que selecciones si deseas que el tráfico de HTTP se redirija a HTTPS o no. En la práctica, esto significa que cuando alguien visite tu sitio web a través de canales no cifrados (HTTP), lo redirigirá automáticamente a la dirección HTTPS de su sitio web. Selecciona la opción 2 para habilitar el redireccionamiento o 1 si deseas mantener HTTP y HTTPS como métodos de acceso al sitio web separados.

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

Con este paso, se completa la configuración de Certbot y se te presentarán los comentarios finales sobre tu certificado nuevo e información sobre dónde localizar los archivos generados y cómo probar tu configuración utilizando una herramienta externa que analiza la autenticidad del certificado:

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://your_domain and
https://www.your_domain

You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=your_domain
https://www.ssllabs.com/ssltest/analyze.html?d=www.your_domain
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/your_domain/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/your_domain/privkey.pem
   Your cert will expire on 2020-07-27. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot again
   with the "certonly" option. To non-interactively renew *all* of
   your certificates, run "certbot renew"
 - Your account credentials have been saved in your Certbot
   configuration directory at /etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Certbot so
   making regular backups of this folder is ideal.
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Activar HTTPS en el firewall

Como hemos activado y direccionado el trafico para que vaya encriptado por SLL en https, debemos activar los puertos para https en el firewall, el puerto para https es el 443, pero como tenemos apache lo activamos con la aplicacion para ufw “Apache Full”:

sudo  ufw allow "Apache Full"

Verificar la renovación automática de Certbot

Los certificados de Let’s Encrypt son válidos únicamente por noventa días. Este período de validez se utiliza para alentar a los usuarios a automatizar su proceso de renovación de certificados, así como para garantizar que los certificados mal utilizados o las claves robadas expiren lo antes posible.

El paquete certbot que instalamos se encarga de las renovaciones al incluir una secuencia de comandos en /etc/cron.d, que gestiona un servicio systemctl denominado certbot.timer. Esta secuencia de comandos se ejecuta dos veces al día y renovará de forma automática cualquier certificado que caduque en treinta o menos días.

Para verificar el estado de este servicio y asegurarse de que esté activo y en ejecución, puede utilizar lo siguiente:

sudo systemctl status certbot.timer

Verás un resultado similar a este:

certbot.timer - Run certbot twice daily
     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)
     Active: active (waiting) since Tue 2020-04-28 17:57:48 UTC; 17h ago
    Trigger: Wed 2020-04-29 23:50:31 UTC; 12h left
   Triggers: ● certbot.service

Apr 28 17:57:48 fine-turtle systemd[1]: Started Run certbot twice daily.

Para salir de la pantalla de resultado anterior pulsa la letra q(quit) para volver a la consola.

Para probar el proceso de renovación, puede hacer un simulacro con certbot:

sudo certbot renew --dry-run

Instalar WordPress

Creación de una base de datos de MySQL y un usuario para WordPress

El primer paso que daremos es preparatorio. WordPress utiliza MySQL para administrar y almacenar el sitio y la información del usuario. Ya instalamos MySQL, pero debemos crear una base de datos y un usuario para que use WordPress.
Para comenzar, inicie sesión en la cuenta root (administrado) de MySQL emitiendo este comando (tenga en cuenta que este no es el usuario root de su servidor):

mysql -u root -p

En la base de datos, crea una base de datos exclusiva para WordPress. Puedes ponerle el nombre que quieras, pero usaremos el nombre WordPress en esta guía. Cree la base de datos para WordPress escribiendo los siguientes comandos uno a uno en la consola de comandos de MySQL. Resalto en azul el texto que deberías cambiar por tus propios datos

CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'wordpressuser'@'%' IDENTIFIED WITH mysql_native_password BY 'contraseña';
GRANT ALL ON wordpress.* TO 'wordpressuser'@'%';
FLUSH PRIVILEGES;
EXIT;
Instalación de extensiones de PHP adicionales

Actualiza el sistema

sudo apt update

instala los módulos requeridos

sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip

Reinicia el servicio apache para activar los módulos que acabas de instalar

sudo systemctl restart apache2
Descarga WordPress

Sitúate en el directorio temporal del servidor

cd /tmp

descarga el código fuente. Esto lo vamos a hacer con una erramienta que se llama curl, un navegador por linear de comando, normalmente viene instalado en ubuntu de base, si no fuera asi, puedes instalarlo con el siguiente comando

sudo apt install curl

y despues…

curl -O https://wordpress.org/latest.tar.gz

descomprimelo

tar xzvf latest.tar.gz

crea el archivo .htaccess

touch /tmp/wordpress/.htaccess

copia la plantilla de configuración al fichero config.php

cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

crea el directorio para actualizaciones de WordPress

mkdir /tmp/wordpress/wp-content/upgrade

copia la aplicación WordPress a la carpeta web para el proyecto

sudo cp -a /tmp/wordpress/. /var/www/html/laboratorio

cambia los permisos de la carpeta web

sudo chown -R www-data:www-data /var/www/html/base
sudo find /var/www/html/base/ -type d -exec chmod 750 {} \;
sudo find /var/www/html/base/ -type f -exec chmod 640 {} \;

consigue los código para securizar tu instalación

curl -s https://api.wordpress.org/secret-key/1.1/salt/

Editar el fichero de configuración de WordPress

sudo nano /var/www/html/base/wp-config.php

Y cambiamos el nombre de la base de datos, el nombre de usuario y su contraseña, además de las claves de seguridad que hemos obtenido antes.

. . .

// ** MySQL settings - You can get this info from your web host ** //
/** The name of the database for WordPress */
define( 'DB_NAME', 'wordpress' );

/** MySQL database username */
define( 'DB_USER', 'wordpressuser' );

/** MySQL database password */
define( 'DB_PASSWORD', 'password' );

/** MySQL hostname */
define( 'DB_HOST', 'localhost' );

/** Database Charset to use in creating database tables. */
define( 'DB_CHARSET', 'utf8' );

/** The Database Collate type. Don't change this if in doubt. */
define( 'DB_COLLATE', '' );

define('AUTH_KEY',         'qG/SN^B?SPs#wM__9aNd a?0r/r?JtnT/DY@R:H%b~Gu;-{-3oI#OoYq^O?RUR)q');
define('SECURE_AUTH_KEY',  '/YYz6hR;-r3;9B`#9hF0KXh#{s]DU8@BEY+kNQX]S1;re4P*N2P?vw|JMNpqJp^#');
define('LOGGED_IN_KEY',    '84Y3A:7V]+aA08EfWNkt0G/me}&<?)w)iwt7aC6SrRB&>MGI-9j^ts4lFoN0w6yx');
define('NONCE_KEY',        'qt%ng]D>Ei[q/h+ZXn}O}f,SAq9-h<,l?nR3ZNQl(.+WzO2Pe~T|]ip`S.qT(e9v');
define('AUTH_SALT',        '1j|.l,.HPbIfX9G<nvUK6u4c8e6&3{i?Q^KR(t7<BI_F0w~WPAaE>aDjgQr(&CJ.');
define('SECURE_AUTH_SALT', '3^qa.YLX^yAo3nX6N6]![;%g6x4(72N-#jPn$F4>F#X+RO9K00bse&E{mw$GolWi');
define('LOGGED_IN_SALT',   '%9e1q8_ri;7V3w8|cEN%nuis,mte||;2I~$i!Y_qWV>-m,]*B~hpSXN6H% 2/o(d');
define('NONCE_SALT',       '@{#k[*1tR p[2!$.vk0V3=Aa{:j6  MWqgTnBy8&.gX8X-7[~AhCpPf6AYC_eunh');

. . .

Añade al final del fichero config la siguiente línea

define('FS_METHOD', 'direct');

Salva el fichero con la combinación de teclas CTRL+O y sal del editor con CTRL+X

En este punto ya tienes instalado WordPress y solo tienes que terminar la instalación via web, como ya tenemos instalado el Host virtual con el dominio y el certificado SSL si escribes tea linea en tu navegador:

https://laboratorio.charliealonso.com

Te mostrará esta ventana, seleccionas el idioma y rellenas el formulario que te aparece a continuación.

Así de fácil ha sido instalar tu WordPress en un Servidor Virtual Privado VPS en internet, si no dispones de ninguno, puede contratar estos servidores por un precio realmente económico tanto en OVH como en CONTABO en este ultimo encontraras VPS mejor equipados a un precio realmente asequible en torno a 4€/mes

¡Que tengas un Ingenioso día!

Charlie Alonso

Si necesitas ayuda con estas configuraciones, Suscribete a mi servicio de asesoramiento y consulta lo que necesites y si no quieres ponerte manos a la obre y prefieres que lo haga yo por ti, contrata mis micro-servicios de implantación.

Deja un comentario

Share to...