Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save argenisosorio/cfa164168770e5a8fedaf55790fd1d9c to your computer and use it in GitHub Desktop.
Save argenisosorio/cfa164168770e5a8fedaf55790fd1d9c to your computer and use it in GitHub Desktop.
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