# Configuração do Home Screen Server

## Introdução

Esse manual descreve a configuração dos componentes do lado do servidor da aplicação *GBS Home Screen*.

O procedimento de configuração deve ser realizado somente após a etapa de instalação. Para mais informações, consulte o [Manual de Instalação do GBS Apps](/componentes-web/gbsappssetup.md).

## Configuração

Os passos para configuração são:

1. [Configure o Tomcat](#configuracao-do-tomcat);
2. [Configure os certificados](#configuracao-de-certificados);
3. [Gere a senha criptografada](#criptografia-da-senha-do-banco-de-dados);
4. [Configure outras propriedades no arquivo config.properties](#arquivo-de-configuracao-da-aplicacao);
5. [Instale e configure o Nginx](#nginx);
6. [Configure as permissões](#permissoes);
7. [Configure o logotipo do cliente](#logotipo-do-cliente);

Todos os passos estão descritos abaixo. Um exemplo do arquivo `config.properties` pode ser encontrado na seção [Exemplo do Arquivo de Configuração](#exemplo-do-arquivo-de-configuracao).

{% hint style="danger" %}
Todas as linhas devem estar presentes no arquivo de configuração. Comentar ou deletar linhas pode causar comportamentos inesperados. Para informações adicionais, contate o Time de Suporte da Griaule.
{% endhint %}

### Configuração do Tomcat

Edite o arquivo de configuração do Tomcat para configurar os certificados e a porta que a aplicação usará.

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

Para mudar a porta, procure por `Connector port=`. Essa é a porta para operações backend.

A porta padrão do GBS Home Screen é `8128`.

### Configuração de Certificados

Para habilitar autenticação SSL, procure por `Connector port=` no arquivo `/conf/server.xml`.

Há várias entradas. Procure pela que define um *SSL HTTP/1.1 Connector*. Se necessário, remova os delimitadores de comentário `<!--` e `-->`. Em seguida, ajuste as seguintes configurações:

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

O parâmetro `port` deve ser a porta de rede desejada para a aplicação.

Mude o caminho de `keystoreFile` e `truststoreFile` para os valores corretos. Faça o mesmo para `keystorePass` e `truststorePass`.

O parâmetro `clientAuth="true"` irá requerer autenticação do servidor para o cliente e do cliente para o servidor. Isso significa que o cliente necessitará importar o certificado no navegador para poder acessar a aplicação.

{% hint style="warning" %}
Quando `clientAuth` está definido como `true`, o administrador do sistema deve fornecer o arquivo `certificate.pfx` para os usuários finais.
{% endhint %}

### Criptografia da senha do Banco de Dados

No arquivo `config.properties`, o parâmetro `jdbc.password` é uma senha criptografada. Para gerar a senha criptografada, siga os passos abaixo:

{% hint style="info" %}
Se o diretório `/var/lib/tomcats/home-screen/webapps/gbs-home-screen-server/WEB-INF/lib` não existir, **inicie** a aplicação (`systemctl start tomcat@home-screen.service`) uma vez para que o diretório seja criado. Em seguida, **pare** a aplicação (`systemctl stop tomcat@home-screen.service`) e continue o procedimento de configuração.
{% endhint %}

1. Acesse o seguinte diretório:

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

   ```sh
   java -cp gbs-common-db-<version>.jar com.griaule.commons.util.EncryptUtil <desiredPassword>
   ```
3. A senha criptografada aparecerá após a mensagem: *"Encrypted password is:"*

{% hint style="info" %}
Guarde a senha criptografada. Ela será usada no próximo passo.
{% endhint %}

### Arquivo de Configuração da Aplicação

Abra o arquivo de configuração:

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

Algumas mudanças importantes nesse arquivo são os parâmetros `jdbc.url`, `jdbc.username`, `jdbc.password` e `gbds.url`. Configure-os de acordo com seu ambiente.

Um exemplo do arquivo de configuração completo é mostrado na seção [Exemplo do Arquivo de Configuração](#exemplo-do-arquivo-de-configuracao).

{% hint style="info" %}
Lembre-se de substituir a senha criptografada gerada na seção [Criptografia da senha do Banco de Dados](#criptografia-da-senha-do-banco-de-dados) neste arquivo.
{% endhint %}

#### Configurações do Home Screen

Em seguida, configure o IP, a porta e o protocolo de acesso à aplicação. O IP e porta devem ser os mesmos configurados na seção [Configuração do Tomcat](#configuracao-do-tomcat).

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

{% hint style="warning" %}
Certifique-se de que os parâmetros de configuração `home-screen.ip`, `home-screen.port` e `home-screen.protocol` estejam corretamente especificados no arquivo `config.properties`. Em diversos casos, o IP será o mesmo para diversas aplicações. Contudo, cada aplicação possuirá uma porta **diferente e única**.
{% endhint %}

### Nginx

Instale e configure o Nginx para que o GBS Home Screen funcione com login único (SSO) junto às demais aplicações.

#### Instalação do Nginx

{% hint style="info" %}
Se o Nginx já estiver instalado, pule para a seção [Configuração do Nginx](#configuracao-do-nginx).
{% endhint %}

Instale o Nginx:

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

Inicie o Nginx:

```sh
sudo systemctl start nginx
```

#### Configuração do Nginx

Habilite o Nginx para iniciar com o sistema:

```sh
sudo systemctl enable nginx
```

{% hint style="danger" %}
Se o Nginx já estava instalado, verifique se um arquivo de configuração já existe no diretório `/etc/nginx/conf.d/`. Se existir, verifique no arquivo se o *server block* está configurado para a **porta 80** (`listen 80`) e para o **mesmo** `server_name` do host do GBS Home Screen. Em caso afirmativo, pule as instruções de criação de um novo arquivo de configuração e adicione as configurações abaixo ao arquivo existente.
{% endhint %}

Em seguida, crie um arquivo de configuração para o Nginx:

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

Adicione as seguintes informações ao arquivo. Em *server*, substitua `<ip_hostname_or_domain>` pelo IP, hostname ou domínio do servidor:

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

Em seguida, ainda em *server*, adicione um bloco de configuração para cada aplicação, mapeando-a para seu IP e porta. Substitua `<app_name>`, `<protocol>`, `<app_name_ip>` e `<app_name_port>` pelos valores corretos:

{% hint style="success" %}
O `<app_name>` pode ser: `bcc`, `cardscan`, `etr`, `mir`, `best`, `intelligence`, `smart-sense`, `print`, `control-panel` ou `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;
}
```

Exemplo de arquivo de configuração completo do Nginx, contendo rotas para todas as aplicações, utilizando suas portas padrão. Substitua `<ip_hostname_or_domain>`, `<protocol>` e `<app_name_ip>` pelos valores corretos:

```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;
   }
}
```

Salve e feche o arquivo de configuração.

Finalmente, recarregue as configurações do Nginx:

```sh
sudo systemctl reload nginx
```

### Permissões

Para que os ícones das aplicações apareçam na Home Screen, é necessário que o usuário possua as permissões necessárias. Cada permissão concedida ao usuário (via integração LDAP) corresponde a uma aplicação, conforme a tabela abaixo:

| Aplicação     | Permissão                  |
| ------------- | -------------------------- |
| 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 do cliente

No canto superior direito dos web apps, é possível adicionar o logotipo do cliente.

{% hint style="info" %}
Isso é uma configuração de ambiente. Assim, todos os usuários que acessarem a aplicação verão o mesmo logotipo.
{% endhint %}

![](/files/hSFB4DwgAcRunalb3E0Y)

Para isso, na tabela `sphinx.settings` do banco de dados, crie ou altere a configuração `organization.logo` (type `APPS`) para o caminho do logotipo desejado. É necessário que a aplicação (usuário `tomcat`) tenha acesso de leitura ao arquivo para poder carregá-lo.

{% hint style="warning" %}
As **dimensões** do logotipo devem ser de **320x132** pixels para que toda a área seja preenchida. Se a imagem for maior, menor ou em outra proporção, ela será redimensionada e a área restante será preenchida com a cor branca.

O formato de imagem deve ser preferencialmente **PNG** ou **JPG**.
{% endhint %}

![](/files/ogvNtr15GQYfH9C6I2qv)

## Acesso à aplicação

O GBS Home Screen, assim como as demais aplicações, deve ser acessado sem o uso da porta, uma vez que o Nginx irá redirecionar automaticamente a requisição para a porta correta. Assim, ao realizar um único login (SSO), o usuário terá acesso a todas as aplicações que possui permissão para utilizar.

O formato da URL de acesso é:

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

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

Exemplos:

* 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" %}
Caso as aplicações não sejam acessadas pela URL no formato descrito acima (sem porta), isto é, se forem acessadas usando suas portas diretamente, o **login único** (SSO) **não funcionará** e deverá ser feito login em cada aplicação separadamente.
{% endhint %}

## Finalizando as Configurações

Após finalizar todos os passos de configuração, retorne ao [Manual de Instalação do GBS Apps - Seção de Configuração](/componentes-web/gbsappssetup.md#configuracoes).

## Exemplo do Arquivo de Configuração

Essa seção mostra um exemplo do arquivo `config.properties`.

{% hint style="warning" %}
Os 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>` e `<email_address>` devem ser substituídos pelos valores adequados.
{% 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/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.
