Desarrollar aplicaciones con WordPress (I): montando el entorno de desarrollo

wordpress-website-development

De cara a desarrollar aplicaciones complejas, puede que utilizar WordPress no sea la opción ideal. Tiene algunos inconvenientes, como el hecho de ser poco estricto con los estándares de programación para terceros (su código, de hecho es bastante anárquico), la migración de un sistema a otro es algo engorrosa, y hay opciones más elegantes desde el punto de vista de la programación como Drupal (basado en Symfony, lo que le aporta estándares más coherentes), Ruby On Rails o Django.

Sin embargo, también tiene algunas ventajas que nos pueden decantar a elegir este “framework” para desarrollar una aplicación:

  • Fácil de usar.
  • Fácil de administrar (un punto a favor si el sitio lo va  a administrar alguien con pocos conocimientos técnicos).
  • Excelente abanico de plugins.
  • Desarrollo de extensiones según patrón MVC.

Además WordPress ha crecido últimamente a pasos agigantados, como puede verse en el siguiente gráfico que muestra Google Trends:

wordpress-joomla-drupal-internacional
Sea cual sea el motivo por el que quieras empezar a desarrollar un proyecto en WordPress, voy a intentar condensar en unos pocos artículos lo básico para comenzar a hacerlo. La verdad es que pese a que hay muchísimos manuales para usuarios de esta plataforma, no hay tanta documentación para desarrolladores.

Creando el entorno para comenzar a desarrollar

Lo ideal para desarrollar un proyecto en wordpress es disponer de 3 entornos: desarrollo, pruebas y producción. Otros flujos de trabajo requieren más entornos (por ejemplo, integración), pero éstos tres son los fundamentales.

El entorno de desarrollo es aquel en el que realizamos el “trabajo diario” de desarrollo. Aunque puede habilitarse una máquina de desarrollo para este fin, en principio podemos montarlo en nuestro ordenador local o portátil. Tampoco es necesario que la plataforma del entorno sea similar a la de producción, si bien es recomendable. Pero en ocasiones no hay más remedio que trabajar en un ordenador con Windows para desarrollar un proyecto cuyo entorno de producción es Linux. Y en ese caso, el servidor de pruebas será de gran ayuda.

Cuando el programador ha probado su solución en su entorno de desarrollo, lo prepara para implementarlo en el servidor de pruebas. Este segundo nivel es un entorno que hace de puente entre el servidor de desarrollo y el de producción. Este segundo entorno si es necesario que se monte sobre una plataforma similar a la de producción.

Una vez se realizan todas las pruebas en el entorno de pruebas, que garantizan que no habrá problemas de funcionamiento en el servidor de producción, se realiza el “paso a producción”.

Este es el enfoque tradicional para desarrollar, si bien últimamente se está popularizando el uso de máquinas virtuales para montar diferentes entornos.

Por qué tantos entornos y procesos

Es cierto que este flujo de trabajo parece ir en contra del tiempo de desarrollo, sin embargo, sus ventajas superan con creces la sobrecarga. En proyectos grandes, permite reducir el tiempo del paso a producción, lo que permite evitar esperas innecesarias a los usuarios. En segundo lugar, contamos con más privacidad en el desarrollo, ya que acotamos el acceso a cada entorno a las personas a las que únicamente interesa. También mejora la productividad, ya que el desarrollo en un ordenador local es mucho más ágil. Y además, de cara a realizar pruebas, podemos ir modificando los contenidos del CMS para probar nuestro proyecto con todos ellos.

Montando un entorno de desarrollo

WordPress está basado en la pila LAMP, lo que quiere decir que para ejecutarlo en una máquina debemos tener Apache, MySQL y PHP. Lo cierto es que hay alternativas tanto para Apache (IIS, nginx) como para MySQL (MariaDB).

Instalación de Apache2

sudo apt-get install apache2

Instalando MySQL

sudo apt-get install mysql-server mysql-clientAl

sk@server-_0012

Al instalar MySQL, nos pedirá una contraseña para el usuario root de la base de datos.

Una vez instalada la base de datos, podemos verificar que funciona correctamente así:

sudo systemctl status mysql

Ahora ha llegado el momento de instalar PHP:

sudo apt-get install php5 php5-mysql libapache2-mod-php5

Sólo queda probar que funciona Apache y éste interpreta perfectamente el código PHP:

sudo nano /var/www/html/testphp.php

Añadimos las siguientes líneas:

<?php
phpinfo();
?>
Ya sólo queda reiniciar el servicio Apache:
sudo systemctl restart apache2
Para la gestión de la base de datos, es recomendable contar con un Front End como PhpMyAdmin:
sudo apt-get install phpmyadmin
Si es importante, una vez se ha montado el entorno de desarrollo, habilitar la opción de depuración de PHP. El nivel de errores de PHP se establece en el fichero php.ini. Se modificará la siguiente línea:
error_reporting=E_ALL & E_STRICT
## Instalar WordPress con WP-CLI En este tutorial vamos a utilizar un relativamente nuevo proyecto llamado WP-CLI. WP-CLI es un conjunto de herramientas de línea de comandos que pueden ayudarte a administrar tus instalaciones WordPress. Por ejemplo, puedes actualizar plugins o configurar su instalación en varios hosts, sin necesidad de utilizar un navegador web. Si no tienes WP-CLI instalado puedes seguir [las instrucciones de instalación aquí](http://wp-cli.org/). Así que vamos a descargar e instalar WordPress usando WP-CLI.
--dbname wp config núcleo = {TU NOMBRE DE BASE DE DATOS} --dbuser = {SU NOMBRE DE USUARIO BASE DE DATOS} --dbpass = {SU CONTRASEÑA BASE DE DATOS}
núcleo wp instalar --url = {su nombre de dominio} --title = {EL TÍTULO DE SU SITIO} --admin_user = {su nombre de usuario} --admin_password = {SU CONTRASEÑA} --admin_email = {Tu email}

install-wordpress-cli

Lo siguiente que necesitamos para hacer nuestro WordPress instalar un repositorio Git. Esto es tan fácil como ejecutar lo siguiente:

init git

Ahora mismo tu repositorio git está vacío ya que no hemos añadido ninguno de nuestros archivos de WordPress. Eso es porque hay ciertos archivos y carpetas que no queremos agregar el repositorio Git. Ten en cuenta que algunas carpetas pueden cambiar a menudo (como plugins y templates: vamos a estar buscando la forma de gestionar plugins y templates fuera de Git en un futuro post) o algunos de tus archivos podrían contener información privada (como la contraseña de la base de datos).

Git nos proporciona un mecanismo para resolver este problema. Mediante la creación de un archivo .gitignore es posible especificar qué archivos y carpetas se quieren excluir de Git. Vamos a hacer esto mediante la creación y la edición del archivo .gitignore:

touch .gitignore
nano .gitignore

Podemos añadir reglas al archivo .gitignore para decirle a Git que ignore ciertos archivos y carpetas. Añade las siguientes reglas en el fichero (las líneas que comienzan con # son comentarios):

# Ignorar wp-config.php y .htaccess
wp-config.php
.htaccess

# Omitir el directorio wp-content
/ wp-content

Un inciso: activar ahora, para que no se nos olvide, la depuración en WordPress a través de su archivo wp-config.php:

WP_DEBUG=true

Ahora puedes añadir ciertos temas y plugins a wordpress e indicar su ruta en el fichero para crear una regla

# No ignore plugins dir, pero ignoran todo dentro
! / wp-content / plugins
/ wp-content / plugins / *

Imagina, por ejemplo, que no quieres ignorar el plugin Akismet:

# No ignore el plugin Akismet
! / wp-content / plugins / Akismet

¡Pues ya está! Guarda el archivo .gitignore.

Ahora estamos listos para añadir el resto de nuestros archivos a Git. Para ello, los añadimos alrepositorio y hacemos nuestro primer commit:

add git.
git commit -m "confirmación inicial"

Hasta el siguiente artículo 🙂

Consejos

  • Utiliza .gitignore para excluir de Git algunos ficheros con información privada como usuarios y contraseñas.
  • Excluye de GIT completamente la carpeta wp-content / ya que los ficheros de esta carpeta los mantiene el usuario, no el desarrollador. Estos ficheros se traspasan a mano.
  • Como la base de datos no se sube al repositorio, deberás utilziar plugins como WP Migrate DB Pro para realziar esta tarea.
  • Teniendo un repositorio GIT, parece sensato desactivar las actualizaciones automáticas de WordPress, ya que todo fichero que cambie debe ser confirmado a la hora de ser actualizado en el repositorio.