1. Home
  2. Expertise

Your site will run here. And here, everything is documented.

No anonymous “cloud”: an infrastructure I build, monitor, and whose every technical choice I publish: context, options, decision, outcome. Incidents included.

Continuous monitoringan outage is seen before your call
Backups 3-2-1multiple copies, one off site, encrypted
Private administrationinvisible from the Internet

A deliberately redacted view: no address, no port, no exact topology. Showing the reasoning does not weaken what it serves.

The path of a request

What happens between the click and the page.

Each step exists for a reason, and each has its decision record below (in French). This is the path running for the sites I host, this one included.

A visit arrives

From the visitor's browser to the served page

  1. A visitor clicksfrom a search engine, a link, a bookmark
  2. Certificate checkedTLS renewed automatically
  3. Single front doorone exposed entry point, hardened headers
  4. The right containerisolated, no access to the others
  5. The page arrivesserved, measured, monitored

In parallel, unrelated to the visitor: encrypted backups every night, continuous monitoring, and administration that never goes through the Internet.

Documented decisions

Every building block, explained.

The format never changes: context, constraints, options considered, decision, outcome. Records are written in French.

Backups 3-2-1 & restore

Multiple copies on multiple media, one encrypted off site, and a restore procedure written cold.

Reliability · Security

Front door & certificates

A single entry point, automatic TLS, security headers: the façade of every hosted site.

Reliability · Security

SSH down after a reboot

A deliberate hardening unknowingly coupled to the private network's boot: diagnosis, a one-line fix, a regression test.

Decision + post-mortem

Secrets management

Nothing in plain text in code or database: file injection, hashed tokens, self-hosted vault.

Security
Operations journal

Outages happen. Here is how I handle them.

A provider claiming to never have outages is lying to you. Every real incident has its public post-mortem (in French): symptom, diagnosis, fix, lesson.

SSH indisponible après un reboot : la panne qui dormait (in French)

Symptôme. Reboot de maintenance planifié (mises à jour de sécurité, noyau en attente), le premier depuis des mois. Tout redémarre seul : sites clients en ligne, conteneurs relancés par leurs politiques Docker, le pair qui répond sur le maillage Tailscale. Tout, sauf SSH : « Connection refused » immédiat, sur l’adresse publique comme sur celle du VPN. La machine répond, mais rien n’écoute.

Diagnostic. Une vingtaine de minutes entre le premier refus et le retour de SSH, via la console KVM out-of-band d’OVHcloud (clavier interprété en QWERTY compris). systemctl status ssh donne le verdict : sshd, volontairement restreint à l’adresse du VPN maillé (durcissement zero-trust), a démarré avant que Tailscale ne monte son interface. L’adresse n’existait pas encore, le bind a échoué, sshd a épuisé ses tentatives et est resté couché. Le serveur n’avait jamais redémarré depuis ce durcissement : la panne dormait là depuis des mois.

Correctif. net.ipv4.ip_nonlocal_bind=1 dans /etc/sysctl.d/ : sshd peut se binder sur une adresse qui n’existe pas encore, et n’écoute toujours que sur le VPN. Vérifié par un test qui reproduit les conditions du boot (VPN coupé, sshd redémarré, service actif). Les options écartées et le tradeoff sont détaillés dans la décision complète.

Ce que ça a changé. Un service qui tourne depuis des mois n’a jamais prouvé qu’il savait démarrer : seul un reboot le prouve, et ils font désormais partie de la maintenance régulière. Et le chemin de secours (console out-of-band) reste volontairement indépendant de tout le reste : c’est lui qui a permis de régler l’incident en vingt minutes.

Panne chez l'hébergeur : serveur injoignable (in French)

Symptôme. Vendredi 19 juin, mi-journée : plus aucun nom de domaine ne résout sur les appareils du tailnet, alors que la connexion Internet est bonne. Cause immédiate : ces appareils utilisent le DNS interne de la plateforme comme résolveur, et le serveur qui l’héberge ne répond plus.

Diagnostic. Connexion correcte mais résolution muette : le problème est du côté du serveur. Confirmation rapide chez l’hébergeur : incident de refroidissement dans le datacenter de Roubaix, annoncé sur la page de statut d’OVHcloud (source publique). Environ deux heures trente d’indisponibilité vécue pour ce serveur ; la résolution complète de l’incident a pris une douzaine d’heures pour les derniers serveurs touchés.

Correctif. Aucun levier pendant l’incident : la panne est physique, chez l’hébergeur. Le travail utile se fait avant et après.

Ce que ça a changé. Deux enseignements. La dépendance DNS d’abord : faire du serveur le résolveur des appareils du tailnet transforme une panne d’hébergeur en panne de résolution générale sur tous les appareils. Corrigé depuis : un résolveur de secours est déclaré dans la configuration DNS du tailnet, les appareils gardent une résolution si le serveur ne répond plus. Le mono-serveur ensuite : le risque est connu et accepté à cette échelle, et une infrastructure multi-serveurs reste un objectif d’apprentissage (chantier au-delà du mono-serveur). Changer d’hébergeur ne protégerait de rien : ce type d’incident peut arriver partout.

Une mise à jour automatique coupe l'accès aux services privés (in French)

Symptôme. Tous les services privés répondent 403 : coffre de mots de passe, outils internes, dashboards. Les sites publics fonctionnent normalement. Découvert deux jours après le début de l’incident, en remarquant que le coffre de mots de passe ne se synchronisait plus : les services du tailnet ne servent pas tous les jours, la panne est restée silencieuse le temps d’un week-end.

Diagnostic (1 h 30). Les logs du reverse proxy montrent une adresse source en 172.x, celle de la passerelle du réseau Docker, au lieu de l’adresse tailnet du client. Le filtre tailscale-only, qui n’autorise que le réseau privé, refuse donc tout le monde. Remontée de piste : Tailscale s’était mis à jour automatiquement quelques jours plus tôt, et la nouvelle version introduit des règles de marquage de connexions qui, combinées au masquerading existant, réécrivent la source des paquets entrants avant qu’ils n’atteignent les conteneurs.

Correctif. Désactivation persistante du SNAT des routes locales côté Tailscale, sans effet de bord ici puisque ce nœud ne route aucun sous-réseau.

Ce que ça a changé. Deux jours d’incident silencieux sur la moitié de la plateforme, détectés par un hasard d’usage : c’est précisément ce que le chantier observabilité et alerting de la roadmap doit rendre impossible. Leçon complémentaire : une mise à jour automatique peut modifier le comportement réseau à bas niveau ; pour les composants réseau, lire le changelog avant de mettre à jour, quitte à épingler la version.

Method

Simple, written, no surprises.

You always know where your project stands, what it costs, and who to call.

  1. Conversationon site or by video call
    free
  2. Quotedetailed, within 48 h
    free
  3. Buildregular progress updates
  4. Go-livejoint acceptance, training
  5. Maintenancemonitored, backed up, reachable

Reply within one business day

to every enquiry, from the person doing the work.

Detailed quote within 48 h

free, line by line, no commitment.

A written framework

signed quote, deposit on order, balance at go-live.

Everything is yours

domain name, code, content and data: in your name, exportable, reversible.

AI agents are part of the workshop: they speed up building, testing and monitoring, and that gain shows in your quotes. Reviewing, deciding and answering for the work stay human: I sign it.How I work with agents (in French) →

The person behind it

One person, reachable.

I am Alexandre Cooreman, an independent developer in northern France. I design the sites and tools, host them, monitor them, and when something breaks, I am the one you call.

Sole proprietorshipBased near Cambrai, FranceOn site: Cambrai · Valenciennes · DouaiRemote across Europe

Documents: Technical career ·CV (French) · CV (English) · LinkedIn

Going further

Technical notes.

Sharp topics treated short, for the curious and for peers: how I work with AI agents, DNS-based certificates, the message delivery queue. Written in French.

Read the technical notes (in French)
the logical next step

This infrastructure can host your tools.

Managed hosting and maintenance: from €19 excl. VAT / month, a flat fee known in advance.

See the hosting offer