Instalar el Back-end desde los Fuentes

Instalar los Requerimientos

Primero instale las dependencias necesarias y los paquetes, además de crear el directorio de instalación.

Debajo también deberá configurar su URL de backend (backendURL), es muy importante en un ambiente de producción.

workpath="/var/lib/interlock"
backendPath="/var/lib/interlock/interlock_backend"
backendURL=""
# Ejemplo: interlock-be.example.com

# Instalar dependencias
apt-get update -y
apt-get install git python3 python3-virtualenv python3-pip postgresql nginx libpq-dev -y

# Crear el directorio de instalación y de certificados
mkdir -p "$workpath/sslcerts"

Una vez haya instalado todos los requerimientos, puede pullear la última versión del repositorio.

git clone https://github.com/dblanque/interlock_backend $backendPath

Creación de la Base de Datos (PostgreSQL)

Una vez haya clonado el Repositorio Git necesitará crear su BB.DD. de PSQL.

# SHELL CONSOLE
su postgres
psql
/* PSQL */
CREATE ROLE interlockadmin WITH PASSWORD 'password';
CREATE DATABASE interlockdb;
ALTER ROLE interlockadmin WITH LOGIN;
ALTER DATABASE interlockdb OWNER to interlockadmin;
# SHELL CONSOLE
psql_ver=$(sudo -u postgres psql -V|awk -F " " '{print $3}'|awk -F "." '{print $1}')
echo "# Database Administrative Login for interlockadmin user with MD5" >> "/etc/postgresql/$psql_ver/main/pg_hba.conf"
echo -e "local\tall\tinterlockadmin\tmd5" >> "/etc/postgresql/$psql_ver/main/pg_hba.conf"

echo "
DATABASES = {
    \"default\": {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'interlockdb',
        'USER': 'interlockadmin',
        'PASSWORD': 'password', # Change the password!
        'HOST': '127.0.0.1',  # Or an IP Address that your DB is hosted on
        'PORT': '5432',
    }
}" > "$backendPath/interlock_backend/local_django_settings.py"

Configurar el Entorno Virtual

Una vez haya sido creada y configurada la BB.DD. puede instalar los requerimientos de Python dentro del entorno virtual que crearemos debajo.

# Crear el Virtual Env
virtualenv -p python3 $backendPath

# Activar el Virtual Env
source "$backendPath/bin/activate"

# Instalar los requerimientos dentro del Virtual Env
pip install -r "$backendPath/requirements.txt"

Creación de Certificado SSL

Una vez instalados los requerimientos necesitará crear un Certificado de SSL (o utilizar uno propio pre-existente en el path correspondiente) para poder utilizar la aplicación.

sudo openssl req -x509 -subj "/CN=$(hostname)/" -nodes -days 36500 -newkey rsa:2048 -keyout "$workpath/sslcerts/privkey.pem" -out "$workpath/sslcerts/fullchain.pem"

Configuración del Servicio de Systemd

Luego de que esto haya sido completado exitosamente, puede crear un enlace de la unidad de servicio de Systemd y activarla:

# Crear un enlace simbólico
ln -s "$backendPath/interlock_backend/install/interlock_backend.service" /etc/systemd/system/interlock_backend.service

# Reiniciar el Daemon
systemctl daemon-reload

# Habilitar el servicio
systemctl enable interlock_backend

# Encender el servicio
systemctl start interlock_backend

Creación de un Sitio de Reverse Proxy NGINX

Finalmente necesitará un endpoint público para que los clientes lleguen a su API. Para esto deberá crear un Sitio NGINX y publicarlo.

echo \
"server {
    listen 80;
    server_name $backendURL;
    return 301 https://$backendURL\$request_uri;
}

server {
    listen 443 ssl;
    server_name $backendURL;
    server_name_in_redirect off;
    access_log  /var/log/nginx/access.log;
    error_log  /var/log/nginx/error.log debug;

    ssl_certificate $workpath/sslcerts/fullchain.pem;
    ssl_certificate_key $workpath/sslcerts/privkey.pem;

    add_header Allow \"GET, POST, HEAD, PUT, DELETE, OPTIONS\" always;
    add_header Cache-Control no-cache;
    if (\$request_method !~ ^(GET|POST|HEAD|PUT|DELETE|OPTIONS)\$) {
        return 405;
    }

    location / {
        proxy_pass https://127.0.0.1:8000;
        proxy_set_header Host \$host;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto \$scheme;
    }
}" > "$workpath/interlock-backend.conf"

# Copiar el archivo
ln -s "$workpath/interlock-backend.conf" "/etc/nginx/sites-enabled/interlock-backend.conf"

# Probar la configuración de NGINX
nginx -t

# Reiniciar y habilitar NGINX
systemctl enable nginx && systemctl restart nginx