Diferencia entre revisiones de «Despliegue de aplicaciones: PaaS»
(Página creada con «= Prerequisitos = Para los prerequisits de esta práctica necesitaremos instalar HEROKU CLI en nuestra máquina de desarrollo (https://devcenter.heroku.com/articles/heroku...») |
|||
Línea 4: | Línea 4: | ||
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"> |
curl https://cli-assets.heroku.com/install.sh | sh | curl https://cli-assets.heroku.com/install.sh | sh | ||
− | < | + | </source> |
+ | |||
+ | 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 [[https://devcenter.heroku.com/articles/heroku-cli#download-and-install]] | ||
+ | |||
+ | Para crear nuevas aplicaciones en heroku usaremos: | ||
+ | <source lang="bash"> | ||
+ | heroku create "app name" | ||
+ | </source> | ||
+ | |||
+ | Añadiendo un nuevo remote para nuestra app: | ||
+ | <source lang="bash"> | ||
+ | heroku git:remote -a "app name" | ||
+ | </source> | ||
+ | |||
+ | Heroku 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: | ||
+ | <source lang="bash"> | ||
+ | % 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 -' | ||
+ | </source> | ||
+ | |||
+ | 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 | ||
+ | |||
+ | <source lang="bash"> | ||
+ | git push heroku master | ||
+ | </source> | ||
+ | |||
+ | Observemos los errores y veamos como resolverlos. | ||
+ | |||
+ | 1) Parametros por defecto: | ||
+ | |||
+ | decide/decide/settings.py | ||
+ | <source lang="python"> | ||
+ | BASEURL = 'https://TU URL' | ||
+ | ... | ||
+ | APIS = {} | ||
+ | ... | ||
+ | import django_heroku | ||
+ | django_heroku.settings(locals()) | ||
+ | </source> | ||
+ | |||
+ | 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 | ||
+ | |||
+ | <source lang="bash"> | ||
+ | django-heroku | ||
+ | gunicorn | ||
+ | </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 | ||
+ | |||
+ | <source lang="bash"> | ||
+ | python-3.7.5 | ||
+ | </source> | ||
+ | |||
+ | |||
+ | El último paso es conectarnos a heroku y crear un super usuario para las votaciones | ||
+ | <source lang="bash"> | ||
+ | heroku run -a YOUR APP NAME "sh -c 'cd decide && python manage.py createsuperuser'" | ||
+ | </source> | ||
+ | |||
+ | Referencias | ||
+ | --------------- | ||
+ | * [https://devcenter.heroku.com/articles/getting-started-with-python Getting started de Python en Heroku] |
Revisión del 17:40 4 dic 2020
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)
Los pasos para instalarlo en una máquina ubuntu 20.04 son:
curl https://cli-assets.heroku.com/install.sh | sh
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:
heroku git:remote -a "app name"
Heroku 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 y veamos como resolverlos.
1) Parametros por defecto:
decide/decide/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
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
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'"
Referencias