Instalar el Back-end desde los Fuentes
Por como funciona Django/DRF, y como fue desarrollado el proyecto hay una carpeta interlock_backend dentro del repositorio.
Esto no es un error.
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