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 dependencias 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 pipTambién necesitarás instalar el servidor web Nginx para servir la aplicación Python. Puedes hacerlo usando el siguiente comando:
# apt-get install nginx -yCrea 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 venvDespués, activa el entorno virtual con el comando que ves a continuación:
# source venv/bin/activatePara seguir, instala Flask y Gunicorn con el siguiente comando:
# pip install wheel
# pip install gunicorn flaskAhora crea una aplicación Python simple con este comando:
# nano ~/flaskapp/flaskapp.pyAñ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.pyDeberí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.pyAñ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:
# deactivateCrea 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.serviceAñ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.targetGuarda y cierra el archivo y después establece la propiedad y permisos adecuados con el siguiente comando:
# chown -R root:www-data /root/flaskapp
# chmod -R 775 /root/flaskappPara seguir, recarga el demonio systemd con el siguiente comando:
# systemctl daemon-reloadDespués, inicia el servicio de flask y habilítalo para que se inicie al reiniciar el sistema:
# systemctl start flaskapp
# systemctl enable flaskappA continuación, verifica el estado de flask con el siguiente comando:
# systemctl status flaskappDeberí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.confAñ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 nginxAccede 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 :)