Cómo instalar Django con Gunicorn y Nginx en FreeBSD 10.2
Django es un framework web basado en Python, mantenido por Django Software Foundation. Es un marco de Python gratuito y de código abierto para crear aplicaciones web macro. Django es poderoso, haz que tu proceso de desarrollo sea tan rápido, haz que tu aplicación sea simple y útil. Haga que su desarrollador sea fácil de mantener e implementar el proyecto. Django es un framework python de alto nivel con el concepto MVC (Model-View-Controller), utilizado por grandes empresas como mozilla, pinterest, disquss, instagram, bitbucket, etc. En este tutorial guiaremos sobre la instalación de django. Instalaremos django 1.9 con gunicorn, supervisord y nginx como servidor web. Nginx ejecutándose en el puerto 80 y django framework ejecutándose bajo gunicorn con un archivo de calcetín gunicorn.
Requisito previo :
- FreeBSD 10.2 – 64 bits.
- Privilegios de root.
Paso 1 – Actualice el repositorio de FreeBSD
Inicie sesión en su servidor freebsd y actualice el repositorio con el comando ‘freebsd-update’:
freebsd-update fetch freebsd-update install
Paso 2: instale Python, SQLite3 y Pip
En este paso instalaremos python 2.7 con pip. Si desea utilizar python3, utilice MySQL o PostgreSQL como base de datos de django. Instalaremos python y pip desde el repositorio freebsd con el siguiente comando:
pkg install python pkg install py27-pip
Y actualice el pip a la última versión con el comando:
pip install --upgrade pip
A continuación, instale sqlite3 databse y el módulo de python py27-sqlite3 con el comando pkg:
pkg install sqlite3 pkg install py27-sqlite3
Python, pip y SQLite3 instalados en el servidor freebsd.
Paso 3: instala Django en un entorno virtual
Instalaremos e implementaremos django con el usuario normal llamado ‘vagrant’, no como root. Instalaremos django bajo virtualenv, es un generador de entorno virtual de Python, una herramienta para crear el entorno de Python aislado. Virtualenv está disponible en el repositorio de PyPI, podemos instalarlo con el comando pip:
pip install virtualenv
A continuación, cambie al usuario ‘vagabundo’:
su - vagrant
Cree un nuevo entorno virtual llamado ‘myenv’ con python2.7 como versión. Podemos crearlo con el comando virtualenv a continuación:
mkvirtualenv --python=python2.7 myenv
Creará un nuevo directorio llamado ‘myenv’, vaya al directorio y activará el entorno virtual que se ha creado antes:
cd myenv source bin/activate
Y este es nuestro momento para instalar django 1.9 y un gunicorn, instálalo todo con el comando pip bajo el virtualenv:
pip install django==1.9 pip install gunicorn
Django y Gunicorn están instalados, podemos verificarlo con el comando pip:
pip list Django (1.9) gunicorn (19.4.1)
A continuación, cree un nuevo proyecto de muestra con django. Crearemos un nuevo proyecto llamado ‘myproject’ con el comando django-admin:
django-admin startproject myproject
Ese comando creará un nuevo directorio ‘myproject’, irá al directorio y probará la instalación de django ejecutando el archivo manage.py:
cd myproject/ python manage.py runserver
runserver = inicia nuestro proyecto django con el puerto 8000.
Si no hay ningún error, continúe con el siguiente paso editando el archivo setting.py dentro del directorio del proyecto django:
nano -c myproject/settings.py
Al final de la línea, agregue la configuración a continuación:
STATIC_ROOT = '/home/vagrant/myenv/myproject/static/' STATIC_URL = '/static/' MEDIA_ROOT = '/home/vagrant/myenv/myproject/media/' MEDIA_URL = '/media/'
Guardar y Salir.
Y genere el archivo estático ejecutando el siguiente comando:
python manage.py collectstatic
collectstatic utilizado para administrar los archivos estáticos, copiará el archivo estático de django al directorio ‘static’ en myproject dir.
Django está configurado, y lo último que necesitamos es configurar el gunicorn. Vaya al directorio ‘myenv’ y active el entorno, luego cree un nuevo archivo en el directorio bin:
cd /home/vagrant/myenv/ source bin/activate nano -c bin/gunicorn_start
Pegue la configuración a continuación:
#!/bin/bash NAME="myproject" # Django Project Name DJANGODIR=/home/vagrant/myenv/myproject # Django Project Directory SOCKFILE=/home/vagrant/myenv/myproject/run/gunicorn.sock # Gunicorn Sock File USER=vagrant # Django Project Running under user vagrant GROUP=vagrant # Django Project Running under group vagrant NUM_WORKERS=3 DJANGO_SETTINGS_MODULE=myproject.settings # change 'myproject' with your project name DJANGO_WSGI_MODULE=myproject.wsgi # change 'myproject' with your project name echo "Starting $NAME as `whoami`" # Activate the virtual environment cd $DJANGODIR source ../bin/activate export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE export PYTHONPATH=$DJANGODIR:$PYTHONPATH # Create the run directory if it doesn't exist RUNDIR=$(dirname $SOCKFILE) test -d $RUNDIR || mkdir -p $RUNDIR # Start your Django Unicorn # Programs meant to be run under supervisor should not daemonize themselves (do not use --daemon) exec ../bin/gunicorn ${DJANGO_WSGI_MODULE}:application --name $NAME --workers $NUM_WORKERS --user=$USER --group=$GROUP --bind=unix:$SOCKFILE --log-level=debug --log-file=-
Guardar y Salir.
Y haz que el script sea ejecutable:
chmod u+x bin/gunicorn_start
Django está configurado con gunicorn, django se ejecutará bajo el archivo gunicorn sock.
Nota : Si desea salir del virtualenv, puede usar el comando «desactivar».
Paso 4 – Instale Supervisord
Supervisor es un control de proceso en el sistema operativo Linux y Unix que permite a los usuarios monitorear y controlar el número de procesos. En este tutorial necesitamos un py-supervisor para controlar el gunicorn que se ejecuta con nuestro proyecto django.
Instale py-supervisor desde el repositorio freebsd con el comando pkg:
pkg install py-supervisor
Si está hecho, agregue supervisor al tiempo de arranque con el comando sysrc y luego inícielo:
sysrc supervisord_enable=yes service supervisord start
Se inicia Supervisor, pero debemos agregarle nuestra aplicación. Podemos hacerlo editando el archivo de configuración del supervisor, ir al directorio y editar el archivo ‘supervisord.conf’ con nano:
cd /usr/local/etc/ nano -c supervisord.conf
Al final de la línea, agregue la configuración de nuestra aplicación a continuación:
[program:myproject] command = sh /home/vagrant/myenv/bin/gunicorn_start user = vagrant stdout_logfile = /home/vagrant/myenv/logs/gunicorn_supervisor.log redirect_stderr = true environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8
Guardar y Salir.
Ahora debemos crear un nuevo directorio para el archivo de registro de gunicorn con el usuario vagrant:
mkdir -p /home/vagrant/myenv/logs/ touch /home/vagrant/myenv/logs/gunicorn_supervisor.log
Reinicie el supervisor y verifique que nuestra aplicación se esté ejecutando:
service supervisord restart supervisorctl status
Paso 5: instala Nginx
Usaremos nginx como front-end del servidor y lo ejecutaremos en el puerto 80. Si alguien accede desde los navegadores, la conexión se pasará a gunicorn que se ejecuta con el archivo sock.
Instale nginx desde el repositorio freebsd con el comando pkg:
pkg install nginx
A continuación, configure el host virtual para nuestro proyecto django. Vaya al directorio de configuración de nginx y cree un nuevo directorio llamado vhost allí:
cd /usr/local/etc/nginx/ mkdir -p vhost/
Vaya al directorio vhost y cree una nueva configuración de archivo ‘mydjango.conf’:
cd vhost/ nano -c mydjango.conf
Pegue la configuración de virtualhost a continuación:
upstream myproject_server { server unix:/home/vagrant/myenv/myproject/run/gunicorn.sock fail_timeout=0; } server { listen 80; server_name www.djangofreebsd.com; client_max_body_size 4G; access_log /home/vagrant/myenv/logs/nginx-access.log; error_log /home/vagrant/myenv/logs/nginx-error.log; location /static/ { alias /home/vagrant/myenv/myproject/static/; } location /media/ { alias /home/vagrant/myenv/myproject/media/; } location / { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; # Try to serve static files from nginx, no point in making an # *application* server like Unicorn/Rainbows! serve static files. if (!-f $request_filename) { proxy_pass http://myproject_server; break; } } # Error pages error_page 500 502 503 504 /500.html; location = /500.html { root /home/vagrant/myenv/myproject/static/; } }
Guardar y Salir.
Ahora debemos agregar la configuración de virtualhost al nginx.conf. Regrese al directorio nginx, edite el archivo nginx.conf con nano:
cd /usr/local/etc/nginx/ nano -c nginx.conf
Antes del final de la línea, agregue la siguiente línea:
include vhost/*.conf;
Guardar y Salir.
Pruebe la configuración de nginx, si no hay ningún error, agregue nginx al tiempo de arranque:
nginx -t sysrc nginx_enable=yes
Y el último, reinicie supervisord e inicie nginx:
service supervisord restart service nginx start
Ahora podemos acceder a nuestras aplicaciones de django con el navegador, en este tutorial usamos el dominio www.mydjango.co.
Página de administración de Django.
Django 1.9 y gunicorn con supervisor y nginx están listos.
Conclusión
Django es un marco de aplicación web basado en python con el concepto MVC (Model-View-Controller). Django es la mejor solución para usted si desea crear una aplicación web macro. Es rápido y simple, gratuito y de código abierto y mantenido por Django Software Foundation. Django puede funcionar de forma independiente, pero también podemos usar apache o nginx como la interfaz del proyecto django.