Introducción a Pantheon

04/11/2020
Pantheon Logo

¿Qué es Pantheon?

Pongámonos en el siguiente caso: somos una agencia de desarrollo de software, soluciones web y/o marketing digital y estamos especializadas en dos de los CMS más populares y usados en el mundo, esto es Drupal y Wordpress. Necesitamos un proveedor de hosting rápido, eficaz, confiable, seguro y sencillo para sacar el mayor partido a nuestros sitios web y por tanto a nuestro negocio. Esto es Pantheon.

Pantheon es una plataforma de Hosting y WebOps especializada y diseñada para alojar sitios web desarrollados con los CMS Drupal y Wordpress. Está pensada tanto para uso particular como empresarial, por tanto nos ofrece un nivel muy confiable de seguridad, una infraestructura escalable y una red de entrega de contenidos muy rápida. Asimismo, proporciona al usuario operador del sistema un workflow ágil y sencillo para realizar todas las tareas WebOps en la instalación, despliegue y mantenimiento de los sitios web, como veremos a continuación.

Características principales y workflow

Las características y funcionalidades de Pantheon son muchas, gracias a la versatilidad y flexibilidad de la plataforma. Aquí veremos el workflow de Pantheon y las principales características.

Sitios y entornos

Pantheon se estructura en sitios y entornos, es decir, cada cuenta particular o cuenta de organización dispone de determinados sitios web que están alojados bajo una única interfaz de gestión. A su vez, cada sitio web dispone de tres entornos, en cada cual está instalado dicho sitio web pero en sus diferentes versiones:

  • DEV: es el entorno donde se suben los desarrollos que se implementan y posee un repositorio de Github único. Este entorno se correspondería con el entorno de integración continua en el ecosistema clásico de desarrollo.
  • TEST: es el entorno destinado para ser una copia del entorno de producción en donde probar los desarrollos y cambios realizados. Se correspondería con el entorno de preproducción.
  • LIVE: es el entorno abierto y accesible para cualquier usuario, es decir, es el entorno de producción.

También existe el modo Multidev, que permite crear distintos entornos de desarrollo de forma independiente, incluyendo base de datos y ficheros, para que luego sean fusionados los cambios de código en el maestro.

Workflow de desarrollo

Podemos resumir el workflow de desarrollo en dos partes: despliegue de desarrollos en código y clonado de entornos.

Despliegue de desarrollos en código

Cada sitio web en Pantheon dispone de un repositorio de github único. Este repositorio está conectado al entorno de DEV y lo podemos clonar para trabajar en los desarrollos, de manera que cuando realizamos un desarrollo, podemos subir los cambios al mismo, que se verán reflejados en el entorno de DEV.

Una vez que los cambios son aplicados en el entorno de DEV estarán disponibles para ser aplicados en el entorno de TEST. Del mismo modo, cuando se encuentren en TEST estarán disponibles para ser aplicados en LIVE, completando así el workflow de desarrollo.

También existe el ‘custom upstream’, que consiste en la sincronización con un repositorio externo de Github, el cual está conectado a uno o más sitios de la organización, de manera que cuando subimos un cambio al mismo, dicho cambio estará disponible para ser incluido en el entorno de DEV de los sitios.

Pantheon también permite subir cambios a través de SFTP, así como conectarnos mediante este protocolo a los distintos entornos de cada sitio.

Pantheon Interface

Clonado de entornos

Con un solo click, Pantheon permite clonar tanto la base de datos como los ficheros multimedia entre entornos. Esta operación está destinada sobre todo a actualizar los contenidos en la dirección LIVE -> TEST -> DEV para tener sincronizados todos los entornos y poder trabajar en los desarrollos con la información más actualizada posible.

Pantheon - Clonado de entornos

Podemos resumir el workflow de desarrollo mediante la siguiente infografía:

Pantheon - Infografía resumen

Backups

Pantheon dispone de un sistema de gestión de backups mediante el cual podemos realizar backups de cada entorno de los diferentes sitios, bien de manera manual o bien mediante una tarea programada.

Pantheon Backups

Terminus

Basándome en mi experiencia de trabajo con Pantheon, me ha parecido conveniente dedicar un apartado en exclusiva a Terminus.

Terminus es una herramienta de línea de comandos que proporciona Pantheon, y que sirve para realizar prácticamente todas las operaciones que se pueden practicar sobre los sitios web y sus diferentes entornos en Pantheon. Algunas de las principales son:

  • Create a new site
  • Create and delete Multidev environments
  • Clone one environment to another
  • Check for and apply upstream updates
  • Deploy code from one environment to another
  • Run Drush and WP-CLI commands

Su instalación es muy sencilla con Composer:

composer require pantheon-systems/terminus

Aunque hay varios métodos para instalarlo en los sistemas que soporta, es decir macOS, Linux y Windows, y que podemos encontrar en la documentación de instalación.

Por poner un par de ejemplos prácticos de su uso, si deseo limpiar la caché de Drupal de un entorno específico de un sitio web, bastaría con escribir en una terminal:

terminus remote:drush <site>.<env> -- cr

O si quiero automatizar un proceso que conlleva muchas operaciones sobre el sitio web, podría crear un script en bash repleto de comandos en Terminus que las realicen, como veremos en el siguiente apartado.

Automatización en Pantheon

Otra de las características a destacar de Pantheon es su potencia a la hora de automatizar tareas. Aunque en Pantheon podemos hacer casi todo desde la interfaz de gestión de la plataforma, la automatización de tareas permite realizar muchas operaciones necesarias en el workflow de manera más rápida y sencilla, y sobre todo minimizando la propensión a errores que conlleva su realización manual.

Por destacar algunos de los mecanismos que posee Pantheon para tal fin, tenemos los siguientes:

Ficheros de configuración YML de Pantheon y Quicksilver

Este tipo de ficheros, que están versionados en nuestro repositorio, y que pueden ser diferentes para cada entorno, permiten configurar opciones estáticas, como puede ser la versión de PHP, y acciones dinámicas, a través de la integración con Quicksilver Platform Hooks, como acciones a realizar cuando se ejecuta un determinado workflow.

Por ejemplo, configurando el fichero pantheon.upstream.yml de la siguiente manera:

php_version: 7.3

workflows:
 deploy_product:
   after:
     - type: webphp
       description: Install drupal with the Drupalera profile after installation
       script: web/private/scripts/site_install.php

En este caso cuando instalemos por primera vez un sitio, se creará con la versión 7.3 de PHP y además como hemos usado el hook de Quicksilver ‘deploy_product’, después de la instalación se ejecutará el fichero site_install.php con el código que previamente hayamos definido en el mismo.

Terminus y bash scripting

Otra forma de automatizar tareas en Pantheon y hacer un workflow más sencillo y eficiente es la implementación de scripts en bash con comandos de Terminus, sobre todo si son tareas repetitivas o que siempre se suceden de la misma manera.

Veámoslo con un ejemplo; si queremos realizar un backup para todos los sitios de nuestra organización, podemos implementar el siguiente script, que lo realizará de manera automática y sencilla:

#!/bin/bash

# Exit on error
set -e

# Stash org UUID
ORG_UUID="722c5f3b-....-6c8a"

# Stash list of all Pantheon sites in the org
PANTHEON_SITES="$(terminus org:site:list -n ${ORG_UUID} --format=list --field=Name)"

# Loop through each site in the list
while read -r PANTHEON_SITE_NAME; do
    # Check if the site is frozen
    IS_FROZEN="$(terminus site:info $PANTHEON_SITE_NAME --field=frozen)"

    # If the site is frozen
    if [[ "1" == "${IS_FROZEN}" ]]
    then
        # Then skip it
        echo -e "Skipping a backup of the site '$PANTHEON_SITE_NAME' because it is frozen...\n"
    else
        # Otherwise create a backup of the live environment of the site
        echo -e "Creating a backup of the live environment for the site '$PANTHEON_SITE_NAME'...\n"
        terminus backup:create $PANTHEON_SITE_NAME.live
    fi
done <<< "$PANTHEON_SITES"

Drupalera y Pantheon

Desde Drupalera podemos aportar la experiencia de haber trabajado con una gran agencia para la migración a Drupal sobre Pantheon de múltiples sitios de marca, con resultados muy positivos en todos los sentidos, tanto a nivel de infraestructura, como de flujo de procesos y rendimiento de los sitios en general.

En Drupalera, las características y funcionalidades de Pantheon nos han dado soporte para la automatización de procesos, tanto en el trabajo continuo del desarrollo, como en los procesos de despliegues entre entornos y su posterior mantenimiento. Mediante el desarrollo de scripts propios y del propio ecosistema de gestión de Pantheon, hemos conseguido automatizar dichos procesos, lo que nos ha dado como resultado la minimización de errores y poder tener totalmente controlados y actualizados los múltiples sitios que en paralelo hemos desarrollado y mantenemos, de una manera ordenada, sencilla y eficaz.

Referencias