Germán Martínez Maldonado
(
GitHub: @germaaan /
Twitter: @germaaan_)
Oficina de Software Libre de la Universidad de Granada
(Twitter: @OSLUGR /
Facebook: @SoftwareLibreUGR)
Granada Geek
(http://www.meetup.com/es-ES/Granada-Geek/)
Cuando hablamos de nube nos referimos a servicios que están presentes aquí pero que existen en remoto.
Poder manipular, configurar y acceder a aplicaciones sin tener que instalar nada en nuestro sistema local.
Poder hacer nuestras aplicaciones móviles y colaborativas.
Porque no siempre puedes tirar del "ordenador grande, ande o no ande".
Porque a veces no es viable y, además, necesitas respuesta inmediata.
Un proveedor (Google, Amazon, Microsoft...) suministra servicios en la nube cuya infraestructura está disponible para el público en general.
Los servicios en la nube solo están disponible para una única organización, pudiendo ser gestionados internamente o por terceros. Ej: OpenStack
Combinación de nubes privadas y públicas independientes entre sí, pero que comparten información.
La infraestructura de una misma nube es compartida por varias organizaciones de una comunidad específica.
Infrastructure as a Service: un distribuidor provee una infraestructura virtualizada con las caracteristicas solicitadas.
Ejemplos: Microsoft Azure, Amazon EC2, Google Cloud Platform
Platform as a Service: un distribuidor provee el entorno de ejecución para aplicaciones además de herramientas para permitan su despliegue.
Ejemplo: Heroku, OpenShift, Google App Engine, Bluemix
Software as a Service: las aplicaciones están en la web y son provistas por un distribuidor que es el que se encarga de administrarlas.
Ejemplo: Google Apps, Dropbox
Hay un sitio dónde el software nace, crece, se reproduce y muere.
Antes de desplegar algo, tenemos que tener algo que desplegar. (Obvious is obvious...)
Como Heroku
Permiten añadir como complemento una base de datos PostgreSQL sobre la que podríamos trabajar directamente con nuestra aplicación.
Las máquinas virtuales disponibles en Heroku son conocidas como dynos y se configuran mediante un Procfile.
Configurando el Procfile
Principalmente podemos diferenciar dos tipos de dynos: web para los procesos que van a recibir tráfico HTTP y worker para los procesos que se van a ejecutar en segundo plano.
web: node app
Crear la aplicación en Heroku
# $ heroku login
$ heroku apps:create --region eu NOMBRE_APP
$ git push heroku master
Escalar la aplicación
Desplegar automáticamente
Podemos crear contenedores/máquinas virtuales que se puedan desplegar en un IaaS (o en cualquier sitio).
Contenedores que autocontienen un sistema de archivos completo con todo lo necesario para funcionar:
Se crean mediante un Dockerfile que se puede subir a DockerHub
FROM ubuntu:15.10
MAINTAINER German Martinez Version: 1.0
RUN apt-get update
RUN apt-get -y install wget net-tools
RUN wget -qO- https://deb.nodesource.com/setup_4.x | bash -
RUN apt-get install -y git nodejs
RUN git clone https://github.com/Gescosolution/Gesco-DatabaseManagement.git /home/Gesco-DatabaseManagement
WORKDIR "/home/Gesco-DatabaseManagement"
RUN npm -g install gulp bower
RUN npm install
RUN bower install --allow-root
EXPOSE 5000
RUN ifconfig eth0
CMD ["gulp", "server"]
Es una herramienta para la creación y configuración de entornos de desarrollo virtualizados de forma reproducible y portable.
Lo primero es descargarse una caja (la caja!).
vagrant box add precise64 http://files.vagrantup.com/precise64.box
Ahora simplemente la levantamos y nos conectamos a ella.
vagrant init precise64
vagrant up
vagrant ssh
Se puede configurar mediante un Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure(2) do |config|
config.vm.box = "ubuntu/wily64"
config.vm.network :private_network, ip: "192.168.2.50"
config.vm.provision "ansible" do |ansible|
ansible.playbook = "playbook.yml"
end
end
O en cualquier sitio
Ansible es un motor de orquestación, una herramienta que nos permite aplicar configuraciones en infraestructuras remotas de forma automática.
Hay más: como Chef, Salt, Puppet
Inventario
perro.ejemplo.com ansible_ssh_host=192.168.1.34
gato.ejemplo.com ansible_port=5555 ansible_host=192.168.1.43
[servidores]
xenial.primero.com
wily.segundo.com
[bbdd]
replica[0:3].cuarto.com
[local]
servidores bbdd
[servidores:vars]
ansible_ssh_user: "usuario"
ansible_ssh_pass: "nolohagas" # NO RECOMENDABLE
playbook.yml
---
- hosts: transparente
remote_user: "{{user}}"
tasks:
- name: Descargar script instalación Node
get_url: url=https://deb.nodesource.com/setup_4.x dest=./setup_4.x mode=0550
- name: Ejecutar script de instalación de Node
command: ./setup_4.x
- name: Instalar Node
apt: name=nodejs state=present
- name: Instalar Git
apt: name=git state=present
- name: Instalar Nginx
apt: name=nginx state=present
- name: Descargar repositorio de la aplicación
git: repo=https://github.com/oslugr/ugr-transparente-servidor.git
dest=/home/"{{user}}"/ugr-transparente-servidor
version=master
- name: Cambiando propietario del directorio de la aplicación
file: path=/home/"{{user}}"/ugr-transparente-servidor
owner="{{user}}" group="{{user}}" state=directory recurse=yes
- name: Instalando las dependencias de la aplicación...
npm: path=/home/"{{user}}"/ugr-transparente-servidor
- name: Arrancando el servidor...
command: chdir=ugr-transparente-servidor npm start
Ejecutar:
ansible-playbook -become azure.yml