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 -NoRestartReinicio 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:
-
Establezca WSL2 como versión predeterminada:
wsl --set-default-version 2 -
Instale Ubuntu:
wsl --install -d UbuntuSe 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:
-
Instale Docker CE:
curl -fsSL https://get.docker.com | sudo shNota: el script detecta WSL y recomienda Docker Desktop. Ignore el mensaje y espere 20 segundos para que la instalación continúe automáticamente.
-
Añada su usuario al grupo docker e inicie el servicio:
sudo usermod -aG docker $USER sudo service docker start -
Cierre y vuelva a abrir el terminal WSL2, luego verifique:
docker --version docker compose versionNota: 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 dataNota: 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.confEl 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: bridgeNotas clave de configuración:
- Los servicios se comunican mediante su nombre de servicio, por ejemplo
redisorabbitmq, no mediante127.0.0.1. -
redis-datayrabbitmq-datason 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 logincomo 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.
-
Paso 1 — Inicie el servicio Docker y navegue al directorio de la aplicación:
sudo service docker start cd /mnt/c/dqe-unify -
Paso 2 — Descargue las imágenes necesarias:
docker compose pull -
Paso 3 — Inicie todos los servicios en modo separado:
docker compose up -d -
Paso 4 — Verifique que todos los contenedores estén en ejecución:
docker compose psSalida 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 AllowNota: 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:
- Vaya a Azure Portal → Virtual Machines → [su VM] → Networking.
- Haga clic en Add inbound port rule.
- Establezca Destination port ranges en
80,443. - Establezca Protocol en
TCPy Action enAllow. - Para autorizar el tráfico de Dynamics 365, establezca Source en
Service Tagy seleccioneDynamics365. - 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-routing1.8.2 Habilitar el proxy en ARR
- Abra IIS Manager.
- Haga clic en el nodo del servidor → Application Request Routing Cache.
- En el panel Actions, haga clic en Server Proxy Settings.
- 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.comTambién puede probar localmente desde la propia VM:
# Test Nginx is reachable
curl http://localhost
# Test the Unify Server is reachable
curl http://localhost:8000Si 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/20Rangos 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