Aller au contenu

Paramètres des cookies

Choisissez, par catégorie, les cookies que vous autorisez. Vous pouvez modifier votre choix à tout moment via Paramètres des cookies, en bas de chaque page. Politique de confidentialité

Nécessaires

Toujours activés

Indispensables pour vous connecter, conserver votre panier et mémoriser vos choix. Ils sont toujours activés.

Quels cookies ?
  • weboke_sessie, weboke_klant, weboke_remember: votre session et le maintien de la connexion
  • weboke_basket: votre panier
  • wkBtwIncl: l'affichage des prix TTC ou HT
  • wok_cookies: votre choix concernant les cookies, 12 mois

Mesure quelle publicité mène à une visite ou à une commande, pour que nous ne payions pas des publicités inefficaces.

Quels cookies ?
  • Google Ads via Google Tag Manager (_gcl_au, _gcl_aw), jusqu'à 90 jours
  • OpenAI Ads, publicités dans ChatGPT
  • wok_aff: le partenaire qui vous a orienté vers nous (programme d'affiliation), 60 jours

4,6

Pays et langue

Chaque pays a son propre site, avec les prix et la TVA de ce pays.

Afficher

Module 9 · 9.4

Recettes : Uptime Kuma et Vaultwarden

Module 9: Docker et docker compose · Temps de lecture : 13 minutes

Objectif pédagogique : À l'issue de cette leçon, vous saurez faire tourner Uptime Kuma et Vaultwarden avec docker compose derrière Caddy, avec https, des inscriptions fermées, une sauvegarde des volumes et une méthode fixe de mise à jour.

Notions clés : conteneur reverse proxy, Caddyfile, https automatique, Uptime Kuma, Vaultwarden, DOMAIN, SIGNUPS_ALLOWED, ADMIN_TOKEN, Argon2, .env, websockets, sauvegarde des volumes, docker compose pull, en-tête personnalisé

Ce que nous construisons

Deux services pratiques sur votre propre serveur, chacun sur son propre sous-domaine :

  • Uptime Kuma sur status.example.com : un outil de surveillance avec une interface web qui garde un œil sur vos sites web, vos ports et vos certificats, et vous envoie une alerte en cas de panne (leçon 8.3). Attention : une surveillance qui tourne sur le même serveur que ce qu'elle surveille ne voit pas que ce serveur entier tombe en panne. Utilisez-la donc pour vos autres sites et services, ou installez-la sur un second serveur.
  • Vaultwarden sur kluis.example.com : une version serveur légère et indépendante, compatible avec les applications et les extensions de navigateur de Bitwarden. Un coffre-fort de mots de passe est un logiciel sensible : ne vous lancez que si vous êtes prêt à le maintenir à jour et à le sauvegarder sérieusement. Utiliser tout simplement le gestionnaire de mots de passe d'un fournisseur est aussi une très bonne option.

Devant eux, nous plaçons Caddy dans un conteneur : il prend en charge les ports 80 et 443, gère lui-même les certificats Let's Encrypt (leçons 7.3 et 7.4) et transmet le trafic au bon conteneur. Uptime Kuma et Vaultwarden ne publient eux-mêmes aucun port (leçon 9.3).

internet ──443──> caddy ──> uptime-kuma:3001
                        └─> vaultwarden:80

Prérequis

  1. Docker Engine avec le plug-in compose (leçon 9.2).
  2. Deux enregistrements DNS qui pointent vers votre serveur, A et AAAA (leçon 7.1) : status.example.com et kluis.example.com.
  3. Les ports 80 et 443 libres sur le serveur. Si un nginx ou un Caddy du système utilise déjà ces ports, le conteneur Caddy ne pourra pas les utiliser. Choisissez alors : soit vous arrêtez le serveur web du système, soit vous lui confiez le rôle de proxy et vous publiez les conteneurs sur 127.0.0.1 (leçon 9.3). Dans cette recette, c'est le conteneur Caddy qui s'en charge.
  4. Dans ufw, ouvrez 80/tcp, 443/tcp et, pour HTTP/3, aussi 443/udp (leçon 5.2). À strictement parler, Docker contourne ufw, mais ainsi l'aperçu de votre pare-feu correspond à la réalité.

Les fichiers

Tout se trouve dans un seul dossier, /srv/diensten/ :

/srv/diensten/
├── compose.yaml
├── Caddyfile
└── .env

compose.yaml

services:
  caddy:
    image: caddy:2
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - caddy-data:/data
      - caddy-config:/config

  uptime-kuma:
    image: louislam/uptime-kuma:2
    restart: unless-stopped
    volumes:
      - uptime-kuma:/app/data

  vaultwarden:
    image: vaultwarden/server:1.37.5
    restart: unless-stopped
    environment:
      DOMAIN: "https://kluis.example.com"
      SIGNUPS_ALLOWED: "true"
      ADMIN_TOKEN: ${VW_ADMIN_TOKEN}
    volumes:
      - ./vw-data:/data

volumes:
  caddy-data:
  caddy-config:
  uptime-kuma:

Avant de commencer, vérifiez quelle est la version la plus récente de Vaultwarden (les releases sur GitHub) et indiquez-la dans le tag. Seul Caddy publie des ports, et ceux-ci doivent être publics. Les volumes caddy-data (certificats), uptime-kuma et le dossier vw-data contiennent tout ce que vous devez conserver.

Caddyfile

{
	email beheer@example.com
}

status.example.com {
	reverse_proxy uptime-kuma:3001
	header {
		X-Weboke-Cursus "jouw-code-uit-de-opdracht"
		defer
	}
}

kluis.example.com {
	reverse_proxy vaultwarden:80
}

Caddy obtient automatiquement un certificat pour les deux noms et redirige http vers https. uptime-kuma et vaultwarden sont les noms de services du fichier compose : Caddy les trouve sur le réseau interne. Le bloc header ajoute un en-tête supplémentaire à chaque réponse de status.example.com ; vous l'utiliserez dans l'exercice pour prouver que votre conteneur proxy tourne. Avec defer, l'en-tête est ajouté une fois que le service en arrière-plan a donné sa réponse. Si vous voulez aussi HSTS et les autres en-têtes de sécurité de la leçon 7.4, placez-les dans le même bloc.

Configurer Vaultwarden en toute sécurité

Quatre points font la différence entre un coffre-fort sûr et un coffre-fort dangereux.

Un : uniquement via https. Le coffre-fort web de Bitwarden utilise la cryptographie du navigateur, et les navigateurs ne la mettent à disposition que sur des pages https. Sans https, il ne fonctionne donc pas correctement, et c'est tant mieux. La documentation de Vaultwarden recommande un reverse proxy pour https, comme Caddy ici. Réglez DOMAIN sur l'adresse https complète.

Deux : inscriptions fermées. Avec SIGNUPS_ALLOWED: "true", toute personne qui trouve la page peut créer un compte sur votre serveur. Démarrez donc, créez immédiatement votre ou vos propres comptes, passez la valeur à "false" et exécutez à nouveau docker compose up -d. Pour ajouter quelqu'un plus tard, utilisez la fonction d'invitation de la page d'administration.

Trois : un jeton d'administration haché. La page d'administration (/admin) est protégée par ADMIN_TOKEN. N'y mettez pas un mot de passe lisible, mais un hachage Argon2. Vous le générez avec Vaultwarden lui-même :

anna@web1:/srv/diensten$ sudo docker compose exec vaultwarden /vaultwarden hash
Password:
Confirm Password:

ADMIN_TOKEN='$argon2id$v=19$m=65540,t=3,p=4$...'

Placez cette ligne dans .env (donc VW_ADMIN_TOKEN='$argon2id$...', avec des guillemets simples) et rendez le fichier lisible uniquement par root : sudo chmod 600 .env. Dans un fichier .env, vous n'avez pas besoin de doubler les caractères $ ; si vous placez le hachage directement sous environment: dans le fichier compose, c'est en revanche nécessaire (chaque $ devient $$), sinon Compose essaie de les remplacer comme des variables. Pour vous connecter à /admin, utilisez le mot de passe que vous avez saisi, pas le hachage. Attention : les paramètres que vous enregistrez dans la page d'administration sont stockés dans vw-data/config.json et priment alors sur les variables d'environnement.

Quatre : sauvegarde et restauration. Tout se trouve dans vw-data : la base de données, les pièces jointes et les clés. Incluez ce dossier dans votre sauvegarde restic (leçon 8.2) et, pour la base de données, suivez les instructions de sauvegarde du wiki de Vaultwarden, afin de ne pas copier un fichier à moitié écrit. Testez la restauration (exercice O8.2) : un coffre-fort sans sauvegarde fonctionnelle met en danger tous vos mots de passe.

Les notifications entre appareils (websockets) passent par le même port dans les versions récentes de Vaultwarden ; Caddy les transmet sans réglage supplémentaire.

Configurer Uptime Kuma

Après docker compose up -d, ouvrez https://status.example.com. Lors de la première visite, Uptime Kuma vous demande de créer un compte administrateur. Faites-le immédiatement : tant que ce compte n'existe pas, toute personne qui trouve la page peut le créer. Si vous ne voulez prendre aucun risque, retirez d'abord le bloc status du Caddyfile, créez le compte via un tunnel SSH (leçon 2.3), puis remettez le bloc en place.

Ajoutez ensuite des sondes : une sonde HTTP pour votre site web, une sonde TCP pour un port, une alerte de certificat et un canal de notification (e-mail, messagerie instantanée ou service de notifications push). Activez aussi l'authentification à deux facteurs dans les paramètres d'Uptime Kuma.

Démarrer et vérifier

anna@web1:/srv/diensten$ sudo docker compose up -d
anna@web1:/srv/diensten$ sudo docker compose ps
NAME                     SERVICE       STATUS          PORTS
diensten-caddy-1         caddy         Up 2 minutes    0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, ...
diensten-uptime-kuma-1   uptime-kuma   Up 2 minutes (healthy)
diensten-vaultwarden-1   vaultwarden   Up 2 minutes (healthy)
anna@web1:/srv/diensten$ sudo docker compose logs caddy | grep -i "certificate obtained"
anna@web1:~$ curl -sI https://status.example.com | grep -i x-weboke
x-weboke-cursus: jouw-code-uit-de-opdracht

Seul Caddy a des ports. Si l'obtention du certificat échoue, les journaux de Caddy en indiquent la raison : le plus souvent, le DNS ne pointe pas encore vers le serveur, ou le port 80 n'est pas joignable (leçon 7.3).

Mettre à jour

Un conteneur n'est pas mis à jour par unattended-upgrades (leçon 4.2). Prévoyez un moment fixe, par exemple toutes les deux semaines :

anna@web1:/srv/diensten$ sudo docker compose pull
anna@web1:/srv/diensten$ sudo docker compose up -d
anna@web1:/srv/diensten$ sudo docker image prune

pull récupère les images les plus récentes dans le tag que vous avez choisi (ainsi caddy:2 reste dans la version 2). Pour Vaultwarden avec un numéro de version, adaptez d'abord le tag après avoir lu les notes de version. Lors d'une nouvelle version majeure, lisez toujours les notes de version : il faut parfois modifier quelque chose dans votre configuration. Avant une mise à jour importante, sauvegardez les volumes.

Suivez aussi les avis de sécurité des développeurs. Une vulnérabilité dans Vaultwarden ou Caddy n'est corrigée chez vous que si vous récupérez la nouvelle version.

En pratique

Cette recette fonctionne sur n'importe quel VPS avec Docker, chez WebOké ou chez un autre fournisseur. Il s'agit d'autonomie : le fournisseur de votre VPS ne gère rien à l'intérieur de vos conteneurs. Prenez un snapshot avant la première mise en place, vous pourrez ainsi expérimenter l'esprit tranquille.

Résumé

  • Un seul fichier compose avec Caddy comme conteneur reverse proxy ; seul Caddy publie les ports 80 et 443, les services ne publient rien.
  • Caddy gère automatiquement les certificats et https, et peut ajouter vos propres en-têtes avec header.
  • Vaultwarden : https obligatoire, DOMAIN sur l'adresse https, inscriptions fermées après la création de votre compte, ADMIN_TOKEN sous forme de hachage Argon2 dans un .env avec les droits 600.
  • Uptime Kuma : créer immédiatement le compte administrateur et activer l'authentification à deux facteurs ; surveillez surtout d'autres serveurs et sites avec.
  • Sauvegardez les volumes et le dossier vw-data, et mettez à jour avec docker compose pull et up -d à un moment fixe.

Quiz

1. Pourquoi Uptime Kuma et Vaultwarden ne publient-ils eux-mêmes aucun port dans cette recette ?



2. Pourquoi le coffre-fort web de Vaultwarden ne fonctionne-t-il pas correctement en simple http ?



3. Vous avez créé votre propre compte Vaultwarden. Quelle est l'étape suivante ?



4. Vous placez le hachage Argon2 du jeton d'administration directement sous environment: dans compose.yaml et obtenez des avertissements sur des variables inconnues. Pourquoi ?



5. Comment mettez-vous ces services à jour ?



Exercice

Exercice Z9.4 : Prouvez que votre conteneur tourne. Récupérez votre code personnel dans l'exercice et placez-le dans le Caddyfile de votre conteneur Caddy en tant qu'en-tête X-Weboke-Cursus pour l'un de vos sous-domaines (comme status.<jouwdomein>). Rechargez Caddy et saisissez le nom d'hôte. Le programme récupère https://<hostnaam>/ et vérifie que le certificat est valide et que l'en-tête contient exactement votre code. Collez en outre la sortie de docker compose ps et indiquez quel service est le seul à publier des ports.

Exercice Z9.4: Prouvez que votre conteneur tourne

Cliquez sur « Afficher mon code » et placez l'en-tête X-Weboke-Cursus avec ce code dans votre Caddyfile, par exemple : header { X-Weboke-Cursus "<code>" }. De l'extérieur, on ne voit pas si quelque chose tourne dans un conteneur ; c'est pourquoi vous collez aussi la sortie de docker compose ps (nous ne la conservons pas).




Nous ne conservons pas ce que vous saisissez ni ce que nous trouvons. Votre navigateur mémorise vos réponses et si l'exercice est réussi. Si vous êtes connecté, nous enregistrons uniquement dans Mes formations que l'exercice était (presque) correct ; vous pouvez aussi le supprimer à cet endroit.

Pour aller plus loin

Un instant…

Configurez vos domaines

Pour chaque domaine, réglez les serveurs de noms, l'association à votre hébergement et le futur titulaire.

Chargement de vos domaines…