Práctica: Instalación/migración de aplicaciones web Python
Entorno de desarrollo
Vamos a desplegar la aplicación del tutorial de django. Utiliza una máquina de openstack como entorno de desarrollo.
Vamos a configurar tu equipo como entorno de desarrollo para trabajar con la aplicación, para ello:
- Realiza un fork del repositorio de GitHub: https://github.com/josedom24/django_tutorial.
- Crea un entorno virtual de python3 e instala las dependencias necesarias para que funcione el proyecto.
- Comprueba que vamos a trabajar con una base de datos sqlite. ¿Qué fichero tienes que consultar? ¿Cómo se llama la base de datos que vamos a crear?
- Crea la base de datos. A partir del modelo de datos se crean las tablas de la base de datos.
- Crea un usuario administrador.
- Ejecuta el servidor web de desarrollo y entra en la zona de administración (
/admin) para comprobar que los datos se han añadido correctamente. - Crea dos preguntas, con posibles respuestas.
- Comprueba en el navegador que la aplicación está funcionando, accede a la url
/polls. - Configura el servidor web apache2 con el módulo wsgi para servir la página web.
:::tip En este momento, muestra al profesor la aplicación funcionando. Entrega una documentación resumida donde expliques los pasos fundamentales para realizar esta tarea. Y pantallazos que demuestren que la aplicación está funcionando. :::
Entorno de producción
Vamos a realizar el despliegue de nuestra aplicación en un entorno de producción, para ello vamos a utilizar nuestro VPS, sigue los siguientes pasos:
-
Clona tu repositorio en el VPS.
-
Crea un entorno virtual e instala las dependencias de tu aplicación.
-
Instala el módulo que permite que python trabaje con mysql:
(env)$ pip install mysqlclient -
Crea una base de datos y un usuario en mysql.
-
Configura la aplicación para trabajar con mysql, para ello modifica la configuración de la base de datos en el archivo
settings.py:DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'myproject', 'USER': 'myprojectuser', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '', } } -
Crea una copia de seguridad de la base de datos. Ten en cuenta que en el entorno de desarrollo vas a tener una base de datos sqlite, y en el entorno de producción una mariadb, por lo tanto es recomendable para hacer la copia de seguridad y recuperarla con los comandos:
python manage.py dumpdataypython manage.py loaddata, para más información. -
Configura el servidor de aplicaciones uwsgi, creando una unidad de systemd como hicimos en una clase anterior y configura nginx como proxy inverso para servir la aplicación.
-
Debes asegurarte que el contenido estático se está sirviendo: ¿Se muestra la imagen de fondo de la aplicación? ¿Se ve de forma adecuada la hoja de estilo de la zona de administración?
-
Desactiva en la configuración el modo debug a False. Para que los errores de ejecución no den información sensible de la aplicación.
-
La página web debe ser accesible usando https, en la URL:
https://python.tudominio.algo. -
Muestra la página funcionando. En la zona de administración se debe ver de forma adecuada la hoja de estilo.
:::tip En este momento, muestra al profesor la aplicación funcionando. Entrega una documentación resumida donde expliques los pasos fundamentales para realizar esta tarea y pantallazos donde se vea que todo está funcionando. :::
Modificación de nuestra aplicación
Vamos a realizar cambios en el entorno de desarrollo y posteriormente vamos a subirlos a producción. Vamos a realizar tres modificaciones, pero recuerda que primero lo haces en el entorno de desarrollo, y luego tendrás que llevar los cambios a producción:
-
Modifica la página inicial donde se ven las encuestas para que aparezca tu nombre: Para ello modifica el archivo
django_tutorial/polls/templates/index.html. -
Modifica la imagen de fondo que se ve la aplicación.
-
Vamos a crear una nueva tabla en la base de datos, para ello sigue los siguientes pasos:
-
Añade un nuevo modelo al fichero
polls/models.py:class Categoria(models.Model): Abr = models.CharField(max_length=4) Nombre = models.CharField(max_length=50) def __str__(self): return self.Abr+" - "+self.Nombre -
Crea una nueva migración.
-
Y realiza la migración.
-
Añade el nuevo modelo al sitio de administración de django:
Para ello cambia la siguiente línea en el fichero
polls/admin.py:from .models import Choice, QuestionPor esta otra:
from .models import Choice, Question, CategoriaY añade al final la siguiente línea:
admin.site.register(Categoria) -
Despliega el cambio producido al crear la nueva tabla en el entorno de producción.
-
:::tip Explica los cambios que has realizado en el entorno de desarrollo y cómo lo has desplegado en producción para cada una de las modificaciones. Entrega pantallazos donde se vean las distintas modificaciones y que todo está funcionando. :::