Filtre actif, cliquez pour en enlever un tag :

Cliquez sur un ou plusieurs tags pour appliquer un filtre sur la liste des notes de type "Journaux" :

Résultat de la recherche (36 notes) :

Mardi 15 septembre 2026

Héberger des open weights chez Scaleway et OVH : modèles, serveurs et coûts #pricing, #llm, #scaleway, #OVH, #selfhosting, #open-weight, #cloud

Après avoir publié ma note "Qu'est-ce que je dois faire signer à mes clients pour être autorisé à analyser leurs données confidentielles avec un LLM ?" je souhaite maintenant identifier les modèles Open Weights que je peux héberger sur les offres GPU Instances de Scaleway et Cloud GPU d'OVH, et à quel coût.

Note : dans ce document, tous les tarifs sont exprimés hors taxes et ont été relevés le 11 septembre 2026.

Version courte

Pour les lecteurs pressés, voici la version courte :

  • MiniMax M2.5 hébergé sur 4x H100 coûte de 7 770 € à 9 322 €/mois en continu, ou de 806 € à 919 €/mois pour 72 h.
  • DeepSeek-V4-Flash-Vision-Exp hébergé sur 4x ou 8x H200 ou 8x B300, coûte de 16 877 € à 43 800 €/mois en continu, ou de 1 664 € à 4 320 €/mois pour 72 h.
  • Ces environnements peuvent confortablement servir environ 32 utilisateurs simultanés, soit environ 200 utilisateurs actifs.

Comment j'ai fait ma sélection de modèle à analyser ?

Pour faire ma sélection de modèle, je me suis basé sur Browse all vLLM recipes et les cookbooks de SGLang, j'ai parcouru toutes les listes et j'ai sélectionné deux modèles aux profils complémentaires : un petit modèle, léger à héberger et que je trouve utile malgré ses limites, et un modèle plus puissant.

Je suis arrivé à la sélection suivante :

Et voici les serveurs requis pour les faire tourner, indiqués dans leurs recettes vLLM :

Les offres GPU de Scaleway et OVH retenues

Provider Nom de l'instance Prix à l'heure Prix par mois
Scaleway H100-SXM-2-80G 6,62 € 4 832 €
Scaleway H100-SXM-4-80G 12,77 € 9 322 €
Scaleway H100-SXM-8-80G 25,33 € 18 491 €
Scaleway B300-SXM-8-288G 60 € 43 800 €
OVH 4x H100 PCIe (80 Go HBM2e) 11,2 € 7 770 €
OVH 4x H200 (141 Go HBM3e) 23,12 € 16 877 €
OVH 8x H200 (141 Go HBM3e) 42 € 30 660 €

Pages :

Offres pour faire tourner DeepSeek-V4-Flash-Vision-Exp ?

Tout d'abord, j'ai observé que DeepSeek-V4-Flash-Vision-Exp (~168 Go, recette vLLM) a pratiquement la même taille que DeepSeek-V4-Flash-0731 (~167 Go, checkpoint fused, recette vLLM), l'écart est de moins de 1 Go pour intégrer les couches vision. Par conséquent, je suppose qu'un serveur qui permet de faire tourner la version DeepSeek-V4-Flash peut faire tourner la version DeepSeek-V4-Flash-Vision-Exp.

J'apporte ici ces précisions car la recette vLLM de DeepSeek-V4-Flash contient plus de hardware validé que celle de vLLM de DeepSeek-V4-Flash-Vision-Exp, qui ne valide un run vision que sur 4xGB200. Le cookbook SGLang documente de son côté un run vérifié sur 4xB200. Toujours dans le cookbook SGLang, l'installation sur 4xH200 est annoncée comme pending, même si des essais communautaires sur cette config existent déjà (avec un bug connu sur les tool calls multi-tours).

D'après mon analyse à l'aide de Sonnet 5 des pages recettes vLLM, des issues GitHub vLLM et d'autres articles trouvés plus largement sur Internet, il est probable que DeepSeek-V4-Flash-Vision-Exp peut charger sur les offres suivantes :

Provider Nom de l'instance Prix à l'heure Prix par mois
Scaleway B300-SXM-8-288G 60 € 43 800 €
OVH 4x H200 23,12 € 16 877 €
OVH 8x H200 42 € 30 660 €

Attention : la recette annonce une context window de 1M de tokens, mais elle est explicite sur ce point — cette valeur est annoncée, non mesurée (le run de référence tourne en 32K) et le KV cache d'un contexte 1M réclame bien plus de mémoire que les poids (~202 Go de VRAM avant KV cache). Ces offres garantissent donc le chargement du modèle, pas le service de 1M de tokens ; le contexte réellement tenable reste à mesurer.

J'ai effectué des recherches pour savoir si le modèle pouvait tourner sur 8x H100. D'après les retours, il peut démarrer mais reste instable et bridé en contexte sur cette génération :

Source Config Contexte testé Statut
#52065 8x H100 80G, TP8+EP, fp8 KV, util 0.90 65 536 (64K) Fonctionne sur vLLM 0.26.0, crash sur 0.27.0 avec DSpark
#51326 8x H100 80G, TP8+EP, util 0.84 Non précisé Sortie corrompue sur 0.26.0, correcte sur 0.25.0

La variante Vision-Exp stocke ses experts MoE en FP4, un format que seuls les GPU Blackwell accélèrent nativement, et ne publie, côté vLLM, aucun run vision en dehors de GB200 (4x). La recette décrit toutefois une stratégie pour des nœuds 8-GPU H200/B200/B300, mais sans run vision vérifié sur ces machines ; son exécution sur H100 reste donc, au mieux, expérimentale et limitée en contexte.

Offres pour faire tourner MiniMax M2.5 ?

D'après mon analyse à l'aide de Sonnet 5 des pages recettes vLLM, des issues GitHub vLLM et d'autres articles trouvés plus largement sur Internet, je pense que MiniMax M2.5 peut tourner avec une context window de 192K de tokens sur les offres suivantes :

Provider Nom de l'instance Prix à l'heure Prix par mois
Scaleway H100-SXM-4-80G 12,77 € 9 322 €
OVH 4x H100 (80 Go HBM2) 11,2 € 7 770 €

Tarifs si les serveurs sont loués seulement sur certaines plages horaires

En théorie, si les GPUs sont disponibles dans les stocks des providers, il est possible de les instancier et de les libérer à la demande.

Je pense que si les volumes des disques des VMs sont sauvegardés, une instance doit pouvoir se lancer en quelques minutes, sinon je pense qu'une instance doit pouvoir être provisionnée de zéro en quelques dizaines de minutes.

Je vais faire quelques estimations en fonction des hypothèses de disponibilité suivantes :

  • 4 jours par semaine, de 14h à 18h (avec 30 min de démarrage) : 4h30 x 4 x 4 = 72h par mois
  • 4 jours par semaine, de 9h à 18h (avec 30 min de démarrage) : 9h30 x 4 x 4 = 152h par mois
  • 5 jours par semaine, de 9h à 18h (avec 30 min de démarrage) : 9h30 x 5 x 4 = 190h par mois
Provider Type de serveur LLM Prix à l'heure 72h / mois 152h / mois 190h / mois
Scaleway 4x H100 MiniMax 12,77 € 919 € 1 941 € 2 426 €
OVH 4x H100 MiniMax 11,2 € 806 € 1 702 € 2 128 €
Scaleway 8x B300 DeepSeek 60 € 4 320 € 9 120 € 11 400 €
OVH 4x H200 DeepSeek 23,12 € 1 664 € 3 514 € 4 392 €
OVH 8x H200 DeepSeek 42 € 3 024 € 6 384 € 7 980 €

Attention toutefois, il est nécessaire de passer par le support de Scaleway pour accéder aux instances B300 :

Peut-être qu'il n'est pas possible de louer ce type de machine avec une totale liberté, ce que je pourrais comprendre pour du matériel (8xB300) que Sonnet 5 estime à l'achat entre 300 K€ et 500 K€ pour un serveur complet de 8 GPU.

Estimation du nombre d'utilisateurs simultanés et du débit en tokens par seconde ?

vLLM et SGLang documentent des méthodes de calcul et de benchmark pour faire ce genre d'estimation, par exemple : Parallelism and Scaling, Benchmark CLI, vllm bench serve, Benchmark and Profiling, Bench Serving Guide. Mais je n'ai pas voulu me lancer en profondeur dans ce sujet, d'autant plus que j'ai l'impression que pour obtenir des informations concrètes il est nécessaire de lancer des outils sur l'environnement installé sur le serveur.

À la place, j'ai préféré prendre un raccourci et me baser sur les mesures que j'ai trouvées sur des pages du site Lambda : How to deploy DeepSeek-V4-Flash on Lambda et How to deploy MiniMax M2.5 on Lambda.

Je ne vais pas entrer dans les détails, mais voici les mesures pour DeepSeek-V4-Flash pour 32 utilisateurs en parallèle avec des prompts de 8192 tokens en entrée :

Backend Hardware Par utilisateur TTFT moyen ITL moyen
SGLang 8x B200 (FP4+FP8 natif) 38 tok/s 1 701 ms 66 ms
SGLang 8x H100 (FP8 quantifié) 39 tok/s 2 463 ms 60 ms
vLLM 8x B200 (FP4+FP8 natif) 46 tok/s 1 452 ms 20 ms

La même chose pour MiniMax M2.5, toujours pour 32 utilisateurs :

Backend Hardware Par utilisateur TTFT moyen ITL moyen
SGLang 2x B200 28 tok/s 3 091 ms 36 ms
SGLang 4x H100 27 tok/s 13 131 ms 27 ms

Voici comment je lis ces chiffres :

  • TTFT (Time To First Token) : délai avant le premier token affiché à l'écran.
  • ITL (Inter-Token Latency) : écart entre deux tokens consécutifs pendant le decode.
  • Le débit par utilisateur (27 à 46 tok/s) dépasse la lecture humaine (5 à 10 tok/s), donc l'expérience est confortable. Cette vitesse vaut aussi pour les tokens de réflexion.

La config MiniMax 4xH100 est exactement celle que j'ai retenue chez Scaleway et OVH. Le benchmark s'applique donc directement, contrairement à DeepSeek où Lambda mesure du 8-GPU B200/H100 alors que je vise du 4x ou 8x H200.

Conclusion, en me basant sur ces mesures, je peux espérer qu'avec ces serveurs, l'expérience d'utilisation de ces modèles soit agréable pour 32 utilisateurs en simultané.
C'est un ordre de grandeur : avec DeepSeek, j'ai estimé qu'en réalité un nœud peut servir environ 200 utilisateurs actifs, puisque personne n'envoie de requêtes en continu.

Jeudi 10 septembre 2026

Qu'est-ce que je dois faire signer à mes clients pour être autorisé à analyser leurs données confidentielles avec un LLM ? #llm, #rgpd, #droit, #security, #cloud-act, #secret-industriel, #selfhosting, #cloud-provider

Dernièrement, un ami m'a demandé : « qu'est-ce que je dois faire signer à mes clients pour être autorisé légalement à analyser leurs données confidentielles à l'aide d'un LLM, en fonction des types d'hébergement qui s'offrent à moi ? ».

Il travaille dans une entreprise sous-traitante industrielle. Contrairement à ma note du mois de juin, cette fois il ne s'agit pas de Données de santé (DDS), ni de PII, mais de secrets industriels. D'après ce que j'ai compris, le sujet est surtout contractuel.

Pour la suite de cette note, j'appelle Verdier Industries (nom fictif) l'entreprise de mon ami, afin d'incarner mes propos.

Dans cette note, je veux être très pratique : je souhaite générer des exemples de documents légaux à faire signer aux clients de Verdier Industries en fonction des options suivantes :

  • a. LLM en SaaS hors UE
  • b. LLM en SaaS en Europe hors France
  • c. LLM en SaaS en France
  • d. LLM installé sur une machine virtuelle avec GPU, louée chez Scaleway, OVH, etc.
  • e. LLM installé sur un serveur physique dans ses locaux

Idéalement, je souhaite pouvoir facilement comparer ces documents légaux et analyser l'impact que cela aura sur la relation commerciale.
Lesquels risquent de faire peur à ses clients ou au contraire de les rassurer.

Avant d'entrer dans le détail, une précision sur le terme « accès à un LLM ». Si je simplifie, un LLM s'utilise de deux façons très différentes :

  • via une interface de chat, dans un navigateur ou une application : c'est le cas de ChatGPT, Claude, Le Chat (Mistral AI), etc. Une personne écrit un message, le modèle répond. Ces noms désignent des interfaces de chat, pas le modèle qui est derrière. Les modèles portent d'autres noms.
  • via une API : une sorte de porte d'entrée technique qui permet à un logiciel d'envoyer des demandes au modèle automatiquement, sans qu'un humain tape dans une fenêtre de chat. Quelques exemples de modèles connus au mois de septembre 2026 : GPT-5.6 Sol, Claude Sonnet 5, DeepSeek 4.1 Flash.

Dans cette note, je ne traite que du second cas, l'accès par API.
La raison : c'est le modèle LLM qui est très difficile à héberger soi-même, pas l'interface de chat.
Un LLM a besoin de serveurs puissants, équipés de GPU coûteux. Une fois qu'on dispose d'un accès au modèle, héberger une interface de chat comme Open WebUI ou LibreChat est plutôt facile, car ces services fonctionnent sur des machines modestes.

Autrement dit, les cinq options ci-dessous décrivent surtout où et comment on accède au modèle, pas comment on l'affiche à l'écran.

Une dernière précision : cette note traite uniquement des questions légales. Je compte publier une autre note pour tout ce qui concerne les estimations de coût d'hébergement pour chacune de ces options.

Je détaille les cinq options d'accès à un LLM

J'ai fait le choix de découper les offres commerciales réellement disponibles pour chacune de ces options par localisation du traitement des données, et non pas par juridiction du fournisseur.

J'ai indiqué la juridiction du fournisseur dans le tableau de synthèse en fin de section. Je tiens à préciser que cette question de juridiction n'est pas anecdotique pour les clients.

Solutions SaaS

Un service SaaS, ici, veut dire que le modèle est fourni et exécuté par un tiers : les données de Verdier Industries et de ses clients partent chez le fournisseur, qui renvoie une réponse. Contrairement aux solutions IaaS, Verdier Industries n'a donc pas besoin d'un administrateur système, interne ou externe, pour gérer le serveur qui fait tourner le modèle, ni pour s'occuper du modèle.

LLM en SaaS hors UE (a)

Lieu de traitement des données : hors de l'Union européenne.

Les offres les plus courantes en API directe chez des producteurs de LLM sont :

On trouve aussi des AI providers comme Deepinfra ou Together AI.

LLM en SaaS en Europe hors France (b)

Lieu de traitement des données : dans l'UE, mais le fournisseur n'est pas français.

Côté américain, l'endpoint européen d'OpenAI traite les données en Irlande (Dublin). Attention, le contrat reste conclu avec une entité américaine : OpenAI reste donc soumis au Cloud Act.

On y trouve aussi des acteurs européens comme :

mais ces deux acteurs offrent un accès seulement à des modèles peu puissants.

LLM en SaaS en France (c)

Lieu de traitement des données : en France.

Les offres portées par une entité française sont :

En septembre 2026, Mistral AI et OVHcloud ne proposent que des modèles très peu puissants, bien loin derrière GLM-5.2 ou DeepSeek V4 Flash 0731 proposé par Scaleway.

Les acteurs américains peuvent aussi traiter dans des data centers en France, à condition de choisir explicitement un déploiement mono-région :

Pour tous ces acteurs, le contrat reste conclu avec une entité américaine : ils restent donc soumis au Cloud Act.

Solutions IaaS en France (d)

Une machine virtuelle avec GPU louée, c'est de l'IaaS : seule l'infrastructure est louée, le modèle LLM est installé et administré par un informaticien administrateur système de Verdier Industries. Le fournisseur n'a donc pas accès à l'OS de la machine virtuelle, donc pas aux données traitées.

Nuance : sur une machine virtuelle, l'hébergeur contrôle l'hyperviseur et pourrait en théorie accéder à la mémoire de la VM, ce qui n'est pas le cas sur un serveur bare metal.

Sur site, un serveur dans les locaux de Verdier Industries (e)

Le serveur est dans les locaux de Verdier Industries : aucun tiers n'intervient, ni pour la machine, ni pour le modèle.

L'informaticien administrateur système de Verdier Industries doit prendre en charge l'installation, sur ce serveur, de logiciels comme vLLM, Ollama ou llama.cpp permettant d'instancier des LLM.

À ce coût matériel, DeepSeek V4 Flash me dit qu'il faut ajouter la facture d'électricité : un serveur 8x H100 ou H200 consomme de l'ordre de 10 kW au niveau informatique et 14 kW au niveau de l'installation, refroidissement inclus, soit de l'ordre de 15 000 à 30 000 € par an à pleine charge selon le prix du kWh.

Concrètement, un tel serveur ne peut pas être placé dans une pièce de bureaux : il faut une alimentation électrique dédiée, un refroidissement dimensionné et une pièce isolée acoustiquement.

Tableau de synthèse

Option Fournisseur Pays de l'entité Datacenter Résidence UE Exposition CLOUD Act
SaaS hors UE OpenAI États-Unis États-Unis Non Oui
SaaS hors UE Anthropic États-Unis États-Unis Non Oui
SaaS hors UE Google États-Unis États-Unis Non Oui
SaaS hors UE Deepinfra États-Unis États-Unis Non Oui
SaaS hors UE Together AI États-Unis États-Unis Non Oui
SaaS Europe hors France OpenAI États-Unis UE (Irlande) Oui Oui
SaaS Europe hors France IONOS Allemagne UE Oui Non
SaaS Europe hors France STACKIT Allemagne UE Oui Non
SaaS en France Mistral AI France France Oui Non
SaaS en France Scaleway France France Oui Non
SaaS en France OVHcloud France France Oui Non
SaaS en France AWS États-Unis France Oui Oui
SaaS en France Microsoft États-Unis France Oui Oui
SaaS en France Google États-Unis France Oui Oui
SaaS en France Together AI États-Unis France Oui Oui
IaaS Scaleway France France Oui Non
IaaS OVHcloud France France Oui Non
IaaS Outscale France France Oui Non
IaaS Cloud Temple France France Oui Non
IaaS Together AI États-Unis France Oui Oui
IaaS AWS États-Unis France Oui Oui
IaaS Microsoft États-Unis France Oui Oui
IaaS Google États-Unis France Oui Oui
Sur site Auto-hébergé Locaux de Verdier Industries Oui Non

Les 6 situations contractuelles

À partir de toutes les options d'hébergement d'un LLM listées précédemment, voici la liste de toutes les situations contractuelles.
Le classement va du plus simple à opérer (SaaS hors UE) au plus difficile (serveur sur site).

Cas Option Exposition des données à un tiers Transfert hors UE Cloud Act
1 (a) SaaS hors UE Oui Oui Oui
2 (b/c) SaaS datacenter en UE ou FR, entité US oui Non Oui
3 (b/c) SaaS datacenter en UE ou FR, entité UE oui Non Non
4 (d) IaaS US avec datacenter en FR non Non Oui
5 (d) IaaS FR avec data center en FR non Non Non
6 (e) sur site aucun tiers Non Non

Liste des démarches administratives à effectuer pour chaque situation contractuelle

Je pars de la situation suivante : Verdier Industries a déjà 50 clients sous contrat, il décide de réaliser les démarches légales auprès de ses clients afin d'être autorisé à envoyer des données confidentielles de ses clients à son LLM à travers la solution qu'il a retenue. Quels sont les documents à produire, envoyer au client, faire signer, etc.

Hypothèse générale : les contrats clients interdisent la divulgation des données confidentielles à un tiers sans accord écrit. Un avenant signé est donc nécessaire.

J'ai dressé la liste des étapes de ces procédures administratives avec l'aide de DeepSeek V4.1 Flash.

Cas 1 - SaaS hors UE

Procédure pas à pas :

  1. Verdier Industries demande à son fournisseur (par exemple OpenAI) les documents suivants et les rassemble :
    • son accord de confidentialité ;
    • son engagement de non-entraînement et de rétention zéro ;
    • son DPA (Data Processing Agreement, accord de traitement des données), si données personnelles ;
    • ses CCT (Clauses Contractuelles Types), si données personnelles ;
    • la liste de ses sous-traitants ultérieurs ;
    • ses certifications et attestations de sécurité : SOC 2 Type II (attestation) et ISO/IEC 27001 (certification), et le cas échéant ISO/IEC 27017, 27018, 27701 et 42001, SecNumCloud ou HDS.
  2. Verdier Industries rédige un avenant type au contrat client, structuré en articles :
    • article 1 : autorisation de divulgation des données à un tiers ;
    • article 2 : confidentialité ;
    • article 3 : acceptation du risque Cloud Act ;
    • article 4, si données personnelles : autorisation de sous-traitance (article 28.2 du RGPD) et annexe des CCT.
  3. Verdier Industries joint à l'avenant les documents obtenus à l'étape 1.
  4. Verdier Industries envoie le dossier à chaque client.
  5. Le client signe l'avenant et le renvoie.
  6. Verdier Industries archive l'avenant signé et ses pièces jointes par client.

Selon ce que prévoit le contrat client pour le RGPD :

  • Si le contrat contient une autorisation générale, par exemple : « Le client autorise Verdier Industries à recourir à des sous-traitants ultérieurs. Verdier Industries informe le client par écrit au moins 30 jours à l'avance, et le client peut s'opposer à cette modification. » Alors, pour le RGPD, Verdier envoie une simple notification, et si le client ne s'oppose pas dans les 30 jours, le nouveau sous-traitant est accepté, sans signature.
  • Si le contrat contient une autorisation spécifique, par exemple : « Verdier Industries ne peut confier les données à un sous-traitant ultérieur qu'après accord écrit préalable du client. » Alors Verdier doit faire signer l'avenant pour le RGPD aussi.
  • Dans les deux cas, ces clauses ne couvrent ni les secrets industriels ni le risque Cloud Act : pour ces deux points, l'avenant doit être signé.

Cas 2 - SaaS datacenter en UE ou FR, entité US

Les données sont traitées dans l'UE, mais le fournisseur est une entité américaine : il reste soumis au Cloud Act. Comme il n'y a pas de transfert hors UE, les CCT ne sont pas nécessaires.

Procédure pas à pas :

  1. Verdier Industries demande à son fournisseur (par exemple l'endpoint européen d'OpenAI) les documents suivants et les rassemble :
    • son accord de confidentialité ;
    • son engagement de non-entraînement et de rétention zéro ;
    • son DPA (Data Processing Agreement, accord de traitement des données), si données personnelles ;
    • la liste de ses sous-traitants ultérieurs ;
    • ses certifications et attestations de sécurité : SOC 2 Type II (attestation) et ISO/IEC 27001 (certification), et le cas échéant ISO/IEC 27017, 27018, 27701 et 42001.
  2. Verdier Industries rédige un avenant type au contrat client, structuré en articles :
    • article 1 : autorisation de divulgation des données à un tiers ;
    • article 2 : confidentialité ;
    • article 3 : acceptation du risque Cloud Act ;
    • article 4, si données personnelles : autorisation de sous-traitance (article 28.2 du RGPD).
  3. Verdier Industries joint à l'avenant les documents obtenus à l'étape 1.
  4. Verdier Industries envoie le dossier à chaque client.
  5. Le client signe l'avenant et le renvoie.
  6. Verdier Industries archive l'avenant signé et ses pièces jointes par client.

Pour le RGPD :

  • Si le contrat contient une autorisation générale de sous-traitance : une notification avec droit d'opposition suffit, sans signature.
  • S'il exige un accord écrit au cas par cas : l'avenant doit être signé.
  • Dans les deux cas, la confidentialité des secrets industriels et le risque Cloud Act imposent une signature.

Cas 3 - SaaS datacenter en UE ou FR, entité UE

Les données sont traitées dans l'UE par une entité européenne : ni transfert hors UE, ni exposition au Cloud Act.

Procédure pas à pas :

  1. Verdier Industries demande à son fournisseur (par exemple Scaleway) les documents suivants et les rassemble :
    • son accord de confidentialité ;
    • son engagement de non-entraînement et de rétention zéro ;
    • son DPA (Data Processing Agreement, accord de traitement des données), si données personnelles ;
    • la liste de ses sous-traitants ultérieurs ;
    • ses certifications et attestations de sécurité : SOC 2 Type II (attestation) et ISO/IEC 27001 (certification), et le cas échéant ISO/IEC 27017, 27018, 27701 et 42001, SecNumCloud ou HDS.
  2. Verdier Industries rédige un avenant type au contrat client, structuré en articles :
    • article 1 : autorisation de divulgation des données à un tiers ;
    • article 2 : confidentialité ;
    • article 3, si données personnelles : autorisation de sous-traitance (article 28.2 du RGPD).
  3. Verdier Industries joint à l'avenant les documents obtenus à l'étape 1.
  4. Verdier Industries envoie le dossier à chaque client.
  5. Le client signe l'avenant et le renvoie.
  6. Verdier Industries archive l'avenant signé et ses pièces jointes par client.

Pour le RGPD :

  • Si le contrat contient une autorisation générale de sous-traitance : une notification avec droit d'opposition suffit, sans signature.
  • S'il exige un accord écrit au cas par cas : l'avenant doit être signé.
  • Dans les deux cas, la confidentialité des secrets industriels impose une signature.

Cas 4 - IaaS US avec datacenter en FR

L'infrastructure est louée chez un hébergeur américain. L'hébergeur n'accède pas au contenu des données, mais il reste soumis au Cloud Act.

Procédure pas à pas :

  1. Verdier Industries demande à son hébergeur (par exemple AWS) les documents suivants et les rassemble :
    • son accord de confidentialité ;
    • son engagement de non-accès au contenu des données hébergées : mémoire vive, volumes de stockage et snapshots des machines virtuelles, sauf demande écrite de Verdier Industries ou réquisition d'une autorité judiciaire ou administrative compétente ;
    • son DPA (Data Processing Agreement, accord de traitement des données), si données personnelles ;
    • la liste de ses sous-traitants ultérieurs ;
    • ses certifications et attestations de sécurité : SOC 2 Type II (attestation) et ISO/IEC 27001 (certification), et le cas échéant ISO/IEC 27017 et 27018.
  2. Verdier Industries rédige un avenant type au contrat client, structuré en articles :
    • article 1 : autorisation d'héberger les données sur une infrastructure tierce ;
    • article 2 : Verdier Industries garantit que l'hébergeur n'a pas accès au contenu des données, son accès étant limité à l'infrastructure nécessaire à l'hébergement, hors réquisition d'une autorité judiciaire ou administrative compétente ;
    • article 3 : acceptation du risque Cloud Act ;
    • article 4, si données personnelles : autorisation de sous-traitance (article 28.2 du RGPD).
  3. Verdier Industries joint à l'avenant les documents obtenus à l'étape 1.
  4. Verdier Industries envoie le dossier à chaque client.
  5. Le client signe l'avenant et le renvoie.
  6. Verdier Industries archive l'avenant signé et ses pièces jointes par client.

Pour le RGPD :

  • Si le contrat contient une autorisation générale de sous-traitance : une notification avec droit d'opposition suffit, sans signature.
  • S'il exige un accord écrit au cas par cas : l'avenant doit être signé.
  • Dans les deux cas, la confidentialité des secrets industriels et le risque Cloud Act imposent une signature.

L'engagement de non-accès demandé à l'hébergeur peut être rédigé ainsi :

L'hébergeur s'engage à ne pas accéder au contenu des données hébergées, en particulier à la mémoire vive, aux volumes de stockage et aux snapshots des machines virtuelles, sauf demande écrite de Verdier Industries ou réquisition d'une autorité judiciaire ou administrative compétente. En cas de réquisition, l'hébergeur en informe Verdier Industries dans les meilleurs délais, sauf si la loi lui interdit de le faire.

Cas 5 - IaaS FR avec data center en FR

L'infrastructure est louée chez un hébergeur français ou européen : ni transfert hors UE, ni exposition au Cloud Act.

Procédure pas à pas :

  1. Verdier Industries demande à son hébergeur (par exemple Scaleway) les documents suivants et les rassemble :
    • son accord de confidentialité ;
    • son engagement de non-accès au contenu des données hébergées : mémoire vive, volumes de stockage et snapshots des machines virtuelles, sauf demande écrite de Verdier Industries ou réquisition d'une autorité judiciaire ou administrative compétente ;
    • son DPA (Data Processing Agreement, accord de traitement des données), si données personnelles ;
    • la liste de ses sous-traitants ultérieurs ;
    • ses certifications et attestations de sécurité : SOC 2 Type II (attestation) et ISO/IEC 27001 (certification), et le cas échéant ISO/IEC 27017 et 27018, SecNumCloud ou HDS.
  2. Verdier Industries rédige un avenant type au contrat client, structuré en articles :
    • article 1 : autorisation d'héberger les données sur une infrastructure tierce ;
    • article 2 : Verdier Industries garantit que l'hébergeur n'a pas accès au contenu des données, son accès étant limité à l'infrastructure nécessaire à l'hébergement, hors réquisition d'une autorité judiciaire ou administrative compétente ;
    • article 3, si données personnelles : autorisation de sous-traitance (article 28.2 du RGPD).
  3. Verdier Industries joint à l'avenant les documents obtenus à l'étape 1.
  4. Verdier Industries envoie le dossier à chaque client.
  5. Le client signe l'avenant et le renvoie.
  6. Verdier Industries archive l'avenant signé et ses pièces jointes par client.

Pour le RGPD :

  • Si le contrat contient une autorisation générale de sous-traitance : une notification avec droit d'opposition suffit, sans signature.
  • S'il exige un accord écrit au cas par cas : l'avenant doit être signé.
  • Dans les deux cas, la confidentialité des secrets industriels impose une signature.

L'engagement de non-accès demandé à l'hébergeur peut être rédigé ainsi :

L'hébergeur s'engage à ne pas accéder au contenu des données hébergées, en particulier à la mémoire vive, aux volumes de stockage et aux snapshots des machines virtuelles, sauf demande écrite de Verdier Industries ou réquisition d'une autorité judiciaire ou administrative compétente. En cas de réquisition, l'hébergeur en informe Verdier Industries dans les meilleurs délais, sauf si la loi lui interdit de le faire.

Cas 6 - Hébergement sur site

Le serveur est dans les locaux de Verdier Industries : aucun tiers n'intervient.

  • Aucun document à obtenir d'un tiers.
  • Aucun avenant à faire signer : les données ne quittent pas les locaux et ne sont divulguées à personne.
  • Pour rassurer le client, Verdier Industries peut l'informer que le traitement se fait en interne, sans sous-traitant ultérieur.

Liste des différences entre les situations contractuelles

Différences entre cas 2 et cas 1

  • Les données restent dans l'UE : les CCT ne sont plus nécessaires.
  • Le reste est identique, notamment le risque Cloud Act.

Différences entre cas 3 et cas 2

  • Le fournisseur est une entité européenne : plus de risque Cloud Act.
  • L'article 3 de l'avenant (acceptation du risque Cloud Act) disparaît.
  • Le reste est identique.

Différences entre cas 4 et cas 3

  • Le fournisseur ne traite plus les données : l'hébergeur n'accède pas au contenu, et l'avenant le garantit (article 2).
  • L'engagement de non-entraînement et de rétention zéro disparaît.
  • L'article 1 de l'avenant devient une autorisation d'héberger, et non plus une autorisation de divulgation.
  • Le risque Cloud Act réapparaît, car l'hébergeur est américain.

Différences entre cas 5 et cas 3

  • Le fournisseur ne traite plus les données : l'hébergeur n'accède pas au contenu, et l'avenant le garantit (article 2).
  • L'engagement de non-entraînement et de rétention zéro disparaît, remplacé par un engagement de non-accès au contenu.
  • L'article 1 de l'avenant devient une autorisation d'héberger, et non plus une autorisation de divulgation.
  • Les certifications attendues sont allégées : plus de 27701 ni 42001, qui n'ont plus de sens quand le fournisseur ne traite pas les données.
  • Le reste est identique : ni transfert hors UE, ni risque Cloud Act.

Différences entre cas 5 et cas 4

  • L'hébergeur est français ou européen : plus de risque Cloud Act.
  • L'article 3 de l'avenant (acceptation du risque Cloud Act) disparaît.
  • Le reste est identique.

Différences entre cas 6 et cas 5

  • Aucun tiers n'intervient : plus de documents à obtenir ni d'avenant à signer.
  • Il ne reste qu'une information au client, sans sous-traitant ultérieur.

Ce que je retiens

En travaillant cette note, je m'attendais, naïvement, à ce que le cas 5 — un LLM installé sur une machine virtuelle avec GPU louée chez un hébergeur français, dans un data center français — soit indolore contractuellement, c'est-à-dire qu'il n'exige aucun avenant aux contrats clients, mais ce n'est pas le cas.

En réalité, l'infrastructure reste louée à un tiers. Les contrats clients interdisent la divulgation des données confidentielles à un tiers sans accord écrit, et même si l'hébergeur n'accède pas au contenu, le fait de lui confier l'infrastructure qui porte les données déclenche quand même la signature.

Gagner en souveraineté réduit le nombre d'articles et la gravité du risque, mais ne ramène pas le travail contractuel à zéro.

Mon regard de praticien de terrain

Comme dans ma note du mois de juin sur les données de santé, je termine cette note avec un sentiment partagé.
Je suis un praticien de terrain : j'administre les serveurs, je gère les données de mes propres mains. En lisant tout cet édifice contractuel, je sais qu'il s'agit d'une convention humaine — ce que l'on nomme le constructivisme juridique, il me semble — souvent assez éloignée de la logique et de la pratique du terrain.

C'est un exercice d'analyse que j'aime beaucoup, mais qui m'est difficile. Il me crée une dissonance cognitive. D'un côté, je pense en praticien : je vois ce qu'on pourrait faire techniquement, concrètement, physiquement, pour renforcer la sécurité des données. De l'autre, ces protections juridiques sanctionnent devant un juge, mais ne protègent pas la donnée physiquement. C'est une protection par la sanction, pas une protection réelle. Ma culture hacker est de protéger pour de vrai, pas par le droit. Je crois que c'est là la source de ma dissonance, et parfois de mon énervement.

J'y trouve régulièrement de l'incohérence, parfois une forme d'hypocrisie, un peu comme un jeu de théâtre. Je ne dis pas que cela ne sert à rien — sans doute que ce cadre protège. Peut-être que mon regard de praticien me rend trop sensible à ce qui sépare la théorie juridique du terrain.

Vendredi 19 juin 2026

Certification HDS : ce que j'ai appris en creusant pour un ami #vibe-coding, #hébergeur-de-données-de-santé, #données-de-santé, #selfhosting, #rgpd

Un ami, professionnel libéral de santé, a vibe codé une application de gestion pour ses patients actuellement hébergée sur Supabase. Il souhaite migrer vers un Hébergeur de Données de Santé — il a notamment vu que Scaleway propose des services certifiés HDS — et m'a demandé si je connaissais un développeur pour l'accompagner dans ce projet.

J'ai croisé la notion de HDS pour la première fois en 2016, chez Tech-Angels. Depuis, j'ai suivi le sujet de loin sans jamais creuser.

Je profite de sa demande pour étudier le sujet en profondeur avant de lui répondre, et publier une note de ce que j'aurai appris.

Hébergeur de Données de Santé, c'est quoi ?

Toute personne physique ou morale qui héberge des données de santé à caractère personnel recueillies à l’occasion d’activités de prévention, de diagnostic, de soins ou de suivi médico-social pour le compte de personnes physiques ou morales à l'origine de la production ou du recueil de ces données ou pour le compte du patient lui-même, doit être agréée ou certifiée à cet effet.

Wikipedia

Texte de loi : article L.1111-8 du Code de la santé publique

Qu'est-ce qu'une donnée de santé (DDS) ?

Avant d'aller plus loin, j'ai eu besoin de comprendre précisément ce qu'est une "donnée de santé".

La CNIL distingue trois catégories (source) :

  • Les données de santé par nature : antécédents médicaux, diagnostics, traitements, résultats d'examens, ordonnances, comptes-rendus d'hospitalisation.
  • Les données qui deviennent des données de santé par croisement : le poids ou le nombre de pas seuls ne le sont pas, mais croisés avec d'autres mesures (tension artérielle, apports caloriques), ils le deviennent.
  • Les données qui deviennent des données de santé par leur usage : un rendez-vous chez un médecin, à lui seul, n'est pas une donnée de santé — mais le motif de la consultation, si.

Concrètement, dans l'application de mon ami, cela inclut probablement les noms des patients, leurs comptes-rendus, leurs ordonnances, les notes de suivi, et potentiellement les créneaux de rendez-vous liés à des actes de soins. Ce n'est pas seulement la « base médicale » au sens strict — c'est tout ce qui, relié à une personne identifiée, révèle qu'elle a reçu ou consulté pour des soins.

Un document médical sans identifiant, est-ce encore une donnée de santé ?

Une question qui m'est tout de suite venue à l'esprit : un document médical sans identifiant — pas de nom, pas de numéro de patient — est-ce encore une donnée de santé ?

La réponse dépend de la possibilité de ré-identification. Si le document est véritablement anonymisé, qu'il n'existe aucun moyen raisonnable de le relier à une personne, alors ce n'est plus une donnée de santé à caractère personnel — ça sort du périmètre du RGPD et du HDS.
Mais en pratique, c'est très difficile de le rendre vraiment anonyme. Un diagnostic rare, une date de traitement, ou un hôpital spécifique croisés avec d'autres sources, peuvent permettre de ré-identifier la personne.

La CNIL considère qu'une donnée est « personnelle » dès qu'il existe des « moyens raisonnablement susceptibles » de ré-identification.
Je pense qu'une bonne méthode pour estimer si c'est une DDS ou non, est de se mettre dans la peau d'un détective privé : si on me donnait ce document et tous les indices disponibles (date, hôpital, pathologie rare…), est-ce que je pourrais remonter à la personne ? Si la réponse est oui, c'est une donnée de santé. La question n'est donc pas « y a-t-il un nom dans le document ? » mais « quelqu'un, avec les moyens raisonnables, pourrait-il retrouver à qui ça appartient ? ».

Quels liens entre PII et DDS ?

Pour faire le lien avec les PII : toute Données de santé (DDS) est une PII, mais l'inverse n'est pas vrai. Un nom, une adresse email ou une adresse IP sont des PII parce qu'ils permettent d'identifier une personne.
Une donnée de santé est une PII qui révèle en plus quelque chose sur l'état de santé de cette personne. La distinction importe parce que le régime juridique n'est pas le même : les DDS sont soumises au RGPD comme les PII, mais avec des protections supplémentaires — secret médical, consentement explicite, obligation d'hébergement certifié HDS.

Qui est le "responsable de traitement" ?

Pour comprendre à qui s'applique la certification HDS, j'ai eu besoin de creuser la notion de "responsable de traitement" au sens du RGPD. Je croise ce terme régulièrement, je pense le comprendre dans les grandes lignes, mais j'ai voulu comprendre précisément où se situent les frontières.

D'après ce que j'ai compris, le responsable de traitement est la personne morale (ou la personne physique en entreprise individuelle) qui décide quoi faire avec les données personnelles. C'est elle qui détermine pourquoi on collecte les données et comment on les traite. Ce n'est pas l'individu (le médecin, l'infirmière) — c'est la structure juridique qui a la relation de soin avec le patient.

Concrètement :

Situation Responsable de traitement Pourquoi ?
Médecin salarié à l'hôpital L'hôpital (personne morale) C'est l'hôpital qui a la relation avec le patient, pas le médecin individuellement
Médecin dans un cabinet en SARL La SARL (personne morale) C'est la SARL qui signe les contrats et est responsable en cas de fuite
Médecin libéral en entreprise individuelle Le médecin (personne physique) Il n'y a pas de structure intermédiaire
Cabinet médical Le cabinet (personne morale) Le cabinet détermine les règles de gestion du système d'information
Doctolib Non — c'est un sous-traitant Doctolib est un moyen de communication entre le médecin et le patient, comme un téléphone amélioré
Scaleway Non — c'est un hébergeur Scaleway fournit l'infrastructure, il ne traite pas les données pour ses propres fins
Un développeur freelance qui maintient le serveur Non — c'est un sous-traitant Il administre l'infrastructure pour le compte du responsable de traitement

Cette distinction est cruciale pour comprendre la certification HDS. La loi dit que l'hébergement doit être certifié quand il est fait "pour le compte de" un responsable de traitement. Si tu es toi-même le responsable de traitement, tu n'héberges pas pour un tiers — tu héberges pour toi-même alors pas besoin de certification HDS (mais tu restes soumis au RGPD).

C'est pour ça qu'un médecin qui gère son propre dossier patient n'a pas besoin de HDS, mais qu'un hébergeur qui stocke les données pour le compte de ce médecin doit être certifié.

Un cas limite : les services médicaux numériques

Le cas des services médicaux numériques comme Poppins — "le dispositif médical numérique à domicile pour les enfants dyslexiques" — est compliqué. Qui est le responsable de traitement ?

La réponse dépend de qui décide quoi faire avec les données :

  • Si Poppins décide quelles données collecter et comment les utiliser (recherche, amélioration du produit) alors Poppins est responsable de traitement
  • Si l'orthophoniste décide quelles données utiliser pour le suivi du patient alors l'orthophoniste est responsable de traitement
  • Si les deux ont un rôle de décision → co-responsabilité (article 26 RGPD)

Où est la documentation officielle HDS ?

La documentation officielle est trouvable sur le site https://esante.gouv.fr/ => "Produits et services" => "HDS" => "Les référentiels de la procédure de certification".

La documentation HDS est nommée "référentiel de certifications HDS", elle est disponible au format PDF à cette adresse https://esante.gouv.fr/sites/default/files/media_entity/documents/referentiel_certification_hds---fr--v2.pdf.
Je n'ai pas trouvé de version HTML de ce document.

D'après ce que j'ai compris, ce sont des personnes de l'Agence du Numérique en Santé (ANS) qui ont rédigé les 29 pages du référentiel de certifications HDS.

Ce référentiel a été officialisé dans le Journal Officiel le 16 mai 2024 https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000049537692 par un ministre délégué à la santé. Ce document remplace la version précédente de 2018.

Et voici le communiqué de presse de l'ANS : Publication au Journal Officiel du référentiel de certification HDS : souveraineté des données et améliorations du référentiel.

Je suis ravi de lire la section Focus sur l’ajout d’exigences relatives à la souveraineté des données qui indique :

L’hébergement physique des données de santé doit être réalisé exclusivement sur le territoire d’un pays situé au sein de l’Espace Economique Européen.

source

🙂

Les 6 activités du référentiel HDS

Est considérée comme une activité d'hébergement de données de santé à caractère personnel sur support numérique ... des activités suivantes :

    1. La mise à disposition et le maintien en condition opérationnelle de sites physiques permettant d'héberger l'infrastructure matérielle du système d'information utilisé pour le traitement des données de santé ;
    1. La mise à disposition et le maintien en condition opérationnelle de l'infrastructure matérielle du système d'information utilisé pour le traitement de données de santé ;
    1. La mise à disposition et le maintien en condition opérationnelle de l'infrastructure virtuelle du système d'information utilisé pour le traitement des données de santé ;
    1. La mise à disposition et le maintien en condition opérationnelle de la plateforme d'hébergement d'applications du système d'information ;
    1. L'administration et l'exploitation du système d'information contenant les données de santé ;
    1. La sauvegarde des données de santé

page 6

Cette liste, reformulée en activités concrètes :

# Activité
1 Gestion des sites physiques : datacenters, baies serveurs, climatisation, alimentation électrique, sécurité des locaux
2 Gestion de l'infrastructure matérielle : serveurs physiques, stockage, câblage réseau, commutation
3 Gestion de l'infrastructure virtuelle : machines virtuelles, réseaux virtuels, stockage virtuel, hyperviseurs
4 Gestion de la plateforme applicative : bases de données managées, conteneurs, serveurs d'application
5 Gestion des sauvegardes : sauvegardes automatisées, stockage hors site, restauration
6 Administration et exploitation du SI : supervision, mises à jour, gestion des accès, support technique, astreinte

Il y a un point important que j'ai mis du temps à saisir : l'obligation de certification ne s'applique qu'à l'hébergement de données de santé pour un tiers qui est responsable de traitement.
Par conséquent, un professionnel de santé qui auto-héberge ses propres données n'a pas besoin de certification HDS pour les activités de cette liste qu'il administre lui-même.

Un exemple concret

Imaginons un cabinet de médecin, qui développe une application web qui contient des données de santé. Cette application est à destination de ses utilisateurs finaux, ses patients.

L'application web est codée en JavaScript avec PostgreSQL pour la persistance des données.

Pour le déploiement, le développeur employé directement par le cabinet de médecin fait le choix de déployer le tout sur une Virtual machine Scaleway.

D'après la version du 18 juin 2026 de la page "L’hébergement des données de santé et la certification HDS" de la documentation Scaleway, voici la liste des services certifiés HDS :

Les composants de fondations les plus importants sont bien certifiés. Je note au passage que l'offre "Managed Database for PostgreSQL and MySQL" n'est pas certifiée pour le moment.
Ceci n'est pas grave dans mon exemple si je déploie directement une image Docker de PostgreSQL directement sur la Virtual machine. Les sauvegardes peuvent être déposées dans Scaleway Object Storage qui lui est certifié.

Le cabinet de médecin devra souscrire un plan de support niveau Business à 250 € par mois pour pouvoir ensuite signer un contrat HDS :

Ensuite, Scaleway remettra au cabinet de médecin (son client) un document de garantie HDS, conformément au chapitre 8 du référentiel :

Voici à quoi pourrait ressembler ce document : "Exemple fictif d'une garantie de certification HDS de Scaleway".

Ensuite, les DevOps salariés directement du cabinet de santé déploient, maintiennent, administrent l'application sur les Virtual machine de Scaleway sans que le cabinet de médecin n'ait besoin de certification HDS car il n'est pas un hébergeur de données parce qu'il ne vend pas son service à d'autres professionnels. Seuls les patients directs utilisent son service.

Employé vs freelance : une distinction absurde mais légale

Il y a un point que j'ai mis du temps à saisir, et qui me paraît absurde mais qui est juridiquement cohérent.

Un employé (CDD ou CDI) du cabinet de santé qui gère le serveur, fait les mises à jour et les sauvegardes n'a pas besoin de certification HDS. Il fait partie de l'organisation du responsable de traitement — il n'est pas un sous-traitant.

Le même développeur, faisant exactement le même travail (SSH, mises à jour, sauvegardes), mais en freelance vendant 5 heures de prestation, a besoin de la certification HDS pour l'activité 5 (administration et exploitation). Pourquoi ? Parce qu'il est une entité séparée, un sous-traitant au sens RGPD, qui assure une activité d'hébergement pour le compte d'un tiers responsable de traitement.

La distinction ne se fait pas sur la nature du travail, mais sur le statut juridique de la personne qui le fait :

  • Employé du cabinet (CDD/CDI) avec accès SSH → pas de HDS, il fait partie du responsable de traitement
  • Freelance avec accès SSH permanent → HDS requis, il est sous-traitant et assure l'activité 5

Le cas du freelance qui livrerait uniquement du code

Si le freelance se contente de fournir du code — application, scripts d'infrastructure, configs de déploiement — et qu'il push tout dans un repo Git sans jamais avoir accès au serveur, à la base de données ni aux données, alors il n'assure aucune des 6 activités d'hébergement. Il livre un produit (du code), il n'opère pas un service.

Le test légal reste le même : "le fait d'assurer pour le compte du responsable de traitement tout ou partie des activités suivantes." Le verbe clé est "assurer" — c'est-à-dire exécuter, opérer, maintenir en condition opérationnelle. Les 6 activités décrivent des opérations sur l'infrastructure et le système, pas de la production de code.

La frontière se joue sur un point précis : qui appuie sur le bouton "déployer" ?

  • Si c'est un employé du cabinet de santé qui contrôle l'outil de déploiement (par exemple ArgoCD) et déclenche les déploiements → freelance = livreur de code → pas de HDS
  • Si le freelance a accès à cet outil et déclenche lui-même les déploiements → il participe à l'exploitation (activité 5) → HDS requis

Combien coûte une certification HDS pour les activités 4, 5 et 6 ?

J'ai cherché le processus officiel pour obtenir la certification HDS, voici ce que j'ai retenu :

  1. Mettre en place un Système de Management de la Sécurité de l'Information (SMSI) conforme à ISO 27001 (politique de sécurité, analyse de risques, gestion des accès, plan de continuité) — prérequis obligatoire.
  2. Choisir un organisme certificateur accrédité Comité français d'accréditation (Cofrac) (BSI, AFNOR, Bureau Veritas, LRQA…).
  3. Audit sur site en deux volets : conformité ISO 27001, puis exigences HDS spécifiques.
  4. Correction des non-conformités relevées.
  5. Obtention du certificat (valable 3 ans, avec audit de surveillance annuel).

J'ai volontairement laissé de côté le contenu concret du SMSI et de la norme ISO 27001 — je les connais mal. Cette note m'a donné envie d'explorer le sujet en profondeur, mais je le ferai dans une note séparée pour ne pas allonger encore celle-ci.

Les coûts typiques pour une TPE (< 10 personnes) :

Poste Estimation
Mise en place SMSI (conseil externe) 2 000 – 6 000 €
Audit initial COFRAC (ISO 27001 + HDS) 8 000 – 15 000 €
Audits de surveillance annuels (×2) 2 000 – 5 000 €
Sous-total coûts externes 12 000 – 26 000 €
Coût interne du salarié (100 – 200 h à 500 €/j soit ~70 €/h super brut) 7 000 – 14 000 €
Total sur 3 ans 19 000 – 40 000 €

Estimation en temps humain (pour une personne seule, en charge de tout) :

Étape Effort humain estimé Durée calendrier estimée
Mise en place SMSI (rédaction, procédures, analyse de risques, choix des outils) 40 – 100 heures 2 – 4 mois
Choix du certificateur et préparation du dossier 15 – 30 heures 3 – 6 semaines
Audit initial (sur site + préparation) 15 – 30 heures 1 – 2 semaines
Correction des non-conformités 20 – 60 heures 2 – 6 semaines
Obtention du certificat + 1er audit de surveillance 10 – 30 heures 1 – 2 mois
Total (avec SMSI ou maturité existante) 100 – 250 heures 6 – 9 mois
Total (sans SMSI préalable) 200 – 400 heures 12 – 18 mois

Sources

Les fourchettes de coûts et de durées ci-dessus sont des estimations de Fermi calculées par MiMO-V2-Pro, recalibrées pour coller aux données publiées :

  • Legiscope — Certification HDS hébergeur de données de santé 2026 (Dr. Thiébaut Devergranne, 23 mai 2026) : fourchette de 20 000 à 35 000 € sur 3 ans pour une TPE. Durée de 6 à 9 mois si l'organisation dispose déjà d'un SMSI ou d'une maturité ISO 27001 ; 12 à 18 mois sans SMSI préalable (dont 9-12 mois pour la certification ISO 27001 seule).
  • Galeon — Certification HDS en 2026 (21 avril 2026) : « Les audits représentent généralement plusieurs dizaines de milliers d'euros, auxquels s'ajoutent les coûts internes de préparation et de mise en conformité. »

Je pense que des outils de service d'automatisation de conformité du type Oneleet que j'ai testés, peuvent accélérer le processus de mise en place d'un SMSI pour obtenir une certification ISO 27001.

Le risque sécurité du code vibe codé

Ça me fait un peu peur, honnêtement. Mon ami a vibe codé une application qui contient des données de santé. Et payer les frais importants d'une agence de développeur certifiée HDS n'aurait aucun sens dans ce contexte d'une application amateur sur mesure.

Qu'est-ce que je vais répondre à mon ami ?

D'abord, son idée d'hébergement chez Scaleway va coûter cher ! Déjà 250 € par mois rien que pour le plan de support Business.

Pour éviter cela, une solution serait d'auto-héberger l'application chez soi, dans son bureau, sur un petit serveur. Tant qu'on n'héberge pas pour un tiers, il n'y a pas besoin de certification HDS.

Mais il ne pourra pas demander à un développeur freelance d'administrer ce serveur. Dès qu'un freelance intervient sur l'infrastructure (accès SSH, mises à jour, sauvegardes), il assure l'activité 5 du référentiel HDS — et il devrait être certifié ! Et le coût de la certification pour administrer ce serveur, pour une seule instance, sera bien trop élevé.

Autre solution : embaucher un développeur en CDD pour toute intervention. C'est légalement possible sans HDS, mais c'est lourd à gérer et coûteux.

Réflexion sur le Vibe coding : libération ou prolétarisation ?

En tant qu'artisan développeur, je trouve amusant d'observer plusieurs de mes amis vibe coder des applications sur mesure pour leur besoin.

Pour le moment je n'ai pas cherché à savoir s'ils essaient de comprendre le code produit, ou si le code reste une boîte noire dont ils se fichent tant que ça marche. Mais c'est un phénomène socialement intéressant, et je ne sais pas si c'est une bonne nouvelle ou non.

Si le vibe coding reste un outil d'appropriation, si la personne comprend ce qu'elle fait, peut modifier, adapter, expliquer — alors c'est un acte de déprolétarisation : il reprend le contrôle sur ses outils de travail.
Mais si le code reste opaque, s'il ne s'agit que de produire sans comprendre, alors le vibe coding n'est qu'une nouvelle forme de prolétarisation. Le savoir ne passe plus par la machine au sens de Bernard Stiegler — il passe par l'IA, et la personne reste aussi démunie que devant si l'outil disparaît ou change, c'est de la désindividuation au sens de Bernard Stiegler. La personne n'a pas acquis de savoir, elle a acquis un résultat, elle "consomme".

C'est ce qui fait de ces outils des pharmakons : ils peuvent désindividuer autant qu'ils peuvent aider à s'individuer, selon l'usage qu'on en fait.

J'ai développé cette réflexion dans "J'utilise les LLMs comme des amis experts et jamais comme des écrivains fantômes" et dans "Ma lutte contre mon affaiblissement cognitif". En résumé, j'essaie personnellement d'éviter cette prolétarisation : plutôt que de consommer l'IA pour produire des choses, j'essaie de groker — comprendre en profondeur, pas seulement obtenir un résultat.

Jeudi 30 octobre 2025

Lundi 22 septembre 2025

Samedi 14 juin 2025

Journal du samedi 14 juin 2025 à 00:06 #open-source, #selfhosting, #JaiDécouvert

#JaiDécouvert OmniPoly (https://github.com/kWeglinski/OmniPoly)

Welcome to a solution for translation and language enhancement tool. This project integrates LibreTranslate for accurate translations, LanguageTool for grammar and style checks, and AI Translation for modern touch of sentiment analysis and interesting sentences extraction.

source

Je souhaite intégrer cet outil au dépôt sklein-open-webui-instance.
Comme ce projet ne sera plus exclusivement dédié à Open WebUI, il me semble qu'un changement de nom s'impose.

Mardi 29 avril 2025

Journal du mardi 29 avril 2025 à 15:30 #selfhosting, #DevOps

Depuis quelques semaines, je vois de plus en plus de sites web qui intègrent Anubis. Par exemple sur https://gitlab.gnome.org/, https://priv.au/ et à l'instant sur https://forge.libre.sh/indiehosters.

Anubis weighs the soul of your connection using a proof-of-work challenge in order to protect upstream resources from scraper bots.

source

Voici ce qu'Anubis affiche à la première connexion au site web :

Jeudi 10 avril 2025

Journal du jeudi 10 avril 2025 à 08:44 #WebDev, #SvelteKit, #NextJS, #selfhosting, #JaiDécouvert, #JaimeraisUnJour

#JaiDécouvert ici la fonctionnalité "Incremental Static Regeneration (ISR)" de NextJS.

L'Incremental Static Regeneration (ISR) est un mélange de génération static et de régénération dynamique.

Lors du build du site toutes les pages sont générées de manière statique. Cependant, certaines peuvent être "marquées" : ces pages clairement identifiées seront régénérées à intervalle régulier après le déploiement du site, faisant appel à des API ou une base de données pour garder la donnée à jour.

Lors de la visite d'une page à régénérer, une version "ancienne" de la page s'affiche, mais une demande de régénération est envoyée au serveur. La page est ainsi régénérée et renvoyée instantanément au visiteur, et prête à être affichée au visiteur suivant. Le cycle peut alors recommencer.

source

J'ai aussi lu cette page de documentation de Vercel :

Incremental Static Regeneration (ISR) allows you to create or update content on your site without redeploying. ISR's main benefits for developers include:

  • Better Performance: Static pages can be consistently fast because ISR allows Vercel to cache generated pages in every region on our global Edge Network and persist files into durable storage
  • Reduced Backend Load: ISR helps reduce backend load by using cached content to make fewer requests to your data sources
  • Faster Builds: Pages can be generated when requested by a visitor or through an API instead of during the build, speeding up build times as your application grows

ISR is available to applications built with:

source

J'ai étudié le support ISR de SvelteKit. Il semble que cette fonctionnalité soit supportée uniquement par l'adapter-vercel.
J'ai identifié l'issue suivante : Would revalidating a static page work when self-hosted?.

#JaimeraisUnJour prendre le temps de creuser plus en profondeur ce sujet.

Jeudi 20 mars 2025

Journal du jeudi 20 mars 2025 à 19:36 #wifi, #hardware, #selfhosting

Quand j'ai travaillé en décembre 2024 sur mon "Projet 15 - Installation et configuration de OpenWrt sur Xiaomi Mi Router 4A Gigabit", j'avais découvert le projet #hardware OpenWrt One via ces threads Hacker News :

Today, we at SFC, along with our OpenWrt member project, announce the production release of the OpenWrt One. This is the first wireless Internet router designed and built with your software freedom and right to repair in mind. The OpenWrt One will never be locked down and is forever unbrickable. ...

The OpenWrt One demonstrates what's possible when hardware designers and manufacturers prioritize your software right to repair; OpenWrt One exuberantly follows these requirements of the copyleft licenses of Linux and other GPL'd programs. This device provides the fully copyleft-compliant source code release from the start. Device owners have all the rights as intended on Day 1; device owners are encouraged to take full advantage of these rights to improve and repair the software on their OpenWrt One.

source

J'ai envie de m'en commander un pour remplacer mon Xiaomi Mi Router 4A Gigabit Edition.

Mais, je viens de lire ce commentaire sur LinuxFr :

  • La carte mère et le boîtier sont bien larges et pourtant, ils ne sont pas arrivés à caser un disque dur au format courant 2280.
  • La puce WiFi est soudée => impossible à faire évoluer. Il y'a déjà du wifi 7
  • Le pilote de cette puce est un vieux blob binaire à mon avis. Il n'y a rien ici en tout cas: https://web.git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/net/wireless/mediatek?h=for-next
  • Si je devais investir dans un équipement de ce genre, j'en prendrai un qui fait aussi le réseau cellulaire.
  • Je ne comprends pas trop l'intérêt d'avoir un port Ethernet à 1Gb et l'autre ) 2,5Gb
  • Au final, cela fait presque dans les 120€

Je pense que j'irais plutôt vers un truc dans ce genre (plus cher mais plus polyvalent):
https://www.aliexpress.com/item/1005004360072281.html

source

« Topton nouveau ordinateur pare-feu Intel N150 N100 N5105 N5100 routeur souple 4x2.5G i226 LAN Mini PC industriel sans ventilateur pfSense PVE ESXi avec 4GB Ram et 128 GB NVMe » à 156 €.

J'ai lu cet autre commentaire qui préfère le modèle GL.iNet GL-MT6000 (à 146 €) à OpenWrt One 🤔.

Lundi 17 mars 2025

J'ai testé le transfert d'un domaine vers LeBureau.coop #coopérative, #dns, #selfhosting, #todo, #comment

Le 20 août 2024, j'ai découvert la coopérative LeBureau.coop.

Je disais :

Dans ma #todo-list :

  • Transférer un de mes noms de domaine vers LeBureau.coop pour tester ;
  • Acheter des parts pour devenir sociétaire soutien.

source

4 mois plus tard, le 3 janvier 2025, c'est chose faite : pour tester, j'ai transféré un domaine avec extension .xyz via le formulaire de la page https://lebureau.coop/creation-ou-transfert-de-noms-de-domaine/.

Pour le moment, l'expérience est bonne.

Voici ce que j'ai payé par virement :

  • Souscription de 1 part sociale : 8 €
  • Transfert du domaine en .xyz : 25,42 €
  • Total : 33,42 € TTC

Après la réception du virement bancaire, j'ai reçu un e-mail qui ressemble à ceci :

Bonjour

Nous avons bien reçu ton virement pour le transfert de nom de domaine.

Pour avancer sur le transfert, il faut saisir le code d'autorisation de transfert et la zone DNS sur https://lebureau.coop/ventes/edf199....../tech/

Voici quelques éléments de documentation :

Une fois que la zone a été saisie, nous pourrons faire le changement de serveur DNS pour éviter toute coupure pendant le transfert, une fois que c'est fait, le code d'autorisation servira à lancer le transfert à proprement parler.

Cordialement,
Arthur Vuillard

J'ai ensuite reçu un accès à https://zones.lebureau.coop qui est une instance PowerDNS-Admin qui permet de configurer ses DNS Record du domaine.

Pour le moment, les demandes de changement de serveurs DNS doivent se faire par e-mail.

Lors de ce transfert, j'ai reçu des e-mails du registrar BookMyName.

Cette situation est tout à fait normale. Comme expliqué dans la vidéo "Les noms de domaine pour se réapproprier Internet", la stratégie de LeBureau.coop est d'être revendeur (BookMyName pour les .xyz) de nom de domaine en attendant de générer suffisamment de revenus pour financer l'obtention d'accréditations directes auprès des différents registres (AFNIC, DotCoop, ICANN...).

Les échanges par e-mail avec Arthur Vuillard ont été à la fois rapide et précis 👌.

D'après la vidéo "Les noms de domaine pour se réapproprier Internet", en juin 2024, LeBureau.coop déclarait avoir 300 clients, 60 sociétaires et 65 000 € de financement.

J'aimerais bien savoir où en est le projet en mars 2025 🤔.

Certaines personnes vont me poser les questions suivantes « Pourquoi tu te compliques la vie avec LeBureau.coop ? Pourquoi ne pas acheter simplement tes domaines directement chez BookMyName ? ».

Ma réponse est la suivante. Depuis quelques années maintenant, je souhaite expérimenter d'autres modèles que le modèle Venture capital, grosses entreprises, etc. En partie à cause du phénomène "De la merdification des choses", comme ce fut, par exemple, le cas avec Gandi.

L'été dernier, j'ai testé social.coop et à présent, c'est au tour de LeBureau.coop.

Cette expérience sera peut-être un échec, mais pour le moment, je n'en sais rien. Je souhaite lui donner sa chance et continuer à explorer d'autres projets de coopératives.

Jeudi 27 février 2025

Journal du jeudi 27 février 2025 à 11:02 #monitoring, #selfhosting, #DevOps, #JaiDécouvert

Au mois d'août 2024, je disais :

Je cherche depuis plusieurs années une solution pour surveiller la date d'expiration des noms de domaine en analysant le contenu de Whois.

#JaiDécouvert cet exporter Prometheus qui correspond exactement à mon besoin : https://github.com/shift/domain_exporter

2024-08-28_1131

Ce matin, en travaillant sur la note "Je découvre Beszel", #JaiDécouvert que Gatus permet de monitorer l'expiration d'un domaine :

You can monitor the expiration of a domain with all endpoint types except for DNS by using the [DOMAIN_EXPIRATION] placeholder.

The aforementioned placeholder resolves to a duration (e.g. 734h22m5s), as such, the value you should compare it to should also be a duration (e.g. 720h, 1h30m). Here's an example of what a condition may look like:

[DOMAIN_EXPIRATION] > 720h

The condition above will fail if the domain expires in less than 720 hours (30 days).

source

Journal du jeudi 27 février 2025 à 10:41 #golang, #DevOps, #selfhosting, #JaiDécouvert, #JaimeraisUnJour

En travaillant sur la note "Je découvre Beszel", #JaiDécouvert ici un autre projet de monitoring intéressant : Dozzle (https://dozzle.dev/).

Dozzle is a small lightweight application with a web based interface to monitor Docker logs. It doesn’t store any log files. It is for live monitoring of your container logs only.

source

Là aussi, Dozzle est un projet en Golang, commencé fin 2018.

Dozzle est une alternative à Loki + Grafana.

#JaimeraisUnJour déployer Dozzle pour le tester et si ce test est concluant, je l'intégrerai peut-être à ma stack minimaliste de monitoring en complément de Beszel et Gatus.

Mardi 25 février 2025

Journal du mardi 25 février 2025 à 23:29 #llm, #selfhosting, #Inference, #JaiDécouvert

#JaiDécouvert cette page web qui permet de savoir quel LLM peut être exécuté sur une machine en particuler : https://canirunthisllm.com/ll

Journal du mardi 25 février 2025 à 22:12 #llm, #Inference, #selfhosting, #OnMePoseLaQuestion, #ollama

Un ami me demande :

Je vais bientôt acheter un nouveau portable PC. Je veux utiliser l'IA en local pour analyser des documents privés, concevoir des articles (il faut qu'elle puisse surfer), mais que les données restent locales. Il me faut donc un PC Copilot avec un NPU ?

Réponse courte : je pense qu'un NPU ne te sera d'aucune utilité pour exécuter un LLM de qualité sur ton laptop 😔.


Quand mon ami parle d'une « IA en local », je suppose qu'il souhaite exécuter un agent conversationnel qui exploite un LLM, du type ChatGPT, Claude.ai, LLaMa, DeepSeek, etc.

Sa motivation première est la confidentialité.

Cela fait depuis juin 2023 que je souhaite moi aussi self host un LLM, avant tout pour éviter le vendor locking, maitriser son coût et éviter la "la merdification des choses".

En juin 2024, je pensais moi aussi que les NPU étaient une solution technique pour self hosted un LLM. Mais depuis, j'ai compris que j'étais dans l'erreur.

Je trouve que ce commentaire résume aussi bien la fonction des NPU :

Also, people often mistake the reason for an NPU is "speed". That's not correct. The whole point of the NPU is rather to focus on low power consumption.

...

I have a sneaking suspicion that the real real reason for an NPU is marketing. "Oh look, NVDA is worth $3.3T - let's make sure we stick some AI stuff in our products too."

source

D'après ce que j'ai compris, voici ce que les NPU exécutent en local (ce qui inclut également la technologie Microsoft nommée Copilot) :

  • L'accélération des modèles d'IA pour la reconnaissance vocale, la transcription en temps réel, et la traduction.
  • Traitement plus rapide des images et vidéos pour des effets en direct (ex. flou d'arrière-plan, suppression du bruit audio).
  • Réduction de la consommation électrique en exécutant certaines tâches IA en local, sans solliciter massivement le CPU/GPU.

Je pense que les fonctionnalités MS Windows Copilot qui utilisent des LLM sont exécutées sur des serveurs mutualisés avec de gros GPU.

Si j'ai bien compris, pour faire tourner efficacement un LLM en local, il est essentiel de disposer d'une grande quantité de RAM avec une bande passante élevée.

Par exemple :

  • Une carte NVIDIA RTX 5090 avec 32Go de RAM (2700 €)
  • Une carte NVIDIA RTX 3090 avec 24Go de RAM d'accasion (1000 €)
  • Une Puce Apple M4 Max avec CPU 16 cœurs, GPU 40 cœurs et Neural Engine 16 cœurs 128 Go de mémoire unifiée (plus de 5000 €)
  • Une Puce Apple M4 Pro avec CPU 12 cœurs, GPU 16 cœurs, Neural Engine 16 cœurs 64 Go de mémoire unifiée (2400 €)

Je ne suis pas disposé à investir une telle somme dans du matériel que je ne parviendrai probablement jamais à rentabiliser. À la place, il me semble plus raisonnable d'opter pour des Managed Inference Service tels que Replicate.com ou Scaleway Managed Inference.

Voici les tarifs de Scaleway Generative APIs :

Il y a quelques semaines, j'ai connecté Open WebUI à l'API de Scaleway Managed Inference avec succès. Je pense que je vais utiliser cette solution sur le long terme.

Si je devais garantir une confidentialité absolue dans un cadre professionnel, je déploierais Ollama sur un serveur dédié équipé d'un GPU :

Mardi 21 janvier 2025

Journal du mardi 21 janvier 2025 à 10:45 #ssl, #certificat, #DevOps, #selfhosting, #JaiDécouvert, #OnMaPartagé

Alexandre m'a fait découvrir testssl.sh (https://github.com/testssl/testssl.sh) :

testssl.sh is a free command line tool which checks a server's service on any port for the support of TLS/SSL ciphers, protocols as well as some cryptographic flaws.

source

Voici ci-dessous le résultat pour mon domaine sklein.xyz.

Je lis : Overall Grade: A+

Quelques précisions concernant la configuration derrière sklein.xyz :

$ docker run --rm -ti  drwetter/testssl.sh sklein.xyz

#####################################################################
  testssl.sh version 3.2rc3 from https://testssl.sh/dev/

  This program is free software. Distribution and modification under
  GPLv2 permitted. USAGE w/o ANY WARRANTY. USE IT AT YOUR OWN RISK!

  Please file bugs @ https://testssl.sh/bugs/

#####################################################################

  Using OpenSSL 1.0.2-bad   [~183 ciphers]
  on 43cf528ca9c5:/home/testssl/bin/openssl.Linux.x86_64

 Start 2025-01-21 09:45:05                -->> 51.159.34.231:443 (sklein.xyz) <<--

 rDNS (51.159.34.231):   51-159-34-231.rev.poneytelecom.eu.
 Service detected:       HTTP

 Testing protocols via sockets except NPN+ALPN

 SSLv2      not offered (OK)
 SSLv3      not offered (OK)
 TLS 1      not offered
 TLS 1.1    not offered
 TLS 1.2    offered (OK)
 TLS 1.3    offered (OK): final
 NPN/SPDY   not offered
 ALPN/HTTP2 h2, http/1.1 (offered)

 Testing cipher categories

 NULL ciphers (no encryption)                      not offered (OK)
 Anonymous NULL Ciphers (no authentication)        not offered (OK)
 Export ciphers (w/o ADH+NULL)                     not offered (OK)
 LOW: 64 Bit + DES, RC[2,4], MD5 (w/o export)      not offered (OK)
 Triple DES Ciphers / IDEA                         not offered
 Obsoleted CBC ciphers (AES, ARIA etc.)            not offered
 Strong encryption (AEAD ciphers) with no FS       not offered
 Forward Secrecy strong encryption (AEAD ciphers)  offered (OK)


 Testing server's cipher preferences

Hexcode  Cipher Suite Name (OpenSSL)       KeyExch.   Encryption  Bits     Cipher Suite Name (IANA/RFC)
-----------------------------------------------------------------------------------------------------------------------------
SSLv2
 -
SSLv3
 -
TLSv1
 -
TLSv1.1
 -
TLSv1.2 (no server order, thus listed by strength)
 xc030   ECDHE-RSA-AES256-GCM-SHA384       ECDH 521   AESGCM      256      TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
 x9f     DHE-RSA-AES256-GCM-SHA384         DH 2048    AESGCM      256      TLS_DHE_RSA_WITH_AES_256_GCM_SHA384
 xcca8   ECDHE-RSA-CHACHA20-POLY1305       ECDH 521   ChaCha20    256      TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
 xccaa   DHE-RSA-CHACHA20-POLY1305         DH 2048    ChaCha20    256      TLS_DHE_RSA_WITH_CHACHA20_POLY1305_SHA256
 xc02f   ECDHE-RSA-AES128-GCM-SHA256       ECDH 521   AESGCM      128      TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
 x9e     DHE-RSA-AES128-GCM-SHA256         DH 2048    AESGCM      128      TLS_DHE_RSA_WITH_AES_128_GCM_SHA256
TLSv1.3 (no server order, thus listed by strength)
 x1302   TLS_AES_256_GCM_SHA384            ECDH 253   AESGCM      256      TLS_AES_256_GCM_SHA384
 x1303   TLS_CHACHA20_POLY1305_SHA256      ECDH 253   ChaCha20    256      TLS_CHACHA20_POLY1305_SHA256
 x1301   TLS_AES_128_GCM_SHA256            ECDH 253   AESGCM      128      TLS_AES_128_GCM_SHA256

 Has server cipher order?     no
 (limited sense as client will pick)

 Testing robust forward secrecy (FS) -- omitting Null Authentication/Encryption, 3DES, RC4

 FS is offered (OK)           TLS_AES_256_GCM_SHA384 TLS_CHACHA20_POLY1305_SHA256 ECDHE-RSA-AES256-GCM-SHA384 DHE-RSA-AES256-GCM-SHA384
                              ECDHE-RSA-CHACHA20-POLY1305 DHE-RSA-CHACHA20-POLY1305 TLS_AES_128_GCM_SHA256 ECDHE-RSA-AES128-GCM-SHA256
                              DHE-RSA-AES128-GCM-SHA256
 Elliptic curves offered:     prime256v1 secp384r1 secp521r1 X25519 X448
 Finite field group:          ffdhe2048 ffdhe3072 ffdhe4096 ffdhe6144 ffdhe8192
 TLS 1.2 sig_algs offered:    RSA+SHA224 RSA+SHA256 RSA+SHA384 RSA+SHA512 RSA-PSS-RSAE+SHA256 RSA-PSS-RSAE+SHA384 RSA-PSS-RSAE+SHA512
 TLS 1.3 sig_algs offered:    RSA-PSS-RSAE+SHA256 RSA-PSS-RSAE+SHA384 RSA-PSS-RSAE+SHA512

 Testing server defaults (Server Hello)

 TLS extensions (standard)    "renegotiation info/#65281" "server name/#0" "EC point formats/#11" "status request/#5" "supported versions/#43"
                              "key share/#51" "supported_groups/#10" "max fragment length/#1" "application layer protocol negotiation/#16"
                              "extended master secret/#23"
 Session Ticket RFC 5077 hint no -- no lifetime advertised
 SSL Session ID support       yes
 Session Resumption           Tickets no, ID: yes
 TLS clock skew               Random values, no fingerprinting possible
 Certificate Compression      none
 Client Authentication        none
 Signature Algorithm          SHA256 with RSA
 Server key size              RSA 4096 bits (exponent is 65537)
 Server key usage             Digital Signature, Key Encipherment
 Server extended key usage    TLS Web Server Authentication, TLS Web Client Authentication
 Serial                       048539E72F864A52E28F6CBEFF15527F75C5 (OK: length 18)
 Fingerprints                 SHA1 5B966867DF42BC654DA90FADFDB93B6C77DD7053
                              SHA256 E79D3ACF988370EF01620C00F003E92B137FFB4EE992A5B1CE3755931561629D
 Common Name (CN)             sklein.xyz  (CN in response to request w/o SNI: letsencrypt-nginx-proxy-companion )
 subjectAltName (SAN)         cv.stephane-klein.info garden.stephane-klein.info sklein.xyz stephane-klein.info
 Trust (hostname)             Ok via SAN and CN (SNI mandatory)
 Chain of trust               Ok
 EV cert (experimental)       no
 Certificate Validity (UTC)   63 >= 30 days (2024-12-26 08:40 --> 2025-03-26 08:40)
 ETS/"eTLS", visibility info  not present
 Certificate Revocation List  --
 OCSP URI                     http://r11.o.lencr.org
 OCSP stapling                offered, not revoked
 OCSP must staple extension   --
 DNS CAA RR (experimental)    not offered
 Certificate Transparency     yes (certificate extension)
 Certificates provided        2
 Issuer                       R11 (Let's Encrypt from US)
 Intermediate cert validity   #1: ok > 40 days (2027-03-12 23:59). R11 <-- ISRG Root X1
 Intermediate Bad OCSP (exp.) Ok


 Testing HTTP header response @ "/"

 HTTP Status Code             302 Moved Temporarily, redirecting to "https://sklein.xyz/fr/"
 HTTP clock skew              0 sec from localtime
 Strict Transport Security    365 days=31536000 s, just this domain
 Public Key Pinning           --
 Server banner                nginx/1.27.1
 Application banner           --
 Cookie(s)                    (none issued at "/") -- maybe better try target URL of 30x
 Security headers             --
 Reverse Proxy banner         --


 Testing vulnerabilities

 Heartbleed (CVE-2014-0160)                not vulnerable (OK), no heartbeat extension
 CCS (CVE-2014-0224)                       not vulnerable (OK)
 Ticketbleed (CVE-2016-9244), experiment.  not vulnerable (OK), no session ticket extension
 ROBOT                                     Server does not support any cipher suites that use RSA key transport
 Secure Renegotiation (RFC 5746)           supported (OK)
 Secure Client-Initiated Renegotiation     not vulnerable (OK)
 CRIME, TLS (CVE-2012-4929)                not vulnerable (OK)
 BREACH (CVE-2013-3587)                    no gzip/deflate/compress/br HTTP compression (OK)  - only supplied "/" tested
 POODLE, SSL (CVE-2014-3566)               not vulnerable (OK), no SSLv3 support
 TLS_FALLBACK_SCSV (RFC 7507)              No fallback possible (OK), no protocol below TLS 1.2 offered
 SWEET32 (CVE-2016-2183, CVE-2016-6329)    not vulnerable (OK)
 FREAK (CVE-2015-0204)                     not vulnerable (OK)
 DROWN (CVE-2016-0800, CVE-2016-0703)      not vulnerable on this host and port (OK)
                                           make sure you don't use this certificate elsewhere with SSLv2 enabled services, see
                                           https://search.censys.io/search?resource=hosts&virtual_hosts=INCLUDE&q=E79D3ACF988370EF01620C00F003E92B137FFB4EE992A5B1CE3755931561629D
 LOGJAM (CVE-2015-4000), experimental      not vulnerable (OK): no DH EXPORT ciphers, no common prime detected
 BEAST (CVE-2011-3389)                     not vulnerable (OK), no SSL3 or TLS1
 LUCKY13 (CVE-2013-0169), experimental     not vulnerable (OK)
 Winshock (CVE-2014-6321), experimental    not vulnerable (OK)
 RC4 (CVE-2013-2566, CVE-2015-2808)        no RC4 ciphers detected (OK)


 Running client simulations (HTTP) via sockets

 Browser                      Protocol  Cipher Suite Name (OpenSSL)       Forward Secrecy
------------------------------------------------------------------------------------------------
 Android 6.0                  TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
 Android 7.0 (native)         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)
 Android 8.1 (native)         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)
 Android 9.0 (native)         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Android 10.0 (native)        TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Android 11 (native)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Android 12 (native)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Chrome 79 (Win 10)           TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Chrome 101 (Win 10)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Firefox 66 (Win 8.1/10)      TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Firefox 100 (Win 10)         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 IE 6 XP                      No connection
 IE 8 Win 7                   No connection
 IE 8 XP                      No connection
 IE 11 Win 7                  TLSv1.2   DHE-RSA-AES256-GCM-SHA384         2048 bit DH
 IE 11 Win 8.1                TLSv1.2   DHE-RSA-AES256-GCM-SHA384         2048 bit DH
 IE 11 Win Phone 8.1          No connection
 IE 11 Win 10                 TLSv1.2   ECDHE-RSA-AES256-GCM-SHA384       256 bit ECDH (P-256)
 Edge 15 Win 10               TLSv1.2   ECDHE-RSA-AES256-GCM-SHA384       253 bit ECDH (X25519)
 Edge 101 Win 10 21H2         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Safari 12.1 (iOS 12.2)       TLSv1.3   TLS_CHACHA20_POLY1305_SHA256      253 bit ECDH (X25519)
 Safari 13.0 (macOS 10.14.6)  TLSv1.3   TLS_CHACHA20_POLY1305_SHA256      253 bit ECDH (X25519)
 Safari 15.4 (macOS 12.3.1)   TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 Java 7u25                    No connection
 Java 8u161                   TLSv1.2   ECDHE-RSA-AES256-GCM-SHA384       256 bit ECDH (P-256)
 Java 11.0.2 (OpenJDK)        TLSv1.3   TLS_AES_128_GCM_SHA256            256 bit ECDH (P-256)
 Java 17.0.3 (OpenJDK)        TLSv1.3   TLS_AES_256_GCM_SHA384            253 bit ECDH (X25519)
 go 1.17.8                    TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)
 LibreSSL 2.8.3 (Apple)       TLSv1.2   ECDHE-RSA-CHACHA20-POLY1305       253 bit ECDH (X25519)
 OpenSSL 1.0.2e               TLSv1.2   ECDHE-RSA-AES256-GCM-SHA384       256 bit ECDH (P-256)
 OpenSSL 1.1.0l (Debian)      TLSv1.2   ECDHE-RSA-AES256-GCM-SHA384       253 bit ECDH (X25519)
 OpenSSL 1.1.1d (Debian)      TLSv1.3   TLS_AES_256_GCM_SHA384            253 bit ECDH (X25519)
 OpenSSL 3.0.3 (git)          TLSv1.3   TLS_AES_256_GCM_SHA384            253 bit ECDH (X25519)
 Apple Mail (16.0)            TLSv1.2   ECDHE-RSA-AES256-GCM-SHA384       256 bit ECDH (P-256)
 Thunderbird (91.9)           TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)


 Rating (experimental)

 Rating specs (not complete)  SSL Labs's 'SSL Server Rating Guide' (version 2009q from 2020-01-30)
 Specification documentation  https://github.com/ssllabs/research/wiki/SSL-Server-Rating-Guide
 Protocol Support (weighted)  100 (30)
 Key Exchange     (weighted)  90 (27)
 Cipher Strength  (weighted)  90 (36)
 Final Score                  93
 Overall Grade                A+

 Done 2025-01-21 09:46:08 [  66s] -->> 51.159.34.231:443 (sklein.xyz) <<--

Mardi 31 décembre 2024

Déploiement de Sish #selfhosting, #tooling, #dev-kit

J'ai publié deux nouveaux playgrounds :

Cela fait depuis 2018 que je souhaite tester la génération d'un certificat de type "wildcard" avec le challenge DNS-01 de la version 2 de ACME.
Bonne nouvelle, j'ai testé avec succès cette fonctionnalité dans le playground : dnsrobocert-playground.

Est-ce que je vais généraliser l'usage de certificats wildcard générés avec un challenge DNS-01 à la place de multiples challenge HTTP-01 ?
Pour le moment, je n'en ai aucune idée. J'ai utilisé un challenge DNS-01 pour déployer sish.

L'avantage d'un certificat wildcard réside dans le fait qu'il n'a besoin d'être généré qu'une seule fois et peut ensuite être utilisé pour tous les sous-domaines. Toutefois, il doit être mis à jour tous les 90 jours.
Actuellement, je n'ai pas trouvé de méthode pratique pour automatiser son déploiement. Par exemple, pour nginx, il serait nécessaire d'automatiser l'upload du certificat dans le volume du conteneur nginx, ainsi que l'exécution de la commande nginx -s reload pour recharger le certificat.

Concernant le second playground, j'ai réussi à déployer avec succès sish.
Voici un exemple d'utilisation :

$ ssh -p 2222 -R test:80:localhost:8080 playground.stephane-klein.info
Press Ctrl-C to close the session.

Starting SSH Forwarding service for http:80. Forwarded connections can be accessed via the following methods:
HTTP: http://test.playground.stephane-klein.info
HTTPS: https://test.playground.stephane-klein.info

Je trouve l'usage plutôt simple.

Je compte déployer sish sur sish.stephane-klein.info pour mon usage personnel.

Lundi 23 décembre 2024

Journal du lundi 23 décembre 2024 à 19:39 #selfhosting, #proxmox, #DevOps, #bug, #iteration

J'ai commencé le Projet GH-271 - Installer Proxmox sur mon serveur NUC Intel i3-5010U, 8Go de Ram le 9 octobre.
Le 27 octobre, j'ai publié la note 2024-10-27_2109 qui contient une erreur qui m'a fait perdre 14h !

La ligne en question :

# virt-customize -a noble-server-cloudimg-amd64.img --install qemu-guest-agent --run-command 'systemctl enable qemu-guest-agent.service'
[   0.0] Examining the guest ...
[   4.5] Setting a random seed
virt-customize: warning: random seed could not be set for this type of
guest
[   4.5] Setting the machine ID in /etc/machine-id
[   4.5] Installing packages: qemu-guest-agent

[  32.1] Running: systemctl enable qemu-guest-agent.service
[  32.6] Finishing off

Je n'avais pas fait attention au message Setting the machine ID in /etc/machine-id 🙊.

Conséquence : le template Proxmox Ubuntu contenait un fichier /etc/machine-id avec un id.
Conséquence : toutes les Virtual machine que je créais sous Proxmox avaient la même valeur machine-id.

J'ai découvert que l'option 61 "Client identifier" du protocole DHCP permet de passer un client id au serveur DHCP qui sera utilisé à la place de l'adresse MAC.

Conséquence : le serveur DHCP assignait la même IP à ces Virtual machine.

J'ai pensé que le serveur DHCP de mon router BBox avait un problème. J'ai donc décidé d'installer Projet 15 - Installation et configuration de OpenWrt sur Xiaomi Mi Router 4A Gigabit pour avoir une meilleure maitrise du serveur DHCP.

Problème : j'ai fait face au même problème avec le serveur DHCP de OpenWrt.

Après quelques recherches, j'ai découvert que contrairement à virt-customize la commande virt-sysprep permet d'agir sur des images qui ont vocation à être clonées.

"Sysprep" stands for "system preparation" tool. The name comes from the Microsoft program sysprep.exe which is used to unconfigure Windows machines in preparation for cloning them.

source

Pour corriger le problème, j'ai remplacé cette ligne :

# virt-customize -a noble-server-cloudimg-amd64.img --install qemu-guest-agent --run-command 'systemctl enable qemu-guest-agent.service'

Par ces deux lignes :

# virt-sysprep -a noble-server-cloudimg-amd64.img --network --install qemu-guest-agent --run-command 'systemctl enable qemu-guest-agent.service'
# virt-sysprep --operation machine-id -a noble-server-cloudimg-amd64.img

La seconde commande permet de supprimer le fichier /etc/machine-id, ce qui corrige le problème d'attribution d'IP par le serveur DHCP.

À noter que je ne comprends pas pourquoi il est nécessaire de lancer explicitement cette seconde commande, étant donné que la commande virt-sysprep est destinée aux images de type "template". Le fichier /etc/machine-id ne devrait jamais être créé, ou tout du moins, automatiquement supprimé à la fin de chaque utilisation de virt-sysprep.

Maintenant, l'instanciation de Virtual machine fonctionne bien, elles ont des IP différentes 🙂.

Prochaine étape du Projet GH-271 :

Je souhaite arrive à effectuer un déploiement d'une Virtual instance via cli de Terraform.

Mercredi 27 novembre 2024

Journal du mercredi 27 novembre 2024 à 14:33 #selfhosting, #network, #maclass

Un ami m'a partagé ce thread au sujet de l'IP fixe chez Bouygues qui semble indiquer que l'offre fibre de Bouygues ne propose pas d'IP fixe ?

En pratique, je constate que l'IP publique de ma fibre est fixe depuis plus d'un an : 176.142.86.141.

Voici, ci-dessous, les informations que j'ai trouvées à ce sujet.

Dans le document "Comparatif des offres en fibre optique des principaux opérateurs grand public en France, au 15 juillet 2024" du site lafibre.info, concernant la fibre de Bouygues, je lis :

  • IPv4 fixe (dédiée ou mutualisée 8 064 ports.
  • IPv4 dédiée gratuite sur demande.
  • Plage IPv6 /60 fixe pour tous les clients

Dans le document "2024-07 ARCEP Baromètre ipv6 - partage ipv4" du site lafibre.info, je lis, concernant la fibre de Bouygues :

  • Option IPv4 dédié gratuite.
  • Pourcentage de clients avec une IPv4 dédiée : 90 %.
  • Adresse fixes ou dynamiques (une IP ou prefixe dit « fixe » peut changer exceptionnelement, lors d'évolutions réseau / SI) :
    • IPv4 publique fixe
    • Préfixe IPv6 fixe

Voici mon interprétation : je pense que l'IP de l'offre fibre de Bouygues est fixe, mais peut exceptionnellement changer.

C'est ce que semble confirmer la personne membre du support technique de Bouygues dans le thread mentionné en début de cette note :

L'adresse IP publique de votre accès Internet peut changer de manière exceptionnelle, comme par exemple suite à des actions menées au niveau du DSLAM ou le NRA par exemple.

source #maclass

Jeudi 14 novembre 2024

Journal du jeudi 14 novembre 2024 à 10:26 #dns, #DomainName, #open-source, #selfhosting, #JaiDécouvert

#JaiDécouvert DomainMOD :

DomainMOD is a self-hosted open source application used to manage your domains and other Internet assets in a central location.

Mercredi 13 novembre 2024

Dimanche 27 octobre 2024

Journal du dimanche 27 octobre 2024 à 21:09 #proxmox, #selfhosting, #DevOps, #iteration

Nouvelle #iteration du Projet GH-271 - Installer Proxmox sur mon serveur NUC Intel i3-5010U, 8Go de Ram.

J'ai eu des difficultés à trouver comment déployer avec Proxmox des Virtual instance basées sur Ubuntu Cloud Image.

J'ai trouvé réponse à mes questions dans cet article : "Perfect Proxmox Template with Cloud Image and Cloud Init".
Mais depuis, j'ai trouvé un meilleur tutoriel : "Linux VM Templates in Proxmox on EASY MODE using Prebuilt Cloud Init Images!".

Création d'un template Ubuntu LTS

J'ai exécuté les commandes suivantes en SSH sur mon serveur NUC i3 pour créer un template de VM Proxmox.

root@nuci3:~# apt update -y && apt install libguestfs-tools jq -y
root@nuci3:~# wget https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img

Ancienne commande qui contient une erreur à ne pas utilisé, plus d'information dans la note 2024-12-23_1939 :

root@nuci3:~# virt-customize -a noble-server-cloudimg-amd64.img --install qemu-guest-agent --run-command 'systemctl enable qemu-guest-agent.service'
root@nuci3:~# virt-sysprep -a noble-server-cloudimg-amd64.img --network --install qemu-guest-agent --run-command 'systemctl enable qemu-guest-agent.service'
root@nuci3:~# virt-sysprep --operation machine-id -a noble-server-cloudimg-amd64.img
root@nuci3:~# qm create 8000 --memory 2048 --core 2 --name ubuntu-cloud-template --net0 virtio,bridge=vmbr0
root@nuci3:~# qm disk import 8000 noble-server-cloudimg-amd64.img local-lvm
transferred 3.5 GiB of 3.5 GiB (100.00%)
transferred 3.5 GiB of 3.5 GiB (100.00%)
Successfully imported disk as 'unused0:local-lvm:vm-8000-disk-0'
root@nuci3:~# rm noble-server-cloudimg-amd64.img
root@nuci3:~# qm set 8000 --scsihw virtio-scsi-pci --scsi0 local-lvm:vm-8000-disk-0
update VM 8000: -scsi0 local-lvm:vm-8000-disk-0 -scsihw virtio-scsi-pci
root@nuci3:~# qm set 8000 --ide2 local-lvm:cloudinit
update VM 8000: -ide2 local:cloudinit
Formatting '/var/lib/vz/images/8000/vm-8000-cloudinit.qcow2', fmt=qcow2 cluster_size=65536 extended_l2=off preallocation=metadata compression_type=zlib size=4194304 lazy_refcounts=off refcount_bits=16
ide2: successfully created disk 'local:8000/vm-8000-cloudinit.qcow2,media=cdrom'
generating cloud-init ISO

(liste des paramètres cloud-init)

root@nuci3:~# qm set 8000 --ipconfig0 "ip6=auto,ip=dhcp"
root@nuci3:~# qm set 8000 --sshkeys ~/.ssh/authorized_keys
root@nuci3:~# qm set 8000 --ciuser stephane
root@nuci3:~# qm set 8000 --cipassword password # optionnel, seulement en phase de debug
root@nuci3:~# qm set 8000 --boot c --bootdisk scsi0
update VM 8000: -boot c -bootdisk scsi0
root@nuci3:~# qm set 8000 --serial0 socket --vga serial0
update VM 8000: -serial0 socket -vga serial0
root@nuci3:~# qm set 8000 --agent enabled=1
root@nuci3:~# qm set 8000 --ciupgrade 0
root@nuci3:~# qm template 8000
  Renamed "vm-8000-disk-0" to "base-8000-disk-0" in volume group "pve"
  Logical volume pve/base-8000-disk-0 changed.
  WARNING: Combining activation change with other commands is not advised.

Création d'une Virtual Instance

root@nuci3:~# qm clone 8000 100 --name server1
root@nuci3:~# qm start 100
root@nuci3:~# qm guest cmd 100 network-get-interfaces | jq -r '.[] | select(.name == "eth0") | .["ip-addresses"][0] | .["ip-address"]'
192.168.1.64
$ ssh stephane@192.168.1.64
The authenticity of host '192.168.1.64 (192.168.1.64)' can't be established.
ED25519 key fingerprint is SHA256:OJHcY3GHOsm3I4qcsYFc6V4qePNxVS4iAOBsDjeLM7o.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.1.64' (ED25519) to the list of known hosts.
Welcome to Ubuntu 24.04.1 LTS (GNU/Linux 6.8.0-45-generic x86_64)
...

Dimanche 20 octobre 2024

Mercredi 9 octobre 2024

Journal du mercredi 09 octobre 2024 à 23:52 #proxmox, #selfhosting, #DevOps, #iteration

#iteration Projet GH-271 - Installer Proxmox sur mon serveur NUC Intel i3-5010U, 8Go de Ram.

J'ai installé avec succès la version 8.2.2 de Proxmox sur mon Serveur NUC i3 gen 5.

J'ai copié l'image ISO de Proxmox sur une clé USB.

J'ai branché un clavier et un moniteur sur mon Serveur NUC i3 gen 5 et j'ai suivi la procédure d'installation sans rencontrer de difficulté.

Je peux me connecter au serveur via l'interface web de Proxmox ou directement via ssh.

Prochaine étape : déployer une Virtual instance Ubuntu LTS.

Mercredi 2 octobre 2024

Journal du mercredi 02 octobre 2024 à 10:04 #git, #forge, #selfhosting, #search-engine, #JaiDécouvert

#JaiDécouvert Sourcebot (from) :

Sourcebot is an open-source code search tool that allows you to quickly search across many large codebases.

C'est une alternative à Sourcegraph.

Je suis ravi de voir qu'il existe de plus en plus d'alternatives communautaires à GitHub ou GitLab, comme Forgejo, Weblate, Woodpecker CI et maintenant Sourcebot.

Journal du mercredi 02 octobre 2024 à 09:55 #http-proxy, #selfhosting, #DevOps, #JaiDécouvert

#JaiDécouvert Kamal Proxy (from) « A minimal HTTP proxy for zero-downtime deployments » codé en Golang. Un projet Basecamp qui fonctionne avec kamal.

Cela attire ma curiosité, parce que la semaine dernière, je réfléchissais comment implémenter la fonctionnalité Skew Protection en self hosted, voir aussi 2023-07-04_1735.

Mardi 1 octobre 2024

Mardi 10 septembre 2024

Journal du mardi 10 septembre 2024 à 17:55 #OnMaPartagé, #selfhosting

Un ami m'a partagé Reclaim-the-Stack. J'aime bien l'initiative, mais pour mes besoins spécifiques, qui sont bien plus modestes, je préfère opter pour une solution plus minimaliste, comme Kamal.

Lundi 9 septembre 2024

Journal du lundi 09 septembre 2024 à 15:59 #admin-sys, #DevOps, #Doctrine, #selfhosting

Dans cette note, je souhaite présenter ma doctrine de mise à jour d'OS de serveurs.

Je ne traiterai pas ici de la stratégie d'upgrade pour un Cluster Kubernetes.

La mise à jour d'un serveur, par exemple, sous un OS Ubuntu LTS, peut être effectuée avec les commandes suivantes :

  • sudo apt upgrade -y
  • ou sudo apt dist-upgrade -y (plus risqué)
  • ou sudo do-release-upgrade (encore plus risqué)

L'exécution d'un sudo apt upgrade -y peut :

  • Installer une mise à jour de docker, entraînant une interruption des services sur ce serveur de quelques secondes à quelques minutes.
  • Installer une mise à jour de sécurité du kernel, nécessitant alors un redémarrage du serveur, ce qui entraînera une coupure de quelques minutes.

Une montée de version de l'OS via sudo do-release-upgrade peut prendre encore plus de temps et impliquer des ajustements supplémentaires.

Bien que ces opérations se déroulent généralement sans encombre, il n'y a jamais de certitude totale, comme l'illustre l'exemple de la Panne informatique mondiale de juillet 2024.

Sachant cela, avant d'effectuer la mise à jour d'un serveur, j'essaie de déterminer quelles seraient les conséquences d'une coupure d'une journée de ce serveur.

Si je considère que ce risque de coupure est inacceptable ou ne serait pas accepté, j'applique alors la méthode suivante pour réaliser mon upgrade.

Je n'effectue pas la mise à jour le serveur existant. À la place, je déploie un nouveau serveur en utilisant mes scripts automatisés d'Infrastructure as code / GitOps.

C'est pourquoi je préfère éviter de nommer les serveurs d'après le service spécifique qu'ils hébergent (voir aussi Pets vs Cattle). Par exemple, au lieu de nommer un serveur gitlab.servers.example.com, je vais le nommer server1.servers.example.com et configurer gitlab.servers.example.com pour pointer vers server1.servers.example.com.

Ainsi, en cas de mise à jour de server1.servers.example.com, je crée un nouveau serveur nommé server(n+1).servers.example.com.

Ensuite, je lance les scripts de déploiement des services qui étaient présents sur server1.servers.example.com.

Idéalement, j'utilise mes scripts de restauration des données depuis les sauvegardes des services de server1.servers.example.com, ce qui me permet de vérifier leur bon fonctionnement. Ensuite, je prépare des scripts rsync pour synchroniser rapidement les volumes entre server1.servers.example.com et server(n+1).servers.example.com.

Je teste que tout fonctionne bien sur server(n+1).servers.example.com.

Si tout fonctionne correctement, alors :

  • J'arrête les services sur server(n+1).servers.example.com ;
  • J'exécute le script de synchronisation rsync de server1.servers.example.com vers server(n+1).servers.example.com ;
  • Je relance les services sur server(n+1).servers.example.com
  • Je modifie la configuration DNS pour faire pointer les services de server1.servers.example.com vers server(n+1).servers.example.com
  • Quelques jours après cette intervention, je décommissionne server1.servers.example.com.

Cette méthode est plus longue et plus complexe qu'une mise à jour directe de l'OS sur le server1.servers.example.com, mais elle présente plusieurs avantages :

  • Une grande sécurité ;
  • L'opération peut être faite tranquillement, sans stress, avec de la qualité ;
  • Une durée de coupure limitée et maîtrisée ;
  • La possibilité de confier la tâche en toute sécurité à un nouveau DevOps ;
  • La garantie du bon fonctionnement des scripts de déploiement automatisé ;
  • La vérification de l'efficacité des scripts de restauration des sauvegardes ;
  • Un test concret des scripts et de la documentation du Plan de reprise d'activité.

Si le serveur à mettre à jour fonctionne sur une Virtual instance, il est également possible de cloner la VM et de tester la mise à niveau. Cependant, je préfère éviter cette méthode, car elle ne permet pas de valider l'efficacité des scripts de déploiement.

Dimanche 8 septembre 2024

Mardi 27 août 2024

Journal du mardi 27 août 2024 à 14:23 #selfhosting, #admin-sys, #JeMeDemande, #deployment, #JaiLu, #JaiDécouvert

#JaiLu en partie le thread Hacker News Dokku: My favorite personal serverless platform.

#JaiDécouvert :

J'ai apprécié ce tableau de comparaison de fonctionnalités entre dokploy, CapRover, Dokku et Coolify.

C'est la ligne "Docker compose support" qui a attiré mon attention.
Je reste très attaché au support de docker compose qui je trouve est une spécification en même temps simple, complète et flexible qui ne m'a jamais déçu ces 9 dernières années.

Attention, je n'ai pas bien compris si Dokku est réellement open source ou non 🤔.


Je constate que Dokploy est basé sur Docker Swarm.

Dokploy leverages Docker Swarm to orchestrate and manage container deployments for your applications, providing an intuitive interface for monitoring and control.

-- from

Choix qui me paraît surprenant puisque Docker Swarm est officieusement déprécié.

Je me suis demandé si K3s pourrait être une alternative à Docker Swarm 🤔.

Mardi 30 juillet 2024

Journal du mardi 30 juillet 2024 à 16:33 #selfhosting, #open-source, #OnMaPartagé, #JeMeDemande

#OnMaPartagé LibreTranslate :

Free and Open Source Machine Translation API. Self hosted, offline capable and easy to setup.

Qui utilise Argos Translate :

Open Source offline translation library written in Python.

Qui utilise OpenNMT.

Open source ecosystem for neural machine translation and neural sequence learning.

#JeMeDemande quelle est la différence en termes de qualité de traduction et de consommation d'énergie entre la technologie OpenNMT et les modèles de langage classiques tels que Llama 🤔.

Un ami m'a dit que DeepL utilise un Neural Machine Translation. Ce que semble confirmer cette source.

Mercredi 1 mai 2024

Journal du mercredi 01 mai 2024 à 16:06 #coding, #dotenv, #JeMeDemande, #vault, #selfhosting, #JaiLu

Je suis en train de lire la documentation de dotenv-vault, j'ai beau relire plusieurs fois cette documentation, je n'arrive pas à comprendre où est stocker la configuration 🤔.


5 minutes après, je pense avoir compris, la libraire dotenv-vault est basé sur le service SaaS https://www.dotenv.org/.


5 minutes après, #JaiLu Dotenv Vault vs Infisical | Dotenv.

Jeudi 25 avril 2024

Journal du jeudi 25 avril 2024 à 20:44 #dedibox, #hosting, #selfhosting, #scaleway

Le 25 octobre 2020, j'ai commandé et installé un serveur Dedibox (Start-2-S-SSD - Intel® C2350 (Avoton) - 4 GB DDR3 - 1x 120 GB SSD) que j'ai nommé perier

Position du serveur : Datacenter: AMS1, Room: Hall 6 12, Rack: 6.12.53, Block: C, Position: 8.

Prix de cette machine : 5,48 € TCC par mois, 66 € / an.
Coût total entre octobre 2020 et avril 2024 : 42 mois x 5,48 € = 230 €.

Aucune panne, pendant 42 mois.

J'utilisais cette machine principalement pour du stockage web statique.
J'y hébergeais https://sklein.xyz.

Ce jeudi 25 avril 2024, cette machine est tombée en panne, réponse du support :

Navré de la situation, il s'agit d'une erreur matérielle qui ne permet pas la récupération de données. Pourriez-vous vérifier l'état de vos sauvegardes.

Chose surprenante, le même modèle de serveur de mon ami AM a, lui aussi, une panne matérielle, exactement au même moment que moi.

Autre chose surprenante, la panne est tombée le même jour que cet incident déclaré sur https://status.scaleway.com/ :

[DEDIBOX] - Switch down in AMS1 Hall 6 rack B53
Resolved - This incident is resolved
Apr 25, 14:28 CEST
Investigating - Dedibox switch located in AMS1 Hall 6 rack B53 is currently down
Apr 25, 10:20 CEST

Le support m'a dit qu'il n'y a aucun lien entre cette panne et la panne matérielle de mon serveur.
J'en doute 🤔.


Je ne suis pas surpris de cette panne, d'après mes souvenirs, cette machine était reconditionnée, très vieille, j'avais bien conscience qu'une panne pouvait arriver à tout moment.

C'est la première fois que j'ai ce type de panne définitive depuis que j'utilise des serveurs dédiés Dedibox Scaleway, depuis 2006.


Au passage, j'ai perdu tout mon contenu de https://stats.sklein.xyz/

Lundi 6 novembre 2023

Mercredi 7 juin 2023

Journal du mercredi 07 juin 2023 à 19:37 #llm, #MachineLearning, #selfhosting, #JaiDécouvert

#JaiDécouvert le projet PrivateGPT (https://github.com/zylon-ai/private-gpt).

Cela fait plusieurs mois que je souhaite trouver une solution pour self hosted une alternative à ChatGPT. J'ai bien envie de tester ce projet.

Vendredi 28 janvier 2022

Journal du vendredi 28 janvier 2022 à 20:00 #selfhosting, #hardware

J'ai acheté un Serveur NUC i3 gen 5 d'occasion pour 150 € sur LeBonCoin, avec pour objectif de l'utiliser comme serveur Homelab.

Je prévois d'y installer Proxmox pour déployer des Virtual Instances.

Fin de la liste des notes.