WordOps para gestionar VPS de WordPress

Última revisión: 16 de diciembre de 2020

Si tenemos WP-CLI que nos permite gestionar por completo todo lo que hay alrededor de WordPress, una vez instalado, tenemos WordOps como herramienta para la gestión de la creación y mantenimiento de sitios WordPress en un sistema no gestionado.

En este caso, si tienes un servidor con Ubuntu o Debian, pero cada vez que has de crear un WordPress se te hace cuesta arriba, con este sistema puedes montar todo el sistema de forma sencilla, además de crear, actualizar y mantener todo con una serie de comandos como si de WP-CLI se tratase.

WordOps provide the ability to deploy a blazing fast and secured WordPress with Nginx by using simple and easy to remember commands. Forked from EasyEngine v3, it’s already much more than an up-to-date version of EEv3 with several new features including Let’s Encrypt wildcard SSL certificates with DNS API validation support, Linux kernel optimizations or a new custom Nginx package with TLS v1.3 and Cloudflare HTTP/2 HPACK support.

WordOps

Este tutorial ha sido creado en un VPS de Clouding. Puedes crear tu propio VPS desde 3€/mes.

Además, tienes la posibilidad de crear tu VPS directamente con la imagen WordPress.

COLABORACIÓN

Requisitos

Sistema Operativo recomendado

  • Ubuntu 20
  • Ubuntu 18

Sistema Operativo compatible

  • Ubuntu 16
  • Debian 10
  • Debian 9

El ejemplo de este tutorial es con Ubuntu 20.

Instalación

Una vez esté instalado el sistema operativo, lo primero que configuraremos será la hora del servidor. En este caso configuraremos la zona horaria universal.

timedatectl set-timezone 'UTC'
timedatectl set-ntp on

Lo siguiente que haremos es comprobar la versión del sistema operativo y, posteriormente, hacer una actualización completa del mismo.

lsb_release -a
apt -y update && apt -y upgrade && apt -y dist-upgrade && apt -y autoremove
snap install canonical-livepatch

Ahora que tenemos todo actualizado, instalaremos WordOps.

cd
wget -qO wo wops.cc && sudo bash wo

Esta ejecución nos devolverá el resultado de la instalación. En general no es muy rápida, así que ten paciencia.

Welcome to WordOps install/update script v3.13.2
Installing wo dependencies      [OK]
Installing WordOps      [OK]
Running post-install steps      [OK]
WordOps (wo) require an username & and an email address to configure Git (used to save server configurations)
Your informations will ONLY be stored locally
Enter your name:
Enter your email:
Synchronizing wo database, please wait…
WordOps (wo) installed successfully

To enable bash-completion, just use the command:
bash -l

To install WordOps recommended stacks, you can use the command:
wo stack install

To create a first WordPress site, you can use the command:
wo site create site.tld --wp

Una vez finalizada la instalación, validaremos que funciona haciendo una actualización del software.

wo update

Podemos activar el auto completado automático, de forma que usando la tecla de tabulación se puedan completar las funciones, o mostrarnos la lista de opciones disponible.

source /etc/bash_completion.d/wo_auto.rc

Antes de crear ningún sitio, haremos una primera carga de todos los componentes básicos que vamos a utilizar, el stack inicial. Para ello ejecutaremos la instalación base.

wo stack install

Que instala una lista de servicios para tenerlos preparados.

WP-CLI is already installed
Start : wo-kernel [OK]
Adding repository for MySQL, please wait…
Adding repository for NGINX, please wait…
Adding repository for PHP, please wait…
Updating apt-cache              [OK]
Installing APT packages         [OK]
Applying Nginx configuration templates
Testing Nginx configuration     [OK]
Restarting Nginx                [OK]
Testing Nginx configuration     [OK]
Restarting Nginx                [OK]
Configuring php7.3-fpm
Restarting php7.3-fpm           [OK]
Tuning MySQL configuration      [OK]
Restarting mysql                [OK]
Restarting fail2ban             [OK]
Configuring Fail2Ban
Configuring Sendmail            [OK]
Downloading PHPMyAdmin           [Done]
Downloading phpRedisAdmin        [Done]
Downloading Composer             [Done]
Downloading Adminer              [Done]
Downloading Adminer theme        [Done]
Downloading MySQLTuner           [Done]
Downloading Netdata              [Done]
Downloading WordOps Dashboard    [Done]
Downloading eXtplorer            [Done]
Downloading cheat.sh             [Done]
Downloading bash_completion      [Done]
Downloading clean.php            [Done]
Downloading opcache.php          [Done]
Downloading Opgui                [Done]
Downloading OCP.php              [Done]
Downloading Webgrind             [Done]
Downloading pt-query-advisor     [Done]
Downloading Anemometer           [Done]
Installing composer             [OK]
Installing Netdata              [OK]
Restarting netdata              [OK]
Configuring packages            [OK]
HTTP Auth User Name: 
HTTP Auth Password : 
WordOps backend is available on https://IP_ADDRESS:22222/
Successfully installed packages

Existen algunas opciones que podemos usar si las vemos necesarias, como por ejemplo cambiar de MySQL a MariaDB.

wo stack migrate --mariadb

O instalar PHP 7.4

wo stack install --php74

Todos los comandos del stack están disponibles en su documentación.

Podemos ver las versiones y todo lo instalado haciendo una llamada a su sistema de información.

wo info

Que nos devolverá la información de versiones de los distintos servicios.

NGINX (1.18.0):

user                             www-data
worker_processes                 auto
worker_connections               50000
keepalive_timeout                8
fastcgi_read_timeout             300
client_max_body_size             100m
allow                            127.0.0.1 ::1

PHP 7.2 is not installed

PHP (7.3.24-3):

user
expose_php                       Off
memory_limit                     128M
post_max_size                    100M
upload_max_filesize              100M
max_execution_time               300

Information about www.conf

ping.path                        /ping
pm.status_path                   /status
process_manager                  ondemand
pm.max_requests                  1500
pm.max_children                  50
pm.start_servers                 10
pm.min_spare_servers             5
pm.max_spare_servers             15
request_terminate_timeout        300
xdebug.profiler_enable_trigger   off
listen                           php73-fpm.sock

Information about debug.conf

ping.path                        /ping
pm.status_path                   /status
process_manager                  ondemand
pm.max_requests                  1500
pm.max_children                  50
pm.start_servers                 10
pm.min_spare_servers             5
pm.max_spare_servers             15
request_terminate_timeout        300
xdebug.profiler_enable_trigger   on
listen                           127.0.0.1:9173

MySQL (10.5.8-MariaDB) on localhost:

port                             3306
wait_timeout                     60
interactive_timeout              28800
max_used_connections             2
datadir                          /var/lib/mysql/
socket                           /var/run/mysqld/mysqld.sock
my.cnf [PATH]                    /etc/mysql/conf.d/my.cnf

Panel de WordOps

Al final de la instalación del stack nos aparecerá el usuario y contraseña para acceder al panel de información de WordOps. Se accede por el puerto 22222, por lo que deberemos tenerlo accesible si tenemos algún tipo de firewall.

https://IP_ADDRESS:22222/

Si queremos tener un panel o sitio por el que entrar con nuestro dominio, podemos crear el certificado con Let’s Encrypt. Para ello deberemos crear un sitio (sin contenido).

wo site create example.com -le

A partir de este momento podremos acceder mediante el propio dominio.

https://example.com:22222/

En caso de no recordar la contraseña, no haberla apuntado durante la instalación o querer cambiar los datos, podemos solicitar un cambio en la seguridad.

wo secure --auth

En cualquier caso, podemos cambiar la configuración de acceso al Backend según su documentación.

Creación de un sitio WordPress

Creación simple

Ahora que tenemos todo el sistema puesto al día, vamos a crear nuestro primer sitio web. En este caso vamos a crear un sitio con el dominio (que automáticamente funcionaría con el www) y con un certificado TLS de Let’s Encrypt para que funcione de forma segura.

wo site create example.com --wp --letsencrypt --hsts

Nos devolverá la información de todos los pasos que ha seguido para la creación del sitio.

Running pre-update checks       [OK]
Setting up NGINX configuration  [Done]
Setting up webroot              [Done]
Downloading WordPress           [Done]
Setting up database             [Done]
Configuring WordPress           [OK]
Installing WordPress            [OK]
Installing plugin nginx-helper  [OK]
Testing Nginx configuration     [OK]
Reloading Nginx                 [OK]
WordPress admin user : 
WordPress admin password : 
Successfully created site http://example.com
Certificate type : domain
Validation mode : Webroot challenge
Issuing SSL cert with acme.sh   [OK]
Deploying SSL cert              [OK]
Securing WordOps backend with current cert
Adding HTTPS redirection        [OK]
Updating site url with https    [OK]
Testing Nginx configuration     [OK]
Reloading Nginx                 [OK]
Congratulations! Successfully Configured SSL on https://example.com

Aquí nos devolverá los datos de acceso (usuario y contraseña) para acceder a nuestro WordPress.

Los datos del sitio estarán en las carpetas que el sistema crea por defecto para cada sitio.

Site files              /var/www/example.com/htdocs
wp-config.php           /var/www/example.com/wp-config.php
Additional Nginx conf   /var/www/example.com/conf/nginx/
Site access/error logs  /var/www/example.com/logs

Aunque siempre tenemos la opción de recuperar la informaciónd e ese sitio haciendo una petición.

wo site info example.com

Que nos dará información del tipo de instalación aplicada, versión de PHP, rutas de acceso, situación del certificado TLS y usuarios y contraseñas de la base de datos.

Information about example.com (domain):

Nginx configuration      wp basic (enabled)
PHP Version              7.3

SSL                      enabled
SSL PROVIDER             Lets Encrypt
SSL EXPIRY DATE          89

access_log               /var/www/example.com/logs/access.log
error_log                /var/www/example.com/logs/error.log
Webroot                  /var/www/example.com

DB_NAME                  example
DB_USER                  example
DB_PASS                  example

Creación avanzada

Aunque podemos crear el sitio tal y como nos propone el sistema, podemos adaptar la configuración un poco para decirle qué parametros queremos.

En este caso le vamos a decir que instale un WordPress --wp, que lo haga con PHP 7.4 --php74 y le añada el certificado TLS con Let’s Encrypt --letsencrypt, que le instale la configuración de caché con Redis --wpredis y el plugin de Super Cache --wpsc. Además, le daremos el usuario --user=admin, correo --email=wordpress@example.com y contraseña --pass=password que queramos para la instalación.

wo site create example.com --wp --php74 --letsencrypt --hsts --wpredis --wpsc --user=admin --email=wordpress@example.com --pass=password

Nos devolverá la información de todos los pasos que ha seguido para la creación del sitio.

Adding repository for Redis, please wait…
Updating apt-cache              [OK]
Installing APT packages         [OK]
Tuning Redis configuration      [OK]
Restarting redis-server         [OK]
Running pre-update checks       [OK]
Setting up NGINX configuration  [Done]
Setting up webroot              [Done]
Downloading WordPress           [Done]
Setting up database             [Done]
Configuring WordPress           [OK]
Installing WordPress            [OK]
Installing plugin nginx-helper  [OK]
Setting plugin nginx-helper     [OK]
Installing plugin redis-cache   [OK]
Testing Nginx configuration     [OK]
Reloading Nginx                 [OK]
WordPress admin user : 
WordPress admin password : 
Configure redis-cache:  http://example.com/wp-admin/options-general.php?page=redis-cache
Object Cache:           Enable
Successfully created site http://example.com
Certificate type : subdomain
Validation mode : Webroot challenge
Issuing SSL cert with acme.sh   [OK]
Deploying SSL cert              [OK]
Adding HTTPS redirection        [OK]
Updating site url with https    [OK]
Testing Nginx configuration     [OK]
Reloading Nginx                 [OK]
Congratulations! Successfully Configured SSL on https://example.com

Creación, sin WordPress

Es posible que en algún caso necesitemos montar absolutamente todo, excepto el propio WordPress en sí, porque lo vamos a migrar de algún otro sitio.

En este caso, podemos hacer una llamada para que cree todo el sistema y el VirtualHost, pero que no haga la instalación.

wo site create example.com --wp --vhostonly --letsencrypt

Gestionando el sitio

Existen multitud de opciones a la hora de actualizar la configuración de un sitio.

Por ejemplo podemos cambiar la versión de PHP (en este caso subirla de PHP 7.3 a PHP 7.4).

wo site update example.com --php74

Lista completa de sitios

wo site list

Activar o desactivar un sitio

wo site disable example.com
wo site enable example.com

Eliminar un sitio

wo site delete

Acceder a los ficheros de un sitio

wo site cd example.com

Más opciones

Una vez creados los sitios, hay mil opciones que podemos necesitar o tener en cuenta. Algunas de las más habituales son las siguientes.

Creación de un WordPress MultiSite

En este caso tenemos dos opciones… si queremos configurarlo mediante subdominios…

wo site create example.com --wp --wpsubdom

…o con carpetas.

wo site create example.com --wp --wpsubdir

Mantenimiento del servidor

wo maintenance

Más información en la documentación.

Vaciar la caché

wo clean --all

Más información en la documentación.

Acceso FTP

Aunque todavía no hay uan forma sencilla de configurar cuentas de FTP, WordOps permite la instalación sencilla de ProFTPd y un par de comandos para la configuración de accesos.

Primero activaremos el servicio de FTP.

wo stack install --proftpd

Posteriormente crearemos el usuario para que tenga acceso a su carpeta de ficheros.

adduser --home /var/www/example.com/htdocs/ --shell /bin/false --ingroup www-data example

Y finalmente daremos permisos al usuario para que pueda modificar los ficheros.

chmod -R g+rw /var/www/example.com/htdocs

Sobre este documento

Este documento está regulado por la licencia EUPL v1.2, publicado en WP SysAdmin y creado por Javier Casares. Por favor, si utilizas este contenido en tu sitio web, tu presentación o cualquier material que distribuyas, recuerda hacer una mención a este sitio o a su autor, y teniendo que poner el material que crees bajo licencia EUPL.

Servicios de Administración de Sistemas WordPress

¿Tienes un sitio web con WordPress de alto tráfico? ¿Eres una Agencia con servidores con cPanel, Plesk u otro panel en los que mantienes WordPress para tus clientes?

Si es así y te interesa un servicio profesional de mantenimiento de infraestructura WordPress y de mejora del rendimiento de tus sitios web o los de tus clientes, contacta conmigo.