Diferencia entre revisiones de «Despliegue de aplicaciones: PaaS»

De Wiki de EGC
Saltar a: navegación, buscar
 
(No se muestran 7 ediciones intermedias de 2 usuarios)
Línea 1: Línea 1:
 +
= Clase grabada =
 +
* [https://eu-lti.bbcollab.com/recording/c007ed035bf546eda36b0d03c9d48a71 Vídeo de la clase]
 +
 
= Prerequisitos =
 
= Prerequisitos =
  
Para los prerequisits de esta práctica necesitaremos instalar HEROKU CLI en nuestra máquina de desarrollo (https://devcenter.heroku.com/articles/heroku-cli#download-and-install)
+
Para los prerequisitos de esta práctica necesitaremos instalar HEROKU CLI en nuestra máquina de desarrollo (https://devcenter.heroku.com/articles/heroku-cli#download-and-install)
  
 +
* Video con los prerequisitos: [https://hdvirtual.us.es/discovirt/index.php/s/33FD4f7qGCWLJQZ AQUÍ]
 
Los pasos para instalarlo en una máquina ubuntu 20.04 son:
 
Los pasos para instalarlo en una máquina ubuntu 20.04 son:
 
<source lang="bash">
 
<source lang="bash">
 
curl https://cli-assets.heroku.com/install.sh | sh
 
curl https://cli-assets.heroku.com/install.sh | sh
 
</source>
 
</source>
 +
 +
Para hacer login desde la línea de comandos sin usar un navegador web, puede usarse:
 +
<source lang="bash">
 +
heroku login -i
 +
</source>
 +
  
 
En esta práctica vamos a adaptar nuestra app a un entorno de desarrollo basado en Heroku.
 
En esta práctica vamos a adaptar nuestra app a un entorno de desarrollo basado en Heroku.
Línea 25: Línea 35:
 
</source>
 
</source>
  
Añadiendo un nuevo remote para nuestra app:
+
Añadiendo un nuevo remote para nuestra app (estando dentro de un repositorio GIT):
 
<source lang="bash">
 
<source lang="bash">
 
heroku git:remote -a "app name"
 
heroku git:remote -a "app name"
 
</source>
 
</source>
  
Heroku Procfile
+
Heroku Procfile: https://devcenter.heroku.com/articles/procfile
 
------------------
 
------------------
 
Las aplicaciones Heroku incluyen un archivo Procfile en su raiz, al estilo de lo que hacíamos en la práctica anterior. Este archivo de recetas se ejecuta por una app en el arranque de la misma. En el Procfile se puede describir entre otros:
 
Las aplicaciones Heroku incluyen un archivo Procfile en su raiz, al estilo de lo que hacíamos en la práctica anterior. Este archivo de recetas se ejecuta por una app en el arranque de la misma. En el Procfile se puede describir entre otros:
Línea 55: Línea 65:
 
</source>
 
</source>
  
Observemos los errores y veamos como resolverlos.
+
Observemos los errores que ocurren al hacer push o veamos el log con:
 +
 
 +
<source lang="bash">
 +
heroku logs --tail
 +
</source>
 +
 
 +
 
 +
Resolvámoslos:
 +
 
 +
1) Parametros por defecto.
 +
La configuración a usar por Django en Heroku no tiene por qué parecerse a nuestra configuración local. Es más, esa configuración dependerá del propio Heroku cuando levante la aplicación por lo que se tendrá que obtener dinámicamente.
 +
 
 +
Añade el import de Heroku en el decide/decide/settings.py de decide:
 +
 
 +
import django_heroku
 +
 
 +
Y actívalo:
 +
 
 +
django_heroku.settings(locals())
 +
 
 +
No olvidar indicar la BASEURL que ahora será la de nuestra applicación en Heroku.
 +
También habrá que definir la propiedad "APIS" ya que en Heroku no se cargará el local_settings.py.
  
1) Parametros por defecto:
 
  
decide/decide/settings.py
 
 
<source lang="python">
 
<source lang="python">
 
BASEURL = 'https://TU URL'
 
BASEURL = 'https://TU URL'
Línea 78: Línea 107:
 
</source>
 
</source>
  
 
Añade el import en el settings.py de decide:
 
 
import django_heroku
 
 
Y activalo al final del settings.py:
 
 
django_heroku.settings(locals())
 
  
 
3) Finalmente, tenemos que fijar la versión de python a usar. Esto se define en el archivo runtime.txt
 
3) Finalmente, tenemos que fijar la versión de python a usar. Esto se define en el archivo runtime.txt
Línea 98: Línea 119:
 
heroku run  -a YOUR APP NAME "sh -c 'cd decide && python manage.py createsuperuser'"
 
heroku run  -a YOUR APP NAME "sh -c 'cd decide && python manage.py createsuperuser'"
 
</source>
 
</source>
 +
 +
Ejercicio adicional
 +
---------------
 +
Usa el código de la aplicación holamundo en flask [https://github.com/EGCETSII/1920-Practica-1 aquí].
 +
Despliega dicha app en heroku.
 +
Para ello, ten en cuenta que tendrás que incluir un Procfile indicando para que gunicorn corra la app "holamundo".
 +
 +
<source>
 +
web: gunicorn holamundo:app
 +
</source>
 +
 +
No olvides añadir gunicorn al requirements.txt
 +
 +
Deberías obtener el mensaje accediendo a la web [https://TU URL/hello/world]
  
 
Referencias
 
Referencias
 
---------------
 
---------------
 
* [https://devcenter.heroku.com/articles/getting-started-with-python Getting started de Python en Heroku]
 
* [https://devcenter.heroku.com/articles/getting-started-with-python Getting started de Python en Heroku]
 +
* [https://www.heroku.com/github-students/signup Heroku-GitHub student account]

Revisión actual del 19:18 17 dic 2020

Clase grabada

Prerequisitos

Para los prerequisitos de esta práctica necesitaremos instalar HEROKU CLI en nuestra máquina de desarrollo (https://devcenter.heroku.com/articles/heroku-cli#download-and-install)

  • Video con los prerequisitos: AQUÍ

Los pasos para instalarlo en una máquina ubuntu 20.04 son:

curl https://cli-assets.heroku.com/install.sh | sh

Para hacer login desde la línea de comandos sin usar un navegador web, puede usarse:

heroku login -i


En esta práctica vamos a adaptar nuestra app a un entorno de desarrollo basado en Heroku.

Heroku

Heroku es una empresa que ofrece "Plataformas como servicios" y nos permite despreocuparnos de tareas de mantenimiento de infraestructura (por ejemplo aprovisionamiento y administración de servidores) de las soluciones que ofrecen "Infraestructura como Servicio" (Amazon EC2).

Heroku CLI


La comunicación con heroku se realiza principalmente desde la terminal o desde la web, para ello ofrecen clientes de terminal para los sistemas operativos más usados. Asimismo, delega en un sistema de recetas el despliegue de las aplicaciones que deseemos.

Lo primero que haremos es instalarnos la interfaz [[1]]

Para crear nuevas aplicaciones en heroku usaremos:

heroku create "app name"

Añadiendo un nuevo remote para nuestra app (estando dentro de un repositorio GIT):

heroku git:remote -a "app name"

Heroku Procfile: https://devcenter.heroku.com/articles/procfile


Las aplicaciones Heroku incluyen un archivo Procfile en su raiz, al estilo de lo que hacíamos en la práctica anterior. Este archivo de recetas se ejecuta por una app en el arranque de la misma. En el Procfile se puede describir entre otros:

  • El servidor web de tu aplicación
  • Distintos procesos de "workers"
  • Un proceso singleton (e.g. relog, semaforos, ...)
  • Tareas a ejecutar antes de lanzar el despliegue.

Entonces, podremos resumir que los pasos para hacer release de decide en el procfile a crear:

% prepara el repositorio para su despliegue. 
release: sh -c 'cd decide && python manage.py migrate'
% especifica el comando para lanzar Decide
web: sh -c 'cd decide && gunicorn decide.wsgi --log-file -'

Enviando el código a Heroku


Una vez tenemos una rama remota asociada a heroku, podemos hacer push a esta rama para que se considere una release

git push heroku master

Observemos los errores que ocurren al hacer push o veamos el log con:

heroku logs --tail


Resolvámoslos:

1) Parametros por defecto. La configuración a usar por Django en Heroku no tiene por qué parecerse a nuestra configuración local. Es más, esa configuración dependerá del propio Heroku cuando levante la aplicación por lo que se tendrá que obtener dinámicamente.

Añade el import de Heroku en el decide/decide/settings.py de decide:

import django_heroku

Y actívalo:

django_heroku.settings(locals())

No olvidar indicar la BASEURL que ahora será la de nuestra applicación en Heroku. También habrá que definir la propiedad "APIS" ya que en Heroku no se cargará el local_settings.py.


BASEURL = 'https://TU URL'
...
APIS = {}
...
import django_heroku
django_heroku.settings(locals())

2) Dependencias Los cambios en estas dependencias son django-heroku para evitar problemas con el comando collectstatic de django y gunicorn como servidor requirements.txt

django-heroku
gunicorn


3) Finalmente, tenemos que fijar la versión de python a usar. Esto se define en el archivo runtime.txt

python-3.7.5


El último paso es conectarnos a heroku y crear un super usuario para las votaciones

heroku run  -a YOUR APP NAME "sh -c 'cd decide && python manage.py createsuperuser'"

Ejercicio adicional


Usa el código de la aplicación holamundo en flask aquí. Despliega dicha app en heroku. Para ello, ten en cuenta que tendrás que incluir un Procfile indicando para que gunicorn corra la app "holamundo".

web: gunicorn holamundo:app

No olvides añadir gunicorn al requirements.txt

Deberías obtener el mensaje accediendo a la web URL/hello/world

Referencias