Procesa PDFs en una API con Flask + Heroku + Gunicorn
Hola! Desarrollando un proyecto, me he visto obligado a tener que procesar archivos PDF con python en la nube. Para ello, he aprendido a usar flask, gunicorn y Heroku. En este post enseñaré cómo lo he hecho.
Heroku es una plataforma como servicio (PaaS) que permite a los desarrolladores crear, ejecutar y operar aplicaciones completamente en la nube.
Gunicorn es un servidor HTTP Python WSGI para UNIX. Es ampliamente compatible con varios marcos web, se implementa de forma sencilla, tiene pocos recursos de servidor y es bastante rápido.
Flask es un framework minimalista escrito en Python que permite crear aplicaciones web rápidamente y con un mínimo número de líneas de código.
Creando el servidor en local
Antes de nada primero crearemos y probaremos el servidor de forma local.
Para ello crea tu carpeta de trabajo, entra dentro de ella y luego crea un entorno virtual python:
python -m venv env
Luego debes activarlo, en Windows:
.\env\Scripts\activate
En Linux o MacOS:
source env/bin/activate
.gitignore
Este archivo es importante para no subir a heroku todos las dependencias externas, ya que se descargaran automáticamente gracias a requirements.txt, así que crea un archivo llamado .gitignore, y dentro contendrá solo la palabra env/
. Puedes hacerlo de forma fácil con el comando echo env/ > .gitignore
tanto para UNIX como Windows.
server.py
Ahora toca crear nuestra aplicación web. En mi caso, llamaré al archivo server.py. Daré el código básico para crear una aplicación que procesa archivos PDF, pero tu aplicación puede ser la que quieras.
para comenzar a trabajar con flask y gunicorn, instalalos con pip install flask flask_cors gunicorn
y si vas a seguir este ejemplo para editar PDFs instala también PyPDF2 pip install PyPDF2
. Para usarlo, mira el siguiente código:
|
|
Para probar el servidor en local, arrancalo con python .\server.py
. Estará disponible en http://localhost:5000
Procfile
Para desplegar el servidor en Heroku usando Gunicorn necesitaremos un archivo llamado Procfile, que en nuestro caso contendrá lo siguiente:
web: gunicorn server:app
siendo server el nombre del archivo python y app la instancia de flask.
Requirements.txt
Es el último archivo que necesitamos. Es el que reúne todas las dependencias necesarias para el proyecto, heroku lo necesita para instalarlas. Para obtener este archivo, ejecuta pip freeze > requirements.txt
Heroku
Para poder desplegar en heroku de forma sencilla, instala la herramienta de heroku CLI. Una vez instalada e iniciada la sesión ( haciendo heroku login
), dentro de nuestra carpeta de trabajo donde tenemos requirements.txt, server.py y Procfile, ejecutaremos heroku create
y crearemos la aplicación.
Ahora toca crear un repositorio git con nuestro código y por fin desplegarlo.
git init
heroku git:remote -a <el nombre de tu app, por ejemplo shrouded-shelf-55195 >
git add .
git commit -am "make it better"
git push heroku master
Si todo ha ido bien, con el último comando se hará el despliegue de tu aplicación en heroku! 😀