> 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/ine/installation/installation_instructions.md).

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

## 1. Instalação e implantação

O serviço está dockerizado, 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-ine-service:#VERSION#
```

Onde `#VERSION#` é o número de versão específico que se deseja baixar (por exemplo, `1.6.0`).

## 2. docker-compose

Uma forma de implantar o serviço é criar um arquivo `docker-compose.yml` com o seguinte conteúdo:

```yaml
version: '3.7'

services:
  ine-service:
    ports:
      - "6982:6982"
    volumes:
      - ./config:/service/config
      - ./logs:/service/logs
    image: facephicorp.jfrog.io/docker-pro-fphi/facephi-ine-service:latest
    container_name: facephi-ine-service
    environment:
      # Protección JWT opcional
      # - FACEPHI_INE_REST_AUTH_ENABLED=true
      # - FACEPHI_INE_REST_AUTH_JWT_SECRET=shared-secret
      # - FACEPHI_INE_REST_AUTH_ACCEPT_AUTHORIZATION_HEADER=true
      # - FACEPHI_INE_REST_AUTH_ACCEPT_API_KEY_HEADER=true
      # - FACEPHI_INE_REST_AUTH_API_KEY_HEADER_NAME=x-api-key
```

Observe os volumes montados no contêiner. Esses volumes são usados para armazenar os arquivos de configuração do serviço e gravar a saída do logger.

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

```bash
  docker compose up -d
```

## 3. Configuração

O arquivo de configuração pode conter as seguintes informações:

```json
{
    "port": 6982,                   # Número de puerto del servicio.
    "number_of_threads": 1,         # El número de hilos de E/S, 1 por defecto; si el valor es 0, el número de hilos es el número de núcleos de la CPU.
    "connection_timeout": 60,       # El tiempo de vida de la conexión sin lectura ni escritura.
    "keep_alive_request_number": 0, # Establece el número máximo de solicitudes que se pueden atender a través de una conexión keep-alive.
                                    # Una vez alcanzado el número máximo de solicitudes, la conexión se cierra.
                                    # El valor por defecto de 0 significa sin límite.
    "client_max_body_size": 50,     # El tamaño máximo del cuerpo permitido en las solicitudes, en Mb.
                                    # El valor por defecto es 100 Mb.
    "logger_path" : "/service",     # La ruta al archivo de log.
    "logger_file_prefix" : "ine",   # El prefijo de archivo usado para los archivos de log rotados.
    "logger_level" : "trace",       # Establece el nivel de log. [trace|debug|info|warn|error|fatal|off]
    "logger_rotation" : "daily",    # Establece la rotación de los logs. [hourly|daily]
    "logger_max_files" : 31,         # Establece el número máximo de archivos de log.
    "auth_enabled": false,           # Habilita o deshabilita la autenticación JWT.
    "auth_jwt_secret": "",          # Secreto compartido usado para validar JWTs HS256.
    "auth_accept_authorization_header": true,
    "auth_accept_api_key_header": true,
    "auth_api_key_header_name": "x-api-key"
}
```

O arquivo de configuração pode ser passado como parâmetro para o serviço. Por padrão, o serviço procurará um arquivo chamado `/service/config/config.json`.

A ordem de precedência da configuração é:

1. Variáveis de ambiente `FACEPHI_INE_REST_*`
2. `config.json`
3. Valores padrão da API definidos pelo serviço antes da inicialização
4. Valores padrão internos de `Rest::Manager`

A autenticação JWT é opcional e está desativada por padrão.

* Os endpoints públicos permanecem acessíveis sem autenticação: `GET /api/v1/health` e `GET /api/v1/version`.
* `POST /api/v1/facial/authentication` requer um JWT válido quando a autenticação JWT está habilitada.
* O serviço não expõe endpoints `GET/POST /config` em tempo de execução, portanto a configuração JWT não pode ser visualizada nem modificada por meio de uma API pública de configuração.

Variáveis de ambiente JWT suportadas:

* `FACEPHI_INE_REST_AUTH_ENABLED`
* `FACEPHI_INE_REST_AUTH_JWT_SECRET`
* `FACEPHI_INE_REST_AUTH_ACCEPT_AUTHORIZATION_HEADER`
* `FACEPHI_INE_REST_AUTH_ACCEPT_API_KEY_HEADER`
* `FACEPHI_INE_REST_AUTH_API_KEY_HEADER_NAME`
