Saltar a contenido

Instalación del Docker de la puerta de enlace HTML5

Importar la imagen de Docker

Antes de crear un contenedor de Docker de la puerta de enlace HTML5, debe importar la imagen de Docker. Para ello, inicie un shell desde el que tenga disponibles los comandos de Docker, así como el archivo cleanroom-html5-4.6.1-33-v2.tgz. Desde el shell, ejecute el siguiente comando, ajustando la ruta al archivo TGZ si no está en el directorio actual:

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

A continuación, compruebe que la importación fue exitosa con el siguiente comando:

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

La producción esperada es la siguiente: si no es así, la importación ha fracasado:

1
2
3
4
5
6
[
    {
        "Id": "sha256:16ae07f1604409f6b092a8a2944e69b3db458a04dbbab6ffc3f945c253c82cee",
        "RepoTags": [
            "cleanroom-html5:4.6.1-33-v2"
        ],
Salida completa
 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": ""
        }
    }
]

Configuración del contenedor

Variables del entorno

Variables para el despliegue por emparejamiento

Nombre Obligatorio Valor predeterminado Comentario
ENV_MEDIATION SI Se utiliza para conexión de emparejamiento.
Indica el nombre de DNS o la dirección IP para conectarse a la interfaz web de una plataforma ** cibernética**elementos Cleanroom.
ENV_TOKEN SI Se utiliza para la conexión de emparejamiento.
Indicación del token de emparejamiento que se utilizará para la conexión con el Mediation Controller.
ENV_NO_CHECK_CERT NO false Se utiliza para conexiones de emparejamiento.
Si deshabilitar o no Mediation Controller verificación de certificados web, útil con ** ciber** elementos Cleanroom cuando se accede a través de la dirección IP o cuando el certificado web no es un certificado reconocido por las autoridades de certificación públicas predeterminadas.
Valores aceptados: true o false.

Variables para el despliegue manual

Nombre Obligatorio Valor predeterminado Comentario
ENV_GW_CERT_NAME SI Se utiliza para la conexión con la configuración manual.
Nombre del archivo de certificado para conectarse al router SSL.
ENV_GW_CERT_PASSWORD SI Se utiliza para la conexión con la configuración manual.
La contraseña del archivo de certificado para la conexión al enrutador SSL.
ENV_SSL_ROUTER_IP SI Se utiliza para la conexión con la configuración manual.
Dirección IP o nombre DNS del enrutador SSL al que se conectará la puerta de enlace HTML5.
ENV_SSL_ROUTER_PORT NO 443 Se utiliza para la conexión con la configuración manual.
Puerto del enrutador SSL al que se conectará la puerta de enlace HTML5.

Varias variables

Nombre Obligatorio Valor predeterminado Comentario
ENV_DISABLE_RSYSLOG NO false Desactivación del servicio rsyslog
Valores aceptados: true o false

Volúmenes de las

Volumen Comentario
/etc/ipdiva/ Volumen de configuración de la puerta de enlace HTML5.
Recomendamos montarlo en un volumen con nombre o en el sistema de archivos de la máquina host.
/opt/certificates/ Volumen que contiene el certificado de la puerta de enlace HTML5 (s) cuando se configura sin emparejar.
/var/log/ Volumen que contiene los registros de la puerta de enlace HTML5.

Puertos

puerto comentario
8080 Puerto de escucha de servicio HTML5

Deployment del HTML5 Docker de la puerta de enlace

Despliegue con emparejamiento

Requisitos previos

Antes de desplegar el Docker de la puerta de enlace HTML5, debe obtener un token de emparejamiento .

El despliegue descrito a continuación utilizará todos los volúmenes disponibles (excepto /opt/certificates/ que no es útil en este contexto) y expondrá todos los puertos.
Los volúmenes se montarán en el sistema de archivos de la máquina host con la ubicación HTML5_GATEWAY_REP. Dentro de esta ubicación se encuentran los siguientes subdirectorios:

  • config
  • registro

Puede personalizar las variables para los siguientes comandos:

Valor personalizado Variable Comentario
DOCKER_NAME Nombre del contenedor de Docker.
HTML5_GATEWAY_REP Ubicación en el sistema de archivos para montar los volúmenes.
ENV_MEDIATION_VALUE Valor de la variable ENV_MEDIATION del entorno
ENV_TOKEN_VALUE Valor de la variable ENV_TOKEN del entorno
ENV_NO_CHECK_CERT_VALUE Valor de la variable ENV_NO_CHECK_CERT del entorno

Crear el árbol de directorios necesario para montar volúmenes en el sistema de archivos:

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

Y finalmente, comienza un nuevo contenedor:

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

Los registros de contenedores se pueden ver usando el siguiente comando:

1
docker logs -f DOCKER_NAME

Desarrollo manual

Requisitos previos

Antes de desplegar el HTML5 Gateway Docker, debe tener el certificado requerido para el HTML5 Gateway.

El despliegue descrito a continuación utilizará todos los volúmenes disponibles y expondrá todos los puertos.
Los volúmenes se montarán en el sistema de archivos de la máquina host con la ubicación MANUAL_REP. Dentro de esta ubicación se encuentran los siguientes subdirectorios:

  • config
  • registro
  • Certificados

Puede personalizar las variables para los siguientes comandos:

Valor personalizado Variable Comentario
MANUAL_NAME Nombre del contenedor de Docker.
MANUAL_REP Ubicación en el sistema de archivos para montar los volúmenes.
ENV_GW_CERT_NAME_VALUE Valor de la variable ENV_GW_CERT_NAME del entorno
ENV_GW_CERT_PASSWORD_VALUE Valor de la variable ENV_GW_CERT_PASSWORD del entorno
ENV_SSL_ROUTER_IP_VALUE Valor de la variable ENV_SSL_ROUTER_IP del entorno
ENV_SSL_ROUTER_PORT_VALUE Valor de la variable ENV_SSL_ROUTER_PORT del entorno

Crear el árbol de directorios necesario para montar volúmenes en el sistema de archivos:

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

Luego coloque los certificados para el HTML5 Gateway y el servicio de grabación en MANUAL_REP/certificates.

Por último, iniciar un nuevo contenedor:

 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

Los registros de contenedores se pueden ver usando el siguiente comando:

1
docker logs -f MANUAL_NAME

Configuración del Mediation Controller

Para que el nuevo HTML5 Gateway Docker esté operativo, el servidor Mediation Controller aún necesita ser configurado a través de SSH o acceso de consola y permisos root.

Esta última configuración es necesaria para permitir que el Mediation Controller se comunique con el servicio HTML5.
Sin embargo, esta configuración varía dependiendo de la ubicación del Docker de la puerta de enlace HTML5:

El esquema general es el siguiente:

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

    subgraph LAN
        GW(Edge Gateway)
    end


    MED -.-> |Connection to HTML5 service ; 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

En este contexto, será necesario añadir la información que se indica a continuación al archivo /etc/ipdiva/httpd/commonParameters.extra.conf o crearlo.
La personalización de la configuración está disponible:

Valor personalizado Variable Comentario
HTML5_URL_DMZ URL configurado al declarar el HTML5 Gateway en la consola de administración.
HTML5_IP_DMZ nombre de DNS o dirección IP del servidor Docker en el que el Docker de la puerta de enlace HTML5 está activo.
HTML5_PORT_DMZ Puerto publicado por el servidor Docker para el Docker de la puerta de enlace HTML5.
 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>

El esquema general es el siguiente:

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

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


    MED -.- | Connection to HTML5 service ; through TLS Tunnel| GW -.-> |Connection to HTML5 service ; TCP 8080| HTML5
    HTML5 --> |TLS Tunnel| MED
    GW --> |TLS Tunnel| MED

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

En este contexto, será necesario añadir la información que se indica a continuación al archivo /etc/ipdiva/httpd/commonParameters.extra.conf o crearlo.
La personalización de la configuración está disponible:

Valor personalizado Variable Comentario
HTML5_URL_LAN URL configurado al declarar el HTML5 Gateway en la consola de administración.
GW_NAME_LAN Nombre del Edge Gateway utilizado para conectarse al servicio HTML5. El carácter pipe al final de la línea ** debe mantenerse **.
ORGANIZATION_NAME_LAN Nombre de la organización a la que se conecta el Edge Gateway
HTML5_IP_LAN nombre de DNS o dirección IP del servidor Docker en el que el Docker de la puerta de enlace HTML5 está activo.
HTML5_PORT_LAN Puerto publicado por el servidor Docker para el Docker de la puerta de enlace HTML5.
 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>

Tip

Esta configuración también se puede utilizar en la siguiente situación en la que un Docker Edge Gateway y un Docker HTML5 Gateway se ejecutan en la misma red 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 -.- | Connection to HTML5 service ; through TLS Tunnel| GW -.-> |Connection to HTML5 service ; TCP 8080 through Docker network| HTML5
    HTML5 --> |TLS Tunnel| MED
    GW --> |TLS Tunnel| MED

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

En este ejemplo, vamos a desplegar un Edge Gateway y un HTML5 Gateway en el mismo servidor Docker.

La infraestructura utilizada para el ejemplo es la siguiente:

  • Servidor Mediation Controller
    • Dirección IP de la red: 10.0.10.10
    • Nombre de la organización: my-organization-name
    • Token para Edge Gateway: YJ5N-JN05-N5LS-N26H-7JHA-HZ9R-BGJF-MAVH
    • Token para el portal HTML5: ATCW-OMVR-0RY4-LW1M-D9G9-H5VF-WPX5-YCXF
    • URL para acceder al servicio HTML5: HTML5_DOCKER
  • Servidor de acoplamiento
    • Nombre de la red de acoplamiento: cyberelements-cleanroom-network
    • Edge Gateway
      • Nombre: my-edge-gateway-docker
      • Ubicación de la raíz en el sistema de archivos: /opt/my-edge-gateway-docker
    • Puerta de acceso HTML5
      • Nombre: my-html5-gateway-docker
      • Ubicación de la raíz en el sistema de archivos: /opt/my-html5-gateway-docker

En primer lugar, en el servidor Docker, es necesario crear la estructura de árbol para montar los volúmenes de 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

Entonces crea un bridge tipo de red de acoplamiento para que los dos contenedores puedan comunicarse entre sí:

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

A continuación, inicie el contenedor Edge Gateway. Tenga en cuenta que el ejemplo establece una conexión mediante emparejamiento, con acceso al Mediation Controller a través de su dirección IP y sin verificación de certificado añadida. Además, se agrega el parámetro --network para especificar el uso de la red Docker creada previamente:

 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

A continuación, inicie el contenedor HTML5 Gateway. Tenga en cuenta que el ejemplo establece una conexión mediante emparejamiento, con acceso al Mediation Controller a través de su dirección IP y sin verificación de certificado añadida. Además, se agrega el parámetro --network para especificar el uso de la red Docker creada previamente, y dado que el acceso al servicio HTML5 pasará a través de la red Docker, no es necesario publicar el puerto 8080:

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

Finalmente, el archivo /etc/ipdiva/httpd/commonParameters.extra.conf en el servidor Mediation Controller (s) debe ser configurado.

 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>

Antes de aplicar las nuevas configuraciones, debe comprobar que la nueva configuración no causa ningún error de bloqueo para el servidor web Apache2.
Para ello, ejecute el siguiente comando:

1
apache2ctl configtest

Si el resultado es Syntax OK, entonces los cambios se pueden aplicar con el siguiente comando. De lo contrario, compruebe la configuración de su archivo /etc/ipdiva/httpd/commonParameters.extra.conf.

1
systemctl reload apache2