Este documento define términos clave relacionados con el desarrollo de aplicaciones en la nube, incluyendo PaaS, OpenShift, contenedores, Docker, gears, cartridges y Git. Explica que PaaS proporciona una plataforma en la nube para desarrollar aplicaciones web, OpenShift es un proveedor PaaS gratuito, y los contenedores como Docker permiten empaquetar aplicaciones de forma portable.
2. PaaS o plataforma como servicio
• PaaS es un entorno de trabajo en la nube que ofrece
arquitectura e infraestructura para el desarrollo de
aplicaciones Web, incluye:
• Recursos de red
• Almacenamiento de datos
• Administración de software
• Soporte técnico
• Con PaaS la única preocupación del desarrollador es la
construcción de la aplicación.
• La infraestructura la proporciona el proveedor de la
plataforma.
3. OpenShift de Red Hat
• OpenShift es un proveedor PaaS con opción gratuita para
el desarrollo y despliegue de aplicaciones Java, Perl,
PHP, Python y Ruby.
• También proporciona servicios de base de datos con
MySQL, PostgreSQL o MongoDB.
• Su modelo basado en contenedores de docker permite
el uso eficiente de la infraestructura y la portabilidad de
las aplicaciones.
4. LXC Contenedores Linux
• Los contenedores Linux proveen la autonomía de las
aplicaciones agrupandolas con las bibliotecas de las que
dependen evitando conflictos entre ellas. No incluye un
kernel (SO), por lo que son más rápidos y ágiles que las
máquinas virtuales. No obstante, esto significa que todos
los contenedores de un host deben utilizar el mismo
kernel.
5. LXC Contenedores Linux
• Con el uso de contenedores, los recursos pueden ser
aislados, los servicios restringidos, se otorga a los
procesos la capacidad de tener una visión casi completa y
privada del sistema operativo con su propio identificador
de espacio de proceso, la estructura del sistema de
archivos, y las interfaces de red.
• Contenedores múltiples comparten el mismo núcleo, pero
cada contenedor puede ser restringido a utilizar sólo una
cantidad definida de recursos como CPU, memoria y E/S.
6. Docker
• Herramienta que puede empaquetar una aplicación y sus
dependencias en un contenedor virtual que se puede
ejecutar en cualquier servidor Linux.
• Docker proporciona flexibilidad y portabilidad.
• La aplicación se puede ejecutar en las instalaciones
físicas, la nube pública, nube privada, etc.
7. Gear en OpenShift
• Es un contenedor con recursos limitados donde un
usuario de OpenShift ejecuta su aplicacion.
• En el caso de utilizar una cuenta gratuita se pueden crear
como máximo tres gears de tipo “small”, cada uno de ellos
puede utilizar un máximo de 512 MB de RAM, 100MB de
swap y 1GB de espacio en disco.
• Las aplicaciones se despliegan y ejecutan utilizando estos
recursos asociados al “gear”.
8. Catridge en OpenShift
• Son contenedores de software preparados para
ejecutarse en un gear.
• Sobre cada gear pueden desplegarse varios cartridges,
por ejemplo existen cartridges de php, ruby, jboss,
MySQL, django, etc.
9. Namespace en OpenShift
• Cada cuenta de usuario en OpenShift está asociada a un
espacio de nombres para generar un FQDN (nombre de
dominio completo) único en Internet para cada gear.
• En la configuración inicial de la cuenta de usuario habrá
que seleccionar un espacio de nombres que sea único,
este espacio de nombres se aplicará automáticamente a
todos los gears que se creen.
HTTPS://quickstart-wordpressguide.rhcloud.com
10. Acceso remoto y autenticación en OpenShift
• Una de las características interesantes que proporciona
OpenShift es la posibilidad de acceder por SSH a la
máquina en la que se está ejecutando la aplicación Web,
aunque con un usuario con privilegios restringidos.
• El mecanismo usado para la autenticación se realiza
usando claves públicas, es necesario indicar las claves
públicas para poder acceder de forma remota.
• Es posible generar y usar claves RSA, este sistema
criptográfico emplea dos claves una privada y otra
pública, la clave pública debe subirse al portal de
OpenShift.
11. SSH Secure SHell
• SSH es el nombre de un protocolo que hace posible que
un equipo (cliente) abra una sesión interactiva en una
máquina remota (servidor) para enviar comandos o
archivos a través de un canal seguro.
12. SSH Secure SHell
• Una conexión SSH consta de dos fases, el
establecimiento de un canal seguro y el inicio de sesión
en el servidor; que puede ser a través del método de
contraseña tradicional o con el uso de claves públicas.
13. RSA y clave pública
• RSA es un sistema criptográfico de clave pública que
emplea un par de claves para el envío de mensajes.
• Las dos claves pertenecen a la misma persona que ha
enviado el mensaje, una clave es pública y se puede
entregar a cualquier persona, la otra clave es privada y el
propietario debe guardarla de modo que nadie tenga
acceso a ella.
14. Mantenimiento de aplicaciones en OpenShift
• Como desarrollador de OpenShift se tiene la necesidad
de realizar cambios en el código de la aplicación.
• OpenShift emplea Git para dar mantenimiento a las
aplicaciones. Esta herramienta tiene la ventaja de que no
requiere una presencia en línea continua. Es posible
realizar cambios al código de una aplicación en una
maquina local y posteriormente llevar esos cambios a la
plataforma OpenShift.
• El código de cada aplicación en OpenShift tiene su propio
repositorio Git al que solo un usuario autenticado puede
acceder y clonar en su máquina local.
ssh://56a80a8289f5cfe367000019@apptest-dancruzmx.rhcloud.com/~/git/apptest.git/
Pass this URL to 'git clone' to copy the repository locally.
15. Git Control de versiones
• Git es un software de control de versiones cuyo propósito
es administrar ágilmente los cambios en el código de una
aplicación y poder revertirlos.
• Emplea el modelo distribuido donde cada desarrollador
trabaja directamente con su repositorio local, y los
cambios se comparten entre repositorios en un paso
posterior.
16. Git Secciones principales
• El directorio de Git (Repository) donde se almacenan los
metadatos y la base de datos de objetos del proyecto. Es
la parte más importante de Git, y es lo que se copia
cuando se clona un repositorio desde otra computadora.
• El directorio de trabajo (Working), es una copia de una
versión del proyecto. Estos archivos se sacan de la base
de datos comprimida en el directorio de Git, y se colocan
en disco para que se puedan usar o modificar.
• El área de preparación (Staging) es un archivo,
generalmente contenido en el directorio de Git, que
almacena información acerca de lo que va a ir en la
próxima confirmación. A veces se le denomina índice
(“index”), pero se está convirtiendo en estándar el
referirse a ella como el área de preparación.
17. Git Estado de los archivos
• Git tiene tres estados principales en los que se pueden
encontrar los archivos:
• Confirmado (committed) los datos están almacenados de manera
segura en la base de datos local.
• Modificado (modified), se ha modificado un archivo pero todavía no
se ha confirmado en la base de datos.
• Preparado (staged), se ha marcado un archivo modificado en su
versión actual para que vaya en la próxima confirmación.
18. Git Flujo de trabajo local
1. Modificar una serie de archivos en el directorio de trabajo (edit).
2. Preparar los archivos, añadiéndolos al área de preparación (add).
3. Confirmar los cambios, toma los archivos tal y como están en el
área de preparación y almacena esa copia instantánea de manera
permanente en el directorio de Git (commit).
19. Git Flujo de trabajo remoto
• Los repositorios remotos son versiones del proyecto que
están hospedadas en Internet generalmente con
permisos de solo lectura o de lectura y escritura.
• Cuando el proyecto local se encuentra en un estado que
se desea compartir se envía al repositorio remoto (push).
• También es posible recuperar la información del servidor
remoto (fetch-checkout o pull).
20. Git y Openshift
Pull
Mi aplicación en la nube
Mantenimiento de mi aplicación en PC, MAC o Móvil
21. Algo mas sobre Git, las ramas
• Los flujos de trabajo pueden operar sobre distintas ramas, la
rama por defecto en Git es master.
• En cada confirmación de cambios (commit), la rama de
trabajo ira avanzando.
• Pueden crearse nuevas ramas (branch).
• HEAD es un apuntador que señala sobre que rama estamos
trabajando, siempre apunta al ultimo commit de la rama.
HEAD
22. Git Comandos básicos
• Clona un repositorio remoto
git clone username@host:/path/to/repository
• Registra cambios (añadirlos al Index)
git add <filename>
• Confirma cambios
git commit -m "Commit message"
• Enviar cambios a repositorio remoto
git push origin master
• Actualiza repositorio local al commit más nuevo, baja y
fusiona los cambios remotos
git pull
23. Git Comandos básicos
• Crea nueva rama
git branch <name>
• Para cambiarse de una rama a otra
git checkout <branch>
• Fusiona otra rama a la rama activa “Git intenta fusionar
automáticamente los cambios”
git merge <branch>
• Revisión de diferencias entre ramas
git diff <source_branch> <target_branch>
• Ver historial del proyecto con todo y ramas
git log