Implementación de Python con uwsgi
Python
En este sitio, encontrará una guía paso a paso sobre cómo implementar una aplicación Python usando uWSGI con NGINX .
Creando un sitio Python #
Cree un sitio de Python con la versión de Python correcta y asegúrese de que el puerto de la aplicación sea correcto.
Creando una configuración uWSGI
Para ejecutar una aplicación Python en producción, utilizamos el proyecto uWSGI , que garantiza que nuestra aplicación esté disponible después de reiniciar.
- Inicie sesión mediante SSH con el usuario raíz y vaya al directorio de aplicaciones uwsgi :
cd /etc/uwsgi/apps-enabled/
- Cree un archivo de configuración como domain.uwsgi.ini y modifique la configuración de ejemplo a continuación según sus necesidades:
CONFIGURACIÓN DE UWSGI
Cambie los valores de socket , wsgi-file , uid y gid .
Es posible que desee consultar la documentación oficial de uWSGI para obtener más configuraciones.
En la documentación de Django encontrará información útil sobre cómo implementar aplicaciones Django a través de uWSGI .
[uwsgi]plugins = python3master = trueprotocol = uwsgisocket = 127.0.0.1:8090wsgi-file = /home/site-user/htdocs/python-project/wsgi.py
# In case you're using virtualenv uncomment this:#virtualenv = /home/site-user/htdocs/python-project
# Needed for OAuth/OpenIDbuffer-size = 8192
# Reload when consuming too much of memoryreload-on-rss = 250
# Increase number of workers for heavily loaded sitesworkers = 4
# Enable threads for Sentry error submissionenable-threads = true
# Child processes do not need file descriptorsclose-on-exec = true
# Avoid default 0000 umaskumask = 0022
# Run as weblate useruid = site-usergid = site-user
# Enable harakiri mode (kill requests after some time)# harakiri = 3600# harakiri-verbose = true
# Enable uWSGI stats server# stats = :1717# stats-http = true
# Do not log some errors caused by client disconnectsignore-sigpipe = trueignore-write-errors = truedisable-write-exception = true
Cambio de host virtual #
- Vaya al Vhost de su sitio .
A continuación verá el vhost predeterminado . Está reenviando todas las solicitudes a través de proxy inverso al App Port .
Es útil para el desarrollo en el que se utiliza el servidor integrado , proporcionado por la mayoría de las aplicaciones Python .
server { listen 80; listen [::]:80; listen 443 ssl http2; listen [::]:443 ssl http2; {{ssl_certificate_key}} {{ssl_certificate}} server_name www.domain.com; {{root}}
{{nginx_access_log}} {{nginx_error_log}}
if ($scheme != "https") { rewrite ^ https://$host$uri permanent; }
location ~ /.well-known { auth_basic off; allow all; }
{{settings}}
index index.html;
location /uwsgi { include uwsgi_params; uwsgi_read_timeout 3600; #uwsgi_pass unix:///run/uwsgi/app/weblate/socket; uwsgi_pass 127.0.0.1:{{app_port}}; }
location / { proxy_pass http://127.0.0.1:{{app_port}}/; proxy_http_version 1.1; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-Server $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; proxy_set_header Host $http_host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_pass_request_headers on; proxy_max_temp_file_size 0; proxy_connect_timeout 900; proxy_send_timeout 900; proxy_read_timeout 900; proxy_buffer_size 128k; proxy_buffers 4 256k; proxy_busy_buffers_size 256k; proxy_temp_file_write_size 256k; }
location ~* ^.+\.(css|js|jpg|jpeg|gif|png|ico|gz|svg|svgz|ttf|otf|woff|woff2|eot|mp4|ogg|ogv|webm|webp|zip|swf)$ { add_header Access-Control-Allow-Origin "*"; expires max; access_log on; }
if (-f $request_filename) { break; }}
- Reemplace el vhost predeterminado con el siguiente, reemplazando la ubicación / para reenviar todas las solicitudes al servicio uWSGI .
NOMBRE DEL SERVIDOR
Reemplace el valor de server_name con su dominio.
server { listen 80; listen [::]:80; listen 443 ssl http2; listen [::]:443 ssl http2; {{ssl_certificate_key}} {{ssl_certificate}} server_name www.domain.com; {{root}}
{{nginx_access_log}} {{nginx_error_log}}
if ($scheme != "https") { rewrite ^ https://$host$uri permanent; }
location ~ /.well-known { auth_basic off; allow all; }
{{settings}}
index index.html;
location / { include uwsgi_params; uwsgi_read_timeout 3600; #uwsgi_pass unix:///run/uwsgi/app/weblate/socket; uwsgi_pass 127.0.0.1:{{app_port}}; }
#location ~* ^.+\.(css|js|jpg|jpeg|gif|png|ico|gz|svg|svgz|ttf|otf|woff|woff2|eot|mp4|ogg|ogv|webm|webp|zip|swf)$ { # add_header Access-Control-Allow-Origin "*"; # expires max; # access_log on; #}
if (-f $request_filename) { break; }}
Reiniciar el servicio uwsgi #
Reinicie el servicio uwsgi a través de systemctl para aplicar nuestra configuración.
systemctl restart uwsgi
Número de verificación de servicio
Para verificar si uwsgi está escuchando en nuestro puerto solicitado, por ejemplo, 8090 , usamos netstat :
netstat -tulpn |grep uwsgi
Si todo es correcto, deberías ver un resultado como este:
tcp 16 0 127.0.0.1:8090 0.0.0.0:* LISTEN 8872/uwsgi
Reinicie su instancia para confirmar que su aplicación funciona como se esperaba.
Registros #
Para solucionar problemas, puede consultar los registros de uwsgi , ubicados en /var/log/uwsgi/app/ .