# Ubuntu Server - Docker/portainer/traefik

Solution de gestion de containers.

# Docker - Installation docker + swarm

<table id="bkmrk-difficult%C3%A9%2A-%3Cdescrip" style="border-collapse: collapse; width: 100%; height: 46.8px; border-width: 1px; border-style: hidden;"><colgroup><col style="width: 20%;"></col><col style="width: 80%;"></col></colgroup><tbody><tr style="height: 46.8px;"><td style="height: 46.8px; border: 1px groove rgb(52,73,94);">[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/M0iconfirme-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/M0iconfirme-png.png)  
</td><td style="height: 46.8px; border-width: 1px; background-color: rgb(236,202,250); vertical-align: top;">Difficulté : Confirmé

Notions : docker, container, portainer, docker swarm.

</td></tr></tbody></table>

---

### <span style="color: rgb(52, 73, 94);">**<span style="text-decoration: underline;">I. Introduction</span>**</span>

<p class="callout info">[Introduction à la containerisation](https://docs.labs404.fr/books/cours-it-bts/page/docker-introduction-a-la-containerisation "Docker - Introduction à la "containerisation"")</p>

Cette procédure à pour but de décrire la mise en place d'une infrastructure docker + portainer en standalone et en swarm.

<p class="callout info">plus d'informations sur : [https://docs.docker.com/](https://docs.docker.com/)</p>

<p class="callout danger">**Prérequis** :</p>

- (ici) Ubuntu server 22.04
- 4vcpu
- 4Gb de RAM
- 20Gb disque OS
- disque supplémentaire pour docker (taille dépendante du contenu prévu, prévoir minimum 10Gb)

---

### **<span style="text-decoration: underline;"><span style="color: rgb(52, 73, 94); text-decoration: underline;">II. Installation de docker</span>  
</span>**

<p class="callout warning">**Attention** : Avant toute installation, il est conseillé de mettre à jour son système.</p>

<p class="callout info">**Information** : Un assistant d'installation contenant les instructions sur mesures est disponible ici : [get-docker](https://docs.docker.com/get-docker/)</p>

#### <span style="color: rgb(35, 111, 161);">**2.1 Installer les prérequis**</span>

Tout d’abord, il faut installer les prérequis.

```shell
sudo apt install ca-certificates curl gnupg lsb-release
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/DEHimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/DEHimage-png.png)

#### **<span style="color: rgb(35, 111, 161);">2.2 Installer docker</span>** 

Ajouter la clé des dépôts.

```shell
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/mU9image-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/mU9image-png.png)

Vérifier la présence de la clé avec :

```shell
ls /etc/apt/keyrings/docker.gpg
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/dZVimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/dZVimage-png.png)

Ajouter le dépôt :

```shell
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
```

Lancer ensuite une nouvelle fois :

```shell
apt update
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/2Crimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/2Crimage-png.png)

Installer docker et ses composants avec la commande :

```shell
sudo apt install docker-ce docker-ce-cli containerd.io docker-compose-plugin
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/3Lkimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/3Lkimage-png.png)

Valider et attendre la fin de l'installation.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/l0Timage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/l0Timage-png.png)

<p class="callout success">**Best practice** : Il est conseillé d'utiliser un disque dédié pour docker et de réaliser un point de montage sur "<span style="color: rgb(132,63,161);">***/var/lib/docker***</span>". Pour cela, suivre la procédure : [Ubuntu Server - Ajouter un disque/volume](https://docs.labs404.fr/books/systemes/page/ubuntu-server-ajouter-un-disquevolume-cfdisk "Ubuntu Server - Ajouter un disque/volume") ou [Ubuntu Server - Gérer les volumes avec LVM](https://docs.labs404.fr/books/systemes/page/ubuntu-server-gerer-les-volumes-avec-lvm "Ubuntu Server - Gérer les volumes avec LVM")</p>

<p class="callout info">**Information** : Dans le cadre du déploiement d'un swarm, répéter les opérations ci-dessus sur l'ensemble des nœuds.</p>

<details id="bkmrk-%C3%A9tape-optionnelle---"><summary>étape optionnelle - création du swarm</summary>

Cette étape est optionnelle est n’est nécessaire que dans le cadre de la mise en place d’un cluster. Ou dans le cas de docker d’un <span style="color: rgb(132,63,161);">***<span class="fabric-text-color-mark">SWARM</span>***</span>.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/bJWimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/bJWimage-png.png)

##### ***2.1.1 Initialisation du swarm***

Sur le serveur docker qui sera le master du cluster, Exécuter la commande suivante pour initialiser le swarm.

```shell
docker swarm init --advertise-addr <adresse ip>
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/0yKimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/0yKimage-png.png)

<p class="callout info">Plus de paramètres : [swarm init](https://docs.docker.com/engine/reference/commandline/swarm_init/)  
</p>

Bien noter lors de l'initialisation du swarm la commande qui permettra au workers de joindre le swarm ainsi que le token.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/XkLimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/XkLimage-png.png)

<p class="callout success">**Astuce** : Si cette commande avec le token n’est plus affiché. Il est possible de la récupérer en exécutant sur le manager la commande suivante.  
</p>

```shell
docker swarm join-token worker
```

##### ***2.1.2 Jonction du/des workers*** 

 Pour joindre le swarm, entrer la commande suivante sur les workers.

```shell
docker swarm join --token <token> <ip du master>:<port>
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/CpMimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/CpMimage-png.png)

##### ***2.1.3 Autres opérations*** 

Pour vérifier le status du cluster, utiliser la commande suivante sur un manager.

```shell
docker node ls
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/Wm9image-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/Wm9image-png.png)

Pour quitter le swarm.

```shell
docker swarm leave
```

Puis sur le dernier nœud du cluster :

```shell
docker swarm leave --force
```

</details>---

### <span style="text-decoration: underline;"><span style="color: rgb(52, 73, 94); text-decoration: underline;">III. Pricipes de base</span>  
</span>

<p class="callout info">**Information** : La liste des commandes est disponible ici : [commandes docker](https://docs.docker.com/engine/reference/commandline/cli/)</p>

L'utilisation de docker est assez intuitive une fois que l'on a saisi les bases. Les commandes docker sont assez simples et structurées.

<table id="bkmrk-docker-%3Cobjet%3E-%3Cacti" style="border-collapse: collapse; width: 100%; height: 261.6px;"><colgroup><col style="width: 9.39199%;"></col><col style="width: 30.524%;"></col><col style="width: 45.3501%;"></col><col style="width: 14.7092%;"></col></colgroup><tbody><tr style="height: 29.6px;"><td style="height: 29.6px;">Docker</td><td style="height: 29.6px;">&lt;objet&gt;</td><td style="height: 29.6px;">&lt;action&gt;</td><td style="height: 29.6px;">&lt;nom ou ID&gt;</td></tr><tr style="height: 46.4px;"><td style="background-color: rgb(206,212,217); height: 46.4px;">  
</td><td style="height: 46.4px;">image</td><td style="height: 46.4px;">create</td><td style="background-color: rgb(206,212,217); height: 46.4px;">  
</td></tr><tr style="height: 46.4px;"><td style="background-color: rgb(206,212,217); height: 46.4px;">  
</td><td style="height: 46.4px;">network</td><td style="height: 46.4px;">rm (remove)</td><td style="background-color: rgb(206,212,217); height: 46.4px;">  
</td></tr><tr style="height: 46.4px;"><td style="background-color: rgb(206,212,217); height: 46.4px;">  
</td><td style="height: 46.4px;">service</td><td style="height: 46.4px;">ls (list)</td><td style="background-color: rgb(206,212,217); height: 46.4px;">  
</td></tr><tr style="height: 46.4px;"><td style="background-color: rgb(206,212,217); height: 46.4px;">  
</td><td style="height: 46.4px;">stack</td><td style="height: 46.4px;">prune (delete all unused)  
</td><td style="background-color: rgb(206,212,217); height: 46.4px;">  
</td></tr><tr style="height: 46.4px;"><td style="background-color: rgb(206,212,217); height: 46.4px;">  
</td><td style="height: 46.4px;">volume</td><td style="height: 46.4px;">  
</td><td style="background-color: rgb(206,212,217); height: 46.4px;">  
</td></tr></tbody></table>

exemples :

```shell
docker image ls
```

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/eIqimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/eIqimage-png.png)

Pour les conteneurs, les commandes sont un peu différentes :

**docker ps :** liste les conteneurs

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/rvSimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/rvSimage-png.png)

**docker run &lt;container&gt; :** lance le conteneur

**docker stop &lt;container&gt; :** stoppe le conteneur

#### <span style="color: rgb(35, 111, 161);">***3.1 Manipulation des images***</span>

<p class="callout info">**information** : Les images peuvent être téléchargées depuis dockerhub par exemple : [docker HUB](https://hub.docker.com/)</p>

**docker image pull &lt;nom:tag&gt; :** Pour télécharger une image.

**docker image push &lt;nom:tag&gt; :** Pour pousser une image sur le repo.

**docker image prune :** efface les images non utilisées.

#### <span style="color: rgb(35, 111, 161);">***3.2 Manipulation des volumes***</span>

Les commandes vues plus haut permettent l'essentiel des manipulations.

Il est également bon de savoir les choses suivantes :

- un volume peut être monté sur un ou plusieurs conteneurs simultanément avec des autorisations différentes
- le contenu d'un volume peut être accédé depuis l'hôte docker au même titre qu'un dossier.

#### <span style="color: rgb(35, 111, 161);">***3.3 Manipulation des réseaux***</span>

Les commandes vues plus haut permettent de manipuler les réseaux.

Lors d'une création de réseau, il est possible d'en fixer les propriétés à l'aide des options suivantes :

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/Yqzimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/Yqzimage-png.png)

<p class="callout success">**Astuce** : chaque réseau reconnaît le nom des conteneurs qui y sont affecté comme nom DNS, il est ainsi possible d'adresser un containeur par son nom.</p>

exemple : le stack 'wordpress' contient deux conteneurs. 'wpweb' et 'wpmysql'.

Si les deux conteneurs partagent un réseau, le conteneur 'wpweb' pourra adresser le conteneur de base de donnée avec le nom 'wpmysql'.

---


### <span style="color: rgb(52, 73, 94);">**<span style="text-decoration: underline;">IV. Créer un conteneur ou un service</span>**</span>

#### <span style="color: rgb(35, 111, 161);">***4.1 sur un hôte standalone***</span>

##### **<span style="color: rgb(53, 152, 219);">*4.1.1 créer via commande :*</span>**  


Dans l'exemple de conteneur suivant, il s'agira d'un service web apache sans base de données avec seulement un volume pour les données et une exposition des ports 80 et 443.

```
docker run -d -p 8001:80 -p 4431:443 --name webserver --restart=always -v webserver_data:/var/www/html apache:latest
```

<table id="bkmrk-docker-run-%5Boptions%5D" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 39.3029%;"></col><col style="width: 60.6971%;"></col></colgroup><tbody><tr><td>Docker run \[options\] &lt;image&gt;</td><td>lance le conteneur avec les options spécifiées basé sur l'image &lt;image&gt;  
</td></tr><tr><td>-d  
</td><td>lance le conteneur en arrière plan avec un ID.  
</td></tr><tr><td>-p 8001:80 -p 4431:443  
</td><td>mappe les ports de l'hôte et les redirige sur les 80 et 443 du conteneur  
</td></tr><tr><td>--name  
</td><td>nom du conteneur</td></tr><tr><td>--restart  
</td><td>donne les options de redémarrage du conteneur  
</td></tr><tr><td>-v webserver\_data:/var/www/html  
</td><td>mappe le volume webserver\_data sur le dossier /var/www/html  
</td></tr><tr><td>apache:latest  
</td><td>image à utiliser  
</td></tr></tbody></table>

##### <span style="color: rgb(53, 152, 219);">***4.1.2 créer une image avec un dockerfile :***</span>

pour compiler une image, utiliser la commande :

```bash
docker image build -f <nomdefichier> -t <nom image> .
```


#### <span style="color: rgb(35, 111, 161);">***4.2 sur un swarm***</span>

Sur un swarm, la logique change un peu du fait de pouvoir déclarer un service avec des propriété de déploiement au lieu d'un simple conteneur.

Dans la liste des options supplémentaires, certaines sont notables :

\--constraint : ajoute des contraintes de déploiement ( que sur un nœud manager, que sur les workers, etc... )

\--deployment : ajoute des spécificités au déploiement ( labels, nombre de copies, priorités, etc... )

##### <span style="color: rgb(53, 152, 219);">***4.2.1 Architecture du service :***</span>

La logique change donc par rapport à un déploiement classique, l'on ne parle plus de container directement.

<div drawio-diagram="1871"><img src="https://docs.labs404.fr/uploads/images/drawio/2026-07/drawing-1-1785397771.png" alt=""/></div>

Un Stack deviens un ensemble de services. Qui en fonction de leurs propriétés de déploiement contiennent un ou plusieurs containers.

La définition des propriétés se font donc au niveau du service et non plus au niveau du container.

##### <span style="color: rgb(53, 152, 219);">***4.2.2 Le réseau Overlay***</span>

Idem pour les réseaux, un nouveau type de réseau fait sont apparition, le type "***<span style="color: rgb(132, 63, 161);">overlay</span>***".

Il s'agit d'une encapsulation réseau par dessus la couche 3 pouvant utiliser divers mécanismes afin de créer une topologie virtuelle qui sera partagée entre tous les nœuds du cluster. Ainsi un réseau virtuel ou ( VXLAN ) sera perçu de la même façon depuis tous les hôtes du cluster et les container dans ce réseaux pourrons communiquer ensemble peut importe le nœud sur lequel ils sont situés.

##### <span style="color: rgb(53, 152, 219);">***4.2.2 Les secrets et configurations***</span>

Il devient également possible d'utiliser deux mécaniques supplémentaires jusque là absentes :

- les secrets
- les configs

<span style="text-decoration: underline;">**Les secrets :**</span>

En effet, il peut être nécessaire de partager une information entre les différents conteneurs d'un même service, et ce indépendament du nœud sur lequel il se situe. Cependant, cela veut également dire que cette information doit être propagée à l'ensemble des nœuds.

La plupart du temps, il peut s'agir de données sensibles (mot de passe, clé api, etc...).

Pour répondre à cela, il est possible de créer un "<span style="color: rgb(132, 63, 161);">***secret***</span>".

```
docker secret create [OPTIONS] SECRET [file|-]
```

Cette information sera alors chiffrée et ne sera accessible en clair qu'a l'intérieur des conteneurs qui la demande sous la forme d'un fichier présent dans '<span style="color: rgb(132, 63, 161);">***/run/secrets/&lt;secret\_name&gt;***</span>'

<span style="text-decoration: underline;">**Les configurations :**</span>

Sur le même principe que les secrets, il s'agit de fichiers déclarés sur le swarm qui sera distribué sur les nœuds.

Cependant celui-ci ne sera pas chiffré et restera modifiable.

```
docker config create [OPTIONS] CONFIG [file|-]
```

Il sera monté sur les conteneurs dans '<span style="color: rgb(132, 63, 161);">***/run/configs/&lt;nom\_fichier\_config&gt;***</span>'.

Cela permet de propager une configuration unique à l'ensemble des conteneurs du service. Par exemple des configurations de Vhost apache.

# Portainer - Configuration SSO Oauth avec keycloak

<table id="bkmrk-difficult%C3%A9%2A-%3Cdescrip" style="border-collapse: collapse; width: 100%; height: 46.8px; border-width: 1px; border-style: hidden;"><colgroup><col style="width: 20%;"></col><col style="width: 80%;"></col></colgroup><tbody><tr style="height: 46.8px;"><td style="height: 46.8px; border: 1px groove rgb(52,73,94);">[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/M0iconfirme-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/M0iconfirme-png.png)</td><td style="height: 46.8px; border-width: 1px; background-color: rgb(236,202,250); vertical-align: top;">Difficulté : Confirmé

Notions : Authentification, SSO

</td></tr></tbody></table>

---

### <span style="color: rgb(52, 73, 94);">**<span style="text-decoration: underline;">I. Introduction</span>**</span>

Cette procédure à pour but d'expliquer le paramétrage de l'authentification SSO de portainer avec Keycloak.

---

### <span style="color: rgb(52, 73, 94);">**<span style="text-decoration: underline;">II. Côté Keycloak</span>**</span>

#### **<span style="color: rgb(35, 111, 161);">2.1 Créer le client</span>** 

Se connecter au keycloak et choisir le realm sur lequel ajouter le client portainer.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/tk7image-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/tk7image-png.png)

Cliquer sur '<span style="color: rgb(132,63,161);">***Create client***</span>'

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/4Vtimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/4Vtimage-png.png)

Sélectionner le type '<span style="color: rgb(132,63,161);">***OpenID Connect***</span>'

Générer ou définir un '<span style="color: rgb(132,63,161);">***clientID***</span>'.

<p class="callout info">*Il est possible d'utiliser un générateur afin de générer un e chaîne de 32 caractères. Par exemple : [ici](https://wtools.io/generate-random-password-online).*</p>

<p class="callout success">**Best Practice** *: 32 caractères avec minuscules, majuscules et chiffres.*</p>

Choisir un nom parlant.

Puis faire '<span style="color: rgb(132,63,161);">***Next***</span>'.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/vkhimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/vkhimage-png.png)

Sur la page suivante, activer '<span style="color: rgb(132,63,161);">***Client authentication***</span>' et '<span style="color: rgb(132,63,161);">***Authorization***</span>'.

Vérifier que les cases suivantes sont cochées.

Puis faire '<span style="color: rgb(132,63,161);">***Next***</span>'.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/8Primage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/8Primage-png.png)

Entrer les URL au format suivant (en modifiant les FQND).

Puis faire '<span style="color: rgb(132,63,161);">***Save***</span>'.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/Inlimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/Inlimage-png.png)

#### **<span style="color: rgb(35, 111, 161);">2.2 Préparer la synchro des groupes</span>** 

Afin de pouvoir gérer les droits depuis le keycloak et synchroniser les groupes, aller dans l'onglet '<span style="color: rgb(132,63,161);">***Client scope***</span>'.

Choisir le client scope au nom du client suivi de '<span style="color: rgb(132,63,161);">***-dedicated***</span>'.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/0fCimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/0fCimage-png.png)

Faire '<span style="color: rgb(132,63,161);">***Add Mapper***</span>' puis '<span style="color: rgb(132,63,161);">***By Configuration***</span>'.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/CJ4image-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/CJ4image-png.png)

Choisir '<span style="color: rgb(132,63,161);">***Group Membership***</span>'.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/lUYimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/lUYimage-png.png)

Définir le nom du <span style="color: rgb(132,63,161);">***mapper***</span> en '<span style="color: rgb(132,63,161);">***groups***</span>'.

Définir le Token <span style="color: rgb(132,63,161);">***claim name***</span> en '<span style="color: rgb(132,63,161);">***groups***</span>'.

Vérifier que les fonctions suivantes soit activées / désactivées.

Puis faire '<span style="color: rgb(132,63,161);">***Save***</span>'.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/YEzimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/YEzimage-png.png)

#### **<span style="color: rgb(35, 111, 161);">2.3 Récupérer les URL</span>** 

Pour récupérer les URL, sélectionner le realm et faire '<span style="color: rgb(132,63,161);">***Realm settings***</span>' puis cliquer sur '<span style="color: rgb(132,63,161);">***OpenID Endpoint Configuration***</span>'.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/4Kbimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/4Kbimage-png.png)

Une page s'affiche et permet de récupérer les URL.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/5KVimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/5KVimage-png.png)

---

### <span style="color: rgb(35, 111, 161);">**<span style="text-decoration: underline;">II. Côté Portainer</span>**</span>

Se connecter au Portainer.

Aller dans '<span style="color: rgb(132,63,161);">***Settings --&gt; Authentication***</span>'

Sélectionner '<span style="color: rgb(132,63,161);">***Oauth***</span>'

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/DJ7image-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/DJ7image-png.png)

Activer '<span style="color: rgb(132,63,161);">***Use SSO***</span>' et '<span style="color: rgb(132,63,161);">***Automatic user provisioning***</span>'.

Laisser la <span style="color: rgb(132,63,161);">***Default Team***</span> en '<span style="color: rgb(132,63,161);">***No Team***</span>'.

<p class="callout info">**Note** : Activer 'Hide internal authentication prompt' forcera la page de login SSO et désactivera l'authentification interne. Il sera toutefois possible d'y accéder en ajoutant ***/#!/internal-auth*** à la suite de l'url.</p>

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/Wldimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/Wldimage-png.png)

Activer '<span style="color: rgb(132,63,161);">***Use SSO***</span>' et '<span style="color: rgb(132,63,161);">***Automatic Team membership***</span>'.

Définir les nom des groupes Keycloak à synchroniser et les associer aux groupes du portainer

Définir le groupe administrateur.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/jpmimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/jpmimage-png.png)

Définir les url de configuration comme suit en remplaçant, puis faire '<span style="color: rgb(132,63,161);">***Save***</span>'.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/kbKimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/kbKimage-png.png)

Tout est prêt et la nouvelle page de connexion inclut désormais l'option d'authentification.

[![image.png](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/sZCimage-png.png)](https://docs.labs404.fr/uploads/images/gallery/2026-07/scaled-1680-/sZCimage-png.png)