No, no es necesario que me digan que estoy loco porque eso es sabido… Sólo dejo esto porque de seguro me acompañará durante algunos meses más y a alguien también podría ayudarle. Sin entrar en los motivos para usar Windows y no LINUX, o porqué no usar otros servidores «conocidos», diré que el proyecto necesita estar operativo en breve tiempo y que la cantidad de usuarios concurrentes no será mayor a 15 usuarios. Desde ese punto de vista, Waitress se asoma como la mejor opción… Veamos cómo saldrá todo esto!
Crear el archivo de dependencias Python
Un paso lógico, debemos establecer las dependencias utilizadas por el proyecto para poder replicarlo en el servidor de producción, esto lo hacemos con el siguiente comando:
pip freeze > requirements.txt
donde requirements.txt representa el nombre que tendrá el archivo dentro de tu proyecto que almacenará las dependencias, yo por comodidad, utilizo requirements.txt regularmente.
Hacer commit y push al proyecto
otro de esos pasos lógicos que generalmente no hacemos y es que la importancia de dejar el archivo de dependencias de python dentro del proyecto es vital a la hora del despliegue.
Vamos al servidor de Producción…
¿Usas un motor de Base de Datos? ¡Instálalo!
En mi caso, utilizamos PostgreSQL 11
Instalamos Python 3
¿Alguna duda al respecto?
Creamos el entorno virtual de Python
C:\Proyecto> python3 -m venv env
donde env representa el nombre que tendrá la carpeta dentro de tu proyecto, yo por comodidad, utilizo env regularmente.
Activamos el entorno virtual
C:\Proyecto> env\Scripts\activate.bat
Instalamos las dependencias de Python
(env) C:\Proyecto> pip install -r requirements.txt
Actualizamos PIP
(env) C:\Proyecto> python -m pip install --upgrade pip
Creamos los modelos de datos en Motor
Otro de esos pasos lógicos que siempre olvidamos… crear el modelo de datos, entramos al interprete
(env) C:\Proyecto> python
Y luego cargamos los modelos
from proyecto import db
db.create_all()
Verificamos en el software de administración del motor de datos que todo esté bien…
Lanzamos el servidor de desarrollo
(env) C:\Proyecto> python proyecto.py
* Serving Flask app "proyecto" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Restarting with stat
* Debugger is active!
* Debugger PIN: 115-501-928
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
Ha levantado nuestro servidor de desarrollo, hasta el momento vamos bien…
Waitress WSGI Server
Waitress es un servidor WSGI de Python puro. A primera vista, puede parecer que no es muy diferente a muchos otros; sin embargo, su filosofía de desarrollo lo separa del resto. Su objetivo es aliviar la carga de producción (y desarrollo) causada por los servidores web para los desarrolladores de aplicaciones web Python. Waitress logra esto neutralizando los problemas causados por las diferencias de plataforma (ej. Unix vs. Windows), intérprete (CPython vs. PyPy) y Python (versión 2 vs. 3).
¿Por qué deberías considerar usarlo?
- Es una solución muy delgada y pura de Python.
- Es compatible con HTTP / 1.0 y HTTP / 1.1 (Keep-Alive).
- Viene listo para ser implementado para producción con una amplia gama de soporte de plataforma.
- Es independiente del framework que utilices.
- Se ejecuta en Windows y Linux.
- Es compatible con las versiones 2 y 3 de Python.
Implementando Waitress
Debemos importar Waitress como servidor… la última línea corresponde a ello
from flask import Flask, render_template, request, redirect, url_for, make_response
from flask_sqlalchemy import SQLAlchemy
import pdfkit
import datetime
from waitress import serve
Luego, el llamado a Waitress
if __name__ == "__main__":
serve(app, host='0.0.0.0', port=8000)
Ahora, para lanzar la aplicación en producción usamos el mismo comando de siempre
(env) C:\Proyecto>python proyecto.py
el cual, nos mostrará algo similar a esto…
Serving on http://mi-equipo:8000
Me queda pendiente ver las opciones de Waitress para optimizarlo, eso será material para otra publicación.
Quisiera agradecer desde este humilde Blog a quien ha sido un referente en mi incipiente paso por Python, Juan José Lozano Gómez, les invito a visitar su sitio web el cual tiene tutoriales muy interesantes de Python y Flask. Muchas gracias Juan José por el tiempo dedicado a tu sitio web y a compartir tu conocimiento, en español y de forma gratuita para la comunidad.
Héctor Mansilla Arias