A principios de año escribí sobre la contenedorización de aplicaciones escritas en varias tecnologías de desarrollo que se comunican con Couchbase Server. Por ejemplo, había escrito sobre el despliegue de una aplicación Aplicación Golang con Docker, a Aplicación Java con Dockery un Aplicación Node.js con Docker. Esta vez vamos a echar un vistazo a cómo desplegar un contenedor PHP que se comunica con un contenedor Couchbase Server.

Vamos a crear un nodo Couchbase aprovisionado automáticamente y una aplicación PHP simplista que escriba y lea datos del nodo NoSQL de Couchbase.

Definamos primero la estructura del proyecto que representará a ambos contenedores:

Cada contenedor tendrá su propio Dockerfile que contendrá la información del plano para nuestra configuración. En docker-compose.yml creará y desplegará los contenedores utilizando la información definida sobre puertos y variables de entorno.

Contenedor de la aplicación PHP

Dado que este es un tutorial de PHP, comenzaremos por construir nuestra aplicación PHP simple y contenerizarla. Debido a que queremos automatizar el despliegue, desarrollaremos nuestra aplicación php.ini y copiarlo durante el proceso de compilación.

Antes de llegar a esa parte, vamos a añadir algo de código a la sección index.php file:

En el código anterior estamos diciendo que cualquier dato impreso será en formato JSON. Estamos estableciendo una conexión con un cluster de Couchbase y abriendo un Bucket particular en ese cluster. El problema es que estamos usando variables de entorno para definir el cluster y el Bucket. Estas se establecerán en el proceso de despliegue.

Con la aplicación conectada, se intentará obtener un documento de Couchbase por clave. Si ese documento no existe, será creado y luego obtenido. El documento obtenido se imprimirá como resultado.

Como he mencionado antes, se trata de una aplicación sencilla, nada del otro mundo. Ahora podemos centrarnos en el aspecto Docker de esta aplicación.

Abra el Dockerfile e incluyen lo siguiente:

Lo anterior dice que vamos a usar una imagen de Apache. Si alguna vez has usado Couchbase con PHP, lo que viene a continuación te resultará muy familiar. Toda la recopilación de dependencias fue tomada directamente del archivo Documentación PHP de Couchbase. En RUN significa que las dependencias se recopilarán en tiempo de compilación, no en tiempo de ejecución.

Con las dependencias disponibles, el php.ini se copia en la imagen, así como el archivo index.php archivo. Esto nos lleva al php.ini archivo.

En lugar de pegar un largo y desagradable trozo de configuración, lo mejor es que te descargues el archivo php.ini del archivo oficial Repositorio PHP GitHub. El único cambio que introducimos se refiere a las extensiones. Según el Documentación PHP de Couchbasetenemos que añadir lo siguiente:

Busca la sección de extensiones y añádela allí.

En este punto la imagen PHP puede ser construida y podemos desplegarla como un contenedor. Sin embargo, vamos a planificar con antelación y crear un archivo Compose.

Abra el docker-compose.yml e incluya lo siguiente:

Lo anterior define un servicio llamado php con mapeos de puertos y variables de entorno. Estas variables coinciden con las que tenemos en la aplicación PHP. La imagen se construirá a partir del Dockerfile que se encuentra en el proyecto PHP.

Si ajusta el COUCHBASE_HOST a algo remoto, estamos listos, pero para este ejemplo vamos a utilizar otro contenedor.

Contenedorización de Couchbase Server

El objetivo de contenerizar Couchbase es que vamos a automatizarlo. Ya existe una imagen Docker para Couchbase, pero no está pre-aprovisionada, lo que puede llevar tiempo durante el proceso de despliegue.

Abra el Dockerfile el proyecto Couchbase e incluya lo siguiente:

Lo anterior dice que vamos a utilizar la imagen oficial de Couchbase, pero vamos a copiar un script en ella y luego ejecutarlo en tiempo de ejecución. Este script aprovisionará la instancia automáticamente.

Abra el configure.sh e incluya los siguientes comandos:

Couchbase Server tiene su propia API RESTful que estamos tratando de consumir con un montón de comandos cURL. Estamos definiendo cuotas de memoria, qué servicios existen en el nodo e información de autenticación.

Observe que muchos de los comandos incluyen variables de entorno como $COUCHBASE_ADMINISTRATOR_USERNAME. Esto se debe a que vamos a pasarlos a través de la función docker-compose.yml igual que hicimos con la aplicación PHP.

Abra el docker-compose.yml y que tenga el siguiente aspecto:

Hemos incluido otro servicio llamado couchbase con un montón de asignaciones de puertos y variables de entorno. Hay algo importante a tener en cuenta aquí. Recuerde que el COUCHBASE_HOST en la sección PHP? Tiene un host que debe coincidir con el nombre de servicio de nuestra base de datos que es couchbase.

Despliegue de contenedores con Docker

Con la base en su lugar, es hora de desplegar los dos contenedores para que tengamos un conjunto funcional de microservicios.

Desde la CLI de Docker, ejecute lo siguiente:

Los comandos anteriores construirán y desplegarán cada una de las imágenes con los puertos definidos en el archivo Compose. Desde el navegador web, http://localhost:8091 debería llevarte al dashboard de Couchbase Server, y http://localhost:8080 debería llevarte a tu aplicación PHP.

Si tiene éxito, debería ver la información guardada en la base de datos y mostrada en la pantalla.

Conclusión

Acabas de ver cómo contenerizar y desplegar una aplicación PHP que se comunica con un contenedor NoSQL Couchbase. Mientras que nuestra elección de aplicación era simple, se puede extender fácilmente a algo más complicado usando cualquiera de los frameworks PHP disponibles.

Esta misma guía puede verse con Node.js, Golangy Java. Si quieres aprender más sobre la contenedorización de Couchbase Server, he escrito una versión más completa aquí.

Para obtener más información sobre el SDK PHP de Couchbase, consulte la página Portal para desarrolladores de Couchbase.

Autor

Publicado por Nic Raboy, Defensor del Desarrollador, Couchbase

Nic Raboy es un defensor de las tecnologías modernas de desarrollo web y móvil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y móvil más fácil de entender.

1 Comentarios

  1. enlace2qaiser enero 13, 2021 a 1:28 pm

    Es demasiado viejo, ¿Podemos tener sdk 3.0?

Dejar una respuesta