¿En qué podemos ayudarte?
En esta guía haremos algo a primera vista muy simple: instalar WordPress. Sin embargo, nos centraremos en las tareas que debemos realizar para preparar nuestro servidor y sacarle el máximo rendimiento posible.
Requisitos previos para instalar WordPress en una VPS
- Servidor VPS con LAMP - Podemos seguir esta guía para instalar un servidor web en nuestra VPS.
- Software de conexión a la instancia, como por ejempo PuTTY y/o WinSCP
- Dominio registrado, lo necesitaremos para poder implementar SSL y poder implementar Virtual Hosts en Apache.
Para los efectos de esta guía asumiremos que trabajamos en una instancia con Ubuntu 18.04, PHP 7.2, Apache 2.4 y MySQL 5.7
Ajustes en PHP
Instalación de módulos adicionales
La instalación de PHP 7.2 incluye todos los módulos necesarios para instalar de WordPress. Solo necesitaremos algunos más que nos faciltarán el trabajpo
- GD - este módulo nos permitirá optimizar las imágenes en nuestro servidor
- cURL - este módulo es usado con frecuencia para la transferencia de datos entre servidores web.
- SimpleXML- Es una librería que facilita mucho el trabajo con documentos XML.
- Memcached - Es un sistema de cache distribuido que mejorará los tiempos de respuesta de nuestro servidor
Instalaremos inicialmente estos módulos. Si en el futuro necesitásemos otros el proceso de instalación será similar
Nos conectamos a nuestra instancia por SSH y ejecutamos los siguientes comando en la consola
sudo apt update
sudo apt upgrade
sudo apt install php7.2-gd php-curl php7.2-xml memcached php-memcached
Despues de instalar los paguetes, reiniciamos nuestro servidor con sudo service apache2 restart. Podemos usar el archivo inform.php de la guia anterior para comprobar que los módulos instalados están activos. Por ejemplo, en el caso de memcached tendremos:
Si queremos más detalles sobre la configuración y monitorización de memcached, la encontraremos en este artículo.
Ajustar la configuración de PHP
Ahora podemos pasar a retocar la configuración general de PHP. La mayoría de las opciones por defecto son aceptables, sin embargo yo suelo ajustar las siguientes opciones:
- memory_limit: Es el máximo de RAM que puede usar PHP. Suele estar establecido en 128M. Yo prefiero 256M.
- post_max_size: Tamaño máximo para subidas de datos. Valor por defecto 8M y suele ser pequeño. Prefiero subirlo a 32M o más
- upload_max_filesize: Tamaño máximo para un archivo individual subido al servidor. Valor por defecto 2M.Prefiero subirlo a 32M o más. No puede ser mayor que post_max_size.
Para modificar estos parámetros usamos el comando sudo nano /etc/php/7.2/apache2/php.ini
La ubicación del archivo de configuración puede variar, dependiendo de la versión de php instalada en nuestro servidor.
Una forma rápida de realizar las modificaciones es buscando los textos. Usamos Ctrl+W, escribimos el texto a localizar y pulsamos Intro.
Localizamos los tres parámetros y los modificamos según nuestras necesidades.
Guardamos los cambios con Ctrl+O y cerramos el editor con Ctrl+X
Reiniciamos el servidor Apache y comprobamos que se han activado nuestras modificaciones
Con esto termina la preparación de PHP. Si tenemos que realizar otros ajustes con posterioridad, seguiremos el mismo procedimiento.
Configuracion del Apache
Por defecto el servidor Apache sirve las páginas webs desde la carpeta /var/www/html. Podemos instalar Wordpres copiando los archivos de instalación a dicha carpeta o a una subcarpeta,.
Sin embargo, yo prefiero hacerlo de un modo diferente. Aunque la configuración inicial es ligeramente más compleja, al final tendremos diferentes instalaciones independiente unas de otras. Esto facilita en gran medida la gestion y el mantenimiento posterior. Lo haremos configurando Virtual Hosts basados en nombres
Crear los registros DNS
Será necesario acceder al panel de control de nuestro dominio y agregar las entradas de tipo A en la zona DNS correspondiente.
Probablemente tengamos un acceso mediante un panel de control tipo cPanel. Si es así, los pasos a seguir no tienen mayores complicaciones:
- Añadimos un nuevo registro
- Asignamos un nombre de nuestra elección
- Indicamos que el registro es de tipo A
- Escribimos la IP pública de nuestro servidor
- Confirmamos la creacion del nuevo registro.
Las modificaciones suelen ser efectivas en unos pocos minutos. A partir de este momento podemos acceder al servidor por el nombre que le hayamos asignado.
Una forma rápida de comprobarlo es utilizando el comando
nslookup nombre-del -dominio
Deberíamos tener una respuesta similar a la siguiente imagen
Una vez activo el nombre DNS, podemos continuar configurando el servidor web
Configurar los Virtual Hosts en Apache
Para llevar a cabo esta tarea, crearemos en la carpeta /etc/apache2/sites-avaliable un archivo con el siguiente contenido:
<VirtualHost *:80>
ServerAdmin correo-administrador@example.com
ServerName dominio.example.com
DocumentRoot /var/www/carpeta-virtual-host/html/
ErrorLog /var/www/carpeta-virtual-host/logs/error.log
CustomLog /var/www/carpeta-virtual-host/logs/access.log combined
</VirtualHost>
repasemos brevemente las directivas:
- <VirtualHost *:80> - Indica que el sitio web será accesible en el puerto 80 (HTTP) de cualquier dirección IP
- En ServerAdmin indicamos el correo electrónico de administracion del servidor
- ServerName sirve para identificar al sitio web.
- DocumentRoot identifica la carpeta donde colocaremos los archivos que servirá la web
- ErrorLog y CustomLog son los archivos donde tendremos el registro de errores y el registro de acceso.
Las carpetas indicadas en las directivas deben ser creadas antes de activar el sitio. Sin embargo los archivos de registro serán creados por el servidor automáticamente.
Siguiendo con nuestro ejemplo, creamos el archivo de configuracion con sudo nano /etc/apache2/sites-available/pruebas.rjcardenas.com.conf.
Su contenido será similar al de la imagen. Grabamos los datos y creamos las carpetas de la configuración, en mi caso
sudo mkdir /var/www/pruebas.rjcardenas.com
sudo mkdir /var/www/pruebas.rjcardenas.com/html
sudo mkdir /var/www/pruebas.rjcardenas.com/logs
Solo tenemos que activar el virtual host recien creado, para ello usamos
sudo a2ensite pruebas.rjcardenas.com.conf
Yo recomiendo desactivar el sitio web por defecto con sudo a2dissite 000-default.conf. A continuación procedemos a reiniciar el servidor Apache para activar la nueva configuración con sudo service apache2 reload. Si accedemos a nuestro sitio de pruebas, tendremos una bonita página en blanco, ya que nos falta subir los archivos de nuestra web.
Ahora solo nos queda instalar los certificados SSL de Let's Encrypt. Utilizaremos el ciente de Certbot. y una vez finalizado el proceso de instalación comprobaremos que el acceso al servidor se realiza mediante HTTPS
Preparación de MySQL
WordPress necesita una base de datos y podemos crearla desde la consola, pero prefiero instalar phpmyadmin. De esta forma tenemos una herramienta visual que nos permitirá trabajar de una forma mucho más cómoda.
Una vez instalado, phpymyadmin accedemos y creamos una base de datos. Recomiendo utlizar utf8mb4_general_ci, que soporta un juego de caracteres más amplio
Si preferimos usar la consola de comando activamos el cliente de mysql con sudo mysql y una vez dentro ejecutamos los comandos:
CREATE DATABASE wordpress;
GRANT ALL PRIVILEGES ON wordpress.* TO usuario-bbdd@localhost IDENTIFIED BY 'contaseña-bbdd';
FLUSH PRIVILEGES;
exit
Copiar archivos para instalar WordPress
Ajustar permisos de carpetas
Lo primero que debemos hacer es darle al servidor web los permiso necesarios sobre las carpetasque hemos creado para WordPress. Primero lo hacemos propietario
sudo chown www-data:www-data /var/www/carpeta-virtual-host/ -R
y a continuación hacemos a nuestro usuario (ubuntu en este ejemplo) miembro del grupo www-data, para luego concederle al grupo permisos de escritura sobre las carpetas
sudo usermod -aG www-data ubuntu
sudo chmod g+rwx /var/www/carpeta-virtual-host/ -R
Subir archivos de instación
Una vez hecho esto, podemos descargar los archivos de instalación de WordPress mediante la consola:
cd /var/www/carpeta-virtual-host/html
sudo wget http://wordpress.org/latest.tar.gz
sudo tar zxf latest.tar.gz
sudo mv wordpress/* .
sudo rm -fr wordpress
O bien, utlizar WinSCP y hacerlo gráficamente
Son los mismos pasos, copiamos el archivo descargado, lo descomprimimos y movemos los archivos de instalación fuera de la carpeta wordpress. Finalmente eliminamos la carpeta wordpress y el archivo comprimido.
Para terminar hacemos al servidor propietario de los archivos extraidos
sudo chown www-data:www-data /var/www/carpeta-virtual-host/ -R
Ahora ya podemos acceder a nuestro VPS e instalar WordPress según el procedimiento habitual
.
Conclusión
Hemos repasado los pasos necesarios para instalar WordPress en un servidor VPS.
El procedimiento seguido permite tener varias instalaciones totalmente independientes, mediante la creación de diferentes virtual hosts.Por ejemplo un WordPress en www.dominio.com, nuestra nube privada en cloud.otrodominio.com, un sitio de pruebas en pruebas.domino.com y así sucesivamente.
Básicamente, segmentamos nuestra VPS. y aprovechamos al máximo la capacidad de nuestro servidor. Y lo más importante es que no tendremos que preocuparno por posibles interferencias entre las instalaciones. Es posible incluso utilizar diferentes versiones de PHP o mezclar sitios con HTTP y HTTPS.
Muchas gracias por el tutorial.
Sólo me falta saber cómo poder hacer cambios en los permanent links en wordpress. Creo que tiene algo que ver con apache
Hola Carlos, Gracias por tu comentario. Para que los permalinks funcionen correctamente debes activar el modulo mod_rewrite en el Apache. El comando para hacerlo es: sudo a2enmod rewrite. También hay que verificar que las reglas de mod_rewrite puedan puedan ser aplicadas. La forma más rápida de hacerlo es permitir los overrides a nivel de servidor. Comprobamos la configuración con sudo nano /etc/apache2/apache2.conf y verificamos que existan las líneas siguientes: < Directory /var/www/html> Options -Indexes +FollowSymLinks +MultiViews AllowOverride All Require all granted < /Directory > Si no usas la carpeta por defecto sustituye /var/www/html por la ruta apropiada. Solo queda reiniciar… Read more »
Muchas gracias. Solucionado.
Gracias de nuevo por todo lo que aportas. Un saludo