crear un sitio django – gunicorn – nginx – supervisord – centos 7 – selinux

1. crear virtualenv
virtualenv misitio

2. activar virtualenv
source /opt/virtualenvs/misitio/bin/activate

3. Instalar paquetes:

pip install django==1.10
pip install psycopg2==2.7.3.1
pip install django-suit==0.2.25
pip install django_select2
pip install gunicorn

pip install django_select2

4. Crear base inicial:
python manage.py makemigrations
python manage.py migrate

5. Crear usuario
python manage.py createsuperuser

SELINUX

setenforce 1
semanage fcontext -a -t httpd_sys_content_t "/opt/django-projects/misitio(/.*)?"
restorecon -R -v /opt/django-projects/misitio/

----------------------------------------
/etc/supervisord.d
------------------------------------------
cat misitio.conf
[program:misitio]
command = /opt/gunicorn/misitio.sh
user = root
stdout_logfile = /var/log/supervisor/misitio.log
redirect_stderr = true
autostart=true
autorestart=true

---------------------------------------------------
gunicorn
/opt/gunicorn/misitio.sh
------------------------------------

#!/bin/bash

WORKON_HOME=${WORKON_HOME:-"/opt/virtualenvs"}
NAME="misitio" # Nombre aplicacion
APP_DIR=/opt/django-projects/misitio # Directorio del proyecto Django
SOCKFILE=/var/run/misitio.sock # Unix socket
USER=nginx # Usuario
GROUP=wheel # Grupo
NUM_WORKERS=4 # Numero de procesos para gunicorn 2*CPUs+1
DJANGO_SETTINGS_MODULE=${NAME}.settings # Archivo settings del proyecto
DJANGO_WSGI_MODULE=${NAME}.wsgi # Modulo WSGI del proyecto

# Activar el entorno virtual
source ${WORKON_HOME}/misitio/bin/activate
export DJANGO_SETTINGS_MODULE=$DJANGO_SETTINGS_MODULE
export PYTHONPATH=$APP_DIR:$PYTHONPATH

# Crear el directorio del socket si no existe
RUNDIR=$(dirname $SOCKFILE)
test -d $RUNDIR || mkdir -p $RUNDIR

cd $APP_DIR
# Iniciar el proyecto Django
# No se usa el modo --daemon ya que este sera manejado por supervisor
# Se ejecuta como Socket de Unix, no abre ni un puerto en escucha del servicio
exec gunicorn ${DJANGO_WSGI_MODULE}:application \
--name $NAME\
--workers $NUM_WORKERS \
--user=$USER --group=$GROUP \
--log-level=debug \
--timeout 360 \
--bind=unix:$SOCKFILE

-------------------------------------------------
NGINX

--------------------------------------------------
# Configuracion NGINX para misitio
#

server {
listen 80;
server_name misitio.com;
server_tokens off;

access_log /var/log/nginx/sites/misitio.access.log;
error_log /var/log/nginx/sites/misitio.error.log;

# Limite subidas de archivos.
client_max_body_size 256M;

# ~2 seconds is often enough for most folks to parse HTML/CSS and
# retrieve needed images/icons/frames, connections are cheap in
# nginx so increasing this is generally safe...
keepalive_timeout 120;

# Bandera para poner en mantenimiento el sitio (Valores TRUE/FALSE)
set $maintenance FALSE;
#set $maintenance TRUE;

# Directorio para STATIC
location = /favicon.ico { access_log off; log_not_found off; }
location /static/ {
root /opt/django-projects/misitio;
}
location /media/ {
alias /opt/django-projects/misitio;
}

location / {

proxy_set_header Host $http_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_pass http://unix:/var/run/misitio.sock;

}

}
--------------------------------------------------------------------------------------------