Pruebas en Ubuntu 18 y PHP 7

Última actualización: 16 de diciembre de 2020

Si quieres hacer pruebas en un entorno de desarrollo (sin necesidad de enviar los datos), puedes hacerlo sin problema. El objetivo de esta prueba es trabajar con múltiples opciones y configuraciones, con el objetivo final de que encuentres el mejor entorno para trabajar.

Requisitos

Aunque no hay unos requisitos mínimos de por sí, en las pruebas que he podido hacer me he encontrado que, al menos, se recomienda:

  • VPS (también se puede usar un entorno local)
    • 1 CPU
    • 2 GB RAM
    • 10 GB SSD
  • Ubuntu, CentOS, Debian…
    • Ubuntu 18.04 LTE
  • MySQL, MariaDB, Percona for MySQL
    • MariaDB 10.4
  • PHP
    • PHP 7.4

Hay que tener en cuenta que este ejemplo no plantea una máquina en producción, si no un ejemplo de distintos elementos y pruebas que se pueden ejecutar, contando la instalación se sistemas de caché, extensiones de PHP…

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

Además, tienes la posibilidad de crear tu VPS con la imagen de WordPress en un clic.

COLABORACIÓN

Instalación base

La instalación base plantea disponer los elementos mínimos para que el sistema funcione.

Configuración del Sistema Operativo

Lo primero que haremos será poner el sistema en hora. Para evitar problemas y teniendo en cuenta que puede ser una máquina que mande información al WordPress, lo mejor sería configurar el reloj en modo UTC de forma universal.

timedatectl set-timezone UTC
timedatectl set-ntp on

Lo siguiente que haremos es poner la máquina al día en todo su sistema. Con esto nos aseguraremos que todo esté al día y que los conflictos se reducen al mínimo.

apt -y update && apt -y upgrade && apt -y dist-upgrade && apt -y autoremove

Instalaremos algunas herramientas necesarias y habituales como curl, vim, zip o el propio git.

apt -y install software-properties-common curl vim unzip git

Instalación de la base de datos

Instalaremos MariaDB 10.4 en la prueba. En principio sirve cualquier base de datos compatible con WordPress.

curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | sudo bash -s -- --mariadb-server-version="mariadb-10.4"
apt -y update && apt -y upgrade && apt -y dist-upgrade && apt -y autoremove
apt -y install mariadb-server mariadb-client
systemctl restart mysql.service

Una vez acabada la instalación haremos una primera configuración para dejarla lista.

mysql_secure_installation

A partir de este momento el sistema nos hará una serie de preguntas y configuraremos la contraseña de root de la propia base de datos.

Enter current password for root (enter for none):
Switch to unix_socket authentication [Y/n] n
Change the root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] y
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

Reiniciaremos la base de datos para que tome todos los datos y deje el sistema listo.

systemctl restart mysql.service

Instalación de PHP

Para esta prueba instalaremos PHP 7.4. En un primer momento sólo vamos a instalar los elementos mínimos, por lo que seguramente tengamos que ampliar posteriormente con algunas extensiones. Como decía al inicio, el objetivo es probar el sistema, por lo que en este momento tiene sentido que nos de error por falta de elementos.

add-apt-repository -y ppa:ondrej/php
apt -y update && apt -y upgrade && apt -y dist-upgrade && apt -y autoremove
apt -y install php7.4 php7.4-curl php7.4-dev php7.4-fpm php7.4-mbstring php7.4-mysql php7.4-mysqlnd
apt -y install php-pear pkg-config
pecl channel-update pecl.php.net

Aunque podemos dejar la configuración de PHP como la tengamos en el sistema habitual que se ofrece a los clientes, para esta prueba haremos unos pequeños cambios.

vim /etc/php/7.4/fpm/php.ini

Y cambiaremos estas configuraciones.

max_execution_time = 60
memory_limit = 256M
post_max_size = 128M
upload_max_filesize = 128M
date.timezone = 'UTC'

Una vez finalizara la reconfiguración, reiniciaremos el servicio y lo activaremos por defecto.

systemctl stop php7.4-fpm.service
systemctl enable php7.4-fpm.service
systemctl start php7.4-fpm.service

Instalación de Node

Para que las pruebas funcionen correctamente necesitaremos algunos elementos que quizá habitualmente no estén disponibles. Entre ellos etsá NodeJS, Grunt y PhantomJS.

Primero instalamos NodeJS

cd
curl -sL https://deb.nodesource.com/setup_12.x | bash -
apt -y update && apt -y upgrade && apt -y dist-upgrade && apt -y autoremove
apt -y install nodejs

Posteriormente instalamos Grunt

npm install -g grunt

Y finalmente instalamos PhantomJS

apt -y install build-essential chrpath libssl-dev libxft-dev libfreetype6 libfreetype6-dev libfontconfig1 libfontconfig1-dev
cd
wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
tar xvjf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/share/
ln -sf /usr/local/share/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin
rm -rf phantomjs-2.1.1-linux-x86_64.tar.bz2

Finalizando la configuración

Para acabar la configuración de la máquina, haremos algunos ajustes. Para empezar, actualizaremos todo de nuevo y nos aseguramos que no haya quedado ninguna biblioteca colgada.

apt -y update && apt -y upgrade && apt -y dist-upgrade && apt -y autoremove

Y configuraremos la base de datos de pruebas que vamos a utilizar en los test. Entraremos en el servidor.

mysql -u root -p

Y crearemos una base de datos de prueba. En este caso se llamará wordpress y el usuario también será wordpress. Configura la contraseña que veas conveniente.

CREATE DATABASE wordpress CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin;
GRANT ALL ON wordpress.* TO 'wordpress'@'localhost' IDENTIFIED BY '__PASSWORD__';
GRANT ALL ON wordpress.* TO 'wordpress'@'127.0.0.1' IDENTIFIED BY '__PASSWORD__';
FLUSH PRIVILEGES;
quit

A partir de este momento tenemos toda la base para poder hacer nuestro primer test.

Instalación del PHPUnit test

Seguiremos las instrucciones que hemos tenido previamente. Por defecto haremos las pruebas en la carpeta /tmp/.

cd /home/
git clone https://github.com/WordPress/phpunit-test-runner.git
cd /home/phpunit-test-runner/
cp .env.default .env

Y estableceremos los contenidos del entorno con los datos de acceso que hemos creado previamente.

vim .env

Recuerda incluir la carpeta donde está instalado el software y donde estará instalado el WordPress, además de los datos de acceso a la base de datos.

export WPT_PREPARE_DIR=/home/wp-test-runner
export WPT_TEST_DIR=/home/wp-test-runner
export WPT_REPORT_API_KEY=
export WPT_REPORT_URL=
export WPT_DB_NAME=wordpress
export WPT_DB_USER=wordpress
export WPT_DB_PASSWORD=__PASSWORD__
export WPT_DB_HOST=localhost
export WPT_TABLE_PREFIX=${WPT_TABLE_PREFIX-wptests_}
export WPT_PHP_EXECUTABLE=${WPT_PHP_EXECUTABLE-php}
WPT_PHPUNIT_CMD=
WPT_RM_TEST_DIR_CMD=
export WPT_SSH_CONNECT=
export WPT_SSH_OPTIONS=
export WPT_SSH_PRIVATE_KEY_BASE64=
export WPT_DEBUG=

Preparando el entorno

Antes de hacer la primera prueba, pondremos al día todo. Este proceso se puede ejecutar antes de hacer cada prueba en este entorno si queremos tenerlo al día, aunque dependerá más si es en un entorno en producción.

apt -y update && apt -y upgrade && apt -y dist-upgrade && apt -y autoremove
cd /home/phpunit-test-runner/
git pull
npm update
source .env

Preparando la prueba

Ahora que tenemos el entorno listo, podemos ejecutar la preparación de la prueba.

cd /tmp/phpunit-test-runner/
php prepare.php

El sistema ejecutará una larga serie de instalaciones, configuraciones y compilaciones de distintos elementos para poder preparar la prueba. Si salen avisos y warnings no deberías preocuparte mucho, ya que es bastante normal. Al fnal del proceso te avisará si necesita algo que no tiene. En principio, debería quedar algo tal que esto:

Done.
Replacing variables in wp-tests-config.php
Success: Prepared environment.

Si el entorno ha quedado preparado, el siguiente paso es hacer una primera prueba.

Ejecutando la prueba

Ahora que ya tenemos el entorno listo, vamos a por la prueba. Para ello ejecutaremos el fichero que la realizará.

cd /home/phpunit-test-runner/
php test.php

¿Qué significa los símbolos?

  • .: Cada punto significa que la prueba ha sido pasada correctamente.
  • S: Significa que la prueba se ha saltado. Suele ser porque estas pruebas sólo son válidas en determinadas configuraciones.
  • F: Significa que la prueba ha fallado. Al final aparece información del porqué.
  • E: Significa que la prueba ha fallado debido a un error de PHP, que puede ser error, warning o notice.
  • I: Significa que la prueba se ha marcado como incompleta.

Si has seguido todos los pasos hasta este momento es muy probable que la prueba que has ejecutado falle bastante (por ejemplo, porque por defecto no podrá hacer el tratamiento de imágenes). Pero no pasa nada, como he comentado, esto es un ejemplo para comprobar y verificar el funcionamiento.

Creando un informe

Aunque la prueba haya fallado, podemos generar el informe y (si se diera el caso) enviarlo. Pero primero lo primero, que es la creación de los informes. Para ello ejecutaremos el fichero que lo hace.

cd /home/phpunit-test-runner/
php report.php

Este sistema generará los dos ficheros que se mandan como informes.

En el primero de ellos podemos ver la información sobre nuestro entorno.

cat /home/wp-test-runner/env.json

El contenido de este fichero es algo similar a esto:

{
    "php_version": "7.4.5",
    "php_modules": {
        "bcmath": false,
        "curl": "7.4.5",
        "filter": "7.4.5",
        "gd": false,
        "libsodium": false,
        "mcrypt": false,
        "mod_xml": false,
        "mysqli": "7.4.5",
        "imagick": false,
        "pcre": "7.4.5",
        "xml": "7.4.5",
        "xmlreader": "7.4.5",
        "zlib": "7.4.5"
    },
    "system_utils": {
        "curl": "7.58.0 (x86_64-pc-linux-gnu) libcurl\/7.58.0 OpenSSL\/1.1.1g zlib\/1.2.11 libidn2\/2.3.0 libpsl\/0.19.1 (+libidn2\/2.0.4) nghttp2\/1.30.0 librtmp\/2.3",
        "ghostscript": "",
        "imagemagick": false,
        "openssl": "1.1.1g  21 Apr 2020"
    },
    "mysql_version": "mysql  Ver 15.1 Distrib 10.4.12-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2",
    "os_name": "Linux",
    "os_version": "4.15.0-20-generic"
}

Como se puede comprobar, entre los elementos más detacados están las extensiones que habitualmente se utilizan en WordPress y algunas utilidades que por norma general también son últiles.

El otro fichero es el que incluye todas las pruebas que se realizan (más de 10.000) dando información del tiempo que tandan en ejecutarse, problemas que han podido surgir…

cat /home/wp-test-runner/junit.xml

Limpiando el entorno para otras pruebas

Ahora que ya tenemos las pruebas funcionando, lo que nos queda por hacer es eliminar todos los ficheros que se han creado para poder volver a comenzar. Para ello ejecutaremos el siguiente comando:

cd /home/phpunit-test-runner/
php cleanup.php

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.