Sari la conținut

Instalarea HTML5 Gateway Docker

Importarea imaginii Docker

Înainte de a putea crea un container HTML5 Gateway Docker, trebuie să importați imaginea Docker. În acest scop, deschideți un shell din care aveți la dispoziție comenzile Docker, precum și fișierul cleanroom-html5-4.6.1-33-v2.tgz. Din shell, executați următoarea comandă, ajustând calea fișierului TGZ dacă acesta nu se află în directorul curent:

1
docker load --input cleanroom-html5-4.6.1-33-v2.tgz

Apoi verificați că importul s-a realizat cu succes prin comanda următoare:

1
docker inspect --type=image cleanroom-html5:4.6.1-33-v2

Rezultatul așteptat este următorul. Dacă nu este cazul, atunci importul a eșuat:

1
2
3
4
5
6
[
    {
        "Id": "sha256:16ae07f1604409f6b092a8a2944e69b3db458a04dbbab6ffc3f945c253c82cee",
        "RepoTags": [
            "cleanroom-html5:4.6.1-33-v2"
        ],
Rezultat complet
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
[
    {
        "Id": "sha256:16ae07f1604409f6b092a8a2944e69b3db458a04dbbab6ffc3f945c253c82cee",
        "RepoTags": [
            "cleanroom-html5:4.6.1-33-v2"
        ],
        "RepoDigests": [],
        "Parent": "",
        "Comment": "buildkit.dockerfile.v0",
        "Created": "2025-08-27T11:35:33.014244258+02:00",
        "DockerVersion": "",
        "Author": "",
        "Architecture": "amd64",
        "Os": "linux",
        "Size": 781097647,
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/aa079416d669709486e3fd3dfefcff51acb3905ffcca7e6e428630d1a499e669/diff:/var/lib/docker/overlay2/da9f43ee88f5961a157af404be018fc7c3f5185a798b26911e38118d83830de7/diff:/var/lib/docker/overlay2/28efb3982392e95711e849cb90985fd534cd6273f4dec758463f98b41a432e93/diff:/var/lib/docker/overlay2/44a3abed0a932259b79c9e5e273749cc06bd8aca7d3adbfd1753a7b053dcae2f/diff:/var/lib/docker/overlay2/e3dfd4c7c4fe568ef731bd91314e69cc5c807ce717d5f4ea94f0d02cc11e70c5/diff:/var/lib/docker/overlay2/5acf2b56871d2537d95b9981c0498e16723a9eca20827f550366b48d8acf508f/diff:/var/lib/docker/overlay2/c732cd17c6501229b3a12c488d7f4c26f8634329211cac54ff1cf0d53055421f/diff:/var/lib/docker/overlay2/fd61cbda2a5e9a578c5a8eea67b63df3d31642588be3b6f2f7ebe6e10964f745/diff",
                "MergedDir": "/var/lib/docker/overlay2/b9c8170b6a9ed8e7c84a9ba208cd6e4b25e88d1dad42cd72b0e1178da62a46d4/merged",
                "UpperDir": "/var/lib/docker/overlay2/b9c8170b6a9ed8e7c84a9ba208cd6e4b25e88d1dad42cd72b0e1178da62a46d4/diff",
                "WorkDir": "/var/lib/docker/overlay2/b9c8170b6a9ed8e7c84a9ba208cd6e4b25e88d1dad42cd72b0e1178da62a46d4/work"
            },
            "Name": "overlay2"
        },
        "RootFS": {
            "Type": "layers",
            "Layers": [
                "sha256:4668f0f488e5ad4494fadff56ad585c514794b3a293e5e8d006410de9da08155",
                "sha256:782f6c5256575fbef0e518a1a1ce9188c457f1a0e9b88b733ed672f6e1be482d",
                "sha256:e09fd3e10e878ef6c812ccde0fa55b66cf4b9b593cf182c2760fec73649968c2",
                "sha256:e51c952c7bd89e0a3188c683d689eed81444d5513c14251f4b21cb9fd056d27d",
                "sha256:233ff67db52988898e3c1b4c2573b86c1c0c50d23f1f4b2365e3fc51abedbf9f",
                "sha256:f832eee42398852cab80a9a45138bf076d63ebbe153263fd8cf66857a0833d02",
                "sha256:f59f79d19c38ae4863b81774ad1d98030370c64e17013eb786da7b727bf2b41b",
                "sha256:0caeed550a29dbb274781e78bbe910fa5ccfdc90119cb4f9e3c815feff5a70b9",
                "sha256:21313651aa44ac0f5dd459a94be172b003b68f81b0db945c24a7ada5c21799e3"
            ]
        },
        "Metadata": {
            "LastTagTime": "0001-01-01T00:00:00Z"
        },
        "Config": {
            "Cmd": null,
            "Entrypoint": [
                "/entrypoint.sh"
            ],
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "DEBIAN_FRONTEND=noninteractive",
                "IMAGE_BUILD_DATE=20250827T112940",
                "IMAGE_BUILD_VERSION=4.6.1-33-v2",
                "IMAGE_IPDIPC=IPC-53702"
            ],
            "ExposedPorts": {
                "8080/tcp": {},
                "8090/tcp": {}
            },
            "Labels": {
                "maintainer": "contact@systancia.com",
                "org.label-schema.build-date": "20250827T112940",
                "org.label-schema.description": "Systancia Cleanroom Gateway",
                "org.label-schema.name": "Systancia Cleanroom 4.6.1-33-v2 HTML5 Server",
                "org.label-schema.url": "http://systancia.com/",
                "org.label-schema.vendor": "Systancia",
                "version": "4.6.1-33-v2"
            },
            "OnBuild": null,
            "User": "root",
            "Volumes": null,
            "WorkingDir": ""
        }
    }
]

Configurarea containerului

Variabile de mediu

Variabile pentru implementarea prin pairing

Nume Obligatoriu Valoare implicită Comentariu
ENV_MEDIATION DA Utilizat pentru conexiunea prin pairing.
Indică numele DNS sau adresa IP pentru conectarea la interfața web a unei platforme CyberElements Bastion.
ENV_TOKEN DA Se utilizează pentru conexiunea prin pairing.
Indică tokenul de pairing care trebuie utilizat pentru conectarea la Mediation Controller.
ENV_NO_CHECK_CERT NU false Utilizat pentru conexiunile prin pairing.
Dezactivează sau nu verificarea certificatului web al Mediation Controller; util cu CyberElements Bastion atunci când accesul se face prin adresă IP sau când certificatul web nu este un certificat recunoscut de autoritățile de certificare publice implicite.
Valori acceptate: true sau false.

Variabile pentru implementarea manuală

Nume Obligatoriu Valoare implicită Comentariu
ENV_GW_CERT_NAME DA Se utilizează pentru conexiunea cu configurare manuală.
Numele fișierului de certificat pentru conectarea la routerul SSL.
ENV_GW_CERT_PASSWORD DA Se utilizează pentru conexiunea cu configurare manuală.
Parola fișierului de certificat pentru conectarea la routerul SSL.
ENV_SSL_ROUTER_IP DA Utilizat pentru conexiunea cu configurare manuală.
Adresa IP sau numele DNS al SSL Router la care se va conecta HTML5 Gateway.
ENV_SSL_ROUTER_PORT NU 443 Utilizat pentru conexiunea cu configurare manuală.
Portul SSL Router la care se va conecta HTML5 Gateway.

Variabile diverse

Nume Obligatoriu Valoare implicită Comentariu
ENV_DISABLE_RSYSLOG NU false Dezactivarea serviciului rsyslog.
Valori acceptate: true sau false.

Volume

Volum Comentariu
/etc/ipdiva/ Volumul de configurare al HTML5 Gateway.
Recomandăm montarea sa pe un volum denumit sau pe sistemul de fișiere al mașinii gazdă.
/opt/certificates/ Volumul care conține certificatul sau certificatele HTML5 Gateway în cazul unei configurări fără pairing.
/var/log/ Volumul care conține logurile HTML5 Gateway.

Porturi

Port Comentariu
8080 Portul de ascultare al serviciului HTML5.

Implementarea HTML5 Gateway Docker

Implementare cu pairing

Cerințe preliminare

Înainte de a implementa HTML5 Gateway Docker, trebuie să obțineți un token de pairing.

Implementarea descrisă mai jos va utiliza toate volumele disponibile (cu excepția /opt/certificates/, care nu este util în acest context) și va expune toate porturile.
Volumele vor fi montate pe sistemul de fișiere al mașinii gazdă în locația HTML5_GATEWAY_REP. În interiorul acestei locații se află următoarele subdirectoare:

  • config
  • log

Puteți personaliza variabilele din comenzile următoare:

Valoare personalizată Variabilă Comentariu
DOCKER_NAME Numele containerului Docker.
HTML5_GATEWAY_REP Locația din sistemul de fișiere în care se montează volumele.
ENV_MEDIATION_VALUE Valoarea variabilei de mediu ENV_MEDIATION.
ENV_TOKEN_VALUE Valoarea variabilei de mediu ENV_TOKEN.
ENV_NO_CHECK_CERT_VALUE Valoarea variabilei de mediu ENV_NO_CHECK_CERT.

Creați arborele de directoare necesar pentru montarea volumelor pe sistemul de fișiere:

1
2
mkdir -p HTML5_GATEWAY_REP/config
mkdir HTML5_GATEWAY_REP/log

Și, în sfârșit, porniți un nou container:

1
2
3
4
5
6
7
8
docker run -d --restart unless-stopped --name "DOCKER_NAME" \
-e ENV_MEDIATION="ENV_MEDIATION_VALUE" \
-e ENV_TOKEN="ENV_TOKEN_VALUE" \
-e ENV_NO_CHECK_CERT="ENV_NO_CHECK_CERT_VALUE" \
-v "HTML5_GATEWAY_REP/config/:/etc/ipdiva/:rw" \
-v "HTML5_GATEWAY_REP/log/:/var/log/:rw" \
-p 8080:8080 \
cleanroom-html5:4.6.1-33-v2

Logurile containerului pot fi consultate cu comanda următoare:

1
docker logs -f DOCKER_NAME

Implementare manuală

Cerințe preliminare

Înainte de a implementa HTML5 Gateway Docker, trebuie să dispuneți de certificatul necesar pentru HTML5 Gateway.

Implementarea descrisă mai jos va utiliza toate volumele disponibile și va expune toate porturile.
Volumele vor fi montate pe sistemul de fișiere al mașinii gazdă, în locația MANUAL_REP. În interiorul acestei locații se află următoarele subdirectoare:

  • config
  • log
  • certificates

Puteți personaliza variabilele din comenzile următoare:

Valoare personalizată Variabilă Comentariu
MANUAL_NAME Numele containerului Docker.
MANUAL_REP Locația din sistemul de fișiere în care se montează volumele.
ENV_GW_CERT_NAME_VALUE Valoarea variabilei de mediu ENV_GW_CERT_NAME.
ENV_GW_CERT_PASSWORD_VALUE Valoarea variabilei de mediu ENV_GW_CERT_PASSWORD.
ENV_SSL_ROUTER_IP_VALUE Valoarea variabilei de mediu ENV_SSL_ROUTER_IP.
ENV_SSL_ROUTER_PORT_VALUE Valoarea variabilei de mediu ENV_SSL_ROUTER_PORT.

Creați arborele de directoare necesar pentru montarea volumelor pe sistemul de fișiere:

1
2
3
mkdir -p MANUAL_REP/config
mkdir MANUAL_REP/log
mkdir MANUAL_REP/certificates

Apoi plasați certificatele HTML5 Gateway și ale serviciului de înregistrare în MANUAL_REP/certificates.

În sfârșit, porniți un nou container:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
docker run -d --restart unless-stopped --name "MANUAL_NAME" \
-e ENV_GW_CERT_NAME="ENV_GW_CERT_NAME_VALUE" \
-e ENV_GW_CERT_PASSWORD="ENV_GW_CERT_PASSWORD_VALUE" \
-e ENV_SSL_ROUTER_IP="ENV_SSL_ROUTER_IP_VALUE" \
-e ENV_SSL_ROUTER_PORT="ENV_SSL_ROUTER_PORT_VALUE" \
-v "MANUAL_REP/config/:/etc/ipdiva/:rw" \
-v "MANUAL_REP/log/:/var/log/:rw" \
-v "MANUAL_REP/certificates/:/opt/certificates/:ro" \
-p 8080:8080 \
cleanroom-html5:4.6.1-33-v2

Logurile containerului pot fi consultate cu comanda următoare:

1
docker logs -f MANUAL_NAME

Configurarea Mediation Controller

Pentru ca noul HTML5 Gateway Docker să fie operațional, mai rămâne să configurați serverul Mediation Controller printr-un acces SSH sau consolă și cu permisiuni root.

Această ultimă setare este necesară pentru a permite Mediation Controller să comunice cu serviciul HTML5.
Totuși, această configurare variază în funcție de locația HTML5 Gateway Docker:

Schema generală este următoarea:

flowchart LR
    subgraph DMZ
        direction TB
        HTML5(HTML5 Gateway Docker)
        MED(Mediation Controller)
    end

    subgraph LAN
        GW(Edge Gateway)
    end


    MED -.-> |Conexiune la serviciul HTML5 ; TCP 8080| HTML5
    HTML5 --> |TLS Tunnel| MED
    MED ~~~ GW
    GW --> |TLS Tunnel| MED
    GW ~~~ MED

    linkStyle 0 stroke:#d22,color;
Hold "Ctrl" to enable pan & zoom

În acest context, va fi necesar să adăugați în fișierul /etc/ipdiva/httpd/commonParameters.extra.conf informațiile indicate mai jos sau să îl creați.
Este posibilă personalizarea setărilor:

Valoare personalizată Variabilă Comentariu
HTML5_URL_DMZ URL configurat la declararea HTML5 Gateway în consola de administrare.
HTML5_IP_DMZ Numele DNS sau adresa IP a serverului Docker pe care este activ HTML5 Gateway Docker.
HTML5_PORT_DMZ Portul publicat de serverul Docker pentru HTML5 Gateway Docker.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
<Location /HTML5_URL_DMZ/>
    Order allow,deny
    Allow from all
    ProxyPass http://HTML5_IP_DMZ:HTML5_PORT_DMZ/systanciaHTML5-6.0/ flushpackets=on
    ProxyPassReverse http://HTML5_IP_DMZ:HTML5_PORT_DMZ
</Location>

<Location /HTML5_URL_DMZ/websocket-tunnel>
    Order allow,deny
    Allow from all
    ProxyPass ws://HTML5_IP_DMZ:HTML5_PORT_DMZ/systanciaHTML5-6.0/websocket-tunnel
    ProxyPassReverse ws://HTML5_IP_DMZ:HTML5_PORT_DMZ/systanciaHTML5-6.0/websocket-tunnel
</Location>

Schema generală este următoarea:

flowchart LR
    subgraph DMZ
        direction TB
        MED(Mediation Controller)
    end

    subgraph LAN
        HTML5(HTML5 Gateway Docker)
        GW(Edge Gateway)
    end


    MED -.- | Conexiune la serviciul HTML5 ; prin tunelul TLS| GW -.-> |Conexiune la serviciul HTML5 ; TCP 8080| HTML5
    HTML5 --> |TLS Tunnel| MED
    GW --> |TLS Tunnel| MED

    linkStyle 0,1 stroke:#d22,color;
Hold "Ctrl" to enable pan & zoom

În acest context, va fi necesar să adăugați în fișierul /etc/ipdiva/httpd/commonParameters.extra.conf informațiile indicate mai jos sau să îl creați.
Este posibilă personalizarea setărilor:

Valoare personalizată Variabilă Comentariu
HTML5_URL_LAN URL configurat la declararea HTML5 Gateway în consola de administrare.
GW_NAME_LAN Numele Edge Gateway utilizat pentru conectarea la serviciul HTML5. Caracterul bară verticală de la sfârșitul liniei trebuie păstrat.
ORGANIZATION_NAME_LAN Numele organizației la care se conectează Edge Gateway.
HTML5_IP_LAN Numele DNS sau adresa IP a serverului Docker pe care este activ HTML5 Gateway Docker.
HTML5_PORT_LAN Portul publicat de serverul Docker pentru HTML5 Gateway Docker.
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<Location /HTML5_URL_LAN/>
    Order allow,deny
    Allow from all
    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-IPdiva-Gateway GW_NAME_LAN|
    RequestHeader set X-IPdiva-Orgname ORGANIZATION_NAME_LAN
    RequestHeader set X-IPdiva-Service HTML5_IP_LAN:HTML5_PORT_LAN

    ProxyPass http://127.0.0.1:9016/systanciaHTML5-6.0/ flushpackets=on
</Location>

<Location /HTML5_URL_LAN/websocket-tunnel>
    Order allow,deny
    Allow from all
    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-IPdiva-Gateway GW_NAME_LAN|
    RequestHeader set X-IPdiva-Orgname ORGANIZATION_NAME_LAN
    RequestHeader set X-IPdiva-Service HTML5_IP_LAN:HTML5_PORT_LAN

    ProxyPass ws://127.0.0.1:9016/systanciaHTML5-6.0/websocket-tunnel
</Location>

Sfat

Această configurare poate fi utilizată și în situația următoare, în care un Edge Gateway Docker și un HTML5 Gateway Docker rulează în aceeași rețea Docker:

flowchart LR
    subgraph DMZ
        direction TB
        MED(Mediation Controller)
    end

    subgraph LAN
        subgraph docker[Docker Server]
            HTML5([HTML5 Gateway Docker])
            GW([Edge Gateway])
        end
    end


    MED -.- | Conexiune la serviciul HTML5 ; prin tunelul TLS| GW -.-> |Conexiune la serviciul HTML5 ; TCP 8080 prin rețeaua Docker| HTML5
    HTML5 --> |TLS Tunnel| MED
    GW --> |TLS Tunnel| MED

    linkStyle 0,1 stroke:#d22,color;
Hold "Ctrl" to enable pan & zoom
Exemplu

În acest exemplu, vom implementa un Edge Gateway și un HTML5 Gateway pe același server Docker.

Infrastructura utilizată pentru exemplu este următoarea:

  • Serverul Mediation Controller
    • Adresa IP web: 10.0.10.10
    • Numele organizației: my-organization-name
    • Token pentru Edge Gateway: YJ5N-JN05-N5LS-N26H-7JHA-HZ9R-BGJF-MAVH
    • Token pentru HTML5 Gateway: ATCW-OMVR-0RY4-LW1M-D9G9-H5VF-WPX5-YCXF
    • URL de acces la serviciul HTML5: HTML5_DOCKER
  • Server Docker
    • Numele rețelei Docker: cyberelements-cleanroom-network
    • Edge Gateway
      • Nume: my-edge-gateway-docker
      • Locația rădăcină în sistemul de fișiere: /opt/my-edge-gateway-docker
    • HTML5 Gateway
      • Nume: my-html5-gateway-docker
      • Locația rădăcină în sistemul de fișiere: /opt/my-html5-gateway-docker

În primul rând, pe serverul Docker, trebuie să creați structura de directoare pentru montarea volumelor Docker:

1
2
3
4
5
6
mkdir -p /opt/my-edge-gateway-docker/config
mkdir /opt/my-edge-gateway-docker/graphical_archives
mkdir /opt/my-edge-gateway-docker/ssh_archives
mkdir /opt/my-edge-gateway-docker/log
mkdir -p /opt/my-html5-gateway-docker/config
mkdir /opt/my-html5-gateway-docker/log

Apoi creați o rețea Docker de tip bridge, pentru ca cele două containere să poată comunica între ele:

1
docker network create -d bridge cyberelements-cleanroom-network

Porniți în continuare containerul Edge Gateway. Rețineți că exemplul stabilește o conexiune prin pairing, cu acces la Mediation Controller prin adresa sa IP și fără verificarea certificatului. În plus, parametrul --network este adăugat pentru a indica utilizarea rețelei Docker create anterior:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
docker run -d --restart unless-stopped --name "my-edge-gateway-docker" \
-e ENV_MEDIATION="10.0.10.10" \
-e ENV_TOKEN="YJ5N-JN05-N5LS-N26H-7JHA-HZ9R-BGJF-MAVH" \
-e ENV_NO_CHECK_CERT="true" \
-v "/opt/my-edge-gateway-docker/config/:/etc/ipdiva/:rw" \
-v "/opt/my-edge-gateway-docker/graphical_archives/:/var/lib/ipdiva/carerecord/archives/:rw" \
-v "/opt/my-edge-gateway-docker/ssh_archives/:/var/ipdiva/care/sshrecord/:rw" \
-v "/opt/my-edge-gateway-docker/log/:/var/log/:rw" \
-p 2222:2222 \
-p 3389:3389 \
-p 8443:8443 \
--network="cyberelements-cleanroom-network" \
cleanroom-gateway:4.6.1-33-v2

Porniți în continuare containerul HTML5 Gateway. Rețineți că exemplul stabilește o conexiune prin pairing, cu acces la Mediation Controller prin adresa sa IP și fără verificarea certificatului. În plus, parametrul --network este adăugat pentru a indica utilizarea rețelei Docker create anterior și, deoarece accesul la serviciul HTML5 se va face prin rețeaua Docker, publicarea portului 8080 nu este necesară:

1
2
3
4
5
6
7
8
docker run -d --restart unless-stopped --name "my-html5-gateway-docker" \
-e ENV_MEDIATION="10.0.10.10" \
-e ENV_TOKEN="ATCW-OMVR-0RY4-LW1M-D9G9-H5VF-WPX5-YCXF" \
-e ENV_NO_CHECK_CERT="true" \
-v "/opt/my-html5-gateway-docker/config/:/etc/ipdiva/:rw" \
-v "/opt/my-html5-gateway-docker/log/:/var/log/:rw" \
--network="cyberelements-cleanroom-network" \
cleanroom-html5:4.6.1-33-v2

În sfârșit, trebuie configurat fișierul /etc/ipdiva/httpd/commonParameters.extra.conf de pe serverul sau serverele Mediation Controller. Trebuie adăugată secțiunea următoare:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<Location /HTML5_DOCKER/>
    Order allow,deny
    Allow from all
    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-IPdiva-Gateway my-edge-gateway-docker|
    RequestHeader set X-IPdiva-Orgname my-organization-name
    RequestHeader set X-IPdiva-Service my-html5-gateway-docker:8080

    ProxyPass http://127.0.0.1:9016/systanciaHTML5-6.0/ flushpackets=on
</Location>

<Location /HTML5_DOCKER/websocket-tunnel>
    Order allow,deny
    Allow from all
    RequestHeader set X-Forwarded-Proto "https"
    RequestHeader set X-IPdiva-Gateway my-edge-gateway-docker|
    RequestHeader set X-IPdiva-Orgname my-organization-name
    RequestHeader set X-IPdiva-Service my-html5-gateway-docker:8080

    ProxyPass ws://127.0.0.1:9016/systanciaHTML5-6.0/websocket-tunnel
</Location>

Înainte de a aplica noua configurare, trebuie să verificați dacă aceasta nu provoacă erori blocante pentru serverul web Apache2.
Pentru aceasta, executați următoarea comandă:

1
apache2ctl configtest

Dacă răspunsul este Syntax OK, atunci modificările pot fi aplicate cu comanda de mai jos. În caz contrar, verificați configurarea fișierului dumneavoastră /etc/ipdiva/httpd/commonParameters.extra.conf.

1
systemctl reload apache2