🇪🇸
Omnileads Docs
ComunidadForo
Español
Español
  • 👶Introducción a OMniLeads
    • Características Generales de OMniLeads
    • Arquitectura y componentes
  • 🚀Instalación de OMniLeads
    • Deploy utilizando Docker
      • Deploy en Docker-Destkop
      • Deploy en Docker para VPS Cloud o VM
      • Deploy en Docker para VPS Cloud o VM con Bucket Externo
    • Deploy utilizando Ansible
      • Deploy en AIO (All-In-One)
      • Deploy en AIT (All-In-Three)
      • Deploy en HA (High Availability)
      • Backups, Restores, Upgrades y Rollbacks
      • Migración desde CentOS7
    • OMniLeads Enterprise
    • Deploy en Entornos de Desarrollo
    • First Login
    • Certificados TLS/SSL
    • Monitoreo y Observabilidad
    • Consideraciones de Seguridad
  • ⚙️Configuración inicial
  • 🪪Autenticación LDAP
  • 🎞️Video Llamadas (Pro)
    • Configuración Inicial
    • Wordpress Plugin
    • Webphone Demo
    • Embebiendo el Webphone
  • 🎯CX Survey (Pro)
    • Reportería
  • 📈Reportes Premium (Pro)
    • Reportes de Actividad
    • Analizando Resultados
  • 🔊Text To Speech - TTS (Pro)
  • ☎️Configuración del Canal de Voz
    • Parámetros generales del SIP trunk
  • 🆗Configuración del Canal de Whatsapp (Pro)
    • OMniLeads y GupShup
    • Dar de Alta Whatsapp Business en GupShup
    • Plantillas de Mensajes y Grupos Horarios
    • Proveedores
    • Lineas
  • 🚧Wallboard for Business (Pro)
    • Creación de un Wallboard
    • Agregando Widgets y Páginas "realtime"
    • Explorando Widgets y Métricas
  • 📤Mensajes Masivos (Pro)
    • Creación de Envios
    • Campañas de Turnos
    • Exportación de Resultados
  • 💬Campañas de Contacto
    • Campaña Entrante
      • Enrutamiento de llamadas entrantes
      • Derivación de llamadas entrantes desde la PBX hacia OMniLeads
      • Enrutamiento condicionado por rango de tiempo
      • IVR - Interactive Voice Response
      • Identificación de llamada entrante
      • Ejecución de dialplan personalizado
    • Campaña Manual
    • Campaña Preview
    • Campaña Dialer
    • Campaña de Whatsapp
  • 🎧Manual de agente
    • Login Logout
    • Llamadas manuales desde listado de contactos
    • Llamadas preview
    • Llamadas en dialer
    • Llamadas entrantes
    • Llamadas entre agentes
    • Listado de Contactos
    • Mensajes de Whatsapp
  • 🛑Métricas, grabaciones y supervisión
    • Grabaciones
    • Reportes de campañas entrantes
    • Reportes de campañas salientes
    • Reporte general de llamadas
    • Reportes de agente
    • Reportes de Whatsapp
    • Reportes de Conversaciones
    • Supervisión
  • 📊Auditoría de gestiones
  • ☎️Integración entre OMniLeads y PBXs
  • 🛠️Gestiones del administrador IT
  • 🧩Integración con CRM
    • Interacción desde OMniLeads hacia el CRM
    • Interacción desde el CRM hacia OMniLeads
  • 🔐Consideraciones sobre seguridad
  • 📌OMniLeads RESTful API
    • API de sesión de Agente en Asterisk
  • 🗒️Release Notes
  • ❤️Comunidad
  • 🎇Acerca De
Con tecnología de GitBook
En esta página
  • Bash Script y Ansible como piezas clave 📋
  • Systemd & Podman para gestión de componentes 🔧
  • Pasemos a la acción!
  1. Instalación de OMniLeads

Deploy utilizando Ansible

Última actualización hace 1 año

En el siguiente apartado abordaremos los pasos necesarios para tener OMniLeads corriendo en entornos contenerizados bajo .

Es requisito fundamental contar con una distribución de Linux con Podman instalado (3.0.0 or higher). En la actualidad, sistemas operativos modernos como Debian, Ubuntu, Rocky, o Alma Linux, tienen repositorios activados que permiten su descarga.

Nota: Si se trabaja sobre un VPS con una IP Pública, es mandatorio contar con una interface de red dedicada a una IP Privada.

Para ello procedemos a clonar el repositorio del Deploy Manager del proyecto y nos posicionamos en la carpeta de Ansible:

git clone https://gitlab.com/omnileads/omldeploytool.git
cd omldeploytool/ansible

Es importante destacar que el uso del Deploy Manager con Ansible nos permitirá múltiples acciones administrativas:

  • crear nuevas instancias

  • llevar adelante procesos de upgrades & rollbacks

  • llevar proceos de Disaster Recovery: backups & restores

  • administrar cientos de instancias de OMniLleads en paralelo, mediante archivos de inventario

Para cada instancia operativa, una colección de componentes es invocada mediante los servicios de SystemD, cada uno de ellos ejecutándose en un contenedor. También es posible agrupar dichos contenedores en instancias físicas separadas (cluster horizontal) y darles características de redundancia y disponibilidad (cluster HA).

Debajo se puede apreciar un bosquejo de la arquitectura basada en contenedores y sus componentes involucrados:

Bash Script y Ansible como piezas clave 📋

Una instancia de OMniLeads es desplegada en un Linux server utilizando SystemD y Podman, a partir de un Bash Script que se alimenta de variables de entorno y utiliza un set de archivos de Ansible para automatización (Playbooks + Templates).

Este bash script será el responsable de la ejecución de múltiples acciones sobre uno o más tenants al mismo tiempo. Básicamente, busca el archivo de inventario de acuerdo a la ubicación especificada en la línea de comando y a partir de allí lanza el Playbook "raíz" de Ansible (matrix.yml).

Ejecutando el siguiente comando, podemos interpretar sus posibles usos:

./deploy.sh --help

Si el objetivo es correr instalaciones, upgrades, backups o restores, se deben especificar 2 parametros fundamentales:

  • --action=

  • --tenant=

En el siguinte ejemplo, el script llevará a cabo una acción de instalación sobre la carpeta "tenant-folder", en cuyo interior contiene el archivo de inventario correspondiente con la descripción y parametrización de su/s tenant/s.

./deploy.sh --action=install --tenant=<tenant-folder>

Systemd & Podman para gestión de componentes 🔧

Bajo este método de instalación, contaremos con la posibilidad de manejar contenedores (componentes) como servicios tradicionales de SystemD.

systemctl start component
systemctl restart component
systemctl stop component

Detrás de cada acción disparada por el comando systemctl, un contenedor de Podman es lanzado, parado o reiniciado. Este contenedor es el resultado de una imágen invocada a partir de las variables de entorno configuradas en el deployment.

Debajo se expone un ejemplo, en el que observamos el archivo SystemD para el componente de Nginx: /etc/systemd/system/nginx.service:

[Unit]
Description=Podman container-oml-nginx-server.service
Documentation=man:podman-generate-systemd(1)
Wants=network-online.target
After=network-online.target
RequiresMountsFor=%t/containers

[Service]
Environment=PODMAN_SYSTEMD_UNIT=%n
Restart=on-failure
TimeoutStopSec=70
ExecStartPre=/bin/rm -f %t/%n.ctr-id
ExecStart=/usr/bin/podman run \
  --cidfile=%t/%n.ctr-id \
  --cgroups=no-conmon \
  --sdnotify=conmon \
  --replace \
  --detach \
  --network=host \
  --env-file=/etc/default/nginx.env \
  --name=oml-nginx-server \
  --volume=/etc/omnileads/certs:/etc/omnileads/certs \
  --volume=django_static:/opt/omnileads/static \
  --volume=django_callrec_zip:/opt/omnileads/asterisk/var/spool/asterisk/monitor \
  --volume=nginx_logs:/var/log/nginx/ \
  --rm  \
  docker.io/omnileads/nginx:230215.01
ExecStop=/usr/bin/podman stop --ignore --cidfile=%t/%n.ctr-id
ExecStopPost=/usr/bin/podman rm -f --ignore --cidfile=%t/%n.ctr-id
Type=notify
NotifyAccess=all

[Install]
WantedBy=default.target

Nginx, a su vez, tendrá su archivo de variables de entorno definidas de la siguiente manera: /etc/default/nginx.env:

DJANGO_HOSTNAME=172.16.101.221
DAPHNE_HOSTNAME=172.16.101.221

KAMAILIO_HOSTNAME=localhost
WEBSOCKETS_HOSTNAME=172.16.101.221
ENV=prodenv

S3_ENDPOINT=http://172.16.101.221:9000

Pasemos a la acción!

Dependiendo de la estructura del archivo de inventario y de sus variables definidas, OMniLeads puede ser desplegado de manera remota en 3 esquemas posibles:

: Todos los componentes representados en contenedores se despliegan en el mismo Linux Host.

: Los componentes se agrupan en una estructura de Cluster Horizontal (útil para alto tráfico o escenarios de alta carga).

: Los componentes se agrupan en dos nodos Activo-Pasivo para soporte de Alta Disponibilidad.

🚀
Correr OMniLeads All in One con Podman & Systemd
Correr OMniLeads Cluster con Podman & Systemd
Correr OMniLeads Cluster HA con Podman & Systemd
Podman