> 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/gateway/fr/getting-started/devolutions-gateway-configuration-in-docker.md).

# Configuration de Devolutions Gateway dans Docker

Exécutez Devolutions Gateway dans Docker avec l'image officielle, configurez-le avec des variables d'environnement et TLS, puis reliez-le à Devolutions Server ou à Devolutions Cloud.

Devolutions Gateway est offert sous forme d'image de conteneur Linux officielle sur Docker Hub : [devolutions/devolutions-gateway](https://hub.docker.com/r/devolutions/devolutions-gateway). Le conteneur se configure entièrement avec des variables d'environnement. À chaque démarrage, son script de point d'entrée écrit le fichier de configuration `gateway.json` à partir de ces variables, puis lance Devolutions Gateway.

{% hint style="warning" %}
Devolutions Server ou Devolutions Cloud est requis pour négocier les sessions par Devolutions Gateway, ainsi qu'une licence Devolutions Gateway. Le conteneur peut aussi exécuter l'application Web autonome sans Devolutions Server ni Devolutions Cloud.
{% endhint %}

### À propos de l'image

* **Nom de l'image** : `devolutions/devolutions-gateway`
* **Étiquettes** : `latest`, et une étiquette par version. Utilisez une étiquette de version en production afin que les mises à niveau soient volontaires.
* **Architectures** : `linux/amd64` et `linux/arm64`. Docker télécharge automatiquement la variante qui correspond à l'hôte.
* **Image de base** : Debian 12 (`bookworm-slim`), avec PowerShell 7 et le [module PowerShell Devolutions Gateway](https://www.powershellgallery.com/packages/DevolutionsGateway) préinstallés. Le script de point d'entrée utilise ce module pour écrire la configuration.
* **Ports exposés** : `7171` (écouteur HTTP ou HTTPS) et `8181` (écouteur TCP).
* **Dossier de configuration dans le conteneur** : `/tmp/devolutions-gateway` (défini par la variable d'environnement `DGATEWAY_CONFIG_PATH`). Ce dossier contient `gateway.json`, la clé du provisionneur, le certificat TLS et, sauf si `RECORDING_PATH` est défini, le dossier `recordings`.
* **Point de terminaison du contrôle de santé** : `/jet/health`.

Les images sont signées avec [Cosign](https://github.com/sigstore/cosign).

### Prérequis

* Un hôte Linux avec Docker Engine (ou tout runtime compatible OCI) et, au choix, Docker Compose.
* Ports `7171` et `8181` (ou les ports de votre choix) ouverts dans le pare-feu de l'hôte.
* Un nom DNS pour Devolutions Gateway que les clients peuvent résoudre, par exemple `gateway.contoso.com`.
* En production, un certificat TLS et sa clé privée au format **PEM** pour ce nom DNS. Le certificat doit respecter les mêmes exigences que sur les autres plateformes (nom de remplacement du sujet et EKU d'authentification serveur). Voir [Configuration de Devolutions Gateway sur Linux](/gateway/fr/getting-started/devolutions-gateway-configuration-on-linux.md#configure-certificates).
* La clé publique de provisionneur de votre instance Devolutions Server ou Devolutions Cloud (le fichier **gateway\_public\_key.pem** ou **provisioner.pem** téléchargé depuis ***Administration*** – ***Devolutions Gateway*** – ***Plus*** – ***Télécharger la clé publique***).
* Devolutions Gateway doit pouvoir résoudre et atteindre les hôtes auxquels il se connecte depuis l'intérieur du conteneur.

### Télécharger l'image

```shell
docker pull devolutions/devolutions-gateway:latest
```

Pour télécharger une version précise, remplacez `latest` par le numéro de version, par exemple `devolutions/devolutions-gateway:<version>`.

### Exécuter un conteneur minimal

Les variables d'environnement qui contiennent des clés et des certificats attendent le **contenu encodé en Base64** du fichier PEM. Sur Linux, encodez un fichier avec `base64 -w0` :

```shell
export PROVISIONER_PUBLIC_KEY_B64=$(base64 -w0 provisioner.pem)
```

{% hint style="info" %}
Sur Windows, utilisez plutôt PowerShell : `[Convert]::ToBase64String([IO.File]::ReadAllBytes("provisioner.pem"))`.
{% endhint %}

La commande suivante démarre Devolutions Gateway avec un écouteur HTTPS sur le port `7171`, un écouteur TCP sur le port `8181` et la clé publique de provisionneur de votre Devolutions Server ou Devolutions Cloud. Comme aucun certificat n'est fourni, le conteneur génère un certificat autosigné pour la valeur de `HOSTNAME` (voir [Configurer TLS](#configure-tls)).

```shell
docker run -d \
  --name devolutions-gateway \
  --restart unless-stopped \
  -p 7171:7171 \
  -p 8181:8181 \
  -e HOSTNAME=gateway.contoso.com \
  -e WEB_SCHEME=https \
  -e PROVISIONER_PUBLIC_KEY_B64="$PROVISIONER_PUBLIC_KEY_B64" \
  -v devolutions-gateway-data:/tmp/devolutions-gateway \
  devolutions/devolutions-gateway:latest
```

{% hint style="warning" %}
Définissez toujours `HOSTNAME` explicitement. Docker définit automatiquement la variable `HOSTNAME` dans chaque conteneur avec le nom d'hôte du conteneur (par défaut, l'ID du conteneur). Si vous ne la remplacez pas, Devolutions Gateway utilise cette valeur comme nom d'hôte, et le certificat autosigné est généré pour elle.
{% endhint %}

Vérifiez que Devolutions Gateway est en cours d'exécution :

```shell
docker logs devolutions-gateway
curl -k https://localhost:7171/jet/health
```

### Utiliser Docker Compose

Le fichier `compose.yaml` suivant exécute Devolutions Gateway avec un écouteur HTTPS, un certificat, la clé publique de provisionneur et un volume nommé pour les données persistantes. Les valeurs Base64 sont lues dans un fichier `.env` placé à côté de `compose.yaml`.

```yaml
services:
  devolutions-gateway:
    image: devolutions/devolutions-gateway:latest
    container_name: devolutions-gateway
    restart: unless-stopped
    ports:
      - "7171:7171"
      - "8181:8181"
    environment:
      HOSTNAME: gateway.contoso.com
      WEB_SCHEME: https
      PROVISIONER_PUBLIC_KEY_B64: ${PROVISIONER_PUBLIC_KEY_B64}
      TLS_CERTIFICATE_B64: ${TLS_CERTIFICATE_B64}
      TLS_PRIVATE_KEY_B64: ${TLS_PRIVATE_KEY_B64}
    volumes:
      - devolutions-gateway-data:/tmp/devolutions-gateway
    healthcheck:
      test: ["CMD", "curl", "-fsk", "https://localhost:7171/jet/health"]
      interval: 30s
      timeout: 5s
      retries: 3

volumes:
  devolutions-gateway-data:
```

Pour créer le fichier `.env` sur Linux :

```shell
cat > .env <<EOF
PROVISIONER_PUBLIC_KEY_B64=$(base64 -w0 provisioner.pem)
TLS_CERTIFICATE_B64=$(base64 -w0 fullchain.pem)
TLS_PRIVATE_KEY_B64=$(base64 -w0 privkey.pem)
EOF
chmod 600 .env
```

Démarrez ensuite le conteneur avec `docker compose up -d`.

### Variables d'environnement

#### Écouteur Web

| VARIABLE              | DESCRIPTION                                                                                                                           | VALEUR PAR DÉFAUT                                  |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- |
| `HOSTNAME`            | Nom d'hôte de Devolutions Gateway. Sert aussi de sujet du certificat autosigné.                                                       | Défini par Docker (voir l'avertissement ci-dessus) |
| `WEB_SCHEME`          | Schéma de l'écouteur Web dans le conteneur : `http` ou `https`.                                                                       | `http`                                             |
| `WEB_PORT` ou `PORT`  | Port de l'écouteur Web dans le conteneur. `PORT` a priorité sur `WEB_PORT`.                                                           | `7171`                                             |
| `EXTERNAL_WEB_SCHEME` | Schéma que les clients utilisent pour atteindre l'écouteur Web, par exemple `https` derrière un proxy inverse qui termine TLS.        | Valeur de `WEB_SCHEME`                             |
| `EXTERNAL_WEB_PORT`   | Port que les clients utilisent pour atteindre l'écouteur Web. Définissez-le lorsque le port hôte publié diffère du port du conteneur. | Valeur de `WEB_PORT`                               |

#### Écouteur TCP

| VARIABLE            | DESCRIPTION                                                         | VALEUR PAR DÉFAUT                                       |
| ------------------- | ------------------------------------------------------------------- | ------------------------------------------------------- |
| `TCP_ENABLED`       | Active l'écouteur TCP (`true` ou `false`).                          | `true`, ou `false` lorsque `WEB_APP_ENABLED` est `true` |
| `TCP_PORT`          | Port de l'écouteur TCP dans le conteneur.                           | `8181`                                                  |
| `EXTERNAL_TCP_PORT` | Port que les clients utilisent pour atteindre l'écouteur TCP.       | Valeur de `TCP_PORT`                                    |
| `TCP_HOSTNAME`      | Nom d'hôte que les clients utilisent pour atteindre l'écouteur TCP. | `*`                                                     |

#### Clés et certificats

| VARIABLE                      | DESCRIPTION                                                                                                                    |
| ----------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| `PROVISIONER_PUBLIC_KEY_B64`  | Clé publique de provisionneur (PEM) encodée en Base64 de Devolutions Server ou Devolutions Cloud.                              |
| `PROVISIONER_PRIVATE_KEY_B64` | Clé privée de provisionneur (PEM) encodée en Base64. Nécessaire seulement si vous générez votre propre biclé de provisionneur. |
| `TLS_CERTIFICATE_B64`         | Certificat TLS (PEM) encodé en Base64. Il peut contenir la chaîne de certificats complète.                                     |
| `TLS_PRIVATE_KEY_B64`         | Clé privée (PEM) encodée en Base64 du certificat TLS.                                                                          |
| `TLS_CERTIFICATE_PASSWORD`    | Mot de passe de la clé privée, si elle est chiffrée.                                                                           |

#### Application Web autonome, enregistrements et journaux

| VARIABLE                 | DESCRIPTION                                                                   | VALEUR PAR DÉFAUT                                                                           |
| ------------------------ | ----------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| `WEB_APP_ENABLED`        | Active l'application Web autonome de Devolutions Gateway (`true` ou `false`). | `false`                                                                                     |
| `WEB_APP_AUTHENTICATION` | Mode d'authentification de l'application Web autonome : `None` ou `Custom`.   | `None`, ou `Custom` lorsque `WEB_APP_USERNAME` et `WEB_APP_PASSWORD` sont tous deux définis |
| `WEB_APP_USERNAME`       | Nom d'utilisateur pour l'authentification `Custom`.                           | Non défini                                                                                  |
| `WEB_APP_PASSWORD`       | Mot de passe pour l'authentification `Custom`.                                | Non défini                                                                                  |
| `RECORDING_PATH`         | Dossier dans le conteneur où les enregistrements de session sont enregistrés. | `/tmp/devolutions-gateway/recordings`                                                       |
| `VERBOSITY_PROFILE`      | Verbosité des journaux : `Default`, `Debug`, `Tls`, `All` ou `Quiet`.         | Non défini                                                                                  |

{% hint style="info" %}
Lorsque le conteneur s'exécute comme Azure Web App for Containers, le nom d'hôte est lu dans `WEBSITE_HOSTNAME`, et le schéma et le port externes sont forcés à `https` et `443`.
{% endhint %}

### Données persistantes

Tout ce que Devolutions Gateway écrit (configuration, clés, certificat et enregistrements) est stocké dans `/tmp/devolutions-gateway` à l'intérieur du conteneur. Sans volume, ces données sont perdues lorsque le conteneur est retiré ou recréé, par exemple durant une mise à niveau. Montez un volume nommé ou un dossier de l'hôte sur `/tmp/devolutions-gateway`, comme dans les exemples ci-dessus. Si `RECORDING_PATH` pointe vers un autre dossier, montez aussi un volume sur ce dossier.

Gardez le comportement suivant à l'esprit lorsque vous utilisez un volume persistant :

* **Les écouteurs, le nom d'hôte et les paramètres de l'application Web autonome sont réécrits à chaque démarrage** à partir des variables d'environnement. Les modifications apportées directement à ces valeurs dans `gateway.json` sont écrasées.
* **Les autres valeurs d'un `gateway.json` existant sont conservées.** Vous pouvez ajouter des paramètres qui n'ont pas de variable d'environnement directement dans le fichier `gateway.json` du volume, puis redémarrer le conteneur. Consultez la [référence de configuration de Devolutions Gateway sur GitHub](https://github.com/Devolutions/devolutions-gateway#configuration) pour les paramètres offerts.
* **La biclé du provisionneur est régénérée à chaque démarrage lorsque `PROVISIONER_PUBLIC_KEY_B64` n'est pas définie.** Transmettez toujours la clé publique de provisionneur de votre Devolutions Server ou Devolutions Cloud dans l'environnement, sinon le lien avec Devolutions Server ou Devolutions Cloud est rompu après un redémarrage.
* **Le certificat TLS est importé de nouveau à chaque démarrage** lorsque `TLS_CERTIFICATE_B64` et `TLS_PRIVATE_KEY_B64` sont définis. Un certificat autosigné n'est généré que lorsque `WEB_SCHEME` est `https` et qu'aucun certificat n'est configuré.

### Configurer TLS

Il y a trois façons de sécuriser l'écouteur Web :

* **Fournir votre propre certificat (recommandé)** : définissez `WEB_SCHEME=https` et transmettez le certificat et la clé privée dans `TLS_CERTIFICATE_B64` et `TLS_PRIVATE_KEY_B64`. Pour renouveler le certificat, mettez à jour les valeurs et recréez le conteneur.
* **Utiliser un certificat autosigné** : définissez `WEB_SCHEME=https` sans fournir de certificat. Le conteneur génère un certificat autosigné valide cinq ans, avec la valeur de `HOSTNAME` comme nom commun. Les clients et Devolutions Server doivent approuver ce certificat. Voir [Configuration de Devolutions Gateway sur Linux](/gateway/fr/getting-started/devolutions-gateway-configuration-on-linux.md#trust-the-self-signed-certificate-on-windows). Utilisez cette option pour les tests seulement.
* **Terminer TLS sur un proxy inverse** : conservez `WEB_SCHEME=http`, définissez `EXTERNAL_WEB_SCHEME=https` (et `EXTERNAL_WEB_PORT` au besoin), et laissez le proxy inverse gérer le certificat. Voir [Proxy inverse](/gateway/fr/knowledge-base/how-to-articles/reverse-proxying.md).

{% hint style="warning" %}
Les WebSockets utilisés par les sessions Web exigent un certificat approuvé par le navigateur. N'exposez pas l'écouteur HTTP directement aux clients en production.
{% endhint %}

### Connecter Devolutions Gateway à Devolutions Server ou à Devolutions Cloud

1. Dans l'interface Web de Devolutions Server ou de Devolutions Cloud, allez à ***Administration*** – ***Devolutions Gateway***.
2. Cliquez sur ***Plus*** – ***Télécharger la clé publique***.
3. Transmettez le contenu encodé en Base64 de ce fichier au conteneur dans `PROVISIONER_PUBLIC_KEY_B64`, puis démarrez ou recréez le conteneur.
4. De retour dans ***Administration*** – ***Devolutions Gateway***, cliquez sur le bouton ***Ajouter*** (***+***) et sélectionnez ***Gateway***.
5. Saisissez l'***URL de Devolutions Gateway***, par exemple `https://gateway.contoso.com:7171`, et le ***nom d'hôte TCP***, par exemple `gateway.contoso.com`. Utilisez le nom d'hôte et les ports externes qu'utilisent les clients, pas les ports internes du conteneur.
6. Cliquez sur ***Tester la connexion***, puis enregistrez.

Pour le détail de chaque paramètre, consultez :

* [Configuration de Devolutions Gateway avec Devolutions Server](/gateway/fr/getting-started/devolutions-server/devolutions-gateway-configuration-with-devolutions-server.md)
* [Configuration de Devolutions Gateway avec Devolutions Cloud](/gateway/fr/getting-started/devolutions-cloud/devolutions-gateway-configuration-with-devolutions-cloud.md)
* [Configuration de Devolutions Gateway dans Remote Desktop Manager](/gateway/fr/getting-started/devolutions-server/devolutions-gateway-configuration-in-remote-desktop-manager.md)

### Exécuter l'application Web autonome

Pour utiliser Devolutions Gateway sans Devolutions Server ni Devolutions Cloud, activez son application Web autonome :

```shell
docker run -d \
  --name devolutions-gateway \
  -p 7171:7171 \
  -e HOSTNAME=gateway.contoso.com \
  -e WEB_SCHEME=https \
  -e WEB_APP_ENABLED=true \
  -e WEB_APP_USERNAME=gatewayadmin \
  -e WEB_APP_PASSWORD='<password>' \
  -v devolutions-gateway-data:/tmp/devolutions-gateway \
  devolutions/devolutions-gateway:latest
```

Ouvrez ensuite `https://gateway.contoso.com:7171` dans un navigateur. Dans ce mode, l'écouteur TCP est désactivé, sauf si `TCP_ENABLED=true` est défini.

{% hint style="danger" %}
Avec `WEB_APP_AUTHENTICATION=None` (la valeur par défaut lorsqu'aucun nom d'utilisateur ni mot de passe n'est défini), toute personne qui peut atteindre l'écouteur Web peut utiliser l'application Web. Définissez toujours `WEB_APP_USERNAME` et `WEB_APP_PASSWORD` lorsque le conteneur est accessible depuis d'autres ordinateurs.
{% endhint %}

### Mettre à niveau Devolutions Gateway

Pour mettre à niveau, téléchargez la nouvelle image et recréez le conteneur. La configuration est conservée si elle est stockée dans un volume, et les clés et le certificat sont importés de nouveau à partir des variables d'environnement.

Avec Docker Compose, changez l'étiquette de version dans `compose.yaml` au besoin, puis exécutez :

```shell
docker compose pull
docker compose up -d
```

Avec `docker run`, téléchargez la nouvelle image, retirez le conteneur et exécutez-le de nouveau avec les mêmes paramètres :

```shell
docker pull devolutions/devolutions-gateway:latest
docker stop devolutions-gateway
docker rm devolutions-gateway
# Run the same docker run command as before
```

{% hint style="info" %}
Les méthodes de mise à jour décrites pour Windows (mise à jour en lot depuis Devolutions Server par Devolutions Agent, ou le script PowerShell de mise à jour automatique) ne s'appliquent pas aux conteneurs. Mettez plutôt à niveau l'image du conteneur.
{% endhint %}

### Limites

* Seules des images de conteneur Linux sont publiées. Il n'existe pas d'image de conteneur Windows, de sorte que les fonctionnalités qui dépendent de Windows, comme le [magasin de certificats Windows](/gateway/fr/knowledge-base/how-to-articles/use-windows-certificate-store-for-devolutions-gateway.md), ne sont pas offertes.
* Le certificat TLS et les clés doivent être fournis au format PEM par des variables d'environnement. Les fichiers PFX ne sont pas pris en charge par ces variables.
* Devolutions Gateway doit résoudre les noms d'hôte cibles depuis l'intérieur du conteneur. Configurez le DNS du conteneur (par exemple avec l'option `--dns` de `docker run`) si les cibles ne peuvent être résolues que par un serveur DNS interne.

### Voir aussi

* [Configuration de Devolutions Gateway sur Linux](/gateway/fr/getting-started/devolutions-gateway-configuration-on-linux.md)
* [Dépannage de Devolutions Gateway](/gateway/fr/knowledge-base/troubleshooting-articles/devolutions-gateway-troubleshooting.md)
* [devolutions/devolutions-gateway sur Docker Hub](https://hub.docker.com/r/devolutions/devolutions-gateway)
* [Point d'entrée du conteneur Devolutions Gateway sur GitHub](https://github.com/Devolutions/devolutions-gateway/tree/master/package/Linux)


---

# 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/gateway/fr/getting-started/devolutions-gateway-configuration-in-docker.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.
