Saltar a contenido

Instalación de la HTML5 Gateway Docker

Importación de la imagen Docker

Antes de poder crear un contenedor HTML5 Gateway Docker, debe importar la imagen Docker. Para ello, abra un shell desde el que disponga de los comandos Docker, así como del archivo cleanroom-html5-4.6.1-33-v2.tgz. Desde el shell, ejecute el siguiente comando, ajustando la ruta del archivo TGZ si no se encuentra en el directorio actual:

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

A continuación, compruebe que la importación se ha realizado correctamente con el siguiente comando:

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

El resultado esperado es el siguiente. Si no es así, la importación ha fallado:

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

Variables para el despliegue por emparejamiento

Nombre Obligatorio Valor predeterminado Comentario
ENV_MEDIATION Se utiliza para la conexión por emparejamiento.
Indica el nombre DNS o la dirección IP para conectarse a la interfaz web de una plataforma CyberElements Bastion.
ENV_TOKEN Se utiliza para la conexión por emparejamiento.
Indica el token de emparejamiento que debe utilizarse para la conexión al Mediation Controller.
ENV_NO_CHECK_CERT NO false Se utiliza para las conexiones por emparejamiento.
Desactiva o no la comprobación del certificado web del Mediation Controller; resulta útil con CyberElements Bastion cuando el acceso se realiza por dirección IP o cuando el certificado web no está 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 Se utiliza para la conexión con configuración manual.
Nombre del archivo de certificado para la conexión al enrutador SSL.
ENV_GW_CERT_PASSWORD Se utiliza para la conexión con configuración manual.
Contraseña del archivo de certificado para la conexión al enrutador SSL.
ENV_SSL_ROUTER_IP Se utiliza para la conexión con configuración manual.
Dirección IP o nombre DNS del enrutador SSL al que se conectará la HTML5 Gateway.
ENV_SSL_ROUTER_PORT NO 443 Se utiliza para la conexión con configuración manual.
Puerto del enrutador SSL al que se conectará la HTML5 Gateway.

Variables diversas

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

Volúmenes

Volumen Comentario
/etc/ipdiva/ Volumen de configuración de la HTML5 Gateway.
Se recomienda montarlo en un volumen con nombre o en el sistema de archivos de la máquina anfitriona.
/opt/certificates/ Volumen que contiene el o los certificados de la HTML5 Gateway en caso de configuración sin emparejamiento.
/var/log/ Volumen que contiene los logs de la HTML5 Gateway.

Puertos

Puerto Comentario
8080 Puerto de escucha del servicio HTML5.

Despliegue de la HTML5 Gateway Docker

Despliegue con emparejamiento

Requisitos previos

Antes de desplegar la HTML5 Gateway Docker, debe obtener un token de emparejamiento.

El despliegue descrito a continuación utilizará todos los volúmenes disponibles (salvo /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 anfitriona en la ubicación HTML5_GATEWAY_REP. Dentro de esta ubicación se encuentran los siguientes subdirectorios:

  • config
  • log

Puede personalizar las variables de los comandos siguientes:

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

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

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

Y, por último, inicie 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 logs del contenedor pueden consultarse con el siguiente comando:

1
docker logs -f DOCKER_NAME

Despliegue manual

Requisitos previos

Antes de desplegar la HTML5 Gateway Docker, debe disponer del certificado necesario para la 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 anfitriona en la ubicación MANUAL_REP. Dentro de esta ubicación se encuentran los siguientes subdirectorios:

  • config
  • log
  • certificates

Puede personalizar las variables de los comandos siguientes:

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

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

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

A continuación, coloque los certificados de la HTML5 Gateway y del servicio de grabación en MANUAL_REP/certificates.

Por último, inicie 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 logs del contenedor pueden consultarse con el siguiente comando:

1
docker logs -f MANUAL_NAME

Configuración del Mediation Controller

Para que la nueva HTML5 Gateway Docker sea operativa, queda por configurar el servidor Mediation Controller mediante un acceso SSH o consola y con permisos root.

Esta última configuración es necesaria para permitir que el Mediation Controller se comunique con el servicio HTML5.
No obstante, esta configuración varía según la ubicación de la HTML5 Gateway Docker:

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 -.-> |Conexión al servicio 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

En este contexto, será necesario añadir al archivo /etc/ipdiva/httpd/commonParameters.extra.conf la información indicada a continuación, o bien crearlo.
Es posible personalizar los parámetros:

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

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 -.- | Conexión al servicio HTML5 ; a través del túnel TLS| GW -.-> |Conexión al servicio HTML5 ; 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 al archivo /etc/ipdiva/httpd/commonParameters.extra.conf la información indicada a continuación, o bien crearlo.
Es posible personalizar los parámetros:

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

Consejo

Esta configuración también puede utilizarse en la situación siguiente, en la que una Edge Gateway Docker y una HTML5 Gateway Docker 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 -.- | Conexión al servicio HTML5 ; a través del túnel TLS| GW -.-> |Conexión al servicio HTML5 ; TCP 8080 a través de la red Docker| 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, desplegaremos una Edge Gateway y una HTML5 Gateway en el mismo servidor Docker.

La infraestructura utilizada para el ejemplo es la siguiente:

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

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

A continuación, cree una red Docker de tipo bridge para que ambos contenedores puedan comunicarse entre sí:

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

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

 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 de la HTML5 Gateway. Tenga en cuenta que el ejemplo establece una conexión por emparejamiento, con acceso al Mediation Controller mediante su dirección IP y sin comprobación de certificado. Además, se añade el parámetro --network para indicar el uso de la red Docker creada anteriormente y, dado que el acceso al servicio HTML5 se realizará 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

Por último, hay que configurar el archivo /etc/ipdiva/httpd/commonParameters.extra.conf del o de los servidores Mediation Controller. Debe añadirse la sección siguiente:

 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 los nuevos parámetros, debe comprobar que la nueva configuración no provoca ningún error bloqueante en el servidor web Apache2.
Para ello, ejecute el siguiente comando:

1
apache2ctl configtest

Si la respuesta es Syntax OK, los cambios pueden aplicarse con el comando siguiente. En caso contrario, compruebe la configuración de su archivo /etc/ipdiva/httpd/commonParameters.extra.conf.

1
systemctl reload apache2