> For the complete documentation index, see [llms.txt](https://docs.devolutions.net/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.devolutions.net/server/fr/knowledge-base/how-to-articles/devolutions-server-docker-deployment/advanced-docker-configuration-for-devolutions-server.md).

# Configuration Docker avancée pour Devolutions Server

Configurez Devolutions Server dans Docker avec SQL Server, PostgreSQL ou SQLite, et configurez les certificats TLS, les proxys inverses, les secrets et les mises à jour de version.

Cet article couvre les options de configuration avancées de l'image Docker de Devolutions Server : la référence complète des variables d'environnement, la configuration de base de données pour SQL Server, PostgreSQL et SQLite, les certificats TLS, les paramètres de proxy inverse, le durcissement de la sécurité et les mises à jour de version.

L'image Devolutions Server est publiée sur Docker Hub sous le nom [`devolutions/devolutions-server`](https://hub.docker.com/r/devolutions/devolutions-server). Il s'agit d'une image Linux (Debian) conçue pour `linux/amd64` et `linux/arm64`.

L'image prend en charge les moteurs de base de données suivants :

| Moteur     | Valeur de `DATABASE_TYPE` | Notes                                                                                                                                                                                                                                                |
| ---------- | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| SQL Server | `SqlServer` (par défaut)  | SQL Server local ou un service géré tel qu'Azure SQL Database.                                                                                                                                                                                       |
| PostgreSQL | `PostgreSQL`              | PostgreSQL 14 ou ultérieur, auto-hébergé ou géré, avec un rôle qui possède l'attribut `SUPERUSER`. Pour la préparation côté serveur, consultez [PostgreSQL](/server/fr/getting-started/installation/database-setup/database-instance/postgresql.md). |
| SQLite     | `SQLite`                  | Expérimental. Un seul nœud Devolutions Server actif, sur un stockage local seulement.                                                                                                                                                                |

{% hint style="info" %}
La plupart des courts exemples de cet article utilisent la continuation de ligne Bash (`\`). Dans PowerShell, terminez chaque ligne poursuivie par un accent grave (`` ` ``) à la place.
{% endhint %}

### Référence des variables d'environnement

#### Variables de connexion à la base de données

Chaque variable de la colonne *Alias* est un autre nom pour le même paramètre (nommage propre à Azure). Définissez le nom standard ou son alias, pas les deux : lorsque les deux sont définis, le nom standard est utilisé.

| Variable                            | Alias                     | Requis                 | Par défaut                               | Description                                                                                                                                                                                                                                                                                                                                                                      |
| ----------------------------------- | ------------------------- | ---------------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `DATABASE_TYPE`                     | —                         | Non                    | `SqlServer`                              | Moteur de base de données : `SqlServer`, `PostgreSQL` ou `SQLite`. La valeur n'est pas sensible à la casse, et `MSSQL` et `Postgres` sont acceptés comme alias. Toute autre valeur arrête le conteneur au démarrage.                                                                                                                                                             |
| `DATABASE_HOST`                     | `AZURE_SQL_HOST`          | SQL Server, PostgreSQL | —                                        | Nom d'hôte ou adresse IP du serveur de base de données. SQL Server accepte le format `host,port` (par exemple `sql.example.com,1435`). PostgreSQL accepte le format `host:port` (par exemple `postgres.example.com:5433`), qui remplace `DATABASE_PORT`. Le format `host,port` ne fonctionne pas avec PostgreSQL.                                                                |
| `DATABASE_NAME`                     | `AZURE_SQL_DATABASE`      | SQL Server, PostgreSQL | —                                        | Nom de la base de données de Devolutions Server.                                                                                                                                                                                                                                                                                                                                 |
| `DATABASE_USERNAME`                 | `AZURE_SQL_USERNAME`      | SQL Server, PostgreSQL | —                                        | Compte de base de données utilisé par Devolutions Server. SQL Server : une connexion SQL Server membre de `db_owner` sur la base de données de Devolutions Server. PostgreSQL : un rôle dédié qui possède la base de données de Devolutions Server, avec l'attribut `SUPERUSER` pour créer le schéma de base de données.                                                         |
| `DATABASE_PASSWORD`                 | `AZURE_SQL_PASSWORD`      | SQL Server, PostgreSQL | —                                        | Mot de passe du compte de base de données. Traitez-le comme un secret : utilisez `DATABASE_PASSWORD_FILE` avec les secrets Docker, ou un magasin de secrets tel qu'Azure Key Vault.                                                                                                                                                                                              |
| `DATABASE_PASSWORD_FILE`            | `AZURE_SQL_PASSWORD_FILE` | Non                    | —                                        | Chemin d'un fichier qui contient le mot de passe de la base de données, comme un secret Docker monté à `/run/secrets/dvls_db_password`. Utilisé seulement lorsque ni `DATABASE_PASSWORD` ni `AZURE_SQL_PASSWORD` ne sont définis. Le fichier ne doit pas être vide. Les sauts de ligne de fin sont retirés.                                                                      |
| `DATABASE_PORT`                     | `AZURE_SQL_PORT`          | Non                    | `1433` (SQL Server), `5432` (PostgreSQL) | Port du serveur de base de données. SQL Server : ajouté à `DATABASE_HOST` sous la forme `host,port` lorsqu'il diffère de `1433` et que `DATABASE_HOST` ne contient pas déjà un port. PostgreSQL : doit être un entier entre 1 et 65535.                                                                                                                                          |
| `DATABASE_ENCRYPT`                  | —                         | Non                    | `false`                                  | Définissez à `true` pour chiffrer la connexion à la base de données avec TLS. SQL Server : définit `Encrypt`. PostgreSQL : `false` définit `SSL Mode=Disable` (connexion non chiffrée). `true` définit `SSL Mode=VerifyFull`, ou `SSL Mode=Require` lorsque `DATABASE_TRUST_SERVER_CERTIFICATE=true`. Lu à chaque démarrage du conteneur : transmettez-le à chaque `docker run`. |
| `DATABASE_TRUST_SERVER_CERTIFICATE` | —                         | Non                    | `false`                                  | Définissez à `true`, avec `DATABASE_ENCRYPT=true`, pour accepter le certificat du serveur de base de données sans le valider (par exemple un certificat auto-signé). SQL Server : définit `TrustServerCertificate`. PostgreSQL : sélectionne `SSL Mode=Require` au lieu de `VerifyFull`. Lu à chaque démarrage du conteneur.                                                     |
| `DATABASE_PATH`                     | —                         | SQLite                 | —                                        | Chemin absolu du fichier de base de données SQLite, dans `$DVLS_PATH/App_Data` (par exemple `/opt/devolutions/dvls/App_Data/dvls.sqlite`). Utilisé seulement avec `DATABASE_TYPE=SQLite`.                                                                                                                                                                                        |

{% hint style="info" %}
Avec `DATABASE_TYPE=SQLite`, le conteneur refuse de démarrer lorsque `DATABASE_HOST`, `DATABASE_NAME`, `DATABASE_USERNAME`, `DATABASE_PASSWORD`, `DATABASE_PASSWORD_FILE`, `DATABASE_PORT` ou l'un de leurs alias est défini.
{% endhint %}

#### Configuration du serveur web

| Variable                | Requis | Par défaut                                               | Description                                                                                                                                                                                                                                                                                                                                  |
| ----------------------- | ------ | -------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `HOSTNAME`              | Non    | Nom d'hôte du conteneur (`localhost` lorsqu'il est vide) | Nom d'hôte du serveur, utilisé pour l'URI d'accès, le nom du serveur et le certificat auto-signé. Docker définit `HOSTNAME` au nom d'hôte du conteneur (l'ID du conteneur, sauf si `--hostname` est utilisé), donc transmettez `-e HOSTNAME=<public host name>`. Remplacé par `WEBSITE_HOSTNAME` sur Azure.                                  |
| `WEB_SCHEME`            | Non    | `http`                                                   | Protocole sur lequel le conteneur écoute : `http` ou `https`. Définissez `https` pour activer TLS.                                                                                                                                                                                                                                           |
| `PORT` / `WEB_PORT`     | Non    | `5000`                                                   | Port sur lequel le conteneur écoute, sur toutes les interfaces. Lorsque les deux sont définis, `PORT` est utilisé. `ASPNETCORE_URLS` n'a aucun effet : le conteneur écrit lui-même l'adresse d'écoute.                                                                                                                                       |
| `EXTERNAL_WEB_SCHEME`   | Non    | Valeur de `WEB_SCHEME`                                   | Protocole public lorsque Devolutions Server s'exécute derrière un proxy inverse (par exemple `https` lorsque le proxy gère TLS).                                                                                                                                                                                                             |
| `EXTERNAL_WEB_PORT`     | Non    | Valeur de `PORT` / `WEB_PORT`                            | Port public lorsque Devolutions Server s'exécute derrière un proxy inverse (par exemple `443`). Les ports `443` (HTTPS) et `80` (HTTP) sont omis de l'URI d'accès.                                                                                                                                                                           |
| `EXTERNAL_WEB_HOSTNAME` | Non    | Valeur de `HOSTNAME`                                     | Nom d'hôte public utilisé dans l'URI d'accès, par exemple un domaine personnalisé lorsque `WEBSITE_HOSTNAME` est l'adresse `azurewebsites.net`. Lorsque cette variable est définie, chaque démarrage normal (pas le mode initialisation ni le mode mise à jour) réécrit l'URI d'accès stocké dans la base de données pour qu'il corresponde. |

#### Configuration du certificat TLS

| Variable               | Requis | Par défaut | Description                                                                                                                                                 |
| ---------------------- | ------ | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `TLS_CERTIFICATE_FILE` | Non    | —          | Chemin d'un fichier de certificat PEM monté (par exemple `/opt/devolutions/dvls/certs/server.pem`). Utilisé lorsque le fichier existe.                      |
| `TLS_PRIVATE_KEY_FILE` | Non    | —          | Chemin d'un fichier de clé privée PEM monté (par exemple `/opt/devolutions/dvls/certs/server.key`). Utilisé lorsque le fichier existe.                      |
| `TLS_CERTIFICATE_B64`  | Non    | —          | Contenu du certificat encodé en base64, écrit dans `App_Data/server.pem`. Utilisé lorsque `TLS_CERTIFICATE_FILE` ne pointe pas vers un fichier existant.    |
| `TLS_PRIVATE_KEY_B64`  | Non    | —          | Contenu de la clé privée encodé en base64, écrit dans `App_Data/server.key`. Utilisé lorsque `TLS_PRIVATE_KEY_FILE` ne pointe pas vers un fichier existant. |

{% hint style="info" %}
Si `WEB_SCHEME=https` et qu'aucun certificat ni aucune clé privée n'est fourni, le conteneur génère un certificat auto-signé (valide 5 ans, RSA 2048 bits). Si un seul des deux est fourni, le conteneur s'arrête au démarrage. Utilisez des montages de fichiers ou des variables base64 pour les certificats de production.
{% endhint %}

#### Configuration du mode de fonctionnement

Le conteneur s'exécute dans l'un de trois modes :

| Mode                   | Condition                                                | Comportement                                                                                                                                                                                                                                      |
| ---------------------- | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Exécution (par défaut) | `DVLS_INIT` et `DVLS_UPDATE_MODE` non définis ou `false` | Applique les mises à niveau du schéma de base de données en attente (lorsque `DVLS_DATABASE_UPGRADE_ON_STARTUP=true`), puis démarre Devolutions Server et continue de s'exécuter.                                                                 |
| Initialisation         | `DVLS_INIT=true`                                         | Prépare une nouvelle base de données et son premier administrateur, puis démarre Devolutions Server et continue de s'exécuter.                                                                                                                    |
| Mise à jour            | `DVLS_UPDATE_MODE=true`                                  | Sauvegarde les fichiers de configuration et d'installation, prend un instantané de la base de données pour SQLite seulement, met à niveau le schéma de base de données, restaure la configuration et les dossiers personnalisés, puis se termine. |

{% hint style="info" %}
`DVLS_INIT` et `DVLS_UPDATE_MODE` s'excluent mutuellement. Définir les deux à `true` arrête le conteneur avec une erreur.
{% endhint %}

| Variable                             | Requis | Par défaut                   | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| ------------------------------------ | ------ | ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `DVLS_INIT`                          | Non    | `false`                      | Définissez à `true` pour le premier démarrage sur une nouvelle base de données. Le conteneur crée la base de données si elle n'existe pas (SQL Server et PostgreSQL), crée ou met à niveau le schéma, écrit les paramètres par défaut, les clés de chiffrement et la biclé de la passerelle, crée l'administrateur, puis démarre Devolutions Server. Lorsque `Initialization completed successfully.` apparaît dans les journaux, arrêtez le conteneur et redémarrez-le sans `DVLS_INIT` : une deuxième initialisation échoue, car l'administrateur existe déjà. |
| `DVLS_UPDATE_MODE`                   | Non    | `false`                      | Définissez à `true` pour exécuter le mode mise à jour, puis quitter. Le mode mise à jour ne sauvegarde pas les bases de données SQL Server ni PostgreSQL : sauvegardez-les avant de l'exécuter.                                                                                                                                                                                                                                                                                                                                                                  |
| `DVLS_BACKUP_PATH`                   | Non    | `/tmp/dvls-backup`           | Dossier dans lequel le mode mise à jour copie les fichiers de configuration (`config`) et le dossier d'installation (`installation`). Le dossier par défaut se trouve dans le conteneur : montez un volume pour conserver la sauvegarde. Lorsque cette variable est définie, les instantanés SQLite d'avant la mise à jour y sont aussi stockés (dans `database`) ; sinon, ils sont stockés dans `App_Data/Backups/database`.                                                                                                                                    |
| `DVLS_DATABASE_UPGRADE_ON_STARTUP`   | Non    | `true` (défini dans l'image) | Applique les mises à niveau du schéma de base de données en attente durant un démarrage normal, avant que Devolutions Server accepte les requêtes. Si la mise à niveau échoue, le conteneur ne démarre pas. Accepte seulement `true` ou `false`.                                                                                                                                                                                                                                                                                                                 |
| `DVLS_DATABASE_UPGRADE_LOCK_TIMEOUT` | Non    | `300` (défini dans l'image)  | Nombre maximal de secondes pendant lesquelles un conteneur en démarrage attend le verrou de mise à niveau du schéma détenu par un autre conteneur sur la même base de données. Lorsque l'attente expire, le conteneur ne démarre pas. Entier entre 1 et 2147483.                                                                                                                                                                                                                                                                                                 |
| `DVLS_SKIP_ACCESS_URI_UPDATE`        | Non    | `false`                      | Définissez à `true` pour conserver l'URI d'accès stockée dans la base de données inchangée lorsque `EXTERNAL_WEB_HOSTNAME` est défini.                                                                                                                                                                                                                                                                                                                                                                                                                           |

#### Variables du mode initialisation

Ces variables ne sont utilisées que pendant l'initialisation (`DVLS_INIT=true`) :

| Variable              | Requis | Par défaut         | Description                                                                                                                                            |
| --------------------- | ------ | ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `DVLS_ADMIN_USERNAME` | Non    | `dvls-admin`       | Nom d’utilisateur du compte administrateur créé durant l'initialisation.                                                                               |
| `DVLS_ADMIN_PASSWORD` | Non    | `dvls-admin`       | Mot de passe initial du compte administrateur. Définissez une valeur différente : l'administrateur doit le changer à la première ouverture de session. |
| `DVLS_ADMIN_EMAIL`    | Non    | `admin@<HOSTNAME>` | Adresse courriel du compte administrateur.                                                                                                             |

#### Configuration du système

| Variable                     | Requis | Par défaut                                 | Description                                                                                                                                                                                                                                      |
| ---------------------------- | ------ | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `DVLS_PATH`                  | Non    | `/opt/devolutions/dvls`                    | Chemin racine de l'installation (emplacement de `appsettings.json` et de `App_Data`).                                                                                                                                                            |
| `DVLS_EXECUTABLE_PATH`       | Non    | `/opt/devolutions/dvls/Devolutions.Server` | Exécutable de Devolutions Server démarré par le point d'entrée de l'image.                                                                                                                                                                       |
| `DVLS_TELEMETRY`             | Non    | `true`                                     | Active ou désactive la collecte de télémétrie.                                                                                                                                                                                                   |
| `DVLS_ENCRYPTION_CONFIG_B64` | Non    | —                                          | Configuration de chiffrement encodée en Base64, écrite dans `App_Data/encryption.config` à chaque démarrage. Requise pour conserver les mêmes clés de chiffrement entre les redémarrages, les redéploiements et les instances mises à l'échelle. |
| `DVLS_PG_DUMP_PATH`          | Non    | `pg_dump` sur le `PATH`                    | Chemin complet de l'exécutable `pg_dump` utilisé par la tâche de sauvegarde de données intégrée avec PostgreSQL. L'image ne l'inclut pas.                                                                                                        |
| `DVLS_PG_RESTORE_PATH`       | Non    | `pg_restore` sur le `PATH`                 | Chemin complet de l'exécutable `pg_restore` utilisé pour valider les sauvegardes de données avec PostgreSQL. L'image ne l'inclut pas.                                                                                                            |

#### Configuration de l'accès SSH

| Variable       | Requis                          | Par défaut | Description                                                                                                                                                    |
| -------------- | ------------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `SSH_ENABLED`  | Non                             | `false`    | Active le démon SSH pour le débogage. Activé automatiquement sur Azure App Service, sauf s'il est défini explicitement.                                        |
| `SSH_PORT`     | Non                             | `2222`     | Port d'écoute SSH (publiez-le avec `-p 2222:2222`).                                                                                                            |
| `SSH_PASSWORD` | Oui, lorsque `SSH_ENABLED=true` | `Docker!`  | Mot de passe root pour SSH. La valeur par défaut s'applique seulement lorsque SSH est activé automatiquement sur Azure. Ne doit pas contenir de saut de ligne. |

{% hint style="info" %}
Si `SSH_ENABLED=true` est défini sans `SSH_PASSWORD`, le conteneur refuse de démarrer.
{% endhint %}

#### Variables Azure Web App

Ces variables sont définies automatiquement par Azure App Service :

| Variable              | Défini par | Description                                                                                                                          |
| --------------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| `WEBSITE_HOSTNAME`    | Azure      | Remplace `HOSTNAME` (par exemple `dvls-prod.azurewebsites.net`).                                                                     |
| `WEBSITE_INSTANCE_ID` | Azure      | Active SSH, sauf si `SSH_ENABLED` est défini. Avec `WEBSITE_HOSTNAME`, force `EXTERNAL_WEB_SCHEME=https` et `EXTERNAL_WEB_PORT=443`. |

### Configuration du certificat TLS

#### Certificat autosigné généré automatiquement

Lorsque `WEB_SCHEME=https` est défini sans variables de certificat, le conteneur génère un certificat auto-signé (valide 5 ans, RSA 2048 bits, `CN` et nom alternatif du sujet définis à `HOSTNAME`) :

**Windows (PowerShell) :**

```powershell
docker run -d --name dvls-server `
  -e DATABASE_HOST=your-sql-server `
  -e DATABASE_NAME=dvls `
  -e DATABASE_USERNAME=dvls_user `
  -e DATABASE_PASSWORD='YourPassword!' `
  -e HOSTNAME=localhost `
  -e WEB_SCHEME=https `
  -e PORT=5000 `
  -p 5000:5000 `
  devolutions/devolutions-server:release-20XX.X
```

**macOS/Linux (Bash) :**

```bash
docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e HOSTNAME=localhost \
  -e WEB_SCHEME=https \
  -e PORT=5000 \
  -p 5000:5000 \
  devolutions/devolutions-server:release-20XX.X
```

{% hint style="warning" %}
Utilisez le certificat auto-signé seulement pour le développement et les essais. Les navigateurs affichent un avertissement de sécurité pour celui-ci.
{% endhint %}

#### Fichiers de certificat via un montage de volume

Monter les fichiers de certificat à partir de l'hôte :

**Windows (PowerShell) :**

```powershell
New-Item -ItemType Directory -Force -Path C:\dvls\certs
Copy-Item C:\path\to\server.pem, C:\path\to\server.key -Destination C:\dvls\certs\

docker run -d --name dvls-server `
  -e DATABASE_HOST=your-sql-server `
  -e DATABASE_NAME=dvls `
  -e DATABASE_USERNAME=dvls_user `
  -e DATABASE_PASSWORD='YourPassword!' `
  -e HOSTNAME=devolutions-server.company.com `
  -e WEB_SCHEME=https `
  -e PORT=5000 `
  -e TLS_CERTIFICATE_FILE=/opt/devolutions/dvls/certs/server.pem `
  -e TLS_PRIVATE_KEY_FILE=/opt/devolutions/dvls/certs/server.key `
  -p 5000:5000 `
  -v C:\dvls\certs:/opt/devolutions/dvls/certs:ro `
  devolutions/devolutions-server:release-20XX.X
```

**macOS/Linux (Bash) :**

```bash
mkdir -p /host/certs
cp /path/to/server.pem /host/certs/
cp /path/to/server.key /host/certs/
chmod 600 /host/certs/server.key

docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e HOSTNAME=devolutions-server.company.com \
  -e WEB_SCHEME=https \
  -e PORT=5000 \
  -e TLS_CERTIFICATE_FILE=/opt/devolutions/dvls/certs/server.pem \
  -e TLS_PRIVATE_KEY_FILE=/opt/devolutions/dvls/certs/server.key \
  -p 5000:5000 \
  -v /host/certs:/opt/devolutions/dvls/certs:ro \
  devolutions/devolutions-server:release-20XX.X
```

Exigences relatives au format du certificat :

* Certificat : format PEM (`.pem`, `.crt`).
* Clé privée : format PEM (`.key`, `.pem`).
* Chaîne : incluez les certificats intermédiaires dans le fichier de certificat.

Exemple de fichier de certificat avec chaîne :

```
-----BEGIN CERTIFICATE-----
<Your certificate>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<Intermediate CA certificate>
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
<Root CA certificate>
-----END CERTIFICATE-----
```

#### Certificats encodés en base64

Utilisez des certificats encodés en base64 lorsque vous travaillez avec des systèmes de gestion de secrets (Azure Key Vault, Kubernetes Secrets) :

**Windows (PowerShell) :**

```powershell
$certificate = [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes("C:\path\to\server.pem"))
$privateKey = [System.Convert]::ToBase64String([System.IO.File]::ReadAllBytes("C:\path\to\server.key"))

docker run -d --name dvls-server `
  -e DATABASE_HOST=your-sql-server `
  -e DATABASE_NAME=dvls `
  -e DATABASE_USERNAME=dvls_user `
  -e DATABASE_PASSWORD='YourPassword!' `
  -e HOSTNAME=devolutions-server.company.com `
  -e WEB_SCHEME=https `
  -e PORT=5000 `
  -e TLS_CERTIFICATE_B64="$certificate" `
  -e TLS_PRIVATE_KEY_B64="$privateKey" `
  -p 5000:5000 `
  devolutions/devolutions-server:release-20XX.X
```

**macOS/Linux (Bash) :**

```bash
base64 -w 0 server.pem > server.pem.b64
base64 -w 0 server.key > server.key.b64

docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e HOSTNAME=devolutions-server.company.com \
  -e WEB_SCHEME=https \
  -e PORT=5000 \
  -e TLS_CERTIFICATE_B64="$(cat server.pem.b64)" \
  -e TLS_PRIVATE_KEY_B64="$(cat server.key.b64)" \
  -p 5000:5000 \
  devolutions/devolutions-server:release-20XX.X
```

Sur macOS, utilisez `base64 -i server.pem -o server.pem.b64` au lieu de `base64 -w 0`.

Le certificat et la clé privée sont écrits dans `/opt/devolutions/dvls/App_Data/` et référencés dans la configuration de Devolutions Server.

### Configuration de la base de données

#### Format de la chaîne de connexion

À chaque démarrage, le conteneur construit la chaîne de connexion à la base de données à partir des variables d'environnement et l'écrit dans `appsettings.json` (section `ConnectionStrings`). La chaîne de connexion contient les clés suivantes :

| Clé de la chaîne de connexion (SQL Server) | Clé de la chaîne de connexion (PostgreSQL) | Variable source                                 |
| ------------------------------------------ | ------------------------------------------ | ----------------------------------------------- |
| `Data Source`                              | `Host` et `Port`                           | `DATABASE_HOST`, `DATABASE_PORT`                |
| `Initial Catalog`                          | `Database`                                 | `DATABASE_NAME`                                 |
| `User ID`                                  | `Username`                                 | `DATABASE_USERNAME`                             |
| `Password`                                 | `Password`                                 | `DATABASE_PASSWORD` ou `DATABASE_PASSWORD_FILE` |
| `Encrypt`                                  | `SSL Mode`                                 | `DATABASE_ENCRYPT`                              |
| `TrustServerCertificate`                   | `SSL Mode`                                 | `DATABASE_TRUST_SERVER_CERTIFICATE`             |

Comme la chaîne de connexion est reconstruite à chaque démarrage, transmettez les mêmes variables de base de données à chaque `docker run` : initialisation, exécution et mise à jour.

#### SQL Server

Port par défaut (`1433`), avec `DATABASE_PORT` omis :

```bash
-e DATABASE_HOST=sql.example.com
```

Port non standard, soit dans le nom d'hôte, soit dans une variable distincte :

```bash
-e DATABASE_HOST=sql.example.com,1435
```

```bash
-e DATABASE_HOST=sql.example.com \
-e DATABASE_PORT=1435
```

Azure SQL Database, avec les alias propres à Azure :

```bash
-e AZURE_SQL_HOST=dvls-sql-server.database.windows.net \
-e AZURE_SQL_DATABASE=dvls \
-e AZURE_SQL_USERNAME=dvls_user@dvls-sql-server \
-e AZURE_SQL_PASSWORD='YourPassword!'
```

Avec `DVLS_INIT=true`, une base de données inexistante est créée avec le classement `Latin1_General_CS_AS`. La connexion doit alors avoir l'autorisation de créer des bases de données ; sinon, créez la base de données au préalable.

#### PostgreSQL

Définissez `DATABASE_TYPE=PostgreSQL`. Le port par défaut devient `5432`. Exemple minimal :

```bash
-e DATABASE_TYPE=PostgreSQL \
-e DATABASE_HOST=postgres.example.com \
-e DATABASE_NAME=dvls \
-e DATABASE_USERNAME=dvls_owner \
-e DATABASE_PASSWORD='YourPassword!' \
-e DATABASE_ENCRYPT=true
```

Pour un port non standard, utilisez `DATABASE_PORT=5433` ou `DATABASE_HOST=postgres.example.com:5433`. Avec une adresse IP, définissez le port avec `DATABASE_PORT`. Le format SQL Server `host,port` ne fonctionne pas avec PostgreSQL.

La chaîne de connexion PostgreSQL contient les clés `Host`, `Port`, `Username`, `Password`, `Database` et `SSL Mode`. À l'exécution, Devolutions Server ajoute aussi `Search Path=dbo,public` et `Keep Alive=30` lorsqu'elles sont absentes. Dans `psql`, les tables de Devolutions Server sont en minuscules dans le schéma `dbo` (par exemple `dbo.connections`).

`DATABASE_ENCRYPT` et `DATABASE_TRUST_SERVER_CERTIFICATE` définissent le `SSL Mode` :

| `DATABASE_ENCRYPT`   | `DATABASE_TRUST_SERVER_CERTIFICATE` | `SSL Mode` obtenu | Résultat                                                                            |
| -------------------- | ----------------------------------- | ----------------- | ----------------------------------------------------------------------------------- |
| `false` (par défaut) | Toute valeur                        | `Disable`         | La connexion n'est pas chiffrée.                                                    |
| `true`               | `true`                              | `Require`         | La connexion est chiffrée ; le certificat du serveur n'est pas validé.              |
| `true`               | `false` (par défaut)                | `VerifyFull`      | La connexion est chiffrée ; la chaîne de certificats et le nom d'hôte sont validés. |

{% hint style="warning" %}
Avec les valeurs par défaut, la connexion PostgreSQL n'est pas chiffrée. Définissez `DATABASE_ENCRYPT=true` lorsque la base de données est jointe par un réseau.
{% endhint %}

**Compte de base de données et création**

* Utilisez un rôle dédié propriétaire de la base de données de Devolutions Server. Devolutions Server utilise ce seul rôle propriétaire pour la création du schéma, les mises à niveau du schéma et l'exécution : les rôles d'exécution à privilège minimal offerts avec SQL Server ne s'appliquent pas à PostgreSQL.
* Le rôle doit avoir l'attribut `SUPERUSER` pour créer le schéma de base de données, car la création du schéma modifie les transtypages de PostgreSQL. Le schéma est créé par `DVLS_INIT=true`, ou au démarrage lorsque la base de données est vide. Une fois le schéma existant, le rôle n'a pas besoin de l'attribut : retirez-le avec `ALTER ROLE <role> NOSUPERUSER;`.
* Avec `DVLS_INIT=true`, une base de données inexistante est créée par l'intermédiaire de la base de données de maintenance `postgres`. Le rôle a alors besoin de `CONNECT` sur la base de données `postgres`.

**Sauvegardes de données**

* La tâche de sauvegarde de données intégrée exécute `pg_dump --format=custom` et valide le résultat avec `pg_restore --list`. L'image n'inclut pas ces outils : créez une image dérivée qui installe le paquet client PostgreSQL, ou montez les binaires et définissez `DVLS_PG_DUMP_PATH` et `DVLS_PG_RESTORE_PATH`.
* La version majeure de `pg_dump` doit être égale ou supérieure à la version majeure du serveur PostgreSQL ; sinon, la sauvegarde de données échoue.
* Une sauvegarde de données ne contient pas les clés de chiffrement. Conservez `encryption.config` (ou la valeur `DVLS_ENCRYPTION_CONFIG_B64`) dans une sauvegarde distincte.

#### SQLite

La prise en charge de SQLite est expérimentale. Elle exécute un seul nœud Devolutions Server actif sur un fichier de base de données en stockage local, et ne convient pas à la haute disponibilité, à plusieurs réplicas, ni aux systèmes de fichiers réseau ou distribués (SMB, NFS).

```bash
-e DATABASE_TYPE=SQLite \
-e DATABASE_PATH=/opt/devolutions/dvls/App_Data/dvls.sqlite \
-v dvls-sqlite-data:/opt/devolutions/dvls/App_Data
```

`DATABASE_PATH` doit être un chemin de fichier absolu dans `App_Data`. Persistez tout le dossier `App_Data` sur un volume : il contient le fichier de base de données et la configuration de chiffrement. Un verrou empêche un deuxième conteneur d'utiliser le même fichier de base de données pendant que le premier s'exécute.

#### Connexion chiffrée à la base de données (TLS) <a href="#encrypted-database-connection-tls" id="encrypted-database-connection-tls"></a>

Par défaut, Devolutions Server se connecte à la base de données sans TLS. Si SQL Server impose le chiffrement (par exemple une instance avec ***Force Encryption*** activé), la connexion échoue jusqu'à ce que le chiffrement soit activé du côté client. Si le serveur PostgreSQL exige SSL, la connexion par défaut `SSL Mode=Disable` est refusée. Avec PostgreSQL, `DATABASE_ENCRYPT=true` sélectionne `SSL Mode=VerifyFull`, ou `SSL Mode=Require` lorsque `DATABASE_TRUST_SERVER_CERTIFICATE=true` est aussi défini.

{% hint style="warning" %}
Ces variables sont lues à chaque démarrage du conteneur, pas seulement durant l'initialisation. La chaîne de connexion est régénérée à partir d'elles à chaque démarrage, donc transmettez-les à chaque `docker run` : initialisation, exécution et mise à jour. Les omettre à l'exécution réécrit la chaîne de connexion avec le chiffrement désactivé.
{% endhint %}

| Scénario                                                                               | Variables requises                                                  |
| -------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
| SQL Server ou PostgreSQL avec un certificat approuvé par une autorité de certification | `DATABASE_ENCRYPT=true`                                             |
| SQL Server ou PostgreSQL avec un certificat auto-signé                                 | `DATABASE_ENCRYPT=true` et `DATABASE_TRUST_SERVER_CERTIFICATE=true` |

**Windows (PowerShell) :**

```powershell
$encryptionConfig = Get-Content "$env:TEMP\encryption.config.b64" -Raw

docker run -d --name dvls-server `
  -e DATABASE_HOST=your-sql-server `
  -e DATABASE_NAME=dvls `
  -e DATABASE_USERNAME=dvls_user `
  -e DATABASE_PASSWORD='YourPassword!' `
  -e DATABASE_ENCRYPT=true `
  -e DATABASE_TRUST_SERVER_CERTIFICATE=true `
  -e HOSTNAME=localhost `
  -e WEB_SCHEME=https `
  -e PORT=5000 `
  -e DVLS_ENCRYPTION_CONFIG_B64="$encryptionConfig" `
  -p 5000:5000 `
  devolutions/devolutions-server:release-20XX.X
```

**macOS/Linux (Bash) :**

```bash
docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e DATABASE_ENCRYPT=true \
  -e DATABASE_TRUST_SERVER_CERTIFICATE=true \
  -e HOSTNAME=localhost \
  -e WEB_SCHEME=https \
  -e PORT=5000 \
  -e DVLS_ENCRYPTION_CONFIG_B64="$(cat /tmp/encryption.config.b64)" \
  -p 5000:5000 \
  devolutions/devolutions-server:release-20XX.X
```

{% hint style="warning" %}
Définir `DATABASE_TRUST_SERVER_CERTIFICATE=true` désactive la validation du certificat. Utilisez cette option seulement avec des certificats auto-signés dans des réseaux de confiance. En production, installez un certificat approuvé par une autorité de certification sur le serveur de base de données et définissez seulement `DATABASE_ENCRYPT=true`.
{% endhint %}

#### Authentification de la base de données

Les conteneurs Docker prennent en charge seulement l'authentification par nom d’utilisateur et mot de passe : authentification SQL Server, ou rôle PostgreSQL avec un mot de passe. L'authentification Windows (sécurité intégrée) et l'authentification Microsoft Entra ne sont pas prises en charge. SQLite n'utilise pas d'authentification de base de données ; protégez plutôt l'accès à son volume.

### Configuration du proxy inverse

Lorsque Devolutions Server s'exécute derrière un proxy inverse, un ingress nginx ou Azure App Service, configurez les paramètres d'URL externe :

**Windows (PowerShell) :**

```powershell
docker run -d --name dvls-server `
  -e DATABASE_HOST=your-sql-server `
  -e DATABASE_NAME=dvls `
  -e DATABASE_USERNAME=dvls_user `
  -e DATABASE_PASSWORD='YourPassword!' `
  -e HOSTNAME=devolutions-server.company.com `
  -e WEB_SCHEME=http `
  -e PORT=5000 `
  -e EXTERNAL_WEB_SCHEME=https `
  -e EXTERNAL_WEB_PORT=443 `
  devolutions/devolutions-server:release-20XX.X
```

**macOS/Linux (Bash) :**

```bash
docker run -d --name dvls-server \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e HOSTNAME=devolutions-server.company.com \
  -e WEB_SCHEME=http \
  -e PORT=5000 \
  -e EXTERNAL_WEB_SCHEME=https \
  -e EXTERNAL_WEB_PORT=443 \
  devolutions/devolutions-server:release-20XX.X
```

Paramètres clés :

* `WEB_SCHEME=http` : le conteneur utilise HTTP.
* `EXTERNAL_WEB_SCHEME=https` : l'URL publique utilise HTTPS.
* `EXTERNAL_WEB_PORT=443` : port HTTPS standard, omis de l'URL.
* `HOSTNAME=devolutions-server.company.com` : nom d'hôte public.

Avec ces valeurs, l'URI d'accès est `https://devolutions-server.company.com/`. L'URI d'accès est stockée dans la base de données durant l'initialisation. Pour la changer sur un déploiement existant, définissez `EXTERNAL_WEB_HOSTNAME` : chaque démarrage normal réécrit alors l'URI d'accès stockée à partir de `EXTERNAL_WEB_SCHEME`, `EXTERNAL_WEB_HOSTNAME` et `EXTERNAL_WEB_PORT`. Définissez `DVLS_SKIP_ACCESS_URI_UPDATE=true` pour empêcher cette réécriture.

### Renforcement de la sécurité

#### Gestion des secrets

{% hint style="danger" %}
N'écrivez pas de mots de passe dans les commandes `docker run` ni dans les fichiers compose qui sont stockés ou partagés. Utilisez les secrets Docker, des fichiers d'environnement tenus hors du contrôle de version, ou un magasin de secrets.
{% endhint %}

**Secrets Docker (mode Swarm)**

`DATABASE_PASSWORD_FILE` lit le mot de passe dans le fichier de secret. Il est utilisé seulement lorsque `DATABASE_PASSWORD` n'est pas défini.

**Windows (PowerShell) :**

```powershell
"YourPassword!" | docker secret create dvls_db_password -

docker service create `
  --name dvls-server `
  --secret dvls_db_password `
  -e DATABASE_PASSWORD_FILE=/run/secrets/dvls_db_password `
  ...
```

**macOS/Linux (Bash) :**

```bash
echo 'YourPassword!' | docker secret create dvls_db_password -

docker service create \
  --name dvls-server \
  --secret dvls_db_password \
  -e DATABASE_PASSWORD_FILE=/run/secrets/dvls_db_password \
  ...
```

**Fichiers d'environnement**

Créez un fichier `.env` et gardez-le hors du contrôle de version :

```bash
DATABASE_PASSWORD=YourPassword!
DVLS_ADMIN_PASSWORD=AdminPassword!
```

Transmettez-le au conteneur :

**Windows (PowerShell) :**

```powershell
docker run -d --name dvls-server `
  --env-file .env `
  -e DATABASE_HOST=your-sql-server `
  ...
```

**macOS/Linux (Bash) :**

```bash
docker run -d --name dvls-server \
  --env-file .env \
  -e DATABASE_HOST=your-sql-server \
  ...
```

**Azure Key Vault**

Utilisez ***Managed Identity*** pour récupérer les secrets depuis Key Vault à l'exécution. Consultez [Déploiement de Devolutions Server sur Azure App Service à l'aide d'un conteneur](/server/fr/knowledge-base/how-to-articles/devolutions-server-docker-deployment/devolutions-server-deployment-to-azure-app-service-using-a-container.md) pour plus de détails.

#### Isolation du réseau

Utilisez les réseaux Docker pour isoler Devolutions Server :

**Windows (PowerShell) :**

```powershell
docker network create dvls-network

docker run -d --name dvls-server `
  --network dvls-network `
  -p 127.0.0.1:5000:5000 `
  -e DATABASE_HOST=sql-server `
  ...
```

**macOS/Linux (Bash) :**

```bash
docker network create dvls-network

docker run -d --name dvls-server \
  --network dvls-network \
  -p 127.0.0.1:5000:5000 \
  -e DATABASE_HOST=sql-server \
  ...
```

#### Accès SSH

Désactivez SSH en production, sauf s'il est requis pour le débogage :

```bash
-e SSH_ENABLED=false
```

Si SSH est activé :

* Utilisez un mot de passe long et unique.
* Changez le mot de passe par défaut.
* Restreignez l'accès avec des règles de pare-feu.
* Envisagez l'authentification par clé SSH (exige une image personnalisée).

#### Mises à jour de version

**Étiquetage des versions**

* L'image `devolutions/devolutions-server` est étiquetée par version (par exemple `release-20XX.X`) et par build (par exemple `20XX.X.X.0`). Les étiquettes qui se terminent par `-beta` sont des builds bêta.
* Une étiquette de version pointe toujours vers le dernier build de cette version : l'extraire de nouveau apporte les builds plus récents de la même version. Une étiquette de build fige un build exact.
* Il n'existe pas d'étiquette `latest` : indiquez toujours une étiquette.
* À chaque démarrage normal, le conteneur applique les mises à niveau du schéma de base de données en attente avant d'accepter les requêtes (`DVLS_DATABASE_UPGRADE_ON_STARTUP=true` dans l'image). Le mode mise à jour n'est pas requis pour changer de version.

**Mise à jour vers une nouvelle version**

1. Sauvegardez la base de données : `BACKUP DATABASE` pour SQL Server, `pg_dump --format=custom` pour PostgreSQL. Pour SQLite, exécutez d'abord le mode mise à jour avec la nouvelle étiquette : il prend un instantané du fichier de base de données dont l'intégrité est vérifiée.
2. Extrayez la nouvelle étiquette de l'image :

   ```bash
   docker pull devolutions/devolutions-server:release-20XX.X
   ```
3. Arrêtez et supprimez le conteneur actuel :

   ```bash
   docker stop dvls-server
   docker rm dvls-server
   ```
4. Démarrez un conteneur à partir de la nouvelle étiquette avec les mêmes variables d'environnement :

   ```bash
   docker run -d --name dvls-server \
     -e DATABASE_HOST=your-sql-server \
     -e DATABASE_NAME=dvls \
     -e DATABASE_USERNAME=dvls_user \
     -e DATABASE_PASSWORD='YourPassword!' \
     -e HOSTNAME=localhost \
     -e WEB_SCHEME=https \
     -e PORT=5000 \
     -e DVLS_ENCRYPTION_CONFIG_B64="$(cat /tmp/encryption.config.b64)" \
     -p 5000:5000 \
     devolutions/devolutions-server:release-20XX.X
   ```

   ```powershell
   $encryptionConfig = Get-Content "$env:TEMP\encryption.config.b64" -Raw
   docker run -d --name dvls-server `
     -e DATABASE_HOST=your-sql-server `
     -e DATABASE_NAME=dvls `
     -e DATABASE_USERNAME=dvls_user `
     -e DATABASE_PASSWORD='YourPassword!' `
     -e HOSTNAME=localhost `
     -e WEB_SCHEME=https `
     -e PORT=5000 `
     -e DVLS_ENCRYPTION_CONFIG_B64="$encryptionConfig" `
     -p 5000:5000 `
     devolutions/devolutions-server:release-20XX.X
   ```
5. Vérifiez les journaux de démarrage avec `docker logs dvls-server`. Si la mise à niveau du schéma échoue, le conteneur s'arrête avant d'accepter les requêtes.

Lorsque plusieurs conteneurs partagent la même base de données, un conteneur applique la mise à niveau du schéma pendant que les autres l'attendent, jusqu'à `DVLS_DATABASE_UPGRADE_LOCK_TIMEOUT` secondes. Pour contrôler le moment du changement de schéma, démarrez d'abord un conteneur avec la nouvelle étiquette, puis les autres réplicas.

**Mode mise à jour (facultatif)**

Le mode mise à jour (`DVLS_UPDATE_MODE=true`) met à niveau le schéma de la base de données et se termine, sans démarrer Devolutions Server. Il copie les fichiers de configuration (`appsettings.json`, `web.config`, `encryption.config`) et le dossier d'installation vers `DVLS_BACKUP_PATH`, et prend un instantané de la base de données pour SQLite seulement. Pour SQL Server et PostgreSQL, sauvegardez la base de données avant de l'exécuter. Montez un volume sur `DVLS_BACKUP_PATH` pour conserver la sauvegarde après la fin du conteneur.

**Windows (PowerShell) :**

```powershell
$encryptionConfig = Get-Content "$env:TEMP\encryption.config.b64" -Raw

docker run --rm `
  -e DATABASE_HOST=your-sql-server `
  -e DATABASE_NAME=dvls `
  -e DATABASE_USERNAME=dvls_user `
  -e DATABASE_PASSWORD='YourPassword!' `
  -e DVLS_UPDATE_MODE=true `
  -e DVLS_BACKUP_PATH=/backup `
  -e DVLS_ENCRYPTION_CONFIG_B64="$encryptionConfig" `
  -v dvls-backups:/backup `
  devolutions/devolutions-server:release-20XX.X
```

**macOS/Linux (Bash) :**

```bash
docker run --rm \
  -e DATABASE_HOST=your-sql-server \
  -e DATABASE_NAME=dvls \
  -e DATABASE_USERNAME=dvls_user \
  -e DATABASE_PASSWORD='YourPassword!' \
  -e DVLS_UPDATE_MODE=true \
  -e DVLS_BACKUP_PATH=/backup \
  -e DVLS_ENCRYPTION_CONFIG_B64="$(cat /tmp/encryption.config.b64)" \
  -v dvls-backups:/backup \
  devolutions/devolutions-server:release-20XX.X
```

Une fois le mode mise à jour terminé, démarrez le conteneur d'exécution à partir de la même étiquette.

### Liste de vérification de la sécurité

Consultez [Renforcement de la sécurité de Devolutions Server](/server/fr/getting-started/security-checklist/devolutions-server-security-hardening.md) pour :

* Paramètres des comptes d'administration
* Politiques de mots de passe
* Authentification multifacteur
* Restrictions IP
* Journalisation d'audit
* Paramètres de chiffrement

#### Voir aussi

* [Déployer Devolutions Server avec Docker](/server/fr/knowledge-base/how-to-articles/devolutions-server-docker-deployment.md)
* [Déploiement de Devolutions Server sur Azure App Service à l'aide d'un conteneur](/server/fr/knowledge-base/how-to-articles/devolutions-server-docker-deployment/devolutions-server-deployment-to-azure-app-service-using-a-container.md)
* [PostgreSQL](/server/fr/getting-started/installation/database-setup/database-instance/postgresql.md)
* [Installer Devolutions Server pour Linux](/server/fr/knowledge-base/how-to-articles/install-devolutions-server-for-linux.md)
* [Exigences du système](/server/fr/overview-of-devolutions-server/system-requirements.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.devolutions.net/server/fr/knowledge-base/how-to-articles/devolutions-server-docker-deployment/advanced-docker-configuration-for-devolutions-server.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

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.
