sábado, 15 de diciembre de 2018

Deploy Django 2.1 en Ubuntu Server 18.04 con Apache2

https://goo.gl/8uZwhf
#Deploy #Django2.1 #Django #Ubuntu #Ubuntu18.04 #Apache2 #Clase #Gratis #Curso #Python

Nuevamente por acá, esta vez con un artículo que espero les sea de interés.  Como hemos estado viendo en el curso de Desarrollo Web con Python usando Django 2.1 (click acá para ir al curso), hace falta hacer el deploy de nuestra aplicación a algún servidor de producción.

En esta ocasión, mostraré cómo realizar ese deploy en un Servidor Ubuntu con Apache2.  Veremos qué debemos instalar o actualizar y cómo pasar nuestro proyecto a dicho servidor.

Primero debemos revisar qué versión de python3 está instalado, aunque en el curso trabajamos con python 3.7, podemos hacer el deploy sobre python 3.6 que es la versión que viene por defecto en Ubuntu.



Antes de realizar cualquier acción debemos actualizar los repositorios

Luego procedemos a instalar python3 y python-dev, en el caso de python3 se actualizará a la última versión de 3.6 y el python-dev son herramientas que se requieren para el deploy.



Luego instalaremos apache2, quien será el servidor web encargado de "procesar"  los archivos estáticos, se apoya del módulo wsgi, que interpretará los archivos de python.



Para poder instalar el módulo wsgi, debemos agregar repositorio universe.


 Y luego instalamos el módulo de apache que interpreta python, libapache2-mod-wsgi-py3



Ahora instalaremos el módulo de Python3 que servirá para crear el entorno virtual, ya que estamos con python 3.6 es necesario instalarlo, python 3.7 ya lo trae integrado.



Ahora copiaremos nuestro proyecto al nuevo servidor, para esto primero creé un directorio en el home de mi usuario en Ubuntu



Copio el proyecto con el comando PSCP de putty.



Y así ya está copiado en el servidor.



Creamos el entorno virtual, esta vez utilizando buenas prácticas lo hacemos dentro de la carpeta del proyecto.



En mi caso, quise instalar offline los paquetes, por tanto bajé de pypi.org, todos los paquetes a instalar y los pasé al servidor Ubuntu.



Ahora activo el entorno virtual para instalar dentro de él todos las aplicaciones/módulos/paquetes descargados anteriormente.



Procedo a instalar todos los paquetes.



 Incluyendo ReportLab con su dependencia (Pillow)



Verificamos que estén todos los requeridos para nuestra aplicación



La base de datos, la tendré en otro servidor, por eso actualizo la ruta de acceso y credenciales hacia la base de datos, recuerden que en el servidor de base de datos deben dar acceso a este nuevo servidor.



Para poder hacer pruebas, instalé un navegador de consola llamado lynx, la idea principal es arrancar el servidor y navegar en la aplicación, pero como el server únicamente corre local, no es posible verlo desde fuera del equipo de desarrollo, por tal motivo, decidí bajar esta aplicación, no es necesario que Uds. lo hagan, en mi caso lo hice para confirmar que la aplicación levanta bien en el nuevo entorno (Ubuntu).



Arrancar el servidor local, aparcen algunos warnings, pero no es tan necesario preocupase por ellos. Lo importante es que veamos que el servidor arrancó.



Abrí otra ventana de mi consola (ya saben que uso CMDER) y me conecté al mismo servidor, utilicé lynx para poder navegar en el servidor local de Django.



Pruebo que el servidor cargue y que tenga acceso a la base de datos.





Finalmente, cuando veo que cargó bien, procedo a desactivar el entorno virtual, ya en este punto, sé que el servidor está corriendo perfectamente.



Ahora procedemos a trabajar con el servidor apache. Primero que todo, pasamos (copiamos) el proyecto (con el entorno virtual) hacia los directorios de apache en un directorio nuevo llamado vhosts.


Luego cambiamos los permisos sobre el directorio vhosts, al grupo www-data. En la siguiente imágen vemos el antes y el después.



Ahora vamos a editar el archivo de configuración del sitio por default que trae apache.



En este punto es donde redireccionamos python para que levante con el entorno virtual, esto es, la versión de python contenida en el entorno virtual.



Importante es el alias que se define hacia la ruta donde están los archivos estáticos, luego se requiere permisos full sobre esa carpeta y sobre la carpeta del proyecto (en mi caso demo) y sobre el archivo wsgi.py que es el archivo de configuración que ya trae python.

Finalizamos la edición del archivo configurando el módulo de apache para python, con las líneas
WSGIDeamonProcess, WSGIProcessGroup y WSGIScriptAlias, notar la ruta que deben actualizar para su propio interés.

Luego debemos reiniciar apache y para revisar que todo ande bien, mostramos los errores, se debe tener en claro que cada vez que se cambie algo de python (sea contenido o configuración), se debe reiniciar el servidor apache.




Intenamos acceder a la aplicación desde afuera y vemos que nos aparece un error.



En efecto, hacía falta cambiar los hosts autorizados para levantar nuestro




Ahora volvemos a reiniciar el sevidor y mostramos el log de errores.



Vemos que todo bien y volvemos a acceder desde otra terminal (o pc) a nuestra aplicación y si hemos seguido al pie de la letra esta clase, deberíamos de poder ver algo como lo siguiente.



Accedemos para ver si funciona bien y si está accediendo a la base de datos.

Y a como dije, vemos que todo levanta bien.


También vemos que la reportería esté funcionando.




Y con esto ya tenemos nuestra aplicación desplegada en un servidor externo al equipo que usamos para desarrollo y que puede ser accedido por otras personas.  Ya podemos decir que nuestro proyecto está desplegado en Ubuntu Server con Apache. 

Esta opción bien podría compararse a contratar un VPS de Digital Ocean (por ejemplo) o un servidor de producción personalizado.

Aún quedan más clases extras del curso, veremos más adelante cómo realizar el despliegue en otras plataformas, si estás interesado en recibir notificaciones, registrate en la ventana popup que sale o en el siguiente espacio.







También recuerda estar atento a mis redes sociales, especialmente Facebook, Youtube (esta clase tendrá un video ahí), Twitter y Tumblr.




0 comentarios:

Publicar un comentario

¿Tienes algún comentario? ¿Qué te ha parecido este artículo? Cuéntalo.

 
>