G. Martínez L. 2/40 • 5 años participando en el Proyecto Fedora. • Roles: Empaquetador y Embajador. • FAS: potty • Twitter: @abdelgmartinezl • Blog: http://abdelmartinez.com • E-mail: [email protected]
Versiones 4. Conceptos Importantes 5. Tecnologías Importantes 6. Pasos Preliminares 7. Configurando la Línea de Comandos 8. Creando la Primera Aplicación 9. Autoescalando 10.Moverse a un Nodo Pago 11.Clonando Código Localmente 12.Modificando el Código 13.Auto Hook Scripts 14.Despliegue en Caliente 11. Cartridge Adicionales 12. Encontrando Cartridges 13. Acceso SSH 14. Variables de Entorno 15. Usando Marcadores 16. Declaración de Dependencias 17. Conectándose a la Base de Datos 18. Consultando la Cuota 19. Despliegues Manuales 20. Historia de Despliegues 21. Application Snapshots 22. Manejando Múltiples Llaves SSH 23. Trabajo Colaborativo 24. Otras Características Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G. Martínez L. 3/40
finales, entregado sobre la web. • Platforma as a Service (PaaS): Conjunto de herramientas y servicios diseñados para hacer código y desplegar esas aplicaciones esas aplicaciones rápido y eficiente. • Infrastructure as a Service (IaaS): Hardware y software que empodera todo (servidores, almacenamiento, redes y sistemas operativos). Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G. Martínez L. 4/40
corporación se debe utilizar Openshift Enterprise. • Si quiere tener menor cantidad de tareas de administración se debe utilizar Openshift Online. • Si quiere estar 'cutting-edge' se puede usar Openshift Origin con Fedora o CentOS. Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G. Martínez L. 6/40
se ejecuta en Openshift. Provee seguridad permitiendo tráfico entrante en HTTP (80), HTTPS (443) y SSH (22). Con WebSocket, se soportan HTTP (8000) y HTTPS (8443). • Gear: Es un servidor contenedor que tiene un conjunto de recursos que permite a los usuarios ejecutar sus aplicaciones en la nube. Existen tres tipos, que cuentan con 1GB de disco: pequeña (512 MB de RAM), mediana (1 GB de RAM) y grande (2 GB de RAM). Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G. Martínez L. 7/40
algo, se necesita agregar un cartridge. Son plug-ins que guardan el marco o componentes que pueden ser utilizados para crear y ejecutar una aplicación. Uno o muchos cartridges pueden ejecutarse en cada gear, y el mismo cartridge puede ejecutarse en uno o más gear. • Standalone: Son los lenguajes y application servers que sirven al contenido web, como Jboss, Tomcat, Python o Node.js. • Embedded: Provee funcionalidad para mejorar la aplicación, como una base de datos o cron, pero no sirven independientemente para crear una aplicación. Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G. Martínez L. 8/40
a los cambios en tráfico y automáticamente separa los recursos necesarios para manejar la creciente demanda. La infraestructura de OpenShift monitoriza el tráfico web entrante y trae nuevos gears (o los retira). • Herramientas Cliente, Consola Web, Plug-in Eclipse: Se puede interactuar con la plataforma vía el cliente RHC que se instala localmente. El único momento que se utilizan estas herramientas es cuando se administra la infraestructura o componentes de la aplicación. Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G. Martínez L. 9/40
conectarte a los Openshift gears y tener acceso a nivel de línea de comandos. • Git: Es un programa que provee un control de versiones distribuido. Cada repositorio es considerado maestro. Los tres comandos básicos que se manejan aquí son: • git add • git commit • git push Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G. Martínez L. 10/40
conectarte a los Openshift gears y tener acceso a nivel de línea de comandos. • Git: Es un programa que provee un control de versiones distribuido. Cada repositorio es considerado maestro. Los tres comandos básicos que se manejan aquí son: • git add • git commit • git push Openshift: Lleva tu Desarrollo a Otro Nivel Abdel G. Martínez L. 11/40
G. Martínez L. 12/40 • Registrar una cuenta en Openshift: https://openshift.redhat.com/ap p/account/new • Instalar el cliente de línea de comandos RHC: su yum install rubygemrhc
Otro Nivel Abdel G. Martínez L. 13/40 • Para configurar el cliente, se debe ejecutar: rhc setup • Para actualizar el cliente, se debe ejecutar: su gem update rhc • Se asegura que el usuario y contraseña sean válidos. • Crea un token en la máquina local que ahorra tiempo de autenticación por 30 días. • Pregunta para crear un namespace, la parte única de la URL de las aplicaciones. • Verifica que exista un fichero público de par de llaves SSH.
Nivel Abdel G. Martínez L. 14/40 • Para ver la lista completa de cartridges disponibles: rhc cartridge list • Para crear una aplicación, debe ejecutar: rhc app create fudcon_latam python2.7 • Luego de la configuración, es necesario crear una aplicación. • Se pueden crear los cartridge personalizados. • El comando clona el repositorio git en la dirección donde ejecutó el comando. • Cuando termina, te crea un Apache HTTP Server y un repositorio Git.
Martínez L. 15/40 • Único PaaS que provee autoescalado en la capa de aplicaciones. • Cuando una aplicación es escalable, un balanceador de cargas llamados HAProxy se añade al mismo gear de la aplicación. • Todo el tráfico de la aplicación se enruta allí. • Si el número de sesiones activas son 16, siendo HTTP o WebSocket, Openshift crea otro application gear. • Todo esto ocurre sin intervención humana. Claro está que se establece un máximo de gears de application server para que la cuenta no se dispare. • Razones para autoescalar: • El application server, la base de datos y cualquier otro servidor no competirá por recursos. • Brinda mayor flexibilidad cuando se aumenta la carga de la aplicación. • Permite escalarlo manualmente, de ser necesario. • Para alternar entre una aplicación escalable y una no escalable, debe utilizar Application Snapshot.
Otro Nivel Abdel G. Martínez L. 16/40 • La aplicación nunca estará en espera. • Se pueden comprar más gears, es decir, más aplicaciones. • Se pueden comprar gears más grandes. • Se pueden adquirir application servers premium (JBoss EAP). • Se tiene acceso a más espacio en disco duro. • Se puede usar certificados SSL con los dominios personalizados. • Mayor soporte técnico.
Abdel G. Martínez L. 17/40 • Cuando creas una aplicación con el comando RHC, se crea un nuevo repositorio Git que será clonado localmente. • Para clonar luego el repositorio, ejecutar: rhc gitclone • Para ver el URL del repositorio Git, ejecutar: rhc app show a <nombre> • Nota: Para que esto funcione es necesario tener una llave SSH.
Abdel G. Martínez L. 18/40 • Se puede modificar utilizando un editor de línea de comandos, un editor gráfico, o un IDE. • Nuestro ejemplo usará Flask. • Lo primero es añadir la dependencia en setup.py. • En este fichero incluimos el nombre y otros detalles. En este caso debe reemplazarse el valor de la línea install_requires. setup(name='Salute App', version='1.0', description='Salutes you', author='Abdel', author_email='[email protected] rg', url='http://www.python.org/sigs/dis tutilssig/', install_requires=['Flask==0.10.1'], )
Abdel G. Martínez L. 19/40 • Otro fichero a modificar en wsgi/application. • Contiene el fichero HTML con el mensaje de bienvenida. • No se necesita el código de plantilla, por lo que se elimina. • Agregar esta línea from routes import app as application. #!/usr/bin/python import os virtenv = os.environ['OPENSHIFT_PYTHON_DIR'] + '/virtenv/' virtualenv = os.path.join(virtenv, 'bin/activate_this.py') try: execfile(virtualenv, dict(__file__=virtualenv)) except IOError: pass # # IMPORTANT: Put any additional includes below this line. If placed above this # line, it's possible required libraries won't be in your searchable path. # from routes import app as application
Abdel G. Martínez L. 20/40 • Los Openshift cartridges son diseñados para contemplar las tareas requeridos para construir y desplegar la aplicación. • Action hook script son incluidos como parte del repositorio Git, en el directorio .openshift/action_hooks. • Cada cartridge soporta diferentes hooks, dependiendo del ciclo de vida: pre_build, build, deploy, post_build, start, stop, restart, reload. • El script puede ser escrito en Shell, Python, PHP o Ruby. • Se manejan como cualquier fichero dentro del repositorio.
Abdel G. Martínez L. 22/40 • Cuando se empuja el código, el cartridge en Python se detiene mientras la aplicación se construye y despliega, luego se reinicia. • Está disponible para JBoss, Tomcat, PHP, Zend, Python, Ruby. • Para habilitarlo debe agregarse: touch .openshift/markers/hot_deploy git add .openshift/markers/hot_deploy git commit m "Changing application to hot deploy" • Luego ejecutar git push. • wsgi/routes.py import os from flask import Flask import saluter app = Flask(__name__) # Keeps Flask from swallowing error messages app.config['PROPAGATE_EXCEPTIONS'] = True @app.route("/") def salute(): return saluter.salute() @app.route("/<name>") def salute_name(name): return saluter.named_salute(name) if __name__ == "__main__": app.run()
G. Martínez L. 24/40 • Para soportar la integración continua se utiliza una instancia de Jenkins. • Antes de configurarlo se debe crear un servidor de Jenkins como una aplicación: cd .. rhc app create jenkins jenkins1 • Luego se incluye el cliente de Jenkins en la aplicación: cd fudcon_latam rhc cartridge add jenkinsclient1 • Para monitorizar la aplicación se debe acceder a la URL con el sufijo /metrics.
G. Martínez L. 25/40 • Para ver los cartridges oficiales soportados, ejecutar: rhc cartridge list • Si quiere agregar un cartridge válido pero no oficial, ejecutar: rhc cartridge add https://raw2.github.com/mfojtik/openshiftorigin cartridgemonit/master/metadata/manifest.yml • Si quiere eliminar un cartridge se hace con el nombre referencia: rhc cartridge remove mfojtikmonit5.6
G. Martínez L. 26/40 • El contenedor de la aplicación, gear, se accede mediante ssh. • Para ver el URL de SSH, ejecutar: rhc app show a fudcon_latam • Para conectarse SSH, ejecutar: rhc ssh • Importaremos un SQL en nuestra base de datos: psql f import.sql. DROP TABLE IF EXISTS short_adjective; DROP TABLE IF EXISTS long_adjective; DROP TABLE IF EXISTS noun; BEGIN; CREATE TABLE short_adjective (id serial PRIMARY KEY, string varchar); CREATE TABLE long_adjective (id serial PRIMARY KEY, string varchar); CREATE TABLE noun (id serial PRIMARY KEY, string varchar); INSERT INTO short_adjective (string) VALUES ('artless'); INSERT INTO short_adjective (string) VALUES ('bawdy'); INSERT INTO short_adjective (string) VALUES ('beslubbering'); INSERT INTO long_adjective (string) VALUES ('basecourt'); INSERT INTO long_adjective (string) VALUES ('batfowling'); INSERT INTO long_adjective (string) VALUES ('beefwitted'); INSERT INTO noun (string) VALUES ('applejohn'); INSERT INTO noun (string) VALUES ('baggage'); INSERT INTO noun (string) VALUES ('barnacle');
Abdel G. Martínez L. 27/40 • Para agregar una variable de entorno personalizada, ejecutar: rhc env set API_USERNAME=admin API_PASSWORD=secret a fudcon_latam • Para listar las variables de entorno personalizadas, ejecutar: rhc env list a fudcon_latam • Para eliminar una variable de entorno personalizda, ejecutar: rhc unset API_PASSWORD a fudcon_latam • Para mostrar el valor de una variable de entorno personalizada: rhc env show API_USERNAME a fudcon_latam • Para sobreescribir las variables de entorno pre-configuradas, ejecutar: rhc env set OPENSHIFT_SECRET_TOKEN=new_token
G. Martínez L. 28/40 • Se explicó en la sección Despliegues en Caliente. • Éste es un ejemplo: touch .openshift/markers/force_clean_build git add .openshift/markers/force_clean_build git commit m “Agregando marcador” git push
Abdel G. Martínez L. 29/40 • Se explicó en la sección Modificando el Código. • Cada lenguaje de programación utiliza su mecanismo de dependencia de construcción: Java (Maven), Python (Pip), Ruby (Gem), Node.js (NPM), PHP (Pear), Perl (CPAN). • Las dependencias se incluyen en diferentes ficheros, dependiendo del lenguaje de programación: Java (pom.xml), Python (setup.py), Ruby (gemfile.lock), Node.js (package.json), PHP y Perl (deplist.txt).
a Otro Nivel Abdel G. Martínez L. 30/40 • Agregar al fichero saluter.py: import psycopg2 ... def get_cursor(): #open a connection conn = psycopg2.connect(database=os.environ['OPENSHIFT_APP_NAME'], user=os.environ['OPENSHIFT_POSTGRESQL_DB_USERNAME'], password=os.environ['OPENSHIFT_POSTGRESQL_DB_PASSWORD'], host=os.environ['OPENSHIFT_POSTGRESQL_DB_HOST'], port=os.environ['OPENSHIFT_POSTGRESQL_DB_PORT'] ) #get a cursor from the connection cursor = conn.cursor() return cursor
Abdel G. Martínez L. 33/40 • Las ubicaciones donde se consume almacenamiento son: /data, tmp, repositorio Git, bitácoras, datafile de base de datos. • El comando para ver cuánto espacio se ha consumido es: rhc app show fudcon_latam –gears cuota
G. Martínez L. 34/40 • Para deshabilitar los despliegues automáticos, el comando es: rhc appconfigure noautodeploy • Para habilitar los despliegues automáticos, el comando es: rhc appconfigure autodeploy
Abdel G. Martínez L. 35/40 • Para mantener una cantidad de despliegues, el comando es: rhc appconfigure keepdeployments 3 • Para listar los despliegues guardados, el comando es: rhc deployment list • Para activar un despliegue particular, el comando es: rhc deployment active <id>
G. Martínez L. 36/40 • Exporta el estado de la aplicación, incluyendo el código del repositorio, dumps SQL de las bases de datos, $OPENSHIFT_DATA_DIR y cualquier otro cartridge. • Para guardar el snapshot, ejecutar el comando: rhc snapshot save • Para restaurar el snapshot, ejecutar el comando: rhc snapshot restore
Nivel Abdel G. Martínez L. 37/40 • Para agregar una llave SSH: rhc sshkey add miamigo /home/miamigo/id_rsa.pub • Para remove unar llave SSH: rhc sshkey remove miamigo
G. Martínez L. 38/40 • Agregando la llave SSH es una manera de permitir el trabajo colaborativo. Sin embargo, está limitado. • Para ver a qué dominios tengo acceso, ejecutar rhc domain list • Las membresías se manejan por roles: view, edit y admin. • Para agregar un miembro, ejecutar: • rhc member add [email protected] n leafhat role view • Para eliminar un miembro, ejecutar: rhc member remove [email protected] n leafhat