Documentation

Tout ce qu’il faut pour démarrer

Connectez un site en moins d’une minute et configurez votre stockage de sauvegarde en 10 minutes environ. Vous trouverez aussi comment afficher vos valeurs, restaurer un site, utiliser l’API et résoudre les problèmes courants.

Connecter un site

Trois étapes, aucune configuration serveur.

  1. 01

    Créez le site dans le Hub

    Sites → Connecter un site. Renseignez l’URL, le Hub génère un code d’installation à usage unique.

  2. 02

    Installez l’extension

    Téléchargez l’archive, puis Extensions → Ajouter → Téléverser dans votre WordPress. Activez-la.

  3. 03

    Collez le code

    Réglages → WP Control Hub, collez le code, validez. Le Hub détecte la connexion automatiquement.

Avec WP-CLI

Si vous gérez vos sites en ligne de commande, une seule commande suffit :

WP-CLI
wp wpch connect WPCH-7K2P-9QX4

Hub auto-hébergé

L’extension pointe par défaut vers le service hébergé. Pour un autre Hub, définissez la constante dans wp-config.php :

wp-config.php
define( 'WPCH_HUB_URL', 'https://hub.mondomaine.fr' );

Afficher une valeur

Quatre méthodes selon votre éditeur ou votre thème. Toutes utilisent le même cache local, sans requête réseau au chargement d’une page.

Shortcode

Dans un article, une page, un widget ou un constructeur de pages.

Shortcode
[wpch_value key="company.phone"]

PHP

Dans un gabarit de thème. Renvoie la chaîne déjà formatée et échappée.

PHP
<?php echo wpch_get_value( 'company.phone' ); ?>

Bloc Gutenberg

Ajoutez le bloc « Valeur WP Control Hub » et choisissez la clé dans la liste.

Elementor

Dans n’importe quel champ texte, cliquez sur l’icône de contenu dynamique et choisissez « Valeur WP Control Hub ».

Attributs et options

  • default : Texte affiché si la valeur est vide.
  • format : raw (défaut), html, ou link. Le format link produit un lien tel:, mailto: ou href selon le type.
Shortcode
[wpch_value key="company.email" format="link" default="-"]

Valeur brute

Pour les types structurés (adresse, horaires, liste, JSON), récupérez la donnée plutôt que son rendu :

PHP
<?php $hours = wpch_get_raw( 'company.opening_hours' ); ?>

Héritage des valeurs

Une valeur peut être définie à trois niveaux. La plus spécifique est prioritaire.

  1. Valeur propre au site
  2. Valeur du groupe le plus prioritaire
  3. Valeur de l’organisation
  4. Valeur par défaut de la variable

Si un site appartient à plusieurs groupes, celui dont la priorité est la plus élevée l’emporte. À priorité égale, le groupe le plus ancien est retenu. La résolution est déterministe : le même déploiement produit toujours le même résultat.

Vide volontaire

Effacer une valeur la fait hériter du niveau supérieur. Pour dire « ce site n’a pas de numéro », marquez-la comme volontairement vide : la chaîne d’héritage s’arrête là.

Sauvegardes et restauration

Chaque nuit, chaque site chiffre sa base de données et son wp-content, puis les dépose dans un espace de stockage qui vous appartient. Le hub programme, vérifie et restaure ; il ne détient jamais les archives.

Où sont stockées les archives ?

Les archives sont envoyées directement de vos sites vers votre stockage, sans transiter par nos serveurs. Aucune offre ni option ne comprend de stockage hébergé par WP Control Hub.

Ce que le hub conserve

  • L’inventaire : quel site, quelle date, complète ou incrémentale, et de quelle chaîne l’archive fait partie.
  • La taille de chaque morceau et son empreinte SHA-256, relevées avant l’envoi puis comparées à ce que le stockage annonce.
  • L’emplacement exact des objets dans votre stockage, pour les retrouver lors d’une restauration.
  • Les identifiants de la destination, chiffrés au repos. Le hub les utilise pour signer chaque envoi, avec une validité de cinq minutes limitée à un seul objet. Ils ne sont jamais stockés sur un site WordPress. Vous pouvez les révoquer chez votre fournisseur à tout moment.
  • Le journal d’activité : qui a lancé, annulé, supprimé ou restauré, et depuis quelle adresse.

Ce que le hub ne conserve jamais

  • Les archives elles-mêmes. Elles sont envoyées directement de votre site vers votre stockage, sans transiter par nos serveurs. Nous ne les téléchargeons pas.
  • Le contenu de vos bases de données, donc les données personnelles de vos visiteurs et les empreintes de mots de passe de vos utilisateurs.
  • wp-config.php, qui n’est pas sauvegardé du tout : seules les constantes utiles sont relevées une par une, pour ne pas déposer un mot de passe de base dans un bucket.
  • Une destination hébergée par WP Control Hub. Chaque destination appartient à une organisation cliente.

Gestion de la clé de chiffrement

Par défaut, le hub conserve la clé de votre organisation, chiffrée au repos, pour restaurer une sauvegarde sans vous demander de clé. Il détient alors la clé de déchiffrement, mais pas les archives. En mode phrase secrète, la clé est dérivée d’un secret auquel nous n’avons jamais accès. Si vous perdez cette phrase, vos archives deviennent illisibles. L’interface indique toujours le mode utilisé.

Choisir une destination

Deux destinations sont possibles, avec des protections différentes. Chaque politique de sauvegarde définit sa destination. Vous pouvez utiliser les deux : le disque du site pour annuler une mise à jour défaillante et votre stockage externe pour les autres sauvegardes.

Votre stockage externe

L’archive est stockée hors de l’hébergement du site. Le hub vérifie chaque morceau auprès du fournisseur, y compris sa taille et son empreinte. Ce contrôle permet d’afficher « Vérifiée par le hub ». Comptez 10 minutes de configuration et quelques euros par mois.

Le disque du site lui-même

Aucun compte de stockage ni paiement supplémentaire : la première sauvegarde peut être lancée tout de suite. L’archive reste chiffrée sur l’hébergement du site. Avant chaque sauvegarde, le site vérifie que le dossier des archives n’est pas accessible depuis Internet.

Les limites du stockage sur le site

  • En cas de panne du serveur, les sauvegardes sont touchées comme le reste du site.
  • Si l’hébergeur suspend le compte, les archives ne sont plus accessibles non plus.
  • En cas d’intrusion, les sauvegardes se trouvent sur le même serveur et peuvent être supprimées.
  • La sauvegarde de sécurité prise avant une restauration est stockée sur ce même serveur, avec les mêmes limites.

Comment les sauvegardes sont vérifiées

Le hub vérifie la présence des sauvegardes directement auprès de votre fournisseur de stockage. Il ne peut pas accéder au disque du site, protégé par un pare-feu. Une sauvegarde stockée sur le site porte donc la mention « Déclarée intacte par le site », jamais « Vérifiée par le hub ». Le hub demande au site de relire une partie précise de l’archive, puis compare l’empreinte renvoyée à celle enregistrée au moment de la sauvegarde. Ce contrôle détecte les archives supprimées, incomplètes ou abîmées, mais ne protège pas contre un site dont quelqu’un d’autre aurait pris le contrôle. La réponse est datée et expire après deux cycles ; l’interface indique alors que l’état est inconnu.

Blocage si les archives sont accessibles

Avant chaque sauvegarde locale, le site écrit un fichier témoin dans le répertoire des archives et tente de le récupérer par HTTP. Si le fichier est accessible ou si le test ne permet pas de conclure, la sauvegarde est bloquée et aucune archive n’est écrite. Une archive téléchargeable exposerait wp-config.php et la base complète du site. Ce contrôle est obligatoire. Le chiffrement reste actif et ne peut pas être désactivé pour cette destination.

Surveiller l’espace disque

Les archives locales occupent le quota d’hébergement de votre client. L’onglet Sauvegardes de chaque site affiche ce qu’elles occupent aujourd’hui, ce que la conservation prévue occupera, et l’espace libre annoncé par l’hébergement. Le tableau de bord du parc compte, lui, les sites qui n’ont aucune copie hors site.

Configurer un bucket

Un site ne peut pas sauvegarder tant que son organisation n’a pas de destination validée. Comptez dix minutes la première fois.

  1. 01

    Créez un bucket privé

    Chez Backblaze B2, Scaleway, Wasabi, OVH, Amazon S3 ou votre propre MinIO, dans la région de votre choix. Aucun accès public, et de préférence un bucket dédié aux sauvegardes.

  2. 02

    Créez une clé d’accès restreinte

    Restreinte à ce seul bucket, avec quatre droits : PutObject, GetObject, ListBucket et DeleteObject. Rien d’autre n’est nécessaire.

  3. 03

    Déclarez la destination

    Sauvegardes → Destinations → Ajouter. Fournisseur, région, nom du bucket, préfixe facultatif, identifiant et secret. Le secret est chiffré à l’enregistrement.

  4. 04

    Testez la connexion

    Il écrit un objet, le relit, le supprime, et affiche le résultat. Une destination qui n’a pas passé ce test ne peut pas être rattachée à une politique.

Droits minimum de la clé

La politique ci-dessous suffit. Remplacez le nom du bucket et, si vous en utilisez un, le préfixe.

policy.json
{
  "Version": "2012-10-17",
  "Statement": [
    { "Effect": "Allow",
      "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"],
      "Resource": "arn:aws:s3:::mon-bucket/wpch/*" },
    { "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": "arn:aws:s3:::mon-bucket" }
  ]
}

Activez le versioning

Sur un bucket sans versioning, un effacement ou une réécriture est définitif. C’est la meilleure protection contre un rançongiciel qui atteindrait aussi vos sauvegardes. Le hub détecte l’état du versioning et affiche un avertissement quand il est désactivé.

Ce qui se passe chaque nuit

Le site exécute la sauvegarde ; le hub autorise les envois et vérifie les résultats. Le processus est conçu pour reprendre après l’interruption d’une requête PHP.

  • Une politique s’applique à une organisation, un groupe ou un site, comme une valeur de contenu. Elle définit le créneau, la fréquence, la durée de conservation et la destination. Un site ajouté au groupe bénéficie de cette politique le soir même.
  • Le site découpe, compresse et chiffre sa base et son wp-content en morceaux, et les envoie un par un avec des URL signées par le hub pour cinq minutes. Chaque étape enregistre sa progression avant de rendre la main, et reprend là où elle s’était arrêtée.
  • À la fin, le hub vérifie auprès du stockage la présence, la taille et l’empreinte de chaque objet. La sauvegarde est marquée comme vérifiée uniquement après ce contrôle, indépendamment du résultat annoncé par le site.
  • Un contrôle indépendant du processus de sauvegarde signale sous vingt-quatre heures les sites qui ne sauvegardent plus. Il détecte aussi les sauvegardes qui n’ont jamais démarré.

Ce que fait une restauration

Restaurer réécrit des fichiers et des tables sur un site en production. La capacité est réservée aux administrateurs, et chaque étape est annoncée avant d’être exécutée.

  • L’écran annonce ce qui sera écrasé, et attend une confirmation explicite.
  • Une sauvegarde de sécurité de la base est prise avant la première écriture, et verrouillée contre la suppression.
  • Chaque étape destructrice écrit son intention dans un journal avant d’agir, ce qui rend le retour en arrière possible même après une interruption.
  • Trois résultats possibles : restauration terminée, retour à l’état précédent ou « à vérifier », avec la liste des fichiers et des tables concernés. Seule une restauration terminée est indiquée comme réussie.
  • Le contenu géré par le hub se resynchronise ensuite : vous ne restaurez pas le numéro de téléphone du mois dernier avec le site.

Limites des sauvegardes

Ces limites sont liées à la conception du système. Elles ne correspondent pas à des correctifs en attente.

Pas de cohérence à l’instant près

Une sauvegarde de 2 Go sur un hébergement mutualisé s’étale sur des heures. Le manifeste indique l’heure de début et de fin de chaque table, et l’interface affiche la durée réelle. Un fichier téléversé entre le parcours des fichiers et l’export de la base peut être référencé dans un article sans figurer dans l’archive.

Ni le cœur de WordPress, ni wp-config.php

Le cœur de WordPress peut être téléchargé à nouveau ; sa version exacte figure dans le manifeste. Pour éviter de conserver les identifiants de wp-config.php, seules les constantes utiles sont relevées : préfixe de tables, constantes multisite, chemins et mémoire. Le fichier lui-même est exclu.

Pas de restauration d’un article isolé

L’extracteur n’interprète pas le SQL et ne peut donc pas isoler une ligne. Il faut restaurer la table sous un préfixe temporaire, puis recopier la ligne souhaitée. La commande est documentée.

Votre stockage reste sous votre contrôle

Une règle de cycle de vie, une politique trop stricte ou une clé supprimée peuvent rendre des archives indisponibles. La vérification nocturne détecte ces changements sous vingt-quatre heures, sans détection immédiate.

Modifications non sauvegardées

Une restauration ne récupère pas les données créées ou modifiées entre la dernière sauvegarde réussie et l’incident.

API

L’API REST utilise une clé d’authentification, à créer dans Paramètres → Clés API. Les autorisations de chaque clé sont définies explicitement.

Authentification

curl
curl -H "Authorization: Bearer wpch_live_…" \
     https://wpcontrolhub.app/api/v1/sites

Points d’entrée

GET /api/v1/sitesListe des sites
GET /api/v1/sites/:idDétail d’un site
GET /api/v1/variablesListe des variables
GET /api/v1/values?siteId=…Valeurs résolues pour un site
POST /api/v1/valuesModifier une valeur (crée un déploiement)
GET /api/v1/deploymentsListe des déploiements
POST /api/v1/deployments/:id/rollbackAnnuler un déploiement

Webhooks

Chaque livraison est signée en HMAC-SHA256. Vérifiez l’en-tête avant de traiter le corps :

Node.js
const expected = crypto
  .createHmac('sha256', secret)
  .update(`${timestamp}.${rawBody}`)
  .digest('hex');
// compare with the x-wpch-signature header (sha256=…)

Résoudre un problème

Retrouvez les causes les plus fréquentes et les actions à effectuer. La page Santé de chaque site affiche le diagnostic correspondant.

Le site est joignable mais le Hub reçoit un 403

Un pare-feu applicatif (Wordfence, Sucuri, Cloudflare, ModSecurity) bloque les appels entrants vers l’API REST. Autorisez la route /wp-json/wpch/v1/ ou l’adresse IP du Hub. Ce n’est pas bloquant : le site continue de récupérer ses valeurs par lui-même à chaque cycle.

Signature refusée

Les requêtes sont signées avec un horodatage toléré à 5 minutes. Si l’horloge du serveur WordPress dérive au-delà, toutes les signatures sont rejetées. Vérifiez la synchronisation NTP du serveur.

Extension introuvable (404)

L’API REST du site répond mais la route n’existe pas : l’extension est désactivée, supprimée, ou l’API REST est bloquée par un plugin de sécurité.

La valeur a changé dans le Hub mais pas sur la page

Un cache de page (WP Rocket, LiteSpeed, W3 Total Cache, Cloudflare) sert encore l’ancienne version. Videz le cache du site. La page Santé indique la version réellement appliquée par l’extension.

Le Hub est indisponible

Les valeurs déjà reçues restent stockées dans WordPress et continuent de s’afficher. Aucune page ne se vide, aucun contenu ne disparaît. Les modifications en attente reprennent dès le retour du service.

Prêt à connecter votre premier site ?

Gratuit, sans carte bancaire, jusqu’à 1 000 sites.