VM Windows — Instalación de Dynamics

Support DQE
Support DQE
  • Actualización

1. Instalación

Esta sección describe el protocolo de instalación para desplegar DQE Unify Server en una máquina virtual Windows utilizando Docker y Docker Compose. La pila de la aplicación consta de Redis, RabbitMQ, Nginx, Unify Server y un Queue Worker, todos orquestados mediante Docker Compose.

Nota: todos los contenedores se ejecutan en una única red Docker en la VM Windows. La comunicación entre contenedores utiliza los nombres de servicio definidos en docker-compose.yml, no localhost. Las variables de entorno se configuran en consecuencia.

1.1 Requisitos previos

1.1.1 Requisitos de hardware

Componente Mínimo Recomendado
CPU 4 vCores 8 vCores
RAM 8 GB 16 GB
Disco (SO + Docker) 60 GB SSD 120 GB SSD
Red 100 Mbit/s 1 Gbit/s

1.1.2 Requisitos de software

Software Versión / Notas
Sistema operativo Windows Server 2019 / 2022 (64 bits)
Docker Engine Última versión estable – instalado dentro de WSL2 (Ubuntu)
WSL2 Windows Subsystem for Linux 2 – necesario para ejecutar contenedores Linux en Windows Server
PowerShell 5.1 o posterior (incluido con Windows)
Acceso a Internet Necesario para descargar imágenes desde DQE Container Registry y Docker Hub

1.2 Instalar Docker a través de WSL2

¿Por qué WSL2? Docker CE en Windows Server no puede ejecutar contenedores Linux de forma nativa (LCOW se eliminó en Docker 20.10+). WSL2 proporciona un kernel Linux real en Windows, lo que permite que Docker ejecute contenedores Linux sin problemas.

1.2.1 Habilitar las características de Windows

Abra PowerShell como Administrador y ejecute cada comando:

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Enable-WindowsOptionalFeature -Online -FeatureName Containers -All -NoRestart

Reinicio necesario: reinicie la VM después de habilitar estas características antes de continuar.

1.2.2 Instalar WSL2 y Ubuntu

Tras reiniciar, abra PowerShell como Administrador:

  1. Establezca WSL2 como versión predeterminada:

    wsl --set-default-version 2
  2. Instale Ubuntu:

    wsl --install -d Ubuntu

    Se abrirá una ventana de terminal pidiéndole que cree un nombre de usuario y contraseña de Unix. Complete la configuración antes de continuar.

1.2.3 Instalar Docker CE dentro de Ubuntu

Abra el terminal de Ubuntu WSL2 y ejecute:

  1. Instale Docker CE:

    curl -fsSL https://get.docker.com | sudo sh

    Nota: el script detecta WSL y recomienda Docker Desktop. Ignore el mensaje y espere 20 segundos para que la instalación continúe automáticamente.

  2. Añada su usuario al grupo docker e inicie el servicio:

    sudo usermod -aG docker $USER
    sudo service docker start
  3. Cierre y vuelva a abrir el terminal WSL2, luego verifique:

    docker --version
    docker compose version

    Nota: el servicio Docker debe iniciarse manualmente cada vez que se abre la sesión WSL2: sudo service docker start.

1.2.4 Autenticarse en DQE Container Registry

Las imágenes de DQE Unify se alojan en un Azure Container Registry privado. Desde el terminal de Ubuntu WSL2, utilice las credenciales proporcionadas por DQE Software para iniciar sesión:

docker login <registry-url> --username <Username provided by DQE> --password <Password provided by DQE>

Un inicio de sesión correcto muestra: Login Succeeded.

1.3 Preparar el directorio de trabajo

Cree una carpeta dedicada que contendrá el archivo Docker Compose, la configuración de Nginx y los volúmenes persistentes.

# Create the main application directory
New-Item -ItemType Directory -Path "C:\dqe-unify"
New-Item -ItemType Directory -Path "C:\dqe-unify\nginxconf"
New-Item -ItemType Directory -Path "C:\dqe-unify\volumes\redisvol"
New-Item -ItemType Directory -Path "C:\dqe-unify\volumes\rabbitvol"

La estructura del directorio debe verse así:

C:\dqe-unify\
├── docker-compose.yml          ← main orchestration file
├── nginxconf\
│   └── default.conf            ← Nginx reverse-proxy configuration
└── volumes\
    ├── redisvol\               ← Redis persistent data
    └── rabbitvol\              ← RabbitMQ persistent data

Nota: Docker Compose monta estos directorios locales como bind mounts en los contenedores.

1.4 Configurar Nginx

Nginx actúa como proxy inverso, reenviando las solicitudes HTTP/HTTPS entrantes al contenedor Unify Server en el puerto 8000.

Ejecute el siguiente comando para abrir el archivo en el Bloc de notas, luego pegue la configuración a continuación y guarde:

notepad C:\dqe-unify\nginxconf\default.conf

El archivo C:\dqe-unify\nginxconf\default.conf debe contener:

server {
    listen 80;

    location / {
        proxy_pass         http://unify-server:8000;
        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_read_timeout 300s;
    }
}

Nota: en Docker Compose, cada servicio tiene su propio nombre de host igual a su nombre de servicio. Por lo tanto, el destino del proxy es http://unify-server:8000, no http://localhost:8000.

HTTPS

Añada un segundo bloque de servidor en default.conf y monte su certificado SSL y clave privada en el contenedor Nginx. Actualice docker-compose.yml para exponer el puerto 443 y montar los archivos del certificado.

server {
    listen 443 ssl;

    ssl_certificate      /etc/nginx/ssl/cert.crt;
    ssl_certificate_key  /etc/nginx/ssl/cert.key;

    location / {
        proxy_pass         http://unify-server:8000;
        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_read_timeout 300s;
    }
}

1.5 Archivo de configuración de Docker Compose

Cree el archivo C:\dqe-unify\docker-compose.yml con el siguiente contenido. Sustituya el marcador de posición <registry-url> por la URL proporcionada por DQE Software.

services:
  redis:
    image: <registry-url>/dqe-unify-redis:latest
    platform: linux/amd64
    restart: always
    volumes:
      - redis-data:/data
    networks:
      - unify-net

  rabbitmq:
    image: <registry-url>/dqe-unify-rabbitmq:latest
    platform: linux/amd64
    restart: always
    ports:
      - "5672:5672"
    volumes:
      - rabbitmq-data:/bitnami
    networks:
      - unify-net

  nginx:
    image: <registry-url>/dqe-unify-nginx:latest
    platform: linux/amd64
    restart: always
    ports:
      - "80:80"
    volumes:
      - /mnt/c/dqe-unify/nginxconf:/etc/nginx/conf.d:ro
    depends_on:
      - unify-server
    networks:
      - unify-net

  unify-server:
    image: <registry-url>/unify-server-web-ms-dynamics:<version>
    restart: always
    command: ["python", "-u", "app.pyc"]
    ports:
      - "8000:8000"
    environment:
      - REDIS_URL=redis://redis:6379
      - CLOUDAMQP_URL=amqp://guest:guest@rabbitmq:5672/
      - PORT=8000
    depends_on:
      - redis
      - rabbitmq
    networks:
      - unify-net
    deploy:
      resources:
        limits:
          memory: 1g
          cpus: "0.25"

  queue-worker:
    image: <registry-url>/unify-server-web-ms-dynamics:<version>
    restart: always
    command: ["python", "-u", "queue_worker.pyc"]
    environment:
      - REDIS_URL=redis://redis:6379
      - CLOUDAMQP_URL=amqp://guest:guest@rabbitmq:5672/
    depends_on:
      - redis
      - rabbitmq
    networks:
      - unify-net
    deploy:
      resources:
        limits:
          memory: 5g
          cpus: "1.0"

volumes:
  redis-data:
  rabbitmq-data:

networks:
  unify-net:
    driver: bridge

Notas clave de configuración:

  • Los servicios se comunican mediante su nombre de servicio, por ejemplo redis o rabbitmq, no mediante 127.0.0.1.
  • redis-data y rabbitmq-data son volúmenes nombrados de Docker almacenados en el sistema de archivos Linux de WSL2. Esto evita problemas de permisos NTFS.
  • La configuración de Nginx se lee desde /mnt/c/dqe-unify/nginxconf, la carpeta de Windows accesible a través de WSL2.
  • Las credenciales del registro de imágenes se gestionan mediante docker login como se describe en la sección 1.2.4, y no se incluyen en el archivo Compose.

1.6 Desplegar la aplicación

Todos los comandos siguientes deben ejecutarse desde el terminal de Ubuntu WSL2.

  1. Paso 1 — Inicie el servicio Docker y navegue al directorio de la aplicación:

    sudo service docker start
    cd /mnt/c/dqe-unify
  2. Paso 2 — Descargue las imágenes necesarias:

    docker compose pull
  3. Paso 3 — Inicie todos los servicios en modo separado:

    docker compose up -d
  4. Paso 4 — Verifique que todos los contenedores estén en ejecución:

    docker compose ps

    Salida esperada: todos los servicios deben mostrar el estado running:

    NAME                        IMAGE                                                  STATUS
    dqe-unify-nginx-1           nginx:latest                                           running
    dqe-unify-rabbitmq-1        rabbitmq:3.13-management                               running (healthy)
    dqe-unify-redis-1           redis:alpine                                           running
    dqe-unify-unify-server-1    <registry-url>/unify-server-web-ms-dynamics:v3.0      running
    dqe-unify-queue-worker-1    <registry-url>/unify-server-web-ms-dynamics:v3.0      running

Importante: si algún contenedor muestra el estado exited o restarting, revise sus registros inmediatamente con docker compose logs <service-name>.

1.7 Configurar el firewall de Windows

Abra los puertos de entrada necesarios en el firewall de Windows para que los clientes externos puedan acceder a la aplicación. Ejecute los siguientes comandos en PowerShell como Administrador:

New-NetFirewallRule -DisplayName "DQE Unify - HTTP" -Direction Inbound -Protocol TCP -LocalPort 80 -Action Allow
New-NetFirewallRule -DisplayName "DQE Unify - HTTPS" -Direction Inbound -Protocol TCP -LocalPort 443 -Action Allow

Nota: el puerto 8000 (Unify Server) y el puerto 5672 (RabbitMQ) no necesitan abrirse externamente. Solo se accede a ellos internamente mediante la red de Docker.

Dynamics 365 — Autorizar rangos de IP entrantes

El servidor DQE Unify recibe solicitudes de Microsoft Dynamics 365, que se ejecuta en la infraestructura de Azure. Debe autorizar los rangos de IP de Azure correspondientes tanto en el firewall de Windows como en el NSG.

La lista completa y actualizada de los rangos de IP de Microsoft Azure está disponible para descargar en:
Microsoft Azure IP Ranges and Service Tags

Descargue el archivo JSON, identifique las etiquetas de servicio Dynamics365 y AzureCloud relevantes para su región, y añada los rangos de IP correspondientes como reglas de permiso de entrada en el puerto 443.

Azure VM — Grupo de seguridad de red (NSG)

Si la VM está alojada en Azure, también debe añadir reglas de seguridad de entrada en el Grupo de seguridad de red (NSG) asociado:

  1. Vaya a Azure Portal → Virtual Machines → [su VM] → Networking.
  2. Haga clic en Add inbound port rule.
  3. Establezca Destination port ranges en 80,443.
  4. Establezca Protocol en TCP y Action en Allow.
  5. Para autorizar el tráfico de Dynamics 365, establezca Source en Service Tag y seleccione Dynamics365.
  6. Haga clic en Add.

1.8 Opcional: configurar IIS como proxy inverso

Si su organización requiere IIS como punto de entrada, por ejemplo para la gestión de certificados o la integración con una infraestructura existente basada en IIS, puede configurar IIS para reenviar el tráfico a Nginx que se ejecuta en el puerto 80. Este paso es opcional. Nginx por sí solo es suficiente.

1.8.1 Instalar IIS y ARR

En PowerShell como Administrador:

# Install IIS with management tools
Install-WindowsFeature -Name Web-Server, Web-Mgmt-Tools -IncludeManagementTools

# Install URL Rewrite module (required for reverse proxy)
# Download from: https://www.iis.net/downloads/microsoft/url-rewrite
# Then install Application Request Routing (ARR):
# Download from: https://www.iis.net/downloads/microsoft/application-request-routing

1.8.2 Habilitar el proxy en ARR

  1. Abra IIS Manager.
  2. Haga clic en el nodo del servidor → Application Request Routing Cache.
  3. En el panel Actions, haga clic en Server Proxy Settings.
  4. Marque Enable proxy y haga clic en Apply.

1.8.3 Añadir una regla de reescritura de URL

Edite C:\inetpub\wwwroot\web.config:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
  <system.webServer>
    <rewrite>
      <rules>
        <rule name="DQE Unify Proxy" stopProcessing="true">
          <match url="(.*)" />
          <action type="Rewrite"
                  url="http://localhost:80/{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>
</configuration>

1.9 Configurar DNS

Contacte con sus administradores de DNS y pídales que creen un registro A que apunte a la dirección IP pública de la VM Windows.

Tipo de registro Nombre Valor
A unify.yourdomain.com Dirección IP pública de la VM Windows

Si la VM está en Azure, puede encontrar su dirección IP pública en Azure Portal → Virtual Machines → [su VM] → Overview → Public IP address.

1.10 Verificar el despliegue

Una vez que se propague el DNS, abra un navegador y navegue a:

http://unify.yourdomain.com

También puede probar localmente desde la propia VM:

# Test Nginx is reachable
curl http://localhost

# Test the Unify Server is reachable
curl http://localhost:8000

Si la aplicación responde, el despliegue está completo y el servidor está correctamente configurado.

2. Configuración de la aplicación

Una vez que la aplicación esté en ejecución, se debe configurar el firewall de Windows y cualquier firewall o proxy ascendente para permitir los rangos de IP enumerados a continuación.

2.1 Direcciones IP a autorizar

DQE Software Office Server

Contacte con el soporte de DQE Software para obtener la dirección IP que debe autorizar.

DQE – Servicio de deduplicación

Contacte con el soporte de DQE Software para obtener la dirección IP que debe autorizar.

DQE – Servicio de calidad

Contacte con el soporte de DQE Software para obtener la dirección IP que debe autorizar.

Acción necesaria: pida a su equipo de SI/red que autorice también la IP pública de la VM Windows en el lado de DQE Software. Proporcione a DQE la IP pública de salida de la VM.

Rangos de IP de Azure (IPv4) — Si el tráfico saliente pasa por Azure

4.175.0.0/16, 4.180.0.0/16, 4.210.128.0/17, 4.231.0.0/17, 4.245.0.0/17, 13.69.0.0/17,
13.73.128.0/18, 13.73.224.0/21, 13.80.0.0/15, 13.88.200.0/21, 13.93.0.0/17, 13.94.128.0/17,
13.95.0.0/16, 20.4.0.0/16, 20.8.0.0/16, 20.13.0.0/17, 20.16.0.0/16, 20.23.0.0/16,
20.31.0.0/16, 20.50.0.0/18, 20.50.88.0/21, 20.50.128.0/17, 20.54.128.0/17, 20.56.0.0/16,
20.61.0.0/16, 20.67.0.0/17, 20.71.0.0/16, 20.73.0.0/16, 20.76.0.0/16, 20.82.0.0/17,
20.86.0.0/16, 20.93.128.0/17, 20.101.0.0/16, 20.103.0.0/16, 20.105.128.0/17, 20.107.0.0/17,
20.123.128.0/17, 20.126.0.0/16, 20.160.0.0/16, 20.224.0.0/16, 20.229.0.0/16,
20.234.128.0/17, 20.238.128.0/17, 23.97.128.0/17, 23.98.46.0/24, 23.100.0.0/20,
23.101.64.0/20, 40.67.192.0/19, 40.68.0.0/16, 40.74.0.0/18, 40.91.192.0/18,
40.114.128.0/17, 40.115.0.0/18, 40.118.0.0/17, 51.124.0.0/16, 51.136.0.0/16,
51.137.0.0/17, 51.138.0.0/17, 51.144.0.0/16, 51.145.128.0/17, 52.136.192.0/18,
52.137.0.0/18, 52.142.192.0/18, 52.143.0.0/18, 52.148.192.0/18, 52.149.64.0/18,
52.157.64.0/18, 52.157.128.0/17, 52.166.0.0/16, 52.174.0.0/16, 52.178.0.0/17,
52.232.0.0/17, 52.233.128.0/17, 52.236.128.0/17, 65.52.128.0/19, 98.64.0.0/16,
104.40.128.0/17, 104.45.0.0/18, 104.45.64.0/20, 104.46.32.0/19, 137.116.192.0/19,
137.117.128.0/17, 168.61.56.0/21, 168.63.0.0/19, 172.201.0.0/16, 172.205.128.0/17,
172.211.0.0/16, 191.233.64.0/18, 191.237.232.0/22, 191.239.200.0/22, 213.199.128.0/20

Rangos de IP de Azure (IPv6) — Si el tráfico saliente pasa por Azure

2603:1020:200::/46, 2603:1020:205::/48, 2603:1020:206::/47, 2603:1020:208::/56,
2603:1026:900:7::/64, 2603:1026:900:8::/63, 2603:1026:900:1a::/63, 2603:1026:900:1c::/64,
2603:1026:2405::/48, 2603:1026:2500:24::/64, 2603:1026:3000:140::/59, 2603:1027:1:140::/59,
2a01:111:f403:c201::/64, 2a01:111:f403:ca05::/64, 2a01:111:f403:ca06::/63,
2a01:111:f403:ca08::/63, 2a01:111:f403:d201::/64, 2a01:111:f403:da01::/64,
2a01:111:f403:e201::/64

Relacionada con

¿Fue útil este artículo?

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