En el siguiente tutorial vamos a ver como desplegar Flask con Nginx y UWsgi tanto en Ubuntu 17.10 como en Debian 9. Es un procedimiento que he probado tanto en mi Linux de escritorio como en un servidor virtual de Digitalocean (Dropet). Puede servir tanto a principiantes como profesionales. Y además es compatible con otros frameworks como Django.
Instalación mínima
Actualizamos e instalamos lo que necesitaremos.
apt-get update \
&& apt-get -y dist-upgrade \
&& apt-get -y install python3-pip python3-dev nginx nano \
&& pip3 install virtualenv
Creamos un nuevo usuario, lo llamaré sonia, y su directorio.
mkdir -p /home/sonia/miproyecto \
&& useradd -d /home/sonia sonia
Preparando Python
Creamos y activamos VirtualEnv.
cd /home/sonia/miproyecto \
&& virtualenv .venv \
&& source /home/sonia/miproyecto/.venv/bin/activate
Instalamos Flask y UWSGI.
pip install uwsgi flask
Creamos el archivo Flask.
nano /home/sonia/miproyecto/app.py
Dentro pegamos:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello():
return "<h1>Hola Mundo!</h1>"
if __name__ == "__main__":
app.run(host='0.0.0.0')
Testeamos app.py.
python app.py
Al entrar con el navegador en la ip del servidor deberíamos ver: Hola mundo!
http://123.456.789.012
WSGI
Creamos el punto de entrada para WSGI
nano /home/sonia/miproyecto/wsgi.py
Y pegamos:
from app import app
if __name__ == "__main__":
app.run()
Testeamos UWSGI
uwsgi --socket 0.0.0.0:5000 --protocol=http -w wsgi:app
Al entrar de nuevo con el navegador en la ip del servidor, seguido de :5000, deberíamos ver: Hola mundo!
http://123.456.789.012:5000
Desactivamos VirtualEnv
deactivate
Creamos el archivo de configuración para uWSGI
nano /home/sonia/miproyecto/miproyecto.ini
Y pegamos:
[uwsgi]
module = wsgi:app
master = true
processes = 5
socket = miproyecto.sock
chmod-socket = 660
vacuum = true
die-on-term = true
Servicio Systemd
Creamos el archivo de servicio systemd
nano /etc/systemd/system/miproyecto.service
Y pegamos:
[Unit]
Description=uWSGI instance to serve miproyecto
After=network.target
[Service]
User=sonia
Group=www-data
WorkingDirectory=/home/sonia/miproyecto
Environment="PATH=/home/sonia/miproyecto/.venv/bin"
ExecStart=/home/sonia/miproyecto/.venv/bin/uwsgi --ini miproyecto.ini
[Install]
WantedBy=multi-user.target
Damos los permisos adecuados. A sonia la introducimos en el grupo www-data:
usermod -aG www-data sonia
chown -R sonia:www-data /home/sonia/*
Iniciamos y habilitamos el servicio
systemctl start miproyecto
systemctl enable miproyecto
Nginx
Creamos el siguiente archivo
nano /etc/nginx/sites-available/miproyecto
Y pegamos dentro:
server {
listen 80;
server_name midominio.com;
location / {
include uwsgi_params;
uwsgi_pass unix:///home/sonia/miproyecto/miproyecto.sock;
}
}
No olvidemos cambiar midominioc.com por mi dominio real.
Creamos el enlace simbólico para activarlo.
ln -s /etc/nginx/sites-available/miproyecto /etc/nginx/sites-enabled
Y reiniciamos Nginx.
systemctl restart nginx
{{ comments.length }} comentarios