En este tutorial te mostramos cómo implementar una aplicación Python usando Flask y Nginx en Debian 10.
Flask es un framework sencillo y ligero para Python, que proporciona todas las utilidades y bibliotecas que te ayudan a implementar una aplicación web utilizando este lenguaje. Generalmente, los desarrolladores desplegan una aplicación Flask en un entorno local. Es posible que tengas que implementar la aplicación Flask en el entorno de producción si deseas ofrecer tu aplicación a los usuarios a través de Internet.
Requisitos
- Un servidor corriendo con Debian 10.
- Una contraseña root configurada en tu servidor.
Instala las dependencies requeridas
Primero, necesitarás instalar Python y otras dependencias requeridas en tu sistema. Puedes instalarlos todos usando el siguiente comando:
# apt-get install python3-pip libssl-dev libffi-dev python3-dev build-essential python3-setuptools -y
Una vez todos los paquetes estén instalados, instala un paquete de entorno virtual de Python con el siguiente comando:
# apt-get install python3-venv -y
Para continuar, actualiza el PIP a la última versión con el siguiente comando:
# pip3 install --upgrade pip
También necesitarás instalar el servidor web Nginx para servir la aplicación Python. Puedes hacerlo usando el siguiente comando:
# apt-get install nginx -y
Crea una aplicación Python
En esta sección, instalaremos Flask y crearemos una aplicación Python.
Primero, crea un directorio para tu aplicación usando este comando:
# mkdir ~/flaskapp
A continuación, cambia el directorio a tu aplicación y crea un entorno virtual de Python:
# cd ~/flaskapp
# python3 -m venv venv
Después, activa el entorno virtual con el comando que ves a continuación:
# source venv/bin/activate
Para seguir, instala Flask y Gunicorn con el siguiente comando:
# pip install wheel
# pip install gunicorn flask
Ahora crea una aplicación Python simple con este comando:
# nano ~/flaskapp/flaskapp.py
Añade las siguientes líneas:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "<h1 style='color:DodgerBlue'>Welcome to Python Application!</h1>"
if __name__ == "__main__":
app.run(host='0.0.0.0')
Guarda y cierra el archivo y luego ejecuta tu aplicación con el siguiente comando:
# cd ~/flaskapp/
# python3 flaskapp.py
Deberías obtener este resultado:
* Serving Flask app "flaskapp" (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: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
Presiona "CTRL+C" para parar la aplicación.
Configura Gunicorn para ejecutar tu aplicación
En este apartado, crearás un archivo wsgi y configurarás Gunicorn para ejecutar tu aplicación Python.
Primero, crea un archivo wsgi.py:
# nano ~/flaskapp/wsgi.py
Añade las siguientes líneas:
from flaskapp import app
if __name__ == "__main__":
app.run()
Guarda y cierra el archivo y luego ejecuta tu aplicación con Gunicorn:
# cd ~/flaskapp/
# gunicorn --bind 0.0.0.0:5000 wsgi:app
Éste es el resultado que deberías obtener:
(venv) root@debian10:~/flaskapp# gunicorn --bind 0.0.0.0:5000 wsgi:app
[2021-04-21 07:25:03 +0000] [8483] [INFO] Starting gunicorn 20.1.0
[2021-04-21 07:25:03 +0000] [8483] [INFO] Listening at: http://0.0.0.0:5000 (8483)
[2021-04-21 07:25:03 +0000] [8483] [INFO] Using worker: sync
[2021-04-21 07:25:03 +0000] [8486] [INFO] Booting worker with pid: 8486
Presiona "CTRL+C" para parar la aplicación.
A continuación, desactiva tu entorno virtual Python con el siguiente comando:
# deactivate
Crea un servicio de ficheros Systemd para tu aplicación Python
Para continuar, deberás crear un archivo de servicio systemd para administrar la aplicación Python.
Puedes crearlo con el siguiente comando:
# nano /etc/systemd/system/flaskapp.service
Añade las siguientes líneas:
[Unit]
Description=Gunicorn instance to serve Flask
After=network.target
[Service]
User=root
Group=www-data
WorkingDirectory=/root/flaskapp
Environment="PATH=/root/flaskapp/venv/bin"
ExecStart=/root/flaskapp/venv/bin/gunicorn --bind 0.0.0.0:5000 wsgi:app
[Install]
WantedBy=multi-user.target
Guarda y cierra el archivo y después establece la propiedad y permisos adecuados con el este comando:
# chown -R root:www-data /root/flaskapp
# chmod -R 775 /root/flaskapp
Para seguir, recarga el demonio systemd con el siguiente comando:
# systemctl daemon-reload
Después, inicia el servicio de flask y habilítelo para que se inicie al reiniciar el sistema:
# systemctl start flaskapp
# systemctl enable flaskapp
A continuación, verifica el estado de flask con el siguiente comando:
# systemctl status flaskapp
Deberías ver el resultado que te mostramos aquí:
● flaskapp.service - Gunicorn instance to serve Flask
Loaded: loaded (/etc/systemd/system/flaskapp.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2021-04-21 07:25:51 UTC; 4s ago
Main PID: 8506 (gunicorn)
Tasks: 2 (limit: 2359)
Memory: 26.0M
CGroup: /system.slice/flaskapp.service
├─8506 /root/flaskapp/venv/bin/python3 /root/flaskapp/venv/bin/gunicorn --bind 0.0.0.0:5000 wsgi:app
└─8508 /root/flaskapp/venv/bin/python3 /root/flaskapp/venv/bin/gunicorn --bind 0.0.0.0:5000 wsgi:app
Apr 21 07:25:51 debian10 systemd[1]: Started Gunicorn instance to serve Flask.
Apr 21 07:25:51 debian10 gunicorn[8506]: [2021-04-21 07:25:51 +0000] [8506] [INFO] Starting gunicorn 20.1.0
Apr 21 07:25:51 debian10 gunicorn[8506]: [2021-04-21 07:25:51 +0000] [8506] [INFO] Listening at: http://0.0.0.0:5000 (8506)
Apr 21 07:25:51 debian10 gunicorn[8506]: [2021-04-21 07:25:51 +0000] [8506] [INFO] Using worker: sync
Apr 21 07:25:51 debian10 gunicorn[8506]: [2021-04-21 07:25:51 +0000] [8508] [INFO] Booting worker with pid: 8508
Configura Nginx para servir la aplicación de Python
Para seguir, deberás crear un archivo de configuración de host virtual Nginx para servir la aplicación Python.
# nano /etc/nginx/conf.d/flaskapp.conf
Añade las siguientes líneas:
server {
listen 80;
server_name app.example.com;
location / {
include proxy_params;
proxy_pass http://127.0.0.1:5000;
}
}
Guarda y cierra el archivo y después reinicia Nginx para aplicar los cambios de configuración:
# systemctl restart nginx
Accede a la aplicación de Python
Ahora abre tu navegador web y accede a tu aplicación Python con la URL http://app.ejemplo.com. Deberías ver tu aplicación en la siguiente pantalla:
¡Felicidades! Has implementado con éxito una aplicación Python con Flask y Nginx en un servidor cloud con Debian 10.
Esperamos que ahora puedas mover fácilmente tu aplicación Python del entorno local al entorno de producción.
Si tienes alguna pregunta sobre este tutorial, escríbenos a soporte@clouding.io. Nos encantará resolverla :)