Instalar entorno de producción de python

Una vez hemos desarrollado una aplicación con django nos interesará ponerla en producción. La forma correcta de hacerlo es usando uwsgi + nginx. Así que vamos a ello.

Mi aplicación corre sobre postgresql así que instalaremos los siguientes paquetes

# apt -y install nginx uwsgi uwsgi-plugin-python3 postgresql python3-psycopg2 libpq-dev git virtualenv memcached

Creamos el usuario y la base de datos postgresql

# su - postgres
$ createuser colibri_user
$ createdb -O colibri_user colibri_db
$ psql colibri_db
colibri_db=# alter user colibri_user with encrypted password 'XXXXXXXX';
colibri_db=# grant all privileges on database colibri_db to colibri_user;

Ahora clonamos el código del programa en /var/www

# cd /var/www/
# git clone git@git.capa8.net:blackhold/colibri.git

Creo el entorno virtual

# cd colibri
# virtualenv -p python3 venv

Entro en el entorno virtual y ejecuto los comandos necesarios para iniciar la aplicación

# source venv/bin/activate
# pip install -r requirements.txt
# ./clean.sh
# python manage.py runserver 0.0.0.0:5001

Ahora configuramos uwsgi para que apunte donde está nuestra aplicación de django

# cd /etc/uwsgi/apps-available
# vi colibri.ini
[uwsgi]
master = true
processes = 10
socket = /tmp/uwsgi-colibri.sock
uid = www-data
gid = www-data

;# with appropriate permissions - *may* be needed
;chmod-socket    = 664

chdir = /var/www/colibri
module = colibri.wsgi
home = /var/www/colibri/venv/
vacuum = true
env = DJANGO_SETTINGS_MODULE=colibri.settings
safe-pidfile = /tmp/uwsgi-colibri.pid
;harakiri = 20 # respawn processes taking more than 20 seconds
;limit-as = 128 # limit the project to 128 MB
max-requests = 5000
daemonize = /var/log/uwsgi/colibri.log
;callable = application
plugin = python37

Guardamos y lo activamos en apps-enabled

# cd ..
# cd /etc/uwsgi/apps-enabled
# ln -s ../apps-available/colibri.ini .
# service uwsgi restart

Ahora configuramos nginx

# cd /etc/nginx/sites-available/
# vi colibri
server {
    listen 80;
    server_name colibri.capa8.net;

    include snippets/certbot.conf;

    return 301 https://colibri.capa8.net$request_uri;
}

# Responem les consultes de https://colibri.capa8.net
server {
    server_name colibri.capa8.net;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:/tmp/uwsgi-colibri.sock;
    }

    # /static
    location /static/ {
        autoindex off;
        root /var/www/colibri/web/;
    }

    location /static/admin {
        autoindex off;
        root /var/www/colibri/venv/lib/python3.7/site-packages/django/contrib/admin/;
    }


    listen 443 ssl http2;
    ssl_certificate /etc/letsencrypt/live/colibri.capa8.net/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/colibri.capa8.net/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_trusted_certificate /etc/letsencrypt/live/colibri.capa8.net/chain.pem;
}

Lo activamos en nginx

# cd /etc/nginx/sites-enabled/
# ln -s ../sites-available/colibri .
# nginx -t
# service nginx restart

Y ahora ya tendríamos que poder acceder por http a nuestra aplicación. En /var/log/uwsgi/colibri.log tenemos los logs de uwsgi para si nginx nos suelta algún error 503.

One Comment

  1. cat 0_run_cleaned_db.sh
    #!/bin/bash

    rm -R wbox/__pycache__
    rm -R web/__pycache__
    rm -R web/migrations/__pycache__
    rm -R web/migrations/0*
    python manage.py makemigrations
    python manage.py migrate
    python manage.py createsuperuser
    $ cat 1_update.sh
    #!/bin/bash

    python manage.py makemigrations
    python manage.py migrate
    $ cat 2_execute_db_imported.sh
    #!/bin/bash

    rm -R wbox/__pycache__
    rm -R web/__pycache__
    rm -R web/migrations/__pycache__
    rm -R web/migrations/0*
    python manage.py makemigrations
    python manage.py migrate

    Respon

Deixa un comentari

L'adreça electrònica no es publicarà.

Aquest lloc utilitza Akismet per reduir els comentaris brossa. Apreneu com es processen les dades dels comentaris.