Despliegue en Cluster Horizontal

A la hora de ejecutar una instalación podemos optar el cómo vamos a distribuir los componentes, es decir cuales vamos a agrupar sobre un mismo linux-host y cuales van a correr sobre entornos aislados (osea sobre un linux-host dedicado).

Ejecución del deploy

A la hora de ejecutar una instalación podemos optar el cómo vamos a distribuir los componentes, es decir cuales vamos a agrupar sobre un mismo linux-host y cuales van a correr sobre entornos aislados (osea sobre un linux-host dedicado).

Como bien sabemos cada componente cuenta con su script de deploy (first_boot_installer.tpl) capaz de desplegar el componente sobre un Linux-host. Sin embargo se resalta el hecho de que el componente OMLApp cuenta con un first_boot_installer.tpl de una jerarquía mayor, ya que posee la inteligencia para determinar qué componentes adicionales (asterisk, kamailio, rtpengine, postgresql, redis) deben ser instalados a la par del propio OMLApp Django/Python, a partir de evaluar las variables de instalación provistas.

La regla entonces es definir la distribución de componentes y luego ejecutar en el siguiente orden el despliegue de cada uno de ellos:

Finalmente debemos lanzar la ejecución del deploy de nuestro componente principal OMLApp.

Nota

si la idea es generar un deploy AIO All in One entonces simplemente ejecutar el first_boot_installer de componente OMLApp dejando como NULL toda aquella variable que haga referencia a la dirección de red de cada componente.

El archivo first_boot_installer.tpl será quién realice la instalación y lo debemos hallar bajo el directorio: ominicontacto/install/onpremise/deploy/ansible

_images/install_1st_boot_script.png

Si inspeccionamos el archivo se podrá ver que se acude al uso de variables de entorno a la hora de proporcionar parámetros de configuración como la dirección de red a dónde ubicar al componente que implementa PostgreSQL, el nombre del dispositivo de bloque que se utilizará para respaldar las grabaciones y base de datos, etc. a la hora de generar el deploy, ya que se nutre de dichas variables de entorno a la hora de desplegar la aplicación OMniLeads.

Si la idea es invocar el script utilizando alguna tecnología (por ej: vagrant, terraform, aws-cli, etc.) que nos permita realizar provisioning (sobre la instancia Linux que estamos creando para correr OMniLeads) utilizando un archivo exclusivo para declarar variables (.env), entonces simplemente debemos contemplar el siguiente listado de variables y asignarles un valor:

oml_infras_stage=
oml_app_release=
oml_tenant_name=
oml_callrec_device=
nfs_host=
optoml_device=
pgsql_device=
oml_nic=
oml_ami_user=
oml_ami_password=
oml_acd_host=
oml_pgsql_host=
oml_pgsql_port=
oml_pgsql_db=
oml_pgsql_user=
oml_pgsql_password=
oml_pgsql_cloud=
api_dialer_user=
api_dialer_password=demo
oml_dialer_host=
oml_rtpengine_host=
oml_kamailio_host=
oml_redis_host=
oml_websocket_host=
oml_websocket_port=
oml_extern_ip=
oml_tz=
oml_app_sca=
oml_app_ecctl=
oml_app_login_fail_limit=
oml_app_init_env=
oml_app_reset_admin_pass=
oml_app_install_sngrep=

Por otro lado si la idea es realizar una instalación manual (ejecutar el script como bash sobre una instancia Linux), se deberá generar una copia del mismo hacia first-boot-instaler.sh ya que bajo este mismo nombre el archivo será ignorado por git para que usted pueda personalizar el archivo.

cp first-boot-instaler.tpl first-boot-instaler.sh

Luego pasamos a trabajar las variables, quitando comentarios y configurando sus valores dentro del propio script.

# ******************** SET ENV VARS ******************** #
# The infrastructure environment:
# Values: onpremise | digitalocean | linode | vultr | aws
export oml_infras_stage=linode
# The GitLab branch
export oml_app_release=master
# OMniLeads tenant NAME
export oml_tenant_name=tutorial-doctl
# Device for recordings
# Values: local | s3-do | s3-aws | nfs | disk
export oml_callrec_device=local
# Parameters for S3 when s3-do is selected as store for oml_callrec_device
#export s3_access_key=
#export s3_secret_key=
#export s3url=
#export ast_bucket_name=
# Parameters for NFS when nfs is selected as store for oml_callrec_device
#export nfs_host=
# ******* persistent data STORE block devices *******
# Values: /dev/disk/by-label/optoml-${oml_tenant_name}
export optoml_device=NULL
# Values: /dev/disk/by-label/pgsql-${oml_tenant_name}
export pgsql_device=NULL
# Set your network interface
export oml_nic=eth0
# ******* Variables for ACD Asterisk *******
# AMI connection from OMLApp
export oml_ami_user=omnileadsami
export oml_ami_password=tutorial
# Values: NULL | IP address or FQDN
export oml_acd_host=NULL
# ******* Variables for PGSQL *******
# POSTGRESQL network address and port
# Values: NULL | IP address or FQDN
export oml_pgsql_host=NULL
export oml_pgsql_port=5432
# POSTGRESQL user, password and DB parameters
export oml_pgsql_db=omnileads
export oml_pgsql_user=omnileads
export oml_pgsql_password=tutorial
# If PGSQL runs on cloud cluster, set this parameter to true
export oml_pgsql_cloud=NULL
# ******* Variables for Dialer *******
export api_dialer_user=omnileads
export api_dialer_password=tutorial
# Values: NULL | IP address or FQDN
export oml_dialer_host=NULL
# ******* Variables for WebRTC bridge *******
# Values: NULL | IP address or FQDN
export oml_rtpengine_host=NULL
# Values: NULL | IP address or FQDN
export oml_kamailio_host=NULL
# ******* Variables for Redis and Websocket *******
# Values: NULL | IP address or FQDN
export oml_redis_host=NULL
# Values: NULL | IP address or FQDN
export oml_websocket_host=NULL
export oml_websocket_port=NULL
# *********************** NAT voip webrtc setting ***************************************************************************************
# External IP. This parameter will set the public IP for SIP and RTP traffic, on environments where calls go through a firewall.        #
# Values: auto | IP address | none                                                                                                      #
# auto = The public IP will be obtained from http://ipinfo.io/ip. It depends on the WAN connection that OML is using to go to Internet. #
# X.X.X.X = The public IP is set manually.                                                                                              #
# none = If the agents are working on a LAN environment, and don't need a public IP.                                                    #
# ***************************************************************************************************************************************
export oml_extern_ip=auto
# ******* Vaiables for OMLApp web *******
export oml_tz=America/Argentina/Cordoba
# Session Cookie Age (SCA): It's the time in seconds that will last the https session when inactivity
# is detected in the session (by default is 1 hour)
export oml_app_sca=3600
# Ephemeral Credentials TTL (ECTTL): It's the time in seconds that will last the SIP credentials
# used to authenticate a SIP user in the telephony system (by default 8 hours)
export oml_app_ecctl=3600
# Login failure limit (LFM): It's the number of attempts a user has to enter an incorrect password in login
# Decrease it if paranoic reasons
export oml_app_login_fail_limit=10
# Values: true | false
export oml_app_init_env=true
export oml_app_reset_admin_pass=true
export oml_app_install_sngrep=true
# ******************** SET ENV VARS ******************** #

Aquí detallamos y explicamos cada una de las Variables de instalación del componente OMLApp.

Finalmente podemos lanzar nuestro script first-boot-instaler.sh . Esto lo podemos hacer como user_data de una instancia cloud, a través de alguna utilidad de linea de comandos para administrar la infraestructura o directamente copiando el archivo hacia el linux host destino y lanzar la ejecución del mismo.

_images/install_userdata_aws_1.png

Ejemplo deploy utilizando user-data en AWS

_images/install_userdata_do.png

Ejemplo deploy utilizando user-data en Digital Ocean

_images/install_manual_script_run.png

Deploy copiando script en host

¿Necesita Asesoramiento? 

Seguridad en OMniLeads
OMniLeads es una aplicación Web diseñada para operar bajo la protección de al menos un Firewall perimetral o cloud Firewall en un ambiente de Cloud Computing.