# Instalação e configuração

### Pré-requisitos

Para a configuração do endpoint, utilizamos como base o Docker CE, um gerenciador de containers que permite simplificar a configuração e gestão da solução.\
&#x20;Consulte a [documentação oficial](https://www.docker.com/) para mais informações sobre o Docker e seu funcionamento.

\*\*\*A ferramenta oficial utilizada para execução do motor de assinaturas é o Docker. Qualquer outra ferramenta ou método de execução, que não seja o Docker, não será suportado pela equipe técnica da Soluti.

\*\*\****A responsabilidade pela máquina onde estão instalados o componente de assinaturas, Docker e Docker-Compose é inteiramente da instituição. Isso inclui a gestão, manutenção, configuração e suporte técnico do ambiente onde esses serviços estão em execução.***

***A Soluti fornece o suporte necessário para a utilização do componente de assinaturas, mas qualquer questão relacionada à infraestrutura da máquina em si, como permissões, disponibilidade, atualizações e conectividade, deve ser gerenciada diretamente pela equipe de TI da instituição.***

Segue abaixo as especificações:

* **Linux**\
  &#x20;Docker para [Debian](https://docs.docker.com/v17.12/install/linux/docker-ce/debian/#install-docker-ce)\
  &#x20;Docker para [Centos](https://docs.docker.com/v17.12/install/linux/docker-ce/centos/#install-docker-ce)[ stream](https://docs.docker.com/v17.12/install/linux/docker-ce/centos/#install-docker-ce)\
  &#x20;Docker para [Ubuntu](https://docs.docker.com/engine/install/ubuntu/)

Será necessário acesso à internet para instalação de ferramentas.

#### Requisitos de máquina conforme consumo

Até 2.500 assinaturas por dia:

* 2 Gb de memória RAM
* 1 núcleo de processamento
* 25 Gb de armazenamento

A partir de 5.000 assinaturas por dia:

* 4 Gb de memória RAM
* 2 núcleo de processamento
* 25 Gb de armazenamento

A partir de 10.000 assinaturas por dia:

* 8 Gb de memória RAM
* 2 núcleo de processamento
* 50 Gb de armazenamento

A partir de 50.000 assinaturas por dia:

* 10 Gb de memória RAM
* 5 núcleo de processamento
* 500 Gb de armazenamento

A partir de 100.000 assinaturas por dia:

* 20 Gb de memória RAM
* 10 núcleo de processamento
* 1 Tb de armazenamento

**Atenção**\
&#x20;É necessário a instalação do [Docker-compose](https://docs.docker.com/compose/install/#install-compose).

**Rede e conectividade**\
&#x20;Para o funcionamento do BirdID Pro é necessário acesso aos endpoints do provedor de assinaturas nas URLs:

* [https://apicloudid.vaultid.com.br](https://apicloudid.vaultid.com.br/) (produção)
* [https://api.birdid.com.br](https://api.birdid.com.br/) (produção)
* [https://apicloudid.hom.vaultid.com.br](https://apicloudid.hom.vaultid.com.br/) (homologação)
* [https://apihom.birdid.com.br](https://apihom.birdid.com.br/) (homologação)
* <https://harbor.lab.vaultid.com.br> (endpoint do harbor para baixar imagem do BirdID Pro)&#x20;
* [https://cess.lab.vaultid.com.br](https://cess.lab.vaultid.com.br/) (homologação)
* [https://billing.vaultid.com.br](http://billing.vaultid.com.br:443) (endpoint do Wings para fazer o download da licença do BirdID Pro - ambiente de produção) &#x20;

É necessário a liberação das URL's para download dos arquivos das LCR's (lista de certificados revogados) referentes aos certificados utilizados. Os repositórios variam de acordo com a Autoridade Certificadora responsável pela emissão do certificado.

Para clientes AC Soluti, os endpoints são:

* [https://ccd.acsoluti.com.br](https://ccd.acsoluti.com.br/)
* [https://ccd2.acsoluti.com.br](https://ccd2.acsoluti.com.br/)&#x20;

Para a utilização de carimbo do tempo, é necessário liberar o endpoint da [ACT](https://docs.vaultid.com.br/act/).

A comunicação entre o BirdID Pro e os endpoints citados não pode ser realizada com inspeção SSL/TLS(proxy) ou algum tipo de homem do meio que intercepte e interfira na abertura de sessão.

O tráfego de saída pode ser limitado aos clientes que consomem os serviços e aos endpoints citados.

### Configurações

Para iniciar o download da imagem e execução do software utilizando o docker-compose, faça o  download do projeto do [BirdID PRO](https://github.com/VaultID/docker-cess/archive/refs/heads/master.zip) ou um [clone do repositório de demonstração](https://github.com/VaultID/docker-cess).

Os seguintes parâmetros podem ser definidos dentro do arquivo docker-compose.yaml.

* **clientIdMd -** Caso o cliente esteja utilizando o BirdID Pro para autenticação (/oauth), deverá configurar o clientIdMd e clientSecretMd e sua aplicação precisará passá-los na requisição.
* **clientSecretMd -** Caso o cliente esteja utilizando o cess para autenticação (/oauth), deverá configurar o clientIdMd e clientSecretMd e sua aplicação precisará passá-los na requisição.
* **redisHost**  - Caso o cliente opte por utilizar seu cluster previamente instalado, basta configurar o redis host (opcional, default=redis);
* **redisPort** - Caso o cliente opte por utilizar seu cluster previamente instalado, basta configurar o redis port (opcional, default=6379);
* **ttlCacheGeneric** - Tempo (segundos) de vida do cache (opcional, default=3600);
* **lifetime** - Tempo (segundos) que os arquivos (tcn) irão ficar armazenado no BirdID Pro (opcional, default=86400);
* **sleep** - Intervalo (segundos) que o garbage collector irá executar para limpar os arquivos (opcional);
* **limit** - Quantidade máxima de arquivos que serão apagados a cada iteração do garbage (opcional);
* **cessUrl** - Define a URL utilizada para conexão ao BirdID Pro.
* **level** - Level de log do BirdID Pro (opcional, default=INFO) {DEBUG/INFO/NOTICE/WARNING/ERROR/CRITICAL/ALERT/EMERGENCY};
* **urlsMultiCloud** - {"[https://apihom.birdid.com.br":{"id":"SOLUTI","client\\\_id":"SEU\\\_CLIENT\\\_ID","client\\\_secret":"SEU\\\_CLIENT\\\_SECRET"},"https://apicloudid.hom.vaultid.com.br":{"id":"VAULTID","client\\\_id":"SEU\\\_CLIENT\\\_ID","client\\\_secret":"SEU\\\_CLIENT\\\_SECRET"\\}}](https://docs.vaultid.com.br/workspace/cess/https:/apihom.birdid.com.br":{"id":"SOLUTI","client\\_id":"SEU\\_CLIENT\\_ID","client\\_secret":"SEU\\_CLIENT\\_SECRET"},"https:/apicloudid.hom.vaultid.com.br":{"id":"VAULTID","client\\_id":"SEU\\_CLIENT\\_ID","client\\_secret":"SEU\\_CLIENT\\_SECRET"\\}})';
* **redisCluster** - Caso queira utilizar redis cluster, deverá setar true (opcional);
* **seedsCluster** Caso habilite redisCluster=true, deverá configurar esta variável com os nós. \["ip1:port1", "ip2:port2"... , "ipn:portn"] (obrigatório apenas se redisCluster=true);
* **sendMonitoring** Caso não queira que seja coletado informações do container, deverá setar a variável como false (opcional);

Teremos a seguinte configuração:

<figure><img src="/files/ADkKcf5RIyNFwEhiAT2O" alt=""><figcaption></figcaption></figure>

* **APACHE\_SSL**
  * Defina para true se deseja que o Apache do container forneça o serviço com TLS ativo.
  * Espera-se que o certificado digital e a respectiva chave sejam fornecidos através de um ponto de montagem no container. Descomente a sessão 'volumes' e configure os arquivos conforme orientação.
    * Arquivo **path\_crt**
      * Espera-se um arquivo com a parte pública do certificado digital concatenado com as cadeias intermediárias da Autoridade Certificado emissora. Todos os certificados devem estar no formato PEM (codificado em base64).
    * Arquivo **path\_key**
      * Espera-se um arquivo contendo apenas a chave privada correspondente ao certificado digital utilizado. A chave privada não pode ter senha e deve estar no formato PEM (codificada em base64).
* **PORTA\_EXTERNA** - Define a porta pela qual o serviço do BirdID Pro será exposto.

**Exemplo:**

Considerando o cenário:

* SSL ativo;
* Os certificados estão salvos na pasta /opt/certs/cert.pem e /opt/certs/cert.key;
* A porta que o container deve expor é a 443;

Teremos a seguinte configuração:

```
    ...
      # Se necessário, edite apenas as variávies abaixo: #
      - "cessUrl=https://cess.vaultid.com.br"
      - "APACHE_SSL=true"
    ports:
      # Definir a PORTA_EXTERNA pela qual o container será exposto na rede.
      - 443:8080
    volumes:
      - /opt/certs/cert.pem:/etc/apache2/cert/cert.pem
      - /opt/certs/cert.key:/etc/apache2/cert/cert.key
    ... 
```

### Atenção **(ambiente de homologação)**:

Caso esteja utilizando ambiente de homologação, é necessário configurar a cadeia de confiança do mesmo. Para isso basta descomentar a linhas 4**3** *- volumes:* e **44***-  ./hom-truststore:/var/www/data/trust* do arquivo **cess-compose.yaml.** Para mais detalhes, acesse [**https://github.com/VaultID/docker-cess**](https://github.com/VaultID/docker-cess)**.**

**Atenção (ambiente de Produção):**\
Caso esteja utilizando ambiente de produção, é necessário configurar o diretório do arquivo de licença. Para isso basta descomentar as linhas 43 - volumes: e 49- ./license:/var/www/data/license do arquivo docker-compose.yaml. O diretório "license" precisa ter permissão de leitura e escrita. Para mais detalhes, acesse <https://github.com/VaultID/docker-cess>.

No ambiente de produção, o diretório license deve possuir permissões completas de leitura e escrita para garantir o funcionamento adequado.

### Executando

* **Atenção:** Antes de continuar é necessário solicitar o acesso ao repositório de imagens do BirdID Pro diretamente à equipe de integração da Soluti. Esta solicitação deverá ser realizada através do seu gestor de contas na Soluti.

Após concluir e validar a instalação do docker e do docker-compose, salve e configure o arquivo docker-compose.yaml no servidor de escolhido. Pela linha de comando, navegue até a pasta de destino do arquivo e execute:

1 - Docker login.

De posse do usuário e senha fornecidos, execute:

```
docker login harbor.lab.vaultid.com.br
```

&#x20;[![](https://github.com/VaultID/docker-cess/raw/master/images/login.png)](https://github.com/VaultID/docker-cess/blob/master/images/login.png)

2 - Iniciando a aplicação.

OBS: Este comando executa **três etapas sequenciais** para reinicializar completamente o ambiente da aplicação utilizando Docker Compose.

&#x20;docker compose down && rm -f ./license/\* && docker compose up -d --build

1. Parar e remover os containers
2. Remover arquivos de licença
3. Recriar e iniciar os containers

```
docker-compose -f docker-compose.yaml up -d
```

&#x20;[![](https://github.com/VaultID/docker-cess/raw/master/images/dockerup.png)](https://github.com/VaultID/docker-cess/blob/master/images/dockerup.png)

3 - Verificando o estado da aplicação:

```
docker ps 
```

&#x20;[![](https://github.com/VaultID/docker-cess/raw/master/images/dockerps2.png)](https://github.com/VaultID/docker-cess/blob/master/images/dockerps2.png)

4 - Testando a aplicação:

Após a confirmação de execução da aplicação é possível validar o estado da mesma acessando a URL configurada em **cessUrl** ou, diretamente no servidor com a combinação **IP\_SERVIDOR:PORTA\_EXTERNA**.

&#x20;[![](https://github.com/VaultID/docker-cess/raw/master/images/teste.png)](https://github.com/VaultID/docker-cess/blob/master/images/teste.png)

### LOG

É importante acompanhar o log do container para detectar algum erro de configuração ou falha no serviço. Também é possível aumentar o nível de detalhes para debugar eventuais problemas (veja a variável **level** na [Configuração](/workspace/cess/instalacao-e-configuracao.md#configuracoes)).

### Configuração do cluster (Redis) - Docker

> Nesta etapa já pressupõe que o cliente tenha 3 máquinas distintas com o docker instalado.

Será instalado 2 redis (master e slave) em cada máquina.

Como exemplo utilizaremos 3 máquinas com os respectivos IPs: 192.168.0.16, 192.168.0.19 e 192.168.0.20:

Roda os seguintes comandos nos respectivos IPs<br>

> IP \[192.168.0.16]

$ docker run -d --name redis-7000 -p 7000:7000 --network host redis:alpine redis-server --port 7000 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes

$ docker run -d --name redis-7001 -p 7001:7001 --network host redis:alpine redis-server --port 7001 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes

> IP \[192.168.0.19]

$ docker run -d --name redis-7002 -p 7002:7002 --network host redis:alpine redis-server --port 7002 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes

$ docker run -d --name redis-7003 -p 7003:7003 --network host redis:alpine redis-server --port 7003 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes

> IP \[192.168.0.20]

$ docker run -d --name redis-7004 -p 7004:7004 --network host redis:alpine redis-server --port 7004 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes

$ docker run -d --name redis-7005 -p 7005:7005 --network host redis:alpine redis-server --port 7005 --cluster-enabled yes --cluster-config-file nodes.conf --cluster-node-timeout 5000 --appendonly yes

E por fim execute o seguinte comando na máquina 1 (192.168.0.16): $ redis-cli --cluster create 192.168.0.16:7000 192.168.0.16:7001 192.168.0.19:7002 192.168.0.19:7003 192.168.0.20:7004 192.168.0.20:7005 --cluster-replicas 1

Este comando irá criar um master e um slave para cada máquina

Para testar o cluster, acesse o primeiro redis:

$ redis-cli -c -h 192.168.0.16 -p 7000\
&#x20;$ set chave valor

Acesse algum outro redis:

$ redis-cli -c -p 192.168.0.20 -p 7005\
&#x20;$ get chave

É necessário retornar "valor"


---

# 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.vaultid.com.br/workspace/cess/instalacao-e-configuracao.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.
