GCP VM — Instalación del servidor backend

Support DQE
Support DQE
  • Actualización

1. Arquitectura

La aplicación y todas sus dependencias se compilan en una imagen Docker.

Tan pronto como el contenedor se despliega en una instancia GCP, se empareja con una organización de Salesforce que tiene instalado el paquete Unify UI (instalable directamente a través de AppExchange).

Este documento describe una posible configuración para gestionar el acceso a la instancia desplegada, por ejemplo a través de un balanceador de carga (load balancer).

GCP backend architecture for DQE One and Salesforce

Diagrama de flujo

A continuación se muestra el diagrama que describe todos los flujos entrantes/salientes, así como las IP y los puertos requeridos por la aplicación.

Inbound and outbound flow diagram for DQE One on GCP

Medidas de seguridad

No podemos proporcionar un ejemplo de cómo implementar la capa de seguridad que se adapte perfectamente a su arquitectura. Sin embargo, podemos ofrecer algunas recomendaciones relevantes para el uso de la propia aplicación.

  • Protocolos y puertos: Todos los flujos entrantes/salientes de la aplicación pasan por el protocolo HTTPS (puerto 443). No es necesario abrir ningún otro puerto en su VM. Las IP de DQE que deben ser accesibles se describen en el diagrama anterior.
  • Filtrado de IP: El propio servidor de la aplicación solo necesita ser accesible desde los servidores de Salesforce. Por lo tanto, se recomienda configurar un filtrado de las IP entrantes.

Existe una excepción a esto, sin embargo, que es el servidor web CustomUI incluido en el docker-compose. Debe ser accesible desde un navegador web. Por lo tanto, una solución podría ser permitir que una VPN específica acceda al servidor. Consulte aquí la lista de IP publicadas por Salesforce. (No olvide las IP de Hyperforce)

  • Protocolo de autenticación: Salesforce ofrece de forma nativa varios protocolos para proteger las solicitudes entre sus servidores y el servidor DQE One. Al configurar la Connected App "DQE One Customer" en su organización, podrá seleccionar el método de autenticación "Basic Auth" y configurar su firewall de aplicación en consecuencia.

Si la VM está directamente expuesta a internet, debe tener una entrada DNS y un certificado SSL asociado que apunten a ella.

Si la VM no está directamente expuesta a internet, esto generalmente significa que el tráfico se enruta a través de un componente como una puerta de enlace (gateway). En este caso, el DNS y el certificado SSL deben instalarse en esa puerta de enlace, que luego reenviará el tráfico a la VM interna.

Recomendación

En esta sección, describimos la lista de componentes necesarios para instalar la instancia Unify Server de DQE en GCP.

Nota: Las estimaciones se basan en 1 millón de registros. Dependiendo del volumen de las bases de datos procesadas, puede ser necesario aumentar la capacidad de memoria de las instancias de contenedor para optimizar los tiempos de procesamiento.

Despliegue con instancias de VM de GCP

  • Tipo de servidor: Unix, por ejemplo Ubuntu.
  • Balanceador de carga: No es obligatorio, pero puede utilizarse si ya está disponible.

Para obtener más información, consulte los siguientes recursos:

Composición y servicios

La imagen Docker es una aplicación web que expone los servicios y las API que se solicitan desde Salesforce a través de la aplicación Lightning DQE Unify UI.

A continuación, describimos los atributos y funciones de cada servicio.

APLICACIÓN WEB

Un contenedor backend que contiene una aplicación de microservicios. Esta aplicación expone todas las API que se invocan para lanzar procesos, gestionar las colas de procesamiento e instanciar workers de procesamiento. Depende de los siguientes servicios para funcionar correctamente. Este worker debe exponerse en la web tal como se describe en la configuración de nginx presentada más adelante en este documento.

Parámetros de Docker Compose

  • image: El nombre de la imagen utilizada por la aplicación web. Es necesario renombrar la imagen según los nombres de los registros utilizados. Las imágenes Docker de DQE se alojan en un Azure Container Registry. El nombre de la imagen se construye de la siguiente manera:

    <Name of the registry container>.azurecr.io/<name of the image>
  • container_name: Nombre del contenedor
  • depends_on: Nombre de los servicios que preceden a este servicio
  • domainname: El nombre de dominio utilizado para el FQDN. Formato esperado:

    <domain name>
  • environment: Variables de entorno del servicio
  • command: Comando ejecutado al iniciar el contenedor

Worker

Un contenedor backend que contiene una aplicación de microservicios. Esta aplicación expone todas las API que se invocan para lanzar procesos, gestionar las colas de procesamiento e instanciar workers de procesamiento. Depende de los siguientes servicios para funcionar correctamente. Este worker debe exponerse en la web tal como se describe en la configuración de nginx presentada más adelante en este documento.

Parámetros a configurar en Docker Compose

  • image: El nombre de esta imagen es el mismo que el del servicio web
  • container_name: El nombre del contenedor en el entorno Docker
  • depends_on: Nombre de los servicios que preceden a este servicio
  • environment: Variables de entorno del servicio
  • command: Comando ejecutado al iniciar el contenedor

CustomUI

Este servicio es una aplicación web que expone un front utilizado para configurar las reglas de deduplicación. Al igual que el primer servicio, también debe exponerse en la web. Este servicio también consume algunas API del backend, por ejemplo para recuperar metadatos del CRM.

Nombre del registro: *

Nombre de la imagen: *

Versiones disponibles: *

Redis

Este servicio es una base de datos clave/valor utilizada por los distintos departamentos para almacenar claves de funcionamiento interno, como las configuraciones de las organizaciones de Salesforce, las sesiones, etc.

Es posible utilizar las imágenes oficiales publicadas por Redis, como "redis:alpine", pero por motivos de seguridad algunos proveedores de la nube bloquean la obtención de imágenes públicas y solo permiten imágenes de registros privados. Para solventar esta restricción, también publicamos en el registro privado "dqeone" una versión de redis perfectamente compatible con nuestras aplicaciones.

Parámetros

  • image: Imagen oficial de redis => redis:alpine
  • container_name: El nombre del contenedor en el entorno Docker
  • volumes: La ruta del volumen que se utilizará para respaldar los datos de Redis

    <name of the volume defined in this docker compose>:/data

RabbitMQ

Este servicio es un potente gestor de colas que permite la recepción y la planificación de las solicitudes de procesamiento. Hasta que un proceso se haya asignado a un worker y se haya completado, permanecerá en una cola. Esto también permite la resiliencia ante fallos: si el servidor se reiniciara, retomaría el último procesamiento en la cola justo donde lo dejó.

Al igual que con la imagen del servicio Redis, tiene la opción de utilizar una versión pública (rabbitmq:3-management-alpine) o la del registro privado dqeone.

Parámetros

  • image: Imagen oficial de rabbitmq => rabbitmq:3-management-alpine
  • container_name: El nombre del contenedor en el entorno Docker

2. Instalación

Hay dos escenarios posibles:

  • Escenario 1: El cliente aún no tiene un balanceador de carga configurado en su VM
    Siga todos los pasos
  • Escenario 2: El cliente ya tiene una VM de GCP con un balanceador de carga configurado

GCP installation scenarios

2.1. Requisito previo

Inicie la instancia del servidor dedicado y conéctese con una de las opciones de conexión:

GCP VM connection options

Para obtener más detalles sobre el acceso a las instancias a través de la consola de GCP, consulte la documentación oficial de GCP.

Instalación de NGINX

$ sudo apt update
$ sudo apt install nginx

Configuración:

  • Si la VM solo es accesible a través del balanceador de carga, por ejemplo dentro de una VPC privada:
server {

listen 80;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://127.0.0.1:8001;
}

location /api/ {
rewrite /api/(.*) /$1 break;
proxy_set_header Host $host;
proxy_pass http://127.0.0.1:8000;
}
  • Si la VM está expuesta directamente por HTTPS:
server {
    listen 443 ssl;
    server_name <e.g. exemple.com>;
    ssl_certificate < location of the .crt certificate>
    ssl_certificate_key < location of the private key.key>
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH: !aNULL: ! MD5;
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://127.0.0.1:8001;
    }
    Location /api/ {
        rewrite /api/(.*) /$1 break;
        proxy_set_header Host $host;
        proxy_pass http://127.0.0.1:8000;
    }
}

Instalación de Docker

  1. Actualizar el paquete existente

    $ sudo apt-get update
  2. Instalar los requisitos previos para usar paquetes a través de HTTPS

    $ sudo apt install apt-transport-https ca-certificates curl software-properties-common
  3. Agregar la clave GPG del repositorio oficial de Docker

    $ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  4. Agregar el repositorio de Docker a las fuentes de APT

    $ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
  5. Actualizar los paquetes

    $ sudo apt-get update
  6. Verificación de la instalación desde el repositorio de Docker

    $ apt-cache policy docker-ce
  7. Instalación de Docker

    $ sudo apt install docker-ce

Instalación de Docker-compose

Nota: En las instalaciones recientes de Docker, Docker Compose V2 se incluye por defecto con Docker Engine. Antes de descargar el binario independiente docker-compose, compruebe si Compose ya está instalado ejecutando:

docker compose version

Si el comando devuelve un número de versión, puede omitir este paso de instalación y usar docker compose en lugar de docker-compose en los siguientes comandos.

  1. Descargar la versión deseada (número de versión a cambiar en la URL)

    $ sudo curl -L "https://github.com/docker/compose/releases/download/<NUMEROS_DE_VERSION>/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
  2. Configurar los permisos

    $ sudo chmod +x /usr/local/bin/docker-compose

Instalación de Azure CLI para el acceso a Azure Container Registry

$ sudo curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

2.2. GCP Unify Server

services:
    customui: 
        image: <imageURL>
        container_name: custom-ui 
        logging: 
            driver : "json-file"
            options : 
                max-file : 5
                max-size : 50m
        environment:
          - PORT=8001
        ports:
          - 8001:8001 
        command: npm start

    web: 
        image: <imageURL>
        container_name: one-server 
        hostname: oneserver 
        logging: 
            driver : "json-file"
            options : 
                max-file : 5
                max-size : 50m
        depends_on: 
          - redis 
          - rabbitmq 
        environment: 
          - SFAPIVERSION=v59.0
          - PORT=8000
          - REDIS_URL=redis://redis 
          - CLOUDAMQP_URL=amqp://guest:guest@rabbitmq/admin
          - CUSTOMUI=http://customui:8001
          - UNIFYSERVERURL=http://web:8000
        ports:
          - 8000:8000 
        command: bash ./entrypoint.sh

    worker: 
        image: <imageURL>
        container_name: queue-worker 

        logging: 
            driver : "json-file" 
            options : 
                max-file : 5
                max-size : 50m
        environment:
          - SFAPIVERSION=v59.0
          - WORKDIRPATH=/app/unify
          - REDIS_URL=redis://redis
          - CLOUDAMQP_URL=amqp://guest:guest@rabbitmq/admin
        depends_on:
          - web
        command: python -u ./unify/queue_worker.pyc

    redis: 
        container_name: redis
        logging:
            driver : "json-file"
            options :
                max-file : 5
                max-size : 50m
        image: <imageURL>
        hostname: redis
        volumes:
        - redis_data:/data

    rabbitmq: 
        image: <imageURL>
        container_name: 'rabbitmq'
        logging: 
            driver : "json-file" 
            options : 
                max-file : 5
                max-size : 50m
        environment:
          - RABBITMQ_DEFAULT_PASS=guest
          - RABBITMQ_DEFAULT_USER=guest
          - RABBITMQ_DEFAULT_VHOST=admin
        hostname: rabbitmq
        depends_on:
          - redis
        volumes:
        - rabbitmq_data:/var/lib/rabbitmq/
        - rabbitmq_log:/var/log/rabbitmq/

volumes:
    rabbitmq_data:
    rabbitmq_log:
    redis_data:

3. Lanzador

Aunque el servidor backend se despliega en GCP, las imágenes Docker de DQE se proporcionan a través de un Azure Container Registry gestionado por DQE.

3.1. Conexión al Azure Container Registry de DQE

Autentique Docker en el Azure Container Registry de DQE:

$ sudo docker login **************
Username: <Login provided by DQE>
Password: <Pwd provided by DQE>

3.2. Lanzamiento de docker-compose.yml

Vaya a la carpeta que contiene el archivo docker-compose.yml y ejecútelo.

$ sudo docker-compose pull
$ sudo docker-compose up

Relacionada con

¿Fue útil este artículo?

Usuarios a los que les pareció útil: 0 de 0