> For the complete documentation index, see [llms.txt](https://docs.facephi.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.facephi.com/docs.facephi-pt-br/sdks/backend-sdk/selphid/installation/installation_instructions_service.md).

# Instalação e implantação do serviço

## 1. Introdução

O serviço está conteinerizado, e existe uma imagem Docker em um repositório da Facephi.

```bash
docker login facephicorp.jfrog.io
user: username
pass: token
```

```bash
docker pull facephicorp.jfrog.io/docker-pro-fphi/facephi-selphid-sdk:#VERSION#
```

Onde `#VERSION#` é o número concreto da versão que se deseja baixar (por ex. `6.21.0`).

{% hint style="warning" %}
**Importante** A partir da versão 6.15.0, o Docker do Selphid-sdk é oferecido em três variantes.

* `facephi-selphid-sdk:#VERSION#`: Serviço completo, como até agora.
* `facephi-selphid-sdk:facial-#VERSION#`: Serviço de extração facial, autenticação 1:1 e 1:N.
* `facephi-selphid-sdk:liveness-#VERSION#`: Serviço de Liveness passivo. As três variantes são implantadas da mesma forma, e os endpoints são consumidos da mesma maneira. A diferença é que as variantes **facial** e **liveness** não respondem a todos os endpoints, apenas aos relacionados à sua funcionalidade.
  {% endhint %}

## 2. docker-compose

Uma forma de implantar o serviço é criar um arquivo `docker-compose.yml` com o seguinte conteúdo, modificando o valor das variáveis conforme necessário.

```yaml
version: '3.7'

services:
  selphid-service:
    ports:
      - "8080:8080"
    volumes:
      -  /home/user/selphid/config:/app/selphid-sdk/config
    image: facephicorp.jfrog.io/docker-pro-fphi/facephi-selphid-sdk:#VERSION#
    container_name: facephi-selphid-sdk
```

Primeiro, deve criar um diretório de usuário com permissões de leitura e escrita, por exemplo `/home/user/selphid/config`, e colocar estes dois arquivos:

* O arquivo de licença `license.lic` (obrigatório).
* O arquivo de configuração do serviço `config.json` (opcional).

{% hint style="info" %}
No mesmo diretório, o serviço escreverá os arquivos de log.
{% endhint %}

Execute o seguinte comando, dentro da pasta onde se encontra o arquivo `docker-compose.yml`, para implantar o serviço:

```
docker compose up
```

## 3. Configuração adicional

Seguindo os passos da **seção 2**, o serviço está pronto para iniciar. Se precisar criar volumes adicionais para os diferentes tipos de ativos, pode seguir estas configurações adicionais.

### 3.1 Licença

Você pode montar um volume adicional e definir a variável de ambiente `LICENSE_PATH`, caso deseje instalar a licença fora do diretório de configuração habitual.

```yaml
version: '3.7'

services:
  selphid-service:
    ports:
      - "8080:8080"
    volumes:
      -  /home/user/selphi/config:/app/selphid-sdk/config
      -  /home/user/license:/app/selphid-sdk/license
    image: facephicorp.jfrog.io/docker-pro-fphi/facephi-selphid-sdk:#VERSION#
    environment:
      LICENSE_PATH: /app/selphid-sdk/license
    container_name: facephi-selphid-sdk
```

{% hint style="info" %}
`LICENSE_PATH` é uma pasta com o `license.lic` e permissões de leitura e escrita. Neste exemplo, `/home/user/license/license.lic`.
{% endhint %}

### 3.2 Serviço

Se precisar configurar o serviço, deverá fornecer um arquivo `config.json`, como descrito na **seção 2**. Se desejar colocar este arquivo em um volume adicional:

```yaml
version: '3.7'

services:
  selphid-service:
    ports:
      - "8080:8080"
    volumes:
      -  /home/user/selphi/config:/app/selphid-sdk/config
      -  /home/user/service:/app/selphid-sdk/service
    image: facephicorp.jfrog.io/docker-pro-fphi/facephi-selphid-sdk:#VERSION#
    environment:
      CONFIG_FILE: /app/selphid-sdk/service/config.json
    container_name: facephi-selphid-sdk
```

{% hint style="info" %}
`CONFIG_FILE` é o caminho para o arquivo de configuração no volume adicional.
{% endhint %}

Se nenhum `config.json`, for especificado, estes dados serão usados por padrão:

```json
{
    "port": 8080,                   # Service port number.
    "number_of_threads": 0,         # The number of IO threads, 0 = the number of CPU cores.
    "connection_timeout": 0,        # The lifetime of the connection without read or write.
    "keep_alive_request_number": 0, # Set the maximum number of requests that can be served through one keep-alive connection.
                                    # After the maximum number of requests are made, the connection is closed.
                                    # The default value of 0 means no limit.
    "client_max_body_size": 100,    # The maximum size of the body allowed in the requests in Mb.
                                    # The default value of 100 Mb.
    "logger_path" : "./logs",       # Set the path to store log files.
    "logger_level" : "info",        # Possible values are [trace|debug|info|warning|error|critical|off].
    "logger_rotation" : "daily",    # Possible values are [hourly|daily].
    "logger_max_files" : 0,         # The default value of 0 means no limit.
    "auth_enabled" : false,
    "auth_jwt_secret" : "",
    "auth_accept_authorization_header" : true,
    "auth_accept_api_key_header" : true,
    "auth_api_key_header_name" : "x-api-key"
}
```

A autenticação JWT é opcional e está desabilitada por padrão. Quando está habilitada, `GET /api/v1/selphid/health` e `GET /api/v1/selphid/version` permanecem públicos, enquanto o restante dos endpoints requerem um JWT HS256 válido com uma claim `exp` não expirada.

A partir da versão 6.19.0, são adicionadas estas variáveis de ambiente, que permitem estabelecer os valores de `config.json`:

```
FACEPHI_SELPHID_REST_PORT=8080
FACEPHI_SELPHID_REST_NUMBER_OF_THREADS=2
FACEPHI_SELPHID_REST_CONNECTION_TIMEOUT=100
FACEPHI_SELPHID_REST_KEEP_ALIVE_REQUEST_NUMBER=0
FACEPHI_SELPHID_REST_CLIENT_MAX_BODY_SIZE=100
FACEPHI_SELPHID_REST_LOGGER_PATH=./logs
FACEPHI_SELPHID_REST_LOGGER_FILE_PREFIX=prefix
FACEPHI_SELPHID_REST_LOGGER_LEVEL=info
FACEPHI_SELPHID_REST_LOGGER_ROTATION=daily
FACEPHI_SELPHID_REST_LOGGER_MAX_FILES=0
FACEPHI_SELPHID_REST_AUTH_ENABLED=false
FACEPHI_SELPHID_REST_AUTH_JWT_SECRET=shared-secret
FACEPHI_SELPHID_REST_AUTH_ACCEPT_AUTHORIZATION_HEADER=true
FACEPHI_SELPHID_REST_AUTH_ACCEPT_API_KEY_HEADER=true
FACEPHI_SELPHID_REST_AUTH_API_KEY_HEADER_NAME=x-api-key
```

Os parâmetros de configuração da autenticação JWT só podem ser definidos na inicialização:

* Configure-os em `config.json` ou nas variáveis de ambiente `FACEPHI_SELPHID_REST_AUTH_*` antes que o serviço seja iniciado.
* `GET /api/v1/selphid/config` nunca devolve essas chaves de autenticação JWT.
* `POST /api/v1/selphid/config` rejeita essas chaves e não pode ser usado para modificá-las em tempo de execução.

### 3.3 Caminho de depuração e de uso

Por fim, você pode especificar um volume/caminho específico com permissões de leitura e escrita para as informações de depuração do SDK e os dados de uso do SDK, usando as variáveis de ambiente `DEBUG_PATH` e `USAGE_PATH`:

```yaml
version: '3.7'

services:
  selphid-service:
    ports:
      - "8080:8080"
    volumes:
      -  /home/user/selphi/config:/app/selphid-sdk/config
      -  /home/user/debug:/app/selphid-sdk/debug
      -  /home/user/usage:/app/selphid-sdk/usage
    image: facephicorp.jfrog.io/docker-pro-fphi/facephi-selphid-sdk:#VERSION#
    environment:
      DEBUG_PATH: /app/selphid-sdk/debug
      USAGE_PATH: /app/selphid-sdk/usage
    container_name: facephi-selphid-sdk
```
