Created
June 2, 2021 21:00
-
-
Save argenisosorio/cfa164168770e5a8fedaf55790fd1d9c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
En este ejemplo trabajaremos con un entorno virtual de python, y nuestro | |
proyecto de Django se llama "prueba". | |
El fichero wsgi.py que está junto al settings.py lo moveremos a la raíz del | |
proyecto, esto para que uwsgi lo consiga con la configuración que haremos luego. | |
Instalamos nginx. | |
# apt-get install nginx | |
Instalamos uwsgi globalmente y el plugin de uwsgi de python. | |
# apt-get install uwsgi uwsgi-core | |
Para python 2.7. | |
# apt-get install uwsgi-plugin-python | |
El crear y mover ficheros o directorios lo harémos siempre como root. | |
Ahora vamos a configurar nginx y a mover la aplicación "prueba" al directorio de | |
trabajo /srv. | |
En /etc/nginx/sites-available vamos a crear un fichero de configuración para | |
nuestra aplicación "prueba" | |
/etc/nginx/sites-available# touch prueba | |
Ahora vamos a empezar a crear la configuración del sitio | |
/etc/nginx/sites-available# vim prueba | |
Nuestro fichero debería quedar mas o menos así: | |
server { | |
#Puerto por el que va a escuchar el servidor | |
listen 80; | |
#Dirección ip de nuestra máquina | |
#Va a ser la url o dirección por donde se va a servir la aplicación | |
server_name 192.168.12.148; | |
#Codificación de caracteres de la configuración | |
charset utf-8; | |
# Cuerpo máximo del mensaje permitido en una petición | |
client_max_body_size 30M; | |
client_body_buffer_size 128k; | |
#Ruta en que está alojada la aplicación | |
#root /srv/prueba; | |
# Habilitamos los logs de acceso de nginx | |
access_log /var/log/nginx/prueba.access.log; | |
# Habilitamos los logs de error de nginx | |
error_log /var/log/nginx/prueba.error.log; | |
# Le decimos al servidor donde estan los estáticos de la aplicación | |
location /static/ { | |
root /srv/prueba/; | |
} | |
# Configuración adicional para trabajar con uwsgi | |
# Esto es necesario solo si el sistema va a correr por una ruta | |
#location ~ ^/(?<ruta>/.*)?$ { | |
#location ~ ^/{ | |
location / { | |
uwsgi_pass unix:/var/run/uwsgi/app/prueba/socket; | |
include uwsgi_params; | |
uwsgi_param UWSGI_SCHEME $http_x_forwarded_protocol; | |
uwsgi_param SCRIPT_NAME /; | |
# Esto es necesario solo si el sistema va a correr por una ruta | |
#adicional al dominio, ejemplo: domain/ruta_adicional | |
#uwsgi_param PATH_INFO $ruta; | |
# Tiempo de espera en la conexión de nginx con uwsgi. | |
uwsgi_read_timeout 600; | |
} | |
} | |
Ahora creamos un enlace simbólico de sites-available a sites-enabled | |
# ln -s /etc/nginx/sites-available/prueba /etc/nginx/sites-enabled/ | |
Al listar los directorios en sites-enabled nos quedará así: | |
/etc/nginx/sites-enabled# ls -la | |
total 8 | |
drwxr-xr-x 2 root root 4096 ago 25 08:31 . | |
drwxr-xr-x 6 root root 4096 ago 25 07:59 .. | |
lrwxrwxrwx 1 root root 34 ago 25 07:59 default -> /etc/nginx/sites-available/default | |
lrwxrwxrwx 1 root root 25 ago 25 08:31 prueba -> ../sites-available/prueba | |
Verificamos que esté bien la configuración del nginx con: | |
# nginx -t | |
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok | |
nginx: configuration file /etc/nginx/nginx.conf test is successful | |
Ahora harémos las configuraciones de uwsgi en /etc/uwsgi | |
# cd /etc/uwsgi | |
etc/uwsgi# ls | |
apps-available apps-enabled | |
Al igual que en nginx crearemos un fichero de configuración, pero este va a ser | |
un xml que se va a guardar en apps-available: | |
Tenemos que tener mucho cuidado al momento de configurar este fichero, las rutas | |
deben ser declaradas muy bien, especial énfasis en la ruta del entorno virtual, | |
y el usuario del sistema y grupo dueño de la aplicación, así como la ruta local | |
o dirección donde está alojada la aplicación. | |
# cd /etc/uwsgi/apps-available | |
/etc/uwsgi/apps-available# vim prueba.xml | |
<uwsgi> | |
<threads>100</threads> | |
<workers>2</workers> | |
<master/> | |
<chmod-socket>666</chmod-socket> | |
<!-- Ruta del entorno virtual donde está instalado Django --> | |
<!-- Si el django está instalado en el sistema base no hace falta | |
especificar alguna ruta, solo se comenta o borra la directiva home --> | |
<home>/home/user/Entornos_virtuales/Django_1.8.8</home> | |
<!-- prueba hace referencia a los archivos de configuración que creamos | |
en apps-available, en este caso, prueba.xml --> | |
<socket>/var/run/uwsgi/app/prueba/socket</socket> | |
<pidfile>/var/run/uwsgi/app/prueba/pid</pidfile> | |
<!-- Identificador de usuario con el que se va a correr el proyecto --> | |
<uid>root</uid> | |
<!-- Identificador del grupo que puede correr la aplicación --> | |
<gid>root</gid> | |
<log-x-forwarded-for/> | |
<post-buffering>4096</post-buffering> | |
<max-requests>1000</max-requests> | |
<!-- Ruta donde está alojado el código fuente de la aplicación --> | |
<chdir>/srv/prueba</chdir> | |
<!-- Ruta donde está alojado el código fuente de la aplicación y el | |
directorio donde esta el wsgi.py etc... --> | |
<pythonpath>/srv/prueba/prueba/</pythonpath> | |
<module>wsgi</module> | |
<!-- Si usamos python 3 en el proyecto configuramos "python3" --> | |
<plugins>python27</plugins> | |
</uwsgi> | |
Guardamos como prueba prueba.xml y ahora creamos el enlace simbolico en | |
app-enabled. | |
# ln -s /etc/uwsgi/apps-available/prueba.xml /etc/uwsgi/apps-enabled/ | |
Reiniciar servicio de nginx | |
# systemctl restart nginx | |
Reiniciar el servicio de uwsgi | |
# systemctl restart uwsgi | |
Cada vez que se haga un cambio en la configuración de nginx reiniciaremos el | |
servicio, y si el cambio es de python, es decir en el proyecto de Django | |
entonces reiniciaremos el servicio de uwsgi o si hubo una modificación en la | |
configuración de uwsgi también reiniciamos el servicio. | |
Para no detener e iniciar los servicios y a su vez tumbar las conexiones | |
usaremos reload en vez de restart: | |
# systemctl reload nginx | |
Si todo está bien, podemos visitar la ip local desde el navegador, | |
192.168.12.148 configurada en nginx y por la cual va a estar servida la | |
aplicación. | |
Si la aplicación no se muestra nos ayudaremos con los logs a encontrar el error | |
Para ver en tiempo real el log de accesos del servidor a nuestra aplicación: | |
# tailf /var/log/nginx/prueba.access.log | |
Para ver en tiempo real el log de errores del servidor en nuestra aplicación : | |
# tailf /var/log/nginx/prueba.error.log | |
Para ver en tiempo real el log de uwsgi: | |
# tailf /var/log/uwsgi/app/prueba.log |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment