# Configuración del Home Screen Server

## Introducción

Este manual describe la configuración de los componentes del lado del servidor de la aplicación *GBS Home Screen*.

El procedimiento de configuración debe realizarse solamente después de la etapa de instalación. Para más información, consulte el [Manual de Instalación de GBS Apps](/gbs/es/componentes-web/gbsappssetup.md).

## Configuración

Los pasos para configuración son:

1. [Configure el Tomcat](#configuracao-do-tomcat);
2. [Configure los certificados](#configuracao-de-certificados);
3. [Genere la contraseña cifrada](#criptografia-da-senha-do-banco-de-dados);
4. [Configure otras propiedades en el archivo config.properties](#arquivo-de-configuracao-da-aplicacao);
5. [Instale y configure el Nginx](#nginx);
6. [Configure los permisos](#permissoes);
7. [Configure el logotipo del cliente](#logotipo-do-cliente);

Todos los pasos están descritos a continuación. Un ejemplo del archivo `config.properties` puede encontrarse en la sección [Ejemplo del Archivo de Configuración](#exemplo-do-arquivo-de-configuracao).

{% hint style="danger" %}
Todas las líneas deben estar presentes en el archivo de configuración. Comentar o eliminar líneas puede causar comportamientos inesperados. Para información adicional, contacte al Equipo de Soporte de Griaule.
{% endhint %}

### Configuración del Tomcat

Edite el archivo de configuración del Tomcat para configurar los certificados y el puerto que la aplicación usará.

```sh
vim /var/lib/tomcats/home-screen/conf/server.xml
```

Para cambiar el puerto, busque `Connector port=`. Ese es el puerto para operaciones backend.

El puerto predeterminado del GBS Home Screen es `8128`.

### Configuración de Certificados

Para habilitar autenticación SSL, busque `Connector port=` en el archivo `/conf/server.xml`.

Hay varias entradas. Busque la que define un *SSL HTTP/1.1 Connector*. Si es necesario, elimine los delimitadores de comentario `<!--` y `-->`. Luego, ajuste las siguientes configuraciones:

```properties
port="8127"
keystoreFile="/home/griaule/keystore"
keystorePass="password"
keyAlias="1"
clientAuth="true"
truststoreFile="/home/griaule/keystore"
truststorePass="password"
```

El parámetro `port` debe ser el puerto de red deseado para la aplicación.

Cambie la ruta de `keystoreFile` y `truststoreFile` a los valores correctos. Haga lo mismo para `keystorePass` y `truststorePass`.

El parámetro `clientAuth="true"` requerrá autenticación del servidor para el cliente y del cliente para el servidor. Esto significa que el cliente necesitará importar el certificado en el navegador para poder acceder a la aplicación.

{% hint style="warning" %}
Cuando `clientAuth` está definido como `true`, el administrador del sistema debe proporcionar el archivo `certificate.pfx` a los usuarios finales.
{% endhint %}

### Cifrado de la contraseña de la Base de Datos

En el archivo `config.properties`, el parámetro `jdbc.password` es una contraseña cifrada. Para generar la contraseña cifrada, siga los pasos a continuación:

{% hint style="info" %}
Si el directorio `/var/lib/tomcats/home-screen/webapps/gbs-home-screen-server/WEB-INF/lib` no existe, **inicie** la aplicación (`systemctl start tomcat@home-screen.service`) una vez para que el directorio sea creado. Luego, **detenga** la aplicación (`systemctl stop tomcat@home-screen.service`) y continúe el procedimiento de configuración.
{% endhint %}

1. Acceda al siguiente directorio:

   ```sh
   cd /var/lib/tomcats/home-screen/webapps/gbs-home-screen-server/WEB-INF/lib
   ```
2. Ejecute el comando:

   ```sh
   java -cp gbs-common-db-<version>.jar com.griaule.commons.util.EncryptUtil <desiredPassword>
   ```
3. La contraseña cifrada aparecerá después del mensaje: *"Encrypted password is:"*

{% hint style="info" %}
Guarde la contraseña cifrada. Será usada en el siguiente paso.
{% endhint %}

### Archivo de Configuración de la Aplicación

Abra el archivo de configuración:

```sh
vim /var/lib/tomcats/home-screen/conf/config.properties
```

Algunos cambios importantes en este archivo son los parámetros `jdbc.url`, `jdbc.username`, `jdbc.password` y `gbds.url`Configurelos de acuerdo con su entorno.

Un ejemplo del archivo de configuración completo se muestra en la sección [Ejemplo del Archivo de Configuración](#exemplo-do-arquivo-de-configuracao).

{% hint style="info" %}
Recuerde reemplazar la contraseña cifrada generada en la sección [Cifrado de la contraseña de la Base de Datos](#criptografia-da-senha-do-banco-de-dados) en este archivo.
{% endhint %}

#### Configuraciones del Home Screen

Luego, configure la IP, el puerto y el protocolo de acceso a la aplicación. La IP y puerto deben ser los mismos configurados en la sección [Configuración del Tomcat](#configuracao-do-tomcat).

```properties
home-screen.ip=<ip>
home-screen.port=<port>
home-screen.protocol=<protocol>
```

{% hint style="warning" %}
Asegúrese de que los parámetros de configuración `home-screen.ip`, `home-screen.port` y `home-screen.protocol` estén correctamente especificados en el archivo `config.properties`. En muchos casos, la IP será la misma para varias aplicaciones. Sin embargo, cada aplicación tendrá un puerto **distinto y único**.
{% endhint %}

### Nginx

Instale y configure el Nginx para que el GBS Home Screen funcione con inicio de sesión único (SSO) junto con las demás aplicaciones.

#### Instalación del Nginx

{% hint style="info" %}
Si el Nginx ya está instalado, salte a la sección [Configuración del Nginx](#configuracao-do-nginx).
{% endhint %}

Instale el Nginx:

```sh
sudo yum install nginx -y
```

Inicie el Nginx:

```sh
sudo systemctl start nginx
```

#### Configuración del Nginx

Habilite el Nginx para iniciarse con el sistema:

```sh
sudo systemctl enable nginx
```

{% hint style="danger" %}
Si el Nginx ya estaba instalado, verifique si un archivo de configuración ya existe en el directorio `/etc/nginx/conf.d/`. Si existe, verifique en el archivo si el *server block* está configurado para el **puerto 80** (`listen 80`) y para el **mismo** `server_name` del host del GBS Home Screen. En caso afirmativo, omita las instrucciones de creación de un nuevo archivo de configuración y agregue las configuraciones abajo al archivo existente.
{% endhint %}

A continuación, cree un archivo de configuración para el Nginx:

```sh
sudo vim /etc/nginx/conf.d/web-apps.conf
```

Agregue la siguiente información al archivo. En *server*, reemplace `<ip_hostname_or_domain>` por la IP, hostname o dominio del servidor:

```nginx
server {
   listen 80;
   server_name <ip_hostname_or_domain>;
   client_max_body_size 50M;
}
```

A continuación, aún en *server*, agregue un bloque de configuración para cada aplicación, mapeándola a su IP y puerto. Reemplace `<app_name>`, `<protocol>`, `<app_name_ip>` y `<app_name_port>` por los valores correctos:

{% hint style="success" %}
El `<app_name>` puede ser: `bcc`, `cardscan`, `etr`, `mir`, `best`, `intelligence`, `smart-sense`, `print`, `control-panel` o `home-screen`.
{% endhint %}

```nginx
location /gbs-<app_name>-server {
   proxy_pass <protocol>://<app_name_ip>:<app_name_port>;
   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_set_header X-Forwarded-Proto $scheme;
}
```

Ejemplo de archivo de configuración completo de Nginx, conteniendo rutas para todas las aplicaciones, utilizando sus puertos predeterminados. Reemplace `<ip_hostname_or_domain>`, `<protocol>` y `<app_name_ip>` por los valores correctos:

```nginx
server {
   listen 80;
   server_name <ip_hostname_or_domain>;
   client_max_body_size 50M;

   # HOME SCREEN:
   location /gbs-home-screen-server {
      proxy_pass <protocol>://<home-screen_ip>:8128;
      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_set_header X-Forwarded-Proto $scheme;
   }

   # BCC
   location /gbs-bcc-server {
      proxy_pass <protocol>://<bcc_ip>:8124;
      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_set_header X-Forwarded-Proto $scheme;
   }

   # CARDSCAN
   location /gbs-cardscan-server {
      proxy_pass <protocol>://<cardscan_ip>:8087;
      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_set_header X-Forwarded-Proto $scheme;
   }


   # ETR
   location /gbs-etr-server {
      proxy_pass <protocol>://<etr_ip>:8089;
      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_set_header X-Forwarded-Proto $scheme;
   }

   # MIR
   location /gbs-mir-server {
      proxy_pass <protocol>://<mir_ip>:8120;
      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_set_header X-Forwarded-Proto $scheme;
   }

   # BEST
   location /gbs-best-server {
      proxy_pass <protocol>://<best_ip>:8123;
      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_set_header X-Forwarded-Proto $scheme;
   }

   # INTELLIGENCE
   location /gbs-intelligence-server {
      proxy_pass <protocol>://<intelligence_ip>:8122;
      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_set_header X-Forwarded-Proto $scheme;
   }

   # SMART SENSE
   location /gbs-smart-sense-server {
      proxy_pass <protocol>://<smart-sense_ip>:8127;
      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_set_header X-Forwarded-Proto $scheme;
   }

   # PRINT
   location /gbs-print-server {
      proxy_pass <protocol>://<print_ip>:8127;
      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_set_header X-Forwarded-Proto $scheme;
   }

   # CONTROL PANEL
   location /gbs-control-panel-server {
      proxy_pass <protocol>://<control-panel_ip>:8121;
      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_set_header X-Forwarded-Proto $scheme;
   }
}
```

Guarde y cierre el archivo de configuración.

Finalmente, recargue las configuraciones del Nginx:

```sh
sudo systemctl reload nginx
```

### Permisos

Para que los íconos de las aplicaciones aparezcan en el Home Screen, es necesario que el usuario posea los permisos necesarios. Cada permiso concedido al usuario (vía integración LDAP) corresponde a una aplicación, conforme la tabla abajo:

| Aplicación    | Permiso                    |
| ------------- | -------------------------- |
| BCC           | bccdesktop\_user           |
| CardScan      | cardscan\_user             |
| ETR           | exception\_treatment\_user |
| MIR           | quality\_control\_user     |
| BEST          | forensic\_user             |
| Intelligence  | intelligence\_user         |
| SmartSense    | smartsense\_user           |
| Print         | printservice\_user         |
| Control Panel | controlpanel\_user         |

### Logotipo del cliente

En la esquina superior derecha de las web apps, es posible añadir el logotipo del cliente.

{% hint style="info" %}
Esta es una configuración de entorno. Así, todos los usuarios que accedan a la aplicación verán el mismo logotipo.
{% endhint %}

![](/files/4e2049f9bdc631bf30ba07cb3fe0d2cea20293b1)

Para ello, en la tabla `sphinx.settings` de la base de datos, cree o modifique la configuración `organization.logo` (type `APPS`) por la ruta del logotipo deseado. Es necesario que la aplicación (usuario `tomcat`) tenga acceso de lectura al archivo para poder cargarlo.

{% hint style="warning" %}
Las **dimensiones** del logotipo deben ser de **320x132** píxeles para que toda el área se rellene. Si la imagen es mayor, menor o en otra proporción, será redimensionada y el área restante se rellenará con color blanco.

El formato de imagen debe ser preferentemente **PNG** o **JPG**.
{% endhint %}

![](/files/18240907a42ed47fbcacbc94d2efec63d8e4364f)

## Acceso a la aplicación

El GBS Home Screen, al igual que las demás aplicaciones, debe ser accedido sin el uso del puerto, ya que el Nginx redirigirá automáticamente la solicitud al puerto correcto. Así, al realizar un único inicio de sesión (SSO), el usuario tendrá acceso a todas las aplicaciones para las que tiene permiso de uso.

El formato de la URL de acceso es:

```html
<protocol>://<ip_or_domain>/gbs-<app_name>-server/react/
^^^^^^^^^^   ^^^^^^^^^^^^^^     ^^^^^^^^^^
```

{% hint style="success" %}
El `<app_name>` puede ser: `bcc`, `cardscan`, `etr`, `mir`, `best`, `intelligence`, `smart-sense`, `print`, `control-panel` o `home-screen`.
{% endhint %}

Ejemplos:

* GBS Home Screen: <http://172.16.0.185/gbs-home-screen-server/react/>
* GBS BCC: <http://172.16.0.185/gbs-bcc-server/react/>
* GBS ETR: <http://172.16.0.185/gbs-etr-server/react/>

***

* GBS Home Screen: <https://my.server.com/gbs-home-screen-server/react/>
* GBS CardScan: <https://my.server.com/gbs-cardscan-server/react/>
* GBS MIR: <https://my.server.com/gbs-mir-server/react/>

{% hint style="danger" %}
Si las aplicaciones no se acceden por la URL en el formato descrito arriba (sin puerto), es decir, si se accede usando sus puertos directamente, el **inicio de sesión único** (SSO) **no funcionará** y deberá iniciarse sesión en cada aplicación por separado.
{% endhint %}

## Finalizando las Configuraciones

Tras finalizar todos los pasos de configuración, vuelva al [Manual de Instalación de GBS Apps - Sección de Configuración](/gbs/es/componentes-web/gbsappssetup.md#configuracoes).

## Ejemplo del Archivo de Configuración

Esta sección muestra un ejemplo del archivo `config.properties`.

{% hint style="warning" %}
Los parámetros `<rdb_ip>`, `<rdb_username>`, `<rdb_encrypted_password>`, `<gbds_ip>`, `<gbds_username>`, `<gbds_password>`, `<home_screen_ip>`, `<protocol>`, `<keystore_path>`, `<keystore_password>`, `<truststore_path>`, `<truststore_password>`, `<ldap_ip>`, `<ldap_username>`, `<ldap_password>`, `<email_password>` y `<email_address>` deben ser reemplazados por los valores adecuados.
{% endhint %}

```properties
# **********************************************************************************************
#
#      /$$   /$$  /$$$$$$  /$$      /$$ /$$$$$$$$
#     | $$  | $$ /$$__  $$| $$$    /$$$| $$_____/
#     | $$  | $$| $$  \ $$| $$$$  /$$$$| $$
#     | $$$$$$$$| $$  | $$| $$ $$/$$ $$| $$$$$
#     | $$__  $$| $$  | $$| $$  $$$| $$| $$__/
#     | $$  | $$| $$  | $$| $$\  $ | $$| $$
#     | $$  | $$|  $$$$$$/| $$ \/  | $$| $$$$$$$$
#     |__/  |__/ \______/ |__/     |__/|________/
#
#       /$$$$$$   /$$$$$$  /$$$$$$$  /$$$$$$$$ /$$$$$$$$ /$$   /$$
#      /$$__  $$ /$$__  $$| $$__  $$| $$_____/| $$_____/| $$$ | $$
#     | $$  \__/| $$  \__/| $$  \ $$| $$      | $$      | $$$$| $$
#     |  $$$$$$ | $$      | $$$$$$$/| $$$$$   | $$$$$   | $$ $$ $$
#      \____  $$| $$      | $$__  $$| $$__/   | $$__/   | $$  $$$$
#      /$$  \ $$| $$    $$| $$  \ $$| $$      | $$      | $$\  $$$
#     |  $$$$$$/|  $$$$$$/| $$  | $$| $$$$$$$$| $$$$$$$$| $$ \  $$
#      \______/  \______/ |__/  |__/|________/|________/|__/  \__/
#
# **********************************************************************************************
# DATABASE (RDB)
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://<rdb_ip>:3306/sphinx?useSSL=false
jdbc.username=<rdb_username>
jdbc.password=<rdb_encrypted_password>
jdbc.dialect=org.hibernate.dialect.MySQLDialect
jdbc.showSql=false

# **********************************************************************************************
# GBDS CONNECTION (& AUTHENTICATION LDAP ONLY)
gbds.url=http://<gbds_ip>:8085
gbds.user=<gbds_username>
gbds.key=<gbds_password>
gbds.logLevel=INFO
gbds.additionalHeaders={}
gbds.flushDebugRequests=false
gbds.timeout=300
gbds.listExceptions.labels=

# **********************************************************************************************
# GUI SETTINGS
home-screen.ip=<home_screen_ip>
home-screen.port=8128
home-screen.protocol=<protocol>
locale=en_us

# **********************************************************************************************
# OTHER SETTINGS
gbds.latent.search.url=null
gbds.proxy.url=null
gbds.proxy.port=0

keystore.path=<keystore_path>
keystore.password=<keystore_password>
truststore.path=<truststore_path>
truststore.password=<truststore_password>

# **********************************************************************************************
# SESSION SETTINGS
same.user.simultaneous.login=true
fingerprint.useSDK=false
image.convert.useJnbis=false
filter.people.pguid=ALL
faceQuality.qtdeMinErrors=2
session.expirationTime.server=8h
session.expirationTime.web=8h
notification.last.timestamp=15

ldap.url=http://<ldap_ip>:8082/
ldap.user=<ldap_username>
ldap.password=<ldap_password>
codeValidTime=10
deviceTime=6

# **********************************************************************************************
# EMAIL
email.host=smtp.gmail.com
email.host.port=587
email.from=<email_address>
email.password=<email_password>
email.python.path=python
email.use.script.python=true

profile.cacheSize=100
profile.cacheTime=5m
locale=pt_br
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.griaule.com/gbs/es/componentes-web/homescreenconfig.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
