> 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/sdks/backend-sdk/selphid/installation/installation_instructions_service.md).

# Instalación y despliegue del servicio

## 1. Introducción

El servicio está dockerizado, y existe una imagen docker en un repositorio de Facephi.

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

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

Donde `#VERSION#` es el número de versión concreto que se desea descargar (p. ej. `6.21.0`).

{% hint style="warning" %}
**Importante** A partir de la versión 6.15.0, el Docker de Selphid-sdk se ofrece en tres variantes.

* `facephi-selphid-sdk:#VERSION#`: Servicio completo, como hasta ahora.
* `facephi-selphid-sdk:facial-#VERSION#`: Servicio de extracción facial, autenticación 1:1 y 1:N.
* `facephi-selphid-sdk:liveness-#VERSION#`: Servicio de vida pasivo. Las tres variantes se despliegan de la misma forma, y los endpoints se consumen de la misma manera. La diferencia es que las variantes **facial** y **liveness** no responden a todos los endpoints, únicamente a los relacionados con su funcionalidad.
  {% endhint %}

## 2. docker-compose

Una forma de desplegar el servicio es crear un fichero `docker-compose.yml` con el siguiente contenido, modificando el valor de las variables según sea necesario.

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

Primero, debe crear un directorio de usuario con permisos de lectura y escritura, por ejemplo `/home/user/selphid/config`, y colocar estos dos ficheros:

* El fichero de licencia `license.lic` (obligatorio).
* El fichero de configuración del servicio `config.json` (opcional).

{% hint style="info" %}
En el mismo directorio, el servicio escribirá los ficheros de log.
{% endhint %}

Ejecute el siguiente comando, dentro de la carpeta donde se encuentra el fichero `docker-compose.yml`, para desplegar el servicio:

```
docker compose up
```

## 3. Configuración adicional

Siguiendo los pasos de la **sección 2**, el servicio está listo para arrancar. Si necesita crear volúmenes adicionales para los distintos tipos de activos, puede seguir estas configuraciones adicionales.

### 3.1 Licencia

Puede montar un volumen adicional y definir la variable de entorno `LICENSE_PATH`, en caso de que desee instalar la licencia fuera del directorio de configuración 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` es una carpeta con el `license.lic` y permisos de lectura y escritura. En este ejemplo, `/home/user/license/license.lic`.
{% endhint %}

### 3.2 Servicio

Si necesita configurar el servicio, deberá proporcionar un fichero `config.json`, como se describe en la **sección 2**. Si desea colocar este fichero en un volumen 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` es la ruta al fichero de configuración en el volumen adicional.
{% endhint %}

Si no se especifica ningún `config.json`, se utilizarán estos datos por defecto:

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

La autenticación JWT es opcional y está deshabilitada por defecto. Cuando está habilitada, `GET /api/v1/selphid/health` y `GET /api/v1/selphid/version` permanecen públicos, mientras que el resto de endpoints requieren un JWT HS256 válido con una reclamación `exp` no caducada.

A partir de la versión 6.19.0, se añaden estas variables de entorno, que permiten establecer los 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
```

Los parámetros de configuración de la autenticación JWT solo pueden establecerse en el arranque:

* Configúrelos en `config.json` o en las variables de entorno `FACEPHI_SELPHID_REST_AUTH_*` antes de que se inicie el servicio.
* `GET /api/v1/selphid/config` nunca devuelve esas claves de autenticación JWT.
* `POST /api/v1/selphid/config` rechaza esas claves y no puede utilizarse para modificarlas en tiempo de ejecución.

### 3.3 Ruta de depuración y de uso

Por último, puede especificar un volumen/ruta concreto con permisos de lectura y escritura para la información de depuración del SDK y los datos de uso del SDK, utilizando las variables de entorno `DEBUG_PATH` y `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
```
