En uno de los sitios que me toco configurar necesite bloquear el acceso a un subdirectorio de un directorio de contenido estático, mientras que el acceso al contenido de los demás subdirectorios debe permanecer disponible, encontre la siguiente forma de hacerlo:
En el archivo de configuración del sitio agregue las líneas en negritas:
server {
listen 80;
...
location ~/static/carpetabloquear/ {
alias /webapps/ruta/al/contenido/static/carpetabloquear/;
}
location /static/ {
alias /webapps/ruta/al/contenido/static/;
}
...
}
De esta forma aunque el usuario tiene acceso para algunos archivos del media dentro del directorio de la carpeta a bloquear no tiene acceso. Fue la forma como encontre hacerlo si has encontrado otra, te agradezco compartirlo.
Espero te sea de utilidad !
Referencias:
http://www.nginxtips.com/nginx-location-directive/
Mostrando entradas con la etiqueta nginx. Mostrar todas las entradas
Mostrando entradas con la etiqueta nginx. Mostrar todas las entradas
domingo, 12 de julio de 2015
martes, 2 de diciembre de 2014
Django, suse, nginx, Gunicorn y supervisor
Como siempre, por necesidad me veo en la tarea de implementar dentro de un servidor suse montado en un AWS EC2, el servicio de ngix para un proyecto en django usando gunicorn y supervisor.
Esta guía esta basada al 100% del video: https://www.youtube.com/watch?v=VDVNgivbvYk la diferencia es que en esta guía se está usando SUSE resolviendo el tema de instalación de nginx fuera de yast.
Posteriormente podemos probar si esta funcionando, entrando al directorio de nuestro proyecto de django y haciendo lo siguiente:
# gunicorn miproyecto.wsgi:application --bind 0.0.0.0:8080
Apunte 3: (Añadido 2015-01-20):
En esta ocasión nos paso que no podíamos configurar en el puerto 80 el servicio, por lo que lo que tuvimos que hacer fue: revisar en si en la configuración de ngnix se estén cargando otros archivos de configuración generalmente antes del server {} si es así comentar las siguientes instrucciones agregando #, esto es:
# include /etc/nginx/conf.d/*.conf;
# incude /etc/nginx/sites-enabled/*;
O bien revisar si estos archivos no estén causando algún conflicto con el puerto 80.
Espero te sea de utilidad !
Esta guía esta basada al 100% del video: https://www.youtube.com/watch?v=VDVNgivbvYk la diferencia es que en esta guía se está usando SUSE resolviendo el tema de instalación de nginx fuera de yast.
Lo primero que debemos considerar es que este funcionando python, django y virtual-env que se escapan a este post. Por lo que el proyecto debe estar funcionando si ejecutamos:
# python manage.py runserver 0.0.0.0:8000
# pip install gunicorn
Posteriormente podemos probar si esta funcionando, entrando al directorio de nuestro proyecto de django y haciendo lo siguiente:
# gunicorn miproyecto.wsgi:application --bind 0.0.0.0:8080
________________________________
Nota:
Si lo queremos poner como servicio:
$ gunicorn miproyecto.wsgi:application --bind 0.0.0.0:8080 --pid /tmp/gunicorn.pid --workers=3 --daemon
Para detenerlo debemos verificar su id de proceso:
$ cat /tmp/gunicorn.pid
####
$ kill -9 ####
________________________________
Si entramos al navegador y usamos la ip del equipo deberiamos ser capacez de ver el proyecto en ejecución: http://IP-del-servidor:8080/
Ahora instalaremos supervisor para mantener todo el tiempo nuestro servidor activo.
El proceso para instalarlo es el siguiente:
# pip install supervisor
Una vez instalado usaremos el archivo supervisord.conf de referencia para obtenerlo usamos el siguiente comando:
# echo_supervisord_conf > ./supervisord.conf
Una vez obtenido lo editaremos usando el siguiente comando:
# vi supervisord.conf
Al final del archivo agregamos las siguientes líneas:
;CONFIGURACION BASICA GUNICORN
[program:gunicorn]
;ruta donde se encuentra el directorio virtual que ejecutara gunicorn
command=/home/ruta-a-virtualenv/virtualmachine/bin/gunicorn miproyecto.wsgi:application --bind 0.0.0.0:8080 --workers=3 --pid /tmp/gunicorn.pid
;Ahora indicamos el directorio donde se almacena el proyecto ...
directory=/home/ruta-al-pryecto/miproyecto/
Una vez teniendo el archivo configurado, podemos ejecutar el servicio usando:
# supervisord
Con eso el servicio esta en ejecución una forma de revisar que se encuentre en ejecución, es revisando que el archivo /tmp/gunicorn.pid se haya generado y tenga el número de proceso del servicio.
Otra forma de ver el servicio es usando el siguiente comando:
# supervisorctl
Para parar el servicio de supervisor:
# supervisorctrl stop gunicorn
Hasta este momento siguiendo los link de referencias logre montar el servidor gunicorn con supervisor.
Ahora vamos a crear un archivo bash de nombre gunicorn_run en la raíz del proyecto django; con el siguiente contenido:
#!/bin/bash
NAME="miproyecto_app" # Nombre del proyecto
DJANGODIR=/home/ruta-al-proyecto/miproyecto #Directorio del proyecto
SOCKFILE=/home/rutal-al-proyecto/run/gunicorn.sock #Ruta del SockFile para nginx
USER=django # Usuario que ejecute las instancias
GROUP=django # Grupo del usuario que ejecute las instancias
NUM_WORKERS=3 # 2 * CPUs + 1
DJANGO_SETTINGS_MODULE=miproyecto.settings # Modulo settings del proyecto
DJANGO_WSGI_MODULE=miproyecto.wsgi # Nombre de la aplicacion para WSGI
echo "Iniciando $NAME como `whoami`"
# Activando el ambiente virtual
cd $DJANGODIR
source /home/ruta-a-virtualenv/virtualmachine/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Creando el directorio del archivo gunicorn.sock por si no existe
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Comando que ejecuta supervisor para correr el servidor gunicorn
exec /home/ruta-a-virtualenv/virtualmachine/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE \
--log-level=debug \
--log-file=-
Dentro del archivo colocaremos lo siguiente sustituyendo la sección del servidor 80 o bien dejando el actual con 8080:
upstream miproyecto_app {
# Este es el que conecta con gunicorn con nginx
server unix:/home/rutal-al-proyecto/run/gunicorn.sock fail_timeout=0;
}
server {
# Puerto de escucha
listen 80;
# Dominios que responden a esta configuracion
server_name example.com
# Configuracion customizada para la subida de statics
client_body_in_file_only clean;
client_body_buffer_size 32K;
client_max_body_size 300M;
sendfile on;
send_timeout 300s;
# Logs de eventos
access_log /home/rutal-al-proyecto/logs/nginx-access.log;
error_log /home/rutal-al-proyecto/logs/nginx-error.log;
# Archivos estaticos
location /static/ {
alias /home/rutal-al-proyecto/static/;
}
# Archivos media
location /media/ {
alias /home/rutal-al-proyecto/media/;
}
# Procesando django
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://miproyecto_app;
break;
}
}
# Error pages
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/rutal-al-proyecto/;
}
}
Ahora instalaremos supervisor para mantener todo el tiempo nuestro servidor activo.
El proceso para instalarlo es el siguiente:
# pip install supervisor
Una vez instalado usaremos el archivo supervisord.conf de referencia para obtenerlo usamos el siguiente comando:
# echo_supervisord_conf > ./supervisord.conf
Una vez obtenido lo editaremos usando el siguiente comando:
# vi supervisord.conf
Al final del archivo agregamos las siguientes líneas:
;CONFIGURACION BASICA GUNICORN
[program:gunicorn]
;ruta donde se encuentra el directorio virtual que ejecutara gunicorn
command=/home/ruta-a-virtualenv/virtualmachine/bin/gunicorn miproyecto.wsgi:application --bind 0.0.0.0:8080 --workers=3 --pid /tmp/gunicorn.pid
;Ahora indicamos el directorio donde se almacena el proyecto ...
directory=/home/ruta-al-pryecto/miproyecto/
Una vez teniendo el archivo configurado, podemos ejecutar el servicio usando:
# supervisord
Con eso el servicio esta en ejecución una forma de revisar que se encuentre en ejecución, es revisando que el archivo /tmp/gunicorn.pid se haya generado y tenga el número de proceso del servicio.
Otra forma de ver el servicio es usando el siguiente comando:
# supervisorctl
Para parar el servicio de supervisor:
# supervisorctrl stop gunicorn
________________________________
Nota: En caso de que necesites recargar el archivo de configuración (a mi me paso jeje), puedes entrar con el comando:
$ supervisorctl
Y posteriormente teclear reload:
supervisor> reload
Pedirá confirmar y posteriormente se recargará la configuración
________________________________
Hasta este momento siguiendo los link de referencias logre montar el servidor gunicorn con supervisor.
Ahora vamos a crear un archivo bash de nombre gunicorn_run en la raíz del proyecto django; con el siguiente contenido:
#!/bin/bash
NAME="miproyecto_app" # Nombre del proyecto
DJANGODIR=/home/ruta-al-proyecto/miproyecto #Directorio del proyecto
SOCKFILE=/home/rutal-al-proyecto/run/gunicorn.sock #Ruta del SockFile para nginx
USER=django # Usuario que ejecute las instancias
GROUP=django # Grupo del usuario que ejecute las instancias
NUM_WORKERS=3 # 2 * CPUs + 1
DJANGO_SETTINGS_MODULE=miproyecto.settings # Modulo settings del proyecto
DJANGO_WSGI_MODULE=miproyecto.wsgi # Nombre de la aplicacion para WSGI
echo "Iniciando $NAME como `whoami`"
# Activando el ambiente virtual
cd $DJANGODIR
source /home/ruta-a-virtualenv/virtualmachine/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$DJANGODIR:$PYTHONPATH
# Creando el directorio del archivo gunicorn.sock por si no existe
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR
# Comando que ejecuta supervisor para correr el servidor gunicorn
exec /home/ruta-a-virtualenv/virtualmachine/bin/gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME \
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--bind=unix:$SOCKFILE \
--log-level=debug \
--log-file=-
Una vez que completemos el archivo y llenemos las secciones que debemos personalizar aplicaremos los persmisos:
# chmod u+x gunicorn_run
Detenemos el gunicorn en caso de tenerlo activo con supervisor, (supervisorctl stop gunicorn) y actualizaremos el supervisord.conf, sustituyendo las líneas que habíamos agregado por:
;CONFIGURACION AVANZADA GUNICORN (Activa)
[program:gunicorn]
;ruta donde se encuentra el archivo bash
command=/home/ruta-al-proyecto/miproyecto/gunicorn_run
;usuario que ejecuta el bash y el comando
username=root
;log de eventos para la gestion de errores
stdout_logfiles=/home/ruta-al-proyecto/logs/gunicorn_supervisor.log
redirect_stderr=true
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8
Una vez realizado lo anterior generaremos la carpeta de logs:
# mkdir /home/ruta-al-proyecto/logs/
Ahora iniciamos con la instalación de nginx en suse. Para realizarlo ejecutamos, los siguientes comandos:
# wget http://nginx.org/download/nginx-1.6.0.tar.gz
# make
# make install
----
Para hacerlo servicio se debe crear el siguiente archivo:
# vi /etc/init.d/nginx
Con el siguiente contenido:
#! /bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/nginx/sbin
DAEMON=/usr/local/nginx/sbin/nginx
NAME=nginx
DESC=nginx
PIDFILE=/usr/local/nginx/logs/$NAME.pid
DAEMON_CONFIG=/usr/local/nginx/conf/nginx.conf
test -x $DAEMON || exit 0
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile $PIDFILE \
--exec $DAEMON
echo " started"
;;
stop)
echo -n "Stopping $DESC: "
if [ -f $PIDFILE ]; then
kill -15 `cat $PIDFILE 2>/dev/null`
fi
echo " stopped"
;;
restart|force-reload)
echo -n "Restarting $DESC: "
if [ -f $PIDFILE ]; then
kill -15 `cat $PIDFILE 2>/dev/null`
fi
sleep 1
start-stop-daemon --start --quiet --pidfile $PIDFILE \
--exec $DAEMON
echo " restarted"
;;
status)
echo "Status $DESC: "
ps aux | grep -v grep | grep -v /bin/sh | grep $NAME
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|status|restart}" >&2
exit 1
;;
esac
exit 0
Le damos permisos de ejecución al archivo nginx:
# cd /etc/init.d/
# chmod +x nginx
Ahora lo que vamos hacer es modificar el archivo de configuración:
# vi /usr/local/nginx/conf/nginx.conf
Localizar la línea: # user nobody
De esa línea eliminar el caracter '#'.
Una vez realizado lo anterior usaremos la instrucción para agregar la configuración:
# chkconfig -a nginx
# chkconfig --level 345 nginx on
Con lo anterior queda configurado el servicio y podemos iniciarlo o pararlo con las instrucciones:
# service nginx start
# service nginx stop
Ahora lo que realizaremos será configurar el archivo del sitio:
# vi /usr/local/nginx/conf/nginx.conf
[program:gunicorn]
;ruta donde se encuentra el archivo bash
command=/home/ruta-al-proyecto/miproyecto/gunicorn_run
;usuario que ejecuta el bash y el comando
username=root
;log de eventos para la gestion de errores
stdout_logfiles=/home/ruta-al-proyecto/logs/gunicorn_supervisor.log
redirect_stderr=true
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8
# mkdir /home/ruta-al-proyecto/logs/
Ahora iniciamos con la instalación de nginx en suse. Para realizarlo ejecutamos, los siguientes comandos:
# wget http://nginx.org/download/nginx-1.6.0.tar.gz
# tar xvf nginx-1.6.0.tar.gz
# ./configure# make
# make install
----
Para hacerlo servicio se debe crear el siguiente archivo:
# vi /etc/init.d/nginx
Con el siguiente contenido:
#! /bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/nginx/sbin
DAEMON=/usr/local/nginx/sbin/nginx
NAME=nginx
DESC=nginx
PIDFILE=/usr/local/nginx/logs/$NAME.pid
DAEMON_CONFIG=/usr/local/nginx/conf/nginx.conf
test -x $DAEMON || exit 0
set -e
case "$1" in
start)
echo -n "Starting $DESC: "
start-stop-daemon --start --quiet --pidfile $PIDFILE \
--exec $DAEMON
echo " started"
;;
stop)
echo -n "Stopping $DESC: "
if [ -f $PIDFILE ]; then
kill -15 `cat $PIDFILE 2>/dev/null`
fi
echo " stopped"
;;
restart|force-reload)
echo -n "Restarting $DESC: "
if [ -f $PIDFILE ]; then
kill -15 `cat $PIDFILE 2>/dev/null`
fi
sleep 1
start-stop-daemon --start --quiet --pidfile $PIDFILE \
--exec $DAEMON
echo " restarted"
;;
status)
echo "Status $DESC: "
ps aux | grep -v grep | grep -v /bin/sh | grep $NAME
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|status|restart}" >&2
exit 1
;;
esac
exit 0
Le damos permisos de ejecución al archivo nginx:
# cd /etc/init.d/
# chmod +x nginx
Ahora lo que vamos hacer es modificar el archivo de configuración:
# vi /usr/local/nginx/conf/nginx.conf
Localizar la línea: # user nobody
De esa línea eliminar el caracter '#'.
Una vez realizado lo anterior usaremos la instrucción para agregar la configuración:
# chkconfig -a nginx
# chkconfig --level 345 nginx on
Con lo anterior queda configurado el servicio y podemos iniciarlo o pararlo con las instrucciones:
# service nginx start
# service nginx stop
Ahora lo que realizaremos será configurar el archivo del sitio:
# vi /usr/local/nginx/conf/nginx.conf
Dentro del archivo colocaremos lo siguiente sustituyendo la sección del servidor 80 o bien dejando el actual con 8080:
upstream miproyecto_app {
# Este es el que conecta con gunicorn con nginx
server unix:/home/rutal-al-proyecto/run/gunicorn.sock fail_timeout=0;
}
server {
# Puerto de escucha
listen 80;
# Dominios que responden a esta configuracion
server_name example.com
# Configuracion customizada para la subida de statics
client_body_in_file_only clean;
client_body_buffer_size 32K;
client_max_body_size 300M;
sendfile on;
send_timeout 300s;
# Logs de eventos
access_log /home/rutal-al-proyecto/logs/nginx-access.log;
error_log /home/rutal-al-proyecto/logs/nginx-error.log;
# Archivos estaticos
location /static/ {
alias /home/rutal-al-proyecto/static/;
}
# Archivos media
location /media/ {
alias /home/rutal-al-proyecto/media/;
}
# Procesando django
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://miproyecto_app;
break;
}
}
# Error pages
error_page 500 502 503 504 /500.html;
location = /500.html {
root /home/rutal-al-proyecto/;
}
}
Necesitaremos levantar el servicio del gunicorn debemos recordar el proceso o levantarlo nuevamente es posible que necesiten entrar a la maquina virtual para entrar a supervisorctl start gunicorn, o bien es necesario también usar reload para que actualice el servicio con el archivo de configuración de supervisord.conf.
Nota: También es posible que necesitemos crear el archivo 500.html
Una vez levantado el supervisor con gunicorn, ahora levantaremos el servicio de nginx usando:
# service nginx restart
Ha sido toda una odisea en el camino casi me decido por dejarlo, pero igual funcionó, les agradezco si encuentran alguna mejora se agradece ya que hay varias cosas que seguramente puedan mejorarse.
Apuntes adicionales:
Apunte 1: Para ver servicios en ejecución en suse puedes utilizar:
$ ps aux | grep
Ejemplo:
$ ps aux | grep gunicorn
Con lo anterior puedes ver el id en la segunda columna y si es necesario puedes detenerlo:
$ kill -9 ####
Apunte 2: (Añadido 2014-12-11):
Si se necesita actualizar el código del proyecto de django puede hacerse realizando lo siguiente, se debe entrar al virtualenv y con eso parar el servidor con:
# supervisorctrl stop gunicorn
# supervisorctrl start gunicorn
Nota: También es posible que necesitemos crear el archivo 500.html
Una vez levantado el supervisor con gunicorn, ahora levantaremos el servicio de nginx usando:
# service nginx restart
Ha sido toda una odisea en el camino casi me decido por dejarlo, pero igual funcionó, les agradezco si encuentran alguna mejora se agradece ya que hay varias cosas que seguramente puedan mejorarse.
Apuntes adicionales:
Apunte 1: Para ver servicios en ejecución en suse puedes utilizar:
$ ps aux | grep
Ejemplo:
$ ps aux | grep gunicorn
Con lo anterior puedes ver el id en la segunda columna y si es necesario puedes detenerlo:
$ kill -9 ####
Apunte 2: (Añadido 2014-12-11):
Si se necesita actualizar el código del proyecto de django puede hacerse realizando lo siguiente, se debe entrar al virtualenv y con eso parar el servidor con:
# supervisorctrl stop gunicorn
# supervisorctrl start gunicorn
Apunte 3: (Añadido 2015-01-20):
En esta ocasión nos paso que no podíamos configurar en el puerto 80 el servicio, por lo que lo que tuvimos que hacer fue: revisar en si en la configuración de ngnix se estén cargando otros archivos de configuración generalmente antes del server {} si es así comentar las siguientes instrucciones agregando #, esto es:
# include /etc/nginx/conf.d/*.conf;
# incude /etc/nginx/sites-enabled/*;
O bien revisar si estos archivos no estén causando algún conflicto con el puerto 80.
Espero te sea de utilidad !
https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/gunicorn/
http://adityo.blog.binusian.org/?tag=php-fpm-nginx-on-opensuse-110
http://docs.gunicorn.org/en/latest/deploy.html
http://goodcode.io/blog/django-nginx-gunicorn/
http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/
http://adityo.blog.binusian.org/?tag=php-fpm-nginx-on-opensuse-110
http://wiki.nginx.org/Install
http://stackoverflow.com/questions/19916016/gunicorn-nginx-server-via-socket-or-proxy
http://adityo.blog.binusian.org/?tag=php-fpm-nginx-on-opensuse-110
http://docs.gunicorn.org/en/latest/deploy.html
http://goodcode.io/blog/django-nginx-gunicorn/
http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/
http://adityo.blog.binusian.org/?tag=php-fpm-nginx-on-opensuse-110
http://wiki.nginx.org/Install
http://stackoverflow.com/questions/19916016/gunicorn-nginx-server-via-socket-or-proxy
miércoles, 2 de octubre de 2013
Django Implementación (Deployment) Ubuntu + NGINX + uWSGI + MySQL en 10 pasos (Actualizado)
Bien ya me toco instalar django sobre apache, pero mucha gente me ha referido a nginx como un gran servidor para equipos con bajos recursos ( quiero ponerlo dentro de una maquina virtual -_- ), que pueden levantar con mayor velocidad, así que me dispuse a probarlo dentro de una maquina virtual aquí el procedimiento:
PASO 1
Instalar el Ubuntu, en este caso no hubo mayor problema descargue virtualbox versión 4.2.18 y la versión de ubuntu 12.04.3 LTS. Te recomiendo que durante el proceso de instalación cuando te pregunte por instalar un servidor Open SSH, si lo actives, te será más facil lo siguiente realizando una conexión ssh (Sobre todo si estas utilizando un maquina virtual).
PASO 1
Instalar el Ubuntu, en este caso no hubo mayor problema descargue virtualbox versión 4.2.18 y la versión de ubuntu 12.04.3 LTS. Te recomiendo que durante el proceso de instalación cuando te pregunte por instalar un servidor Open SSH, si lo actives, te será más facil lo siguiente realizando una conexión ssh (Sobre todo si estas utilizando un maquina virtual).
PASO 2
Como siguiente paso instalaremos mysql usando las instrucciones:
$ sudo apt-get upgrade
$ sudo apt-get install mysql-server
NOTA: Ojo con el password que se requerirá posteriormente. Que bonito funciona ubuntu todo con línea de comandos y casi sin problema :) ...
PASO 3
Ahora instalamos pip ( Generalmente python ya viene instalado por defecto a menos que desees otra instalación de python ) para instalarlo usamos:
$ sudo apt-get install python-setuptools
$ mkdir setup
$ cd setup
$ wget http://python-distribute.org/distribute_setup.py
$ sudo python distribute_setup.py
$ sudo easy_install pip
NOTA: Es increíble lo bien que funciona, todo desde el terminal si hay errores solo es buscar un poco en internet.
PASO 4
Instalar Django hacemos lo siguiente
$ sudo pip install Django
PASO 5
Ahora bien empezamos con el enlace mysql-python para eso debemos instalar la herramienta de mysqldb usando los siguientes comandos:
# Ese comando actualiza las referencias.
$ sudo easy_install -U distribute
$ sudo apt-get install libmysql++-dev
# Ese comando evita los errores relacionados a - gcc -
$ sudo apt-get install python-dev
$ sudo apt-get install python-mysqldb
PASO 6
Copiamos o creamos nuestro proyecto:
$ django-admin.py startproyect mi_proyecto
NOTA: Esta guía es solo es para la implementación por lo que supongo que ya tienen algo desarrollado o bien pueden colocar dentro de alguna vista un Hola Mundo para realizar pruebas.
PASO 7
Empezamos ahora con la parte interesante, para instalar nginx seguimos con lo genial de ubuntu usando la línea de comandos:
$ sudo apt-get install nginx
$ sudo apt-get install build-essential python
# Este comando actualiza las referencias de pip.
NOTA: La segunda herramienta se utiliza para el control de uwsgi, que es la que posibilita a django enlazar con nginx previamente había un fastcgi pero al parecer django esta por darlo de baja en la versión Django 1.7.
PASO 8
Necesitaremos crear el archivo ini que utilizará uwsgi para manejar nuestra aplicación, la ubicación del archivo puede ser dentro del directorio del proyecto, en mi caso generalmente lo pongo dentro de una carpeta que se llama deploy, y el nombre puede ser: mi_proyecto_uwsgi.ini y le añadimos el siguiente contenido:
[uwsgi]
chdir = /ruta/a/tu/proyecto/
module = mi_proyecto.wsgi
master = true
processes = 10
socket = /ruta/a/tu/proyecto/mi_proyecto.sock
chmod-socket = 666
vacuum = true
PASO 9
Ahora necesitaremos indicarle a nginx donde buscar los datos del uwsgi para esto dentro del mismo directorio de deploy que tenemos dentro de nuestro proyecto creamos un archivo con nombre mi_proyecto_nginx.conf con el siguiente contenido:
upstream django{
server unix:///ruta/a/tu/proyecto/mi_proyecto.sock;
}
server {
listen 80;
server_name mi_server;
charset utf-8;
# Max upload size
client_max_body_size 10M;
access_log /ruta/a/tu/proyecto/mi_proyecto.access.log;
error_log /ruta/a/tu/proyecto/mi_proyecto.error.log;
location /static {
gzip_static on;
alias /ruta/a/tu/proyecto/static/;
}
location / {
include /etc/nginx/uwsgi_params; # verificar la ruta en tu implementación
uwsgi_pass django;
}
}
NOTA IMPORTANTE:
Como lo hicimos con la configuración de uwsgi también es necesario indicarle esta configuración a nginx y de igual forma lo mejor es crear un enlace símbolico:
$ sudo ln -s /ruta/a/tu/proyecto/deploy/mi_proyecto_nginx.conf /etc/nginx/sites-enabled/
PASO 10
Hasta el paso anterior ya podriamos hacer algunas pruebas reiniciando el nginx ...
... y corriendo el comando:
$ uwsgi --ini mi_proyecto.ini
Sin embargo lo que seguro vamos a necesitar, es que el servidor, cargue automáticamente el proyecto al iniciar el equipo, para esto necesitaremos los siguientes comandos:
# Creando el servicio
$ sudo vi /etc/rc.local
# Agregar la siguiente línea al archivo antes del exit 0
/usr/bin/uwsgi --emperor /ruta/a/tu/proyecto/deploy/mi_proyecto_uwsgi.ini --uid mi_usuario --gid www-data --daemonize /ruta/a/tu/proyecto/mi_proyecto.uwsgi.log
NOTA: Se debe verificar la ubicación del archivo uwsgi.
Realizado lo anterior al reiniciar la maquina virtual o el servidor debería de cargarlo correctamente.
Espero te sea de utilidad !
Referencias y links consultados:
https://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html?highlight=django
http://uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.html#deploying-django
http://eth0.pro/post/1
http://www.ubuntu-es.org/node/172656#.UcDqY5WWRhY
https://www.digitalocean.com/community/articles/how-to-install-nginx-on-ubuntu-12-04-lts-precise-pangolin
http://www.howtogeek.com/howto/ubuntu/install-mysql-server-5-on-ubuntu/
https://gist.github.com/panuta/3075882
http://stackoverflow.com/questions/11094718/error-command-gcc-failed-with-exit-status-1-while-installing-eventlet
http://askubuntu.com/questions/157840/why-does-apt-get-fail-to-resolve-the-mirror
http://skuarch.blogspot.mx/2010/02/crear-un-servicio-en-ubuntu.html
http://stackoverflow.com/questions/11425106/python-pip-install-fails-invalid-command-egg-info
Como siguiente paso instalaremos mysql usando las instrucciones:
$ sudo apt-get upgrade
$ sudo apt-get install mysql-server
NOTA: Ojo con el password que se requerirá posteriormente. Que bonito funciona ubuntu todo con línea de comandos y casi sin problema :) ...
PASO 3
Ahora instalamos pip ( Generalmente python ya viene instalado por defecto a menos que desees otra instalación de python ) para instalarlo usamos:
$ sudo apt-get install python-setuptools
$ mkdir setup
$ cd setup
$ wget http://python-distribute.org/distribute_setup.py
$ sudo python distribute_setup.py
$ sudo easy_install pip
NOTA: Es increíble lo bien que funciona, todo desde el terminal si hay errores solo es buscar un poco en internet.
PASO 4
Instalar Django hacemos lo siguiente
$ sudo pip install Django
PASO 5
Ahora bien empezamos con el enlace mysql-python para eso debemos instalar la herramienta de mysqldb usando los siguientes comandos:
# Ese comando actualiza las referencias.
$ sudo easy_install -U distribute
$ sudo apt-get install libmysql++-dev
# Ese comando evita los errores relacionados a - gcc -
$ sudo apt-get install python-dev
$ sudo apt-get install python-mysqldb
PASO 6
Copiamos o creamos nuestro proyecto:
$ django-admin.py startproyect mi_proyecto
NOTA: Esta guía es solo es para la implementación por lo que supongo que ya tienen algo desarrollado o bien pueden colocar dentro de alguna vista un Hola Mundo para realizar pruebas.
PASO 7
Empezamos ahora con la parte interesante, para instalar nginx seguimos con lo genial de ubuntu usando la línea de comandos:
$ sudo apt-get install nginx
$ sudo apt-get install build-essential python
# Este comando actualiza las referencias de pip.
$ sudo easy_install -U pip
# Este comando actualiza las referencias de uwsgi.
$ sudo easy_install -U uwsgi
$ sudo pip install uwsgiNOTA: La segunda herramienta se utiliza para el control de uwsgi, que es la que posibilita a django enlazar con nginx previamente había un fastcgi pero al parecer django esta por darlo de baja en la versión Django 1.7.
PASO 8
Necesitaremos crear el archivo ini que utilizará uwsgi para manejar nuestra aplicación, la ubicación del archivo puede ser dentro del directorio del proyecto, en mi caso generalmente lo pongo dentro de una carpeta que se llama deploy, y el nombre puede ser: mi_proyecto_uwsgi.ini y le añadimos el siguiente contenido:
[uwsgi]
chdir = /ruta/a/tu/proyecto/
module = mi_proyecto.wsgi
master = true
processes = 10
socket = /ruta/a/tu/proyecto/mi_proyecto.sock
chmod-socket = 666
vacuum = true
Ahora necesitaremos indicarle a nginx donde buscar los datos del uwsgi para esto dentro del mismo directorio de deploy que tenemos dentro de nuestro proyecto creamos un archivo con nombre mi_proyecto_nginx.conf con el siguiente contenido:
upstream django{
server unix:///ruta/a/tu/proyecto/mi_proyecto.sock;
}
server {
listen 80;
server_name mi_server;
charset utf-8;
# Max upload size
client_max_body_size 10M;
access_log /ruta/a/tu/proyecto/mi_proyecto.access.log;
error_log /ruta/a/tu/proyecto/mi_proyecto.error.log;
location /static {
gzip_static on;
alias /ruta/a/tu/proyecto/static/;
}
location / {
include /etc/nginx/uwsgi_params; # verificar la ruta en tu implementación
uwsgi_pass django;
}
}
NOTA IMPORTANTE:
Como lo hicimos con la configuración de uwsgi también es necesario indicarle esta configuración a nginx y de igual forma lo mejor es crear un enlace símbolico:
$ sudo ln -s /ruta/a/tu/proyecto/deploy/mi_proyecto_nginx.conf /etc/nginx/sites-enabled/
Hasta el paso anterior ya podriamos hacer algunas pruebas reiniciando el nginx ...
$ sudo /etc/init.d/nginx restart
$ uwsgi --ini mi_proyecto.ini
Sin embargo lo que seguro vamos a necesitar, es que el servidor, cargue automáticamente el proyecto al iniciar el equipo, para esto necesitaremos los siguientes comandos:
# Creando el servicio
$ sudo vi /etc/rc.local
# Agregar la siguiente línea al archivo antes del exit 0
/usr/bin/uwsgi --emperor /ruta/a/tu/proyecto/deploy/mi_proyecto_uwsgi.ini --uid mi_usuario --gid www-data --daemonize /ruta/a/tu/proyecto/mi_proyecto.uwsgi.log
NOTA: Se debe verificar la ubicación del archivo uwsgi.
Realizado lo anterior al reiniciar la maquina virtual o el servidor debería de cargarlo correctamente.
Referencias y links consultados:
https://uwsgi-docs.readthedocs.org/en/latest/tutorials/Django_and_nginx.html?highlight=django
http://uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.html#deploying-django
http://eth0.pro/post/1
http://www.ubuntu-es.org/node/172656#.UcDqY5WWRhY
https://www.digitalocean.com/community/articles/how-to-install-nginx-on-ubuntu-12-04-lts-precise-pangolin
http://www.howtogeek.com/howto/ubuntu/install-mysql-server-5-on-ubuntu/
https://gist.github.com/panuta/3075882
http://stackoverflow.com/questions/11094718/error-command-gcc-failed-with-exit-status-1-while-installing-eventlet
http://askubuntu.com/questions/157840/why-does-apt-get-fail-to-resolve-the-mirror
http://skuarch.blogspot.mx/2010/02/crear-un-servicio-en-ubuntu.html
http://stackoverflow.com/questions/11425106/python-pip-install-fails-invalid-command-egg-info
Suscribirse a:
Entradas (Atom)
