Desplegar una aplicación básica
Flask: Desplegar una aplicación básica
Flask es uno de los frameworks más usados para construir APIs y aplicaciones web ligeras en Python. Pero el verdadero desafío no es solo crear la app, sino desplegarla correctamente en producción.
En este post vamos a ver cómo desplegar una app Flask de forma profesional usando Gunicorn + Nginx en un servidor Linux (Ubuntu), y además cómo hacerlo con Docker.
1. Preparar la app Flask
Este es un ejemplo simple:
1
2
3
4
5
6
7
8
9
10
from flask import Flask
app = Flask(__name__)
@app.route('/')
def home():
return "Hola desde Flask!"
if __name__ == "__main__":
app.run()
2. Configuración para producción (Gunicorn)
El comando flask run es solo para desarrollo. En producción se usa Gunicorn:
1
2
pip install gunicorn
gunicorn -w 4 -b 0.0.0.0:8000 app:app
- -w 4 = 4 workers
- app:app = archivo
app.pyy variableapp
3. Servir con Nginx (recomendado)
Instalar Nginx
1
2
sudo apt update
sudo apt install nginx
Configurar Nginx
Crea un archivo:
1
sudo nano /etc/nginx/sites-available/myflask
Y pega:
1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
server_name tu-dominio.com;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Luego activa el sitio:
1
2
3
sudo ln -s /etc/nginx/sites-available/myflask /etc/nginx/sites-enabled
sudo nginx -t
sudo systemctl restart nginx
4. Ejecutar Flask como servicio (systemd)
Crea un servicio para que la app se inicie automáticamente:
1
sudo nano /etc/systemd/system/flask.service
Pega:
1
2
3
4
5
6
7
8
9
10
11
12
13
[Unit]
Description=Gunicorn instance to serve Flask app
After=network.target
[Service]
User=www-data
Group=www-data
WorkingDirectory=/home/usuario/myflask
Environment="PATH=/home/usuario/myflask/venv/bin"
ExecStart=/home/usuario/myflask/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
[Install]
WantedBy=multi-user.target
Inicia el servicio:
1
2
sudo systemctl start flask
sudo systemctl enable flask
Deploy con Docker 🐳 (opción moderna)
Dockerfile
1
2
3
4
5
6
7
8
9
10
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:8000", "app:app"]
Build & Run
1
2
docker build -t myflask .
docker run -d -p 8000:8000 myflask
Bonus: SSL con Let’s Encrypt
Una vez con Nginx funcionando:
1
2
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx
Y listo, tu app queda con HTTPS.
Desplegar Flask no es difícil, pero hacerlo bien requiere separar:
- desarrollo (flask run)
- producción (Gunicorn + Nginx)
En otros artículos, veremos:
- un deploy más avanzado (con Docker Compose + CI/CD)
- un deploy con Railway / Render (más simple)
Esta entrada está licenciada bajo CC BY 4.0 por el autor.