Implantación de Aplicaciones WEb

(2017-2018)

José Domingo Muñoz Rodríguez

Theme by: reveal.js

Objetivo del módulo

  • Primera aproximación: Instalar, configurar y administrar aplicaciones web en servidores.

El objetivo anterior no es suficiente para alcanzar las destrezas que tiene que poseer un administrador de sistemas.

  • OBJETIVO: Profundizar en los procesos que nos permiten la implantación o despliegue de aplicaciones web en la actualidad.

¿Qué necesitamos para empezar?

  • Conocer la evolución de internet
  • En especial, conocer la www
  • ¿Qué es una aplicación web?
  • Arquitectura de servidores web

Aplicaciones web

Según la Wikipedia: Herramientas que los usuarios pueden utilizar accediendo a un servidor web a través de Internet o de una intranet mediante un navegador.

  • HTTP
  • HTML

Lenguajes de programación

  • En el servidor: php, java, python, ruby, node.js
  • En el cliente: javascript,...

Desarrollo de aplicaciones web

  • Específicas: Son desarrolladas para gestionar un problema específico. En la actualidad en el desarrollo de aplicaciones web se utilizan framework: symfony, django, RoR,...
  • CMS: Sistema de gestión de contenido. Son aplicaciones desarrolladas por un tercero. Ejemplos: blogs, portales, wiki, comercio electrónico, ... Las más conocidas: wordpress, joomla, mediawiki, prestashop,...

Despliegue de aplicaciones web

Poner un proyecto de software en marcha comprende más cosas que desarrollar código. El software es algo vivo, normalmente una vez que se pone online o se entrega al cliente se sigue desarrollando y generando nuevas versiones. En la mayor parte de las empresas, la puesta en producción de una nueva versión es un momento crítico por las incertidumbres que genera. Dentro de las empresas de IT hay dos grupos marcados que creen tener obje- tivos distintos, desarrollo (dev) y sistemas (ops). Cambiar la mentalidad de estos grupos, automatizar todas las tareas posibles y establecer políticas de calidad y control claras son fundamentales para que el proceso de trasladar valor a los clientes (implementar cambios) sea un proceso frecuente, sencillo y seguro.

Entornos

  • Desarrollo
  • Producción
  • Pruebas

Entornos

En el ciclo de vida del software hay 3 etapas claras: desarrollo, pruebas y producción.

  • Desarrollo: entorno donde el equipo de desarrollo crea el software, normalmente es su propio PC, que ellos suelen denominar "local". Se suelen realizar muchos cambios al día, del orden de decenas o incluso cientos. También es común ver entornos de desarrollo compartidos entre miembros del equipo de desarrollo.

Entornos

  • Pruebas: Se configura prácticamente igual al de producción y sirve para validar cambios e intentar reproducir los errores de producción.

Entornos

  • Producción: es el entorno donde se ejecutan las aplicaciones y pueden usarlas los clientes finales. Normalmente este entorno suele ser, al menos, un servidor dedicado, si no un cluster, y lo normal es que tenga un sistema operativo diferente al entorno de desarrollo e incluso una arquitectura diferente. Debe permanecer estable. Suele estar gestionado por el equipo de Sistemas.

Flujos de trabajos

  • Tradicional
  • Burocrática
  • Ágil

Flujos de trabajos: Tradicional

  • No hay nada por escrito.
  • Los propios desarrolladores se encargan de desplegar los cambios en los servidores de producción.
  • Normalmente no hay entornos diferenciados de desarrollo, pruebas y producción.

Flujos de trabajos: Tradicional

  • Como mucho existe un servidor de desarrollo que se usa poco y generalmente se emplean los ordenadores de los desarrolladores como entorno de prueba.
  • Cada vez que se aplica un cambio es posible que haya nerviosismo y aparezcan nuevos cambios precipitados para corregir algún bug.
  • No se suele actualizar el servidor de producción para que no se produzcan errores en la aplicación.

Flujos de trabajos: Tradicional

"Si funciona no lo toques!!!"

"Pues en mi local funciona"

Flujos de trabajos: Burocrática

  • En el entorno de desarrollo se despliega cada hora y se utiliza para que los cambios se aprueben internamente.
  • En el entorno de pruebas se despliega una vez al día y se emplea como sistema de validación por parte del usuario Final, en el que verifica la funcionalidad, usabilidad,etc.
  • En el entono de producción se despliega una vez a la semana, siempre el mismo día y a la misma hora. Siempre se hace el despliegue por una persona autorizada y se exige que el software haya pasado por los entornos de desarrollo y pruebas. Por lo tanto, los cambios tardan en llegar al usuario Fínal cerca de una semana.

Flujos de trabajos: Burocrática

  • El Departamento de Sistemas es el responsable de mantener los ratios de disponibilidad de los servicios y por lo tanto no es proclive a realizar cambios.
  • El Departamento de Desarrollo es el responsable de crear las nuevas funcionalidades demandadas por los usuarios lo antes posible y por lo tanto su trabajo es modificar los programas.

Flujos de trabajos: Burocrática

Procedimiento Gestión de Despliegues - Junta de Andalucía

Flujos de trabajos: Agil

Los ciclos de desarrollo de software actuales son ágiles y rápidos, de forma que continuamente se están arreglando errores, programando nuevas características y desplegándolas en producción.

DevOps es un acrónimo inglés de development (desarrollo) y operations (operaciones o sistemas), que se refiere a una metodología de trabajo que se centra en la comunicación, colaboración e integración entre desarrolladores de software y los profesionales de operaciones en las tecnologías de la información (IT).

Que demonios es eso de Devops (y porque debería interesarme)

Flujos de trabajos: Agil

  • Infraestructura como código: Automátización de la configuración
  • Entornos de producción, pruebas y desarrollo comparables.
  • Entornos virtuales de desarrollo.
  • Sistema de control de versiones.
  • Despliegue como proceso automático.
  • Integración continúa.
  • Mantener la calidad del software

Entornos de producción, pruebas y desarrollo comparables.

Si vamos a usar herramientas de automatización, es importante la elección del entorno de producción.

Elección del entorno de producción

  • Tradicional
    • Servidor dedicado
    • Hosting compartido
  • Moderno
    • Cloud Computing: IaaS, PaaS
    • Contenedores

Elección del entorno de producción "tradicional"

  • Servidor dedicado: Servidor físico o virtual. Al que tenemos acceso y control total. Características de hardware fijas.
  • Hosting compartido: Servidor físico o virtual compartido entre varios usuarios. No se suele tener acceso a realizar instalaciones específicas. Características hardware fijas.

Elección del entorno de producción "moderno"

  • Cloud Computing: IaaS: Infraestructura como servicio en la nube. Se proporciona principalmente capacidad de cómputo, redes y diversos modos de almacenamiento. Elasticidad y pago por uso. AWS, Azure, GCE, OpenStack
  • Cloud Computing: PaaS: Plataforma de desarrollo web en la nube. Se proporciona toda la plataforma de desarrollo y despliegue de una aplicación al desarrollador. Elasticidad y pago por uso. Openshift, Azure, Heroku, Google App Engine, ...
  • Contenedores: Virtualización ligera. Parecidas a MV, pero mucho más ligeras y transportables.

Metodologías de trabajo

Integración continúa

La integración continua requiere que cada vez que alguien haga un commit se construya la aplicación entera y que se ejecuten una serie de tareas automatizados: Las pruebas y el despliegue se automatizan.
  • Se recoge el código fuente de un repositorio compartido.
  • Se analiza el código
  • Se compila el código necesario (build)
  • Se ejecutan los test (unitarios, integrales y funcionales)
  • Se generan informes y documentación

Es un cambio de paradigma. Es necesario la aceptación de los miembros del equipo, puesto que la integración continua es una práctica y no una herramienta.

Entrega y despliegue continuo

  • Entrega continua (EC): Es el siguiente paso de IC, y consiste en preparar la aplicación web para su puesta en producción. El paso a producción se hace de forma manual.
  • Despliegue continuo (DC): Es similar a la anterior pero en este caso también se automatiza el despliegue final en producción.

Entrega y despliegue continuo

¿Cómo se puede realizar?

  • Script
  • Herramientas específicas:Ant, maven, para java, Phing: para php, Fabric, para python
  • Sincronizar una rama del sistema de control de versiones entre servidores
  • Herramienta de IC (jenkins, travis-CI) también tiene funcionalidad de DC
  • Herramientas específicas para el despliegue continuo de las bases de datos

Herramientas utilizadas en los despliegues modernos

Vagrant

Vagrant es una herramienta que gestiona máquinas virtuales (VM). Con un fichero de configuración (VagranFile), puede levantar y provisionar una infraestructura de MV en poco tiempo.
  • Muy adecuada para configurar entornos de prueba.
  • La replica de escenarios complejos es muy sencilla, por lo que varias personas pueden trabajar en escenarios iguales.
  • Permite que los desarrolladores se involucren más en Sistemas de forma que tengan un conocimiento de cómo se configuran los servidores.
  • Elimina la frase de "Funciona en mi local", puesto que las MV que levanta Vagrant son iguales (o al menos están configuradas igual) que los servidores de producción.

Entornos virtuales de desarrollo

El uso de entornos virtuales de desarrollo nos permite solucionar los problemas con las versiones de los interpretes y librerías.

  • virtualenv para Python
  • phpenv para PHP
  • rbenv y RVM para Ruby
  • nodeenv, nvm, n y nave para node.js

Infraestructura como código: Automátización de la configuración

Aunque actualmente se automatiza todas las partes posible del ciclo de desarrollo de software, no se hace lo mismo con la administración de sistemas. El concepto de infraestructura como código se refiere a intentar gestionar la infraestructura como si de un desarrollo software se tratase.

Ventajas:

  • Control de las versiones de las configuraciones
  • Automatización de los procesos de instalación y configuración
  • Se mejora la documentación y la auditoría

Herramientas: Puppet, chef, ansible, ...

Sistema de control de versiones

Tanto para el departamento de desarrollo como para el de sistema es imprescindible el uso de un sistema de control de versiones. En Sistemas, al gestionar la infraestructura como código es necesario gestionar los distintos ficheros de configuración con un sistema de control de versiones.

  • Git
  • Subversion
  • ...

Herramientas de integración y despliegue continúo

Herramientas que nos permite automatizar el ciclo de vida de desarrollo de software: compilación, testeo, control de código, documentación, despliegue, ...

  • Jenkins
  • travis CI
  • Go CD
  • CodeShip
  • ...