To create this dev environment I’ll be using docker-compose in order to manage the whole environment with a single command. This environment can be run locally or remotely as only a shell connection is required.

A docker-compose.yaml file will be created to define all de system dependencies the application. Depending on the system architecture this file can be used to deploy in production, but usually this is not possible if we are using Kubernetes or Aws ECS in production.

In this example a simple Symfony app, that uses MySql and Elasticseach will be used.

Installing docker in Ubuntu

Using docker-compose

Is quite…


One of the usual questions that must be solved on any web project is the user auth management. When using a micoservices based solution this task becomes more complex due the distributed workload.

Not trying to cover all the options and neither going too deep, this kind of requirements can be solved in these ways:

  • JWT. The service that takes care of authentication checks the user credentials and generates a self-signed token that contains the relevant user information. …


Una de las cuestiones que siempre hay que resolver en cualquier proyecto web es la gestión de la autentificación de los usuarios. En el caso de estar usando una solución basada en microservicios el problema se vuelve mas complejo dada la naturaleza distribuida de las tareas.

Sin cubrir todas las opciones ni entrar en demasiado detalle, se puede resolver este problema de las siguientes maneras:

  • JWT. El servicio encargado de la autentificación valida las credenciales generando un token auto-firmado que contiene la información que consideramos relevante del usuario. …


Para crear el entorno de desarrollo utilizaré docker-compose para poder levantar todo el entorno en un solo comando. Ese entorno lo podremos levantar tanto en la máquina local como en una máquina remota de desarrollo.

En este fichero será donde se definan las dependencias de sistema de nuestra aplicación. Según como sea nuestra arquitectura podremos usar ese mismo fichero con unas pocas modificaciones para desplegar en produccion.

En este ejemplo vamos a suponer que usamos una aplicación Symfony junto con MySQL y Elasticsearch.

Instalar Docker en Ubuntu 16.04

Usando docker-compose

Es muy probable que nuestro proyecto utilize algún servicio externo como MySql…


En esta serie de artículos pretendo exponer como utilizo docker en mis proyectos, comenzando desde los entornos de desarrollo con sus correspondientes dependencias externas (base de datos u otros servicios), entornos de testing con test unitarios, funcionales y generación de documentación, así como el despliegue en entornos de producción.

Por qué Docker.

Durante el proceso de desarrollo de aplicaciones con cierta complejidad uno de los problemas a resolver es el de la gestión de dependencias, pero no solo a nivel aplicación (vendors, bundles o librerías), si no a nivel sistema operativo(mod_rewrite, imagemagick…) o incluso a nivel infraestructura (MySql, Redis, Elasticsearch).

Gestionar esas dependencias…


Varnish es un proxy cache que acelera drásticamente la entrega de contenido a nuestros visitantes entre otras funciones. Además permite balancear carga entre varios backends y comprobar la salud de estos de manera que sólo se envíe peticiones aquellos que están en condiciones de procesar las peticiones. En esencia consiste en un almacenamiento clave-valor. Cada vez que recibe una petición comprueba calcula la clave asociada a esa url, comprueba si esa clave esta en memoria y es válida y entrega el contenido. En caso contrario lo pide al backend.

La información necesaria sobre el proceso de instalación y configuración inicial…


Normalmente cuando se afronta uno proyecto web, uno de los objetvos es conseguir urls “limpias” o “SEO friendly”. Para ello se suele buscar reducir al máximo el uso de parámetros o segmentos que no aporten información en las urls.

Si la estructura de urls tiene patrones facilmente separables (por ejemplo: /blog, /clientes, /productos) es fácil de conseguir. Pero si esa división de tipologías no existe, puede resultar mas complicado.

El sistema de enrutado de Symfony

El componente Routing (más info) de Symfony es el encarfado de enviar la petición que recibe nuestra aplicación al controlador y acción deseada. Cuando nuestra aplicación reciba una petición, será este…


¿Que es ESI?

ESI es el acrónimo es Edge Side Includes. Consiste en un lenguaje de marcado que permite “ensamblar” trozos de contendo web. Es una especficación envíada al W3C en 2001 pero que todavía no se ha aprobado. Sin embargo es una característica disponible en múltiples Proxy como por ejemplo:

Esta especificación nos permite dividir una página en varios trozos en el lado de servidor y entregar al usuario el contenido ensablado de manera transparente. Esto lo podemos usar para por ejemplo:

  • Repartir la carga de renderizado en varias máquinas, dejando que el…

Carlos Compains

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store