A través de este tutorial vamos a instalar y configurar nuestro entorno de producción para ejecutar nuestra aplicación django que tenemos en un repositorio GITHUB y ejecutaremos con NGINX, GUNICORN y SUPERVISOR.
Nos abstraemos de la configuracion Postgresql, ya que en este caso asumimos que a través de la settings de producción, apuntamos a nuestro sevidor BBDD. En nuestro caso, apuntaríamos a nuestro servidor en elephantsql.
Preparación del sistema (Ubuntu 18.04)
- sudo apt-get update
- sudo apt-get upgrade
- sudo apt-get install python3-pip
- pip3 install virtualenv
- mkdir .virtualenvs
- cd .virtualenvs
- virtualenv -p python3 nombre_env
- source nombre_env/bin/activate
Instalación genérica del Aplicativo
- source /root/.virtualenvs/nombre_env/bin/activate
- cd /var/www/
- sudo git clone https://github.com/usuario/nombre_repositorio.git
- cd nombre_repositorio
- pip3 install -r requirements.txt
- python3 manage.py migrate (migrate_schemas si utilizamos django-multitenant)
Instalación y configuración NGINX
- sudo apt-get install nginx
- cd /etc/nginx/sites-available
- sudo touch sitio.com
- sudo nano sitio.com
- Copiar y pegar
server { charset UTF-8; listen 80; server_name sitio.com *.csitio.com; root /var/www/nombre_repositorio/nombre_app; access_log /var/log/nombre_app/nginx/access.log; error_log /var/log/nombre_app/nginx/error.log; client_max_body_size 50M; location /static { alias /var/www/nombre_repositorio/static; } location /media { alias /var/www/nombre_repositorio/media; } location /{ proxy_pass_header Server; proxy_set_header Host $http_host; proxy_redirect off; proxy_read_timeout 300; uwsgi_read_timeout 3600; proxy_connect_timeout 300; proxy_pass http://127.0.0.1:8000; proxy_set_header X-Forwarder-Host $server_name; proxy_set_header X-Real-IP $remote_addr; add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"'; } }
- cd sites-enabled
- sudo ln -s ../sites-available/sitio.com
Creamos directorio de logs
- cd /var/log
- sudo mkdir app
- cd app
- sudo mkdir nginx
Vamos a borrar el link de default para tener solo la app en elpuerto 80
- cd /etc/nginx
- cd sites-enabled
- ls -la sudo rm default
Comprobar fichero de configuración
- sudo nginx -t
Reiniciar nginx
- sudo service nginx restart
Instalar el proxy gunicorn
- source /root/.virtualenvs/nombre_app/bin/activate
- pip3 install gunicorn
- cd /var/www
- sudo touch gunicorn.py
- sudo nano gunicorn.py
- Copiar y pegar
import multiprocessing
num_workers = multiprocessing.cpu_count()*2+1
command = '/root/.virtualenvs/nombre_app/bin/gunicorn'
pythonpath = 'var/www/nombre_repositorio'
bind ='0.0.0.0:8000'
workers = num_workers
timeout = 120
Instalar supervisor
- sudo apt-get install supervisor
- cd /etc/supervisor
- cd conf.d
- sudo touch nombre_app.conf
- sudo nano nombr_app.conf
[program:nombre_app]
command = /root/.virtualenvs/nombre_app/bin/gunicorn --log-file=- -c /var/www/gunicorn.py nombre_repositorio.nombre_app.wsgi
stdout_logfile = /var/log/nombre_app/gunicorn/access.log
stderr_logfile = /var/log/nombre_app/gunicorn/error.log
redirect_stderr = true
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8
- cd /var/log/nombre_app
- mkdir gunicorn
- sudo supervisorctl reload