FME WebSocket testen met OpenSSL en WSCAT
Leer hoe je kunt controleren of FME WebSockets correct zijn geconfigureerd en operationeel zijn.
Projecten:
c2platform/rws/ansible-gis
,
c2platform.wincore
,
c2platform.gis
Deze handleiding geeft een overzicht van het instellen van FME Flow Core, FME Flow Database, en FME Flow System Share met Vagrant en Ansible. Voor meer details over deze componenten, verwijzen wij naar FME Flow Architectuur .
gsd-fme-core, gsd-ad, en een LXD-container gsd-db1.gsd-fme-core als gsd-ad1.gsd-ad configureert de c2platform.wincore.ad collectie de AD domeincontroller voor het domein ad.c2platform.org.gsd-db1, inclusief een database en gebruiker met de benodigde rechten.gsd-fme-core voert Ansible de volgende stappen uit:ad.c2platform.org.c2platform.gis.java rol.c2platform.gis.tomcat rol.c2platform.gis.fme rol.Het onderstaande diagram illustreert de setup die met Vagrant is bereikt, met uitzondering van de reverse proxy gsd-rproxy1.
| Node | OS | Provider | Doelstelling | 
|---|---|---|---|
| gsd-fme-core | Windows 2022 Server | VirtualBox | FME Core Web Server | 
| gsd-ad | Windows 2022 Server | VirtualBox | AD domeincontroller en host van FME File Share | 
| gsd-db1 | Ubuntu 22.04 LTS | LXD | PostgreSQL database server | 
Voordat u verder gaat, zorg ervoor dat u de stappen hebt voltooid die zijn beschreven in De RWS Ontwikkelomgeving instellen op Ubuntu 22 .
Gebruik de volgende opdrachten om de FME play uit te voeren en de gsd-ad, gsd-db1 en gsd-core-fme nodes te creëren. Het uitvoeren van het vagrant up commando zal ongeveer 25 minuten duren.
export BOX="gsd-ad gsd-db1 gsd-core-fme"
export PLAY="plays/gis/fme.yml"
vagrant up $BOX | tee provision.log
gsd-adLog in op gsd-ad en voer systeminfo | Select-String "Domain" uit. Dit zou ad.c2platform.org moeten retourneren.
PS C:\Users\vagrant> systeminfo | Select-String "Domain"
OS Configuratie:          Primair Domeincontroller
Domein:                    ad.c2platform.org
PS C:\Users\vagrant> nslookup ad.c2platform.org
Server:  ip6-localhost
Adres:  ::1
Naam:    ad.c2platform.org
Adressen:  1.1.8.108
          10.0.2.15
PS C:\Users\vagrant>
Open de DNS Manager en controleer de eigenschappen van de DNS-server GSD-AD. Alleen 1.1.8.108 moet zijn ingeschakeld als een luisterend IP-adres.

Voer op je Ubuntu-laptop dig @1.1.8.108 ad.c2platform.org uit. Dit zou ad.c2platform.org moeten vertalen naar 1.1.8.108.
onknows@io3:~$ dig @1.1.8.108 ad.c2platform.org
; <<>> DiG 9.18.12-0ubuntu0.22.04.3-Ubuntu <<>> @1.1.8.108 ad.c2platform.org
; (1 server gevonden)
;; globale opties: +cmd
;; Antwoord ontvangen:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27806
;; vlaggen: qr aa rd ra; QUERY: 1, ANTWOORD: 2, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: versie: 0, vlaggen:; udp: 4000
;; VRAAGSECTIE:
;ad.c2platform.org.		IN	A
;; ANTWOORDSECTIE:
ad.c2platform.org.	600	IN	A	1.1.8.108
ad.c2platform.org.	600	IN	A	10.0.2.15
;; Vraagduur: 0 msec
;; SERVER: 1.1.8.108#53(1.1.8.108) (UDP)
;; WANNEER: Wo Okt 25 09:40:07 CEST 2023
;; BERICHTGROOTTE rcvd: 78
gsd-fme-coreLog in op gsd-fme-core.
Verifieer dat de computer deel uitmaakt van het domein ad.c2platform.org:
vagrant ssh gsd-fme-core
powershell
systeminfo.exe | Select-String "Domain"
vagrant@GSD-FME-CORE C:\Users\vagrant>powershell
Windows PowerShell
Copyright (C) Microsoft Corporation. Alle rechten voorbehouden.
Installeer de nieuwste PowerShell voor nieuwe functies en verbeteringen! https://aka.ms/PSWindows
PS C:\Users\vagrant> systeminfo.exe | Select-String "Domain"
Domein:                    ad.c2platform.org
PS C:\Users\vagrant>
gis-backup-operatorLog in als gis-backup-operator gebruikmakend van remote desktop op gsd-fme-core om te bevestigen dat de gebruiker is aangemaakt met het juiste wachtwoord.
Na het succesvol voltooien van deze opdrachten, moet u toegang kunnen krijgen tot de FME Flow-interface door te bezoeken https://gsd-fme-core.internal.c2platform.org/fmeserver/ 
. Log in als admin met het wachtwoord admin.
Op gsd-fme-core, maak verbinding gebruikmakend van remote desktop met de Vagrant-gebruiker, start pgAdmin, en importeer de instellingen in het bestand C:\Users\Public\Desktop\pgadmin.json.
Maak verbinding met de server gebruikmakend van het wachtwoord secret. Doorzoek de tabellen van de fmeserver database; je zou de databasetabellen van FME Flow moeten zien zoals fme_action enz. Dit bevestigt dat de database is aangemaakt.
In het RWS Ansible Inventory-project
c2platform/rws/ansible-gis
, bekijk specifieke plays en configuraties.
Bekijk de play plays/gis/fme.yml. Besteed aandacht aan het gebruik van de when voorwaarde, zodat de installatie van Java en Tomcat beperkt blijft tot gsd-fme-core.
Deze play maakt gebruik van verschillende rollen. Opvallende zijn:
fme_flow en tomcat rollen in de
c2platform.gis
collectie.win van de
c2platform.wincore
collectie, die geïntegreerd is in zowel tomcat als fme_flow rollen. Deze integratie faciliteert het beheer van Windows resources via fme_flow_win_resources en tomcat_win_resources.context.xmlDe variabele tomcat_win_resources wordt gebruikt om het context.xml bestand van Tomcat te beheren. In group_vars/fme_core/tomcat.yml, let op het volgende item:
  - path: "{{ tomcat_home }}/conf/context.xml"
    xpath: /Context
    fragment: >-
      <Valve className="org.apache.catalina.authenticator.SSLAuthenticator"
      disableProxyCaching="false" />      
    notify: Restart Tomcat service
Dit onderdeel voegt een Valve element toe aan het bestand context.xml:
<Valve className="org.apache.catalina.authenticator.SSLAuthenticator" disableProxyCaching="false" />
web.xmlEvenzo wordt met tomcat_win_resources een security-constraint element toegevoegd aan web.xml. Let op de xpath expressie. Deze XPath expressie /*[local-name()='web-app'] selecteert alleen het root element als de lokale naam (d.w.z. de tagnaam zonder de namespace prefix) ‘web-app’ is. Dit is een oplossing die over het algemeen minder precies is dan het gebruik van de juiste namespace-afhandeling, maar het wordt vaak gebruikt in tools die XML namespaces niet direct ondersteunen.
  - path: "{{ tomcat_home }}/conf/web.xml"
    backup: true
    xpath: /*[local-name()='web-app']
    fragment: >-
      <security-constraint>
        <web-resource-collection>
          <web-resource-name>HTTPSOnly</web-resource-name>
          <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <user-data-constraint>
          <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
      </security-constraint>      
    notify: Restart Tomcat service
fmeServerConfig.txtLet op het bestand fmeServerConfig.txt in de map D:\Apps\FME\Flow\Server. Het is door Ansible gewijzigd en bevat de regel:
FME_SERVER_WEB_URL=https://GSD-FME-CORE.ad.c2platform.org:443
Deze regel wordt beheerd door Ansible met behulp van de configuratie in group_vars/fme_core/main.yml. Dit bestand bevat de variabele fme_flow_win_resources zoals hieronder weergegeven:
fme_flow_win_resources:
  core:
    - name: FME_SERVER_WEB_URL
      module: win_lineinfile
      path: "{{ fme_flow_home }}/Server/fmeServerConfig.txt"
      regex: '^FME_SERVER_WEB_URL='
      line: FME_SERVER_WEB_URL=https://{{ ansible_fqdn }}:{{ gs_tomcat_https_port }}
      notify: Restart FME Flow services
Ansible configureert FME WebSockets om veilig te zijn / gebruik te maken van het wss schema. Zie de configuratie in group_vars/fme_core/websocket.yml. Wanneer Ansible provisieert zonder fouten, kun je redelijk zeker zijn dat WebSockets werken, omdat provisioning een handler zal activeren om te verifiëren dat de WebSocket poort 7078 open is en verbindingen accepteert.
Een aantal bestanden wordt gewijzigd / moet gewijzigd worden:
In FME Flow map D:\Apps\FME\Flow:
Server/fmeWebSocketConfig.txtServer/config/publishers/websocket.propertiesServer/config/subscribers/websocket.propertiesOp FME Share \\gsd-fme-core.ad.c2platform.org\fme\localization:
publishers\websocket\publisherProperties.xmlsubscribers\websocket\subscriberProperties.xmlDe situatie waarbij een deel van de configuratie op de node staat en een deel van de configuratie op een share, is interessant, vooral wanneer meer dan één FME Core node wordt getarget. Wanneer er op hosts in de groep fme_core wordt gericht, is er met de standaard Ansible gedrag waarbij de nodes in de groep parallel worden gewijzigd een bepaalde race-conditie. Zal één node erin slagen het bestand te wijzigen en zullen andere nodes het niet hoeven te wijzigen omdat het al is gewijzigd? Of zullen ze het bestand tegelijk bekijken en dezelfde wijziging in het bestand schrijven? Afhankelijk van de situatie, als allen “gewijzigd” zijn, zal Ansible de herstart van de FME-service correct melden. Bij een situatie waarbij slechts één node het bestand “wijzigt”, zal de FME-service van slechts één node worden herstart, wat niet correct is. En misschien kan de Ansible provisioning mislukken omdat sommige nodes proberen te updaten terwijl de bestanden zijn vergrendeld omdat ze door een andere node worden geschreven.
Om deze reden wordt er een extra bestand gemaakt in de FME Flow hoofddirectory met de naam Server/ansible_shared_websocket_config.sha256. Het bevat een sha256-hashwaarde van de configuratie in publisherProperties.xml en subscriberProperties.xml en dit bestand wordt vervolgens gebruikt om de twee handlers aan te roepen, één om de FME Service opnieuw op te starten en één om te verifiëren dat de WebSocket-poort geopend is.
Om de WebSocket-configuratie te verifiëren, zie Test FME WebSocket met behulp van OpenSSL-library en / of WSCAT .
Voor probleemoplossing, testen en verifiëren van de WebSocket-configuratie, zie Test FME WebSocket met behulp van OpenSSL-library en / of WSCAT .
Stel de variabele fme_flow_debug: true in om het bestand install_extract_command.txt te creëren in D:\Apps\FME\logs.
Om een standaardinstallatie van FME Flow uit te voeren, wat het implementeren van een PostgreSQL-database zonder een aparte Tomcat-instantie omvat, volg je deze stappen:
fme_flow_install_command uit.vagrant destroy gsd-fme-core -f
vagrant up gsd-fme-core
Na het succesvol voltooien van deze opdrachten, moet u de FME Flow-interface kunnen openen door te bezoeken http://localhost 
, wat u zal omleiden naar http://localhost/fmeserver/ 
. Log in als admin met het wachtwoord admin.
Vagrant gebruikt de Vagrant Windows Sysprep Provisioner 
op alle nodes in het Ansible inventory project
c2platform/rws/ansible-gis
maar in dit geval wordt het uitvoeren van Sysprep expliciet vermeld omdat deze Ansible play voor FME niet zal werken zonder Sysprep, omdat de play ook een AD domein creëert. ↩︎
Leer hoe je kunt controleren of FME WebSockets correct zijn geconfigureerd en operationeel zijn.
Was deze pagina nuttig?
Fijn om te horen! Vertel ons alstublieft hoe we kunnen verbeteren.
Jammer om dat te horen. Vertel ons alstublieft hoe we kunnen verbeteren.