Ejecución del deploy sobre instancias Linux

Aquí cubrimos la instalación basada en ejecutar el script first_boot_installer de manera manual, sobre cada Linux host implicado en la instalación.

Como bien sabemos, a la hora de ejecutar una instalación, podemos optar cómo vamos a distribuir los componentes, es decir cuáles vamos a agrupar sobre un mismo Linux host y cuáles van a correr sobre entornos aislados (o sea, sobre un Linux host dedicado).

Es sabido que cada componente cuenta con su script de deploy first_boot_installer.tpl para instalar el componente sobre un Linux host. Sin embargo, se resalta el hecho de que el componente OMLApp cuenta con un first_boot_installer.tpl más sofisticado, 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, puntualmente aquellas que hacen referencia a la dirección de red de cada componente (export component_host=).

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 se debe ejecutar el first_boot_installer.sh del componente OMLApp, dejando como NULL toda aquella variable que haga referencia a la dirección de red de cada componente.

Para obtener nuestro script, lanzar el comando:

curl https://gitlab.com/omnileads/ominicontacto/-/raw/master/install/onpremise/deploy/ansible/first_boot_installer.tpl?inline=false > first_boot_installer.sh && chmod +x first_boot_installer.sh

Entonces, una vez que contamos con el script, 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.

Por último, ya podemos lanzar nuestro script first_boot_instaler.sh. Ésto lo podemos hacer como user_data de una instancia cloud, a través de alguna utilidad de línea de comandos para administrar la infraestructura, o bien directamente copiando el archivo hacia el Linux host destino y lanzando 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 DigitalOcean

_images/install_manual_script_run.png

Deploy copiando script en host

Instalación finalizada

Al cabo de unos minutos, el proceso de instalación del componente OMLApp debe finalizar arrojando evidencia de la culminación exitosa del procedimiento. Ésta salida, la podrá encontrar en su pantalla si ejecutó el script de manera manual o bien en el archivo de log messages o cloud-init-out, en caso de lanzar la VM utilizando alguna otra alternativa como aws-cli, doctl o linode-cli, etc.

_images/install_ok.png

Por lo tanto, ya podemos acceder a la instancia a través de su dirección de red (IP o FQDN).

OMniLeads se despliega con certificados SSLv3 para la conexión HTTPS del browser con el servidor web (Nginx), utilizando un par cert/key en formato PEM auto-firmado. Utiliza SHA-512 con encriptación RSA como algoritmo de firma y un tamaño de clave 4096 bits. Al ser auto-firmado, produce en el browser un warning de Sitio no seguro al momento de acceder al sistema por primera vez. Una vez agregada la excepción para confiar en dicho sitio, ya podemos acceder a la vista de login.

_images/install_ssl_insecure.png

Finalmente, usted podrá proceder con la configuración inicial.

Asignando sus propios certificados SSL

En caso de contar con sus propios certificados, es posible disparar nuestro deploy utilizando los mismos. Para ello, deberá simplemente ejecutar el deploy utilizando el script first_boot_installer.sh sobre el host a instalar, y allí en el mismo directorio desde el cual va a lanzar el script, deberá crear una carpeta con el nombre certs para luego copiar sus certificados allí (archivos cert y key en formato .pem). El script se encarga de verificar si dicho directorio existe, para luego tomar los archivos y asignarlos en el deploy (cert.pem y key.pem).

Durante el proceso de deploy, se detectan los archivos en dicha ubicación y por lo tanto se proporcionan a nivel web y WebRTC, de manera tal que al finalizar el deploy la plataforma quede disponible y utilizando sus propios certificados de confianza.

_images/install_linux_ssl.png _images/install_ssl_secure.png