1. Installation
Dieser Abschnitt beschreibt das Installationsprotokoll für die Bereitstellung des DQE Unify Servers auf einer Windows Virtual Machine mit Docker und Docker Compose. Der Anwendungsstack besteht aus Redis, RabbitMQ, Nginx, Unify Server und einem Queue Worker, die alle über Docker Compose orchestriert werden.
Hinweis: Alle Container laufen in einem einzigen Docker-Netzwerk auf der Windows-VM. Die Kommunikation zwischen den Containern erfolgt über die in docker-compose.yml definierten Servicenamen, nicht über localhost. Die Umgebungsvariablen sind entsprechend gesetzt.
1.1 Voraussetzungen
1.1.1 Hardwareanforderungen
| Komponente | Minimum | Empfohlen |
|---|---|---|
| CPU | 4 vCores | 8 vCores |
| RAM | 8 GB | 16 GB |
| Festplatte (OS + Docker) | 60 GB SSD | 120 GB SSD |
| Netzwerk | 100 Mbit/s | 1 Gbit/s |
1.1.2 Softwareanforderungen
| Software | Version / Hinweise |
|---|---|
| Betriebssystem | Windows Server 2019 / 2022 (64-bit) |
| Docker Engine | Neueste stabile Version – installiert innerhalb von WSL2 (Ubuntu) |
| WSL2 | Windows Subsystem for Linux 2 – erforderlich, um Linux-Container auf Windows Server auszuführen |
| PowerShell | 5.1 oder höher (in Windows enthalten) |
| Internetzugang | Erforderlich, um Images aus der DQE Container Registry und Docker Hub abzurufen |
1.2 Docker über WSL2 installieren
Warum WSL2? Docker CE unter Windows Server kann Linux-Container nicht nativ ausführen (LCOW wurde in Docker 20.10+ entfernt). WSL2 stellt einen echten Linux-Kernel unter Windows bereit, sodass Docker Linux-Container nahtlos ausführen kann.
1.2.1 Windows-Features aktivieren
Öffnen Sie PowerShell als Administrator und führen Sie jeden Befehl aus:
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 -NoRestartNeustart erforderlich: Starten Sie die VM nach der Aktivierung dieser Features neu, bevor Sie fortfahren.
1.2.2 WSL2 und Ubuntu installieren
Öffnen Sie nach dem Neustart PowerShell als Administrator:
-
Legen Sie WSL2 als Standardversion fest:
wsl --set-default-version 2 -
Installieren Sie Ubuntu:
wsl --install -d UbuntuEin Terminalfenster öffnet sich und fordert Sie auf, einen Unix-Benutzernamen und ein Passwort zu erstellen. Schließen Sie die Einrichtung ab, bevor Sie fortfahren.
1.2.3 Docker CE innerhalb von Ubuntu installieren
Öffnen Sie das Ubuntu-WSL2-Terminal und führen Sie Folgendes aus:
-
Installieren Sie Docker CE:
curl -fsSL https://get.docker.com | sudo shHinweis: Das Skript erkennt WSL und empfiehlt Docker Desktop. Ignorieren Sie die Meldung und warten Sie 20 Sekunden, bis die Installation automatisch fortgesetzt wird.
-
Fügen Sie Ihren Benutzer der Docker-Gruppe hinzu und starten Sie den Dienst:
sudo usermod -aG docker $USER sudo service docker start -
Schließen Sie das WSL2-Terminal und öffnen Sie es erneut, überprüfen Sie anschließend:
docker --version docker compose versionHinweis: Der Docker-Dienst muss bei jedem Start einer WSL2-Sitzung manuell gestartet werden:
sudo service docker start.
1.2.4 Bei der DQE Container Registry authentifizieren
Die DQE-Unify-Images werden in einer privaten Azure Container Registry gehostet. Melden Sie sich über das Ubuntu-WSL2-Terminal mit den von DQE Software bereitgestellten Zugangsdaten an:
docker login <registry-url> --username <Username provided by DQE> --password <Password provided by DQE>Bei erfolgreicher Anmeldung wird Folgendes angezeigt: Login Succeeded.
1.3 Arbeitsverzeichnis vorbereiten
Erstellen Sie einen dedizierten Ordner, der die Docker-Compose-Datei, die Nginx-Konfiguration und die persistenten Volumes enthält.
# 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"Die Verzeichnisstruktur sollte wie folgt aussehen:
C:\dqe-unify\
├── docker-compose.yml ← main orchestration file
├── nginxconf\
│ └── default.conf ← Nginx reverse-proxy configuration
└── volumes\
├── redisvol\ ← Redis persistent data
└── rabbitvol\ ← RabbitMQ persistent dataHinweis: Docker Compose bindet diese lokalen Verzeichnisse als Bind-Mounts in die Container ein.
1.4 Nginx konfigurieren
Nginx fungiert als Reverse-Proxy und leitet eingehende HTTP/HTTPS-Anfragen an den Unify-Server-Container auf Port 8000 weiter.
Führen Sie den folgenden Befehl aus, um die Datei in Notepad zu öffnen, fügen Sie dann die untenstehende Konfiguration ein und speichern Sie sie:
notepad C:\dqe-unify\nginxconf\default.confDie Datei C:\dqe-unify\nginxconf\default.conf muss Folgendes enthalten:
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;
}
}Hinweis: In Docker Compose besitzt jeder Service einen eigenen Hostnamen, der seinem Servicenamen entspricht. Das Proxy-Ziel ist daher http://unify-server:8000 und nicht http://localhost:8000.
HTTPS
Fügen Sie einen zweiten Server-Block in default.conf hinzu und binden Sie Ihr SSL-Zertifikat sowie Ihren privaten Schlüssel in den Nginx-Container ein. Aktualisieren Sie docker-compose.yml, um Port 443 freizugeben und die Zertifikatsdateien einzubinden.
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 Docker-Compose-Konfigurationsdatei
Erstellen Sie die Datei C:\dqe-unify\docker-compose.yml mit dem untenstehenden Inhalt. Ersetzen Sie den Platzhalter <registry-url> durch die von DQE Software bereitgestellte URL.
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: bridgeWichtige Konfigurationshinweise:
- Die Services kommunizieren über ihren Servicenamen, zum Beispiel
redisoderrabbitmq, nicht über127.0.0.1. -
redis-dataundrabbitmq-datasind benannte Docker-Volumes, die im WSL2-Linux-Dateisystem gespeichert werden. Dadurch werden NTFS-Berechtigungsprobleme vermieden. - Die Nginx-Konfiguration wird aus
/mnt/c/dqe-unify/nginxconfgelesen, dem über WSL2 zugänglichen Windows-Ordner. - Die Zugangsdaten für die Image-Registry werden über
docker loginverwaltet, wie in Abschnitt 1.2.4 beschrieben, und nicht in der Compose-Datei hinterlegt.
1.6 Anwendung bereitstellen
Alle folgenden Befehle müssen im Ubuntu-WSL2-Terminal ausgeführt werden.
-
Schritt 1 — Starten Sie den Docker-Dienst und wechseln Sie in das Anwendungsverzeichnis:
sudo service docker start cd /mnt/c/dqe-unify -
Schritt 2 — Laden Sie die erforderlichen Images herunter:
docker compose pull -
Schritt 3 — Starten Sie alle Services im Hintergrundmodus:
docker compose up -d -
Schritt 4 — Überprüfen Sie, dass alle Container laufen:
docker compose psErwartete Ausgabe: Alle Services sollten den Status
runninganzeigen: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
Wichtig: Wenn ein Container den Status exited oder restarting anzeigt, überprüfen Sie sofort seine Logs mit docker compose logs <service-name>.
1.7 Windows-Firewall konfigurieren
Öffnen Sie die erforderlichen eingehenden Ports in der Windows-Firewall, damit externe Clients die Anwendung erreichen können. Führen Sie die folgenden Befehle in PowerShell als Administrator aus:
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 AllowHinweis: Port 8000 (Unify Server) und Port 5672 (RabbitMQ) müssen nicht extern geöffnet werden. Sie werden nur intern über das Docker-Netzwerk angesprochen.
Dynamics 365 — Eingehende IP-Bereiche autorisieren
Der DQE Unify Server empfängt Anfragen von Microsoft Dynamics 365, das auf einer Azure-Infrastruktur läuft. Sie müssen die entsprechenden Azure-IP-Bereiche sowohl in der Windows-Firewall als auch in der NSG autorisieren.
Die vollständige und aktuelle Liste der Microsoft-Azure-IP-Bereiche steht zum Download bereit unter:
Microsoft Azure IP Ranges and Service Tags
Laden Sie die JSON-Datei herunter, identifizieren Sie die für Ihre Region relevanten Service-Tags Dynamics365 und AzureCloud und fügen Sie die entsprechenden IP-Bereiche als eingehende Allow-Regeln auf Port 443 hinzu.
Azure-VM — Netzwerksicherheitsgruppe (NSG)
Wenn die VM in Azure gehostet wird, müssen Sie außerdem eingehende Sicherheitsregeln in der zugehörigen Netzwerksicherheitsgruppe (NSG) hinzufügen:
- Gehen Sie zu Azure Portal → Virtual Machines → [Ihre VM] → Networking.
- Klicken Sie auf Add inbound port rule.
- Setzen Sie Destination port ranges auf
80,443. - Setzen Sie Protocol auf
TCPund Action aufAllow. - Um Dynamics-365-Datenverkehr zu autorisieren, setzen Sie Source auf
Service Tagund wählen SieDynamics365aus. - Klicken Sie auf Add.
1.8 Optional: IIS als Reverse-Proxy konfigurieren
Wenn Ihre Organisation IIS als Einstiegspunkt benötigt, zum Beispiel für das Zertifikatsmanagement oder die Integration in eine bestehende IIS-basierte Infrastruktur, können Sie IIS so konfigurieren, dass der Datenverkehr an das auf Port 80 laufende Nginx weitergeleitet wird. Dies ist ein optionaler Schritt. Nginx allein ist ausreichend.
1.8.1 IIS und ARR installieren
In PowerShell als Administrator:
# 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 Proxy in ARR aktivieren
- Öffnen Sie den IIS Manager.
- Klicken Sie auf den Serverknoten → Application Request Routing Cache.
- Klicken Sie im Bereich Actions auf Server Proxy Settings.
- Aktivieren Sie Enable proxy und klicken Sie auf Apply.
1.8.3 Eine URL-Rewrite-Regel hinzufügen
Bearbeiten Sie 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 DNS einrichten
Wenden Sie sich an Ihre DNS-Administratoren und bitten Sie sie, einen A-Eintrag zu erstellen, der auf die öffentliche IP-Adresse der Windows-VM verweist.
| Eintragstyp | Name | Wert |
|---|---|---|
| A | unify.yourdomain.com |
Öffentliche IP-Adresse der Windows-VM |
Wenn sich die VM in Azure befindet, finden Sie ihre öffentliche IP-Adresse unter Azure Portal → Virtual Machines → [Ihre VM] → Overview → Public IP address.
1.10 Bereitstellung überprüfen
Sobald sich die DNS-Änderungen verbreitet haben, öffnen Sie einen Browser und navigieren Sie zu:
http://unify.yourdomain.comSie können dies auch lokal von der VM aus testen:
# Test Nginx is reachable
curl http://localhost
# Test the Unify Server is reachable
curl http://localhost:8000Wenn die Anwendung antwortet, ist die Bereitstellung abgeschlossen und der Server ist korrekt konfiguriert.
2. Anwendungseinrichtung
Sobald die Anwendung läuft, müssen die Windows-Firewall sowie vorgelagerte Firewalls oder Proxys so konfiguriert werden, dass die unten aufgeführten IP-Bereiche zugelassen werden.
2.1 Zu autorisierende IP-Adressen
DQE Software Office Server
Wenden Sie sich an den DQE Software Support, um die zu autorisierende IP-Adresse zu erhalten.
DQE – Deduplizierungsdienst
Wenden Sie sich an den DQE Software Support, um die zu autorisierende IP-Adresse zu erhalten.
DQE – Qualitätsdienst
Wenden Sie sich an den DQE Software Support, um die zu autorisierende IP-Adresse zu erhalten.
Erforderliche Maßnahme: Lassen Sie Ihr IT-/Netzwerkteam die öffentliche IP-Adresse der Windows-VM auch auf Seiten von DQE Software autorisieren. Teilen Sie DQE die ausgehende öffentliche IP-Adresse der VM mit.
Azure-IP-Bereiche (IPv4) — Falls der ausgehende Datenverkehr über Azure geleitet wird
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/20Azure-IP-Bereiche (IPv6) — Falls der ausgehende Datenverkehr über Azure geleitet wird
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
Verknüpfung mit