Pour les agences WordPress qui gèrent plusieurs sites web de clients, il est essentiel d’avoir une stratégie de sauvegarde solide. En cas de panne inattendue, de défaillance d’une extension ou d’erreur humaine, les sauvegardes garantissent que les données peuvent être rapidement restaurées – minimisant ainsi les temps d’arrêt et réduisant les risques pour les clients.
Chez Kinsta, nous comprenons le rôle critique que jouent les sauvegardes, c’est pourquoi nous offrons six options de sauvegarde : automatique quotidienne, optionnelle horaire (et toutes les six heures), manuelle, générée par le système, téléchargeable, et sauvegardes externes envoyées directement à Amazon S3 ou Google Cloud Storage.
Bien que la gestion de ces sauvegardes soit simple via le tableau de bord MyKinsta, l’API de Kinsta offre de grandes possibilités d’automatisation des processus répétitifs.
Imaginez qu’il vous suffise de saisir une commande dans Slack ou de configurer une tâche cron pour déclencher des sauvegardes pour tous vos sites WordPress dans votre compte d’agence Kinsta sans avoir à naviguer manuellement dans des dizaines, voire des centaines de tableaux de bord de sites.
Cette flexibilité est l’un des nombreux avantages d’utiliser un hébergeur qui donne la priorité aux besoins de ses clients en leur fournissant les outils nécessaires pour créer des solutions personnalisées qui permettent de gagner du temps.
Ce guide explique comment exploiter l’API de Kinsta pour automatiser les sauvegardes sur plusieurs sites. Que vous intégriez votre pile préférée, que vous utilisiez des outils comme Slack ou que vous mettiez en place des calendriers automatisés, ce guide vous fournit les connaissances nécessaires pour rationaliser votre processus de sauvegarde et améliorer votre flux de travail.
Mettre en place des sauvegardes pour tous les sites et les sites sélectionnés
Avant de plonger dans la planification, il est important de comprendre comment déclencher des sauvegardes pour tous les sites de votre compte Kinsta et comment cibler des sites ou des environnements spécifiques en utilisant l’API Kinsta.
Une fois que nous avons les bases pour créer des sauvegardes, nous pouvons facilement intégrer la planification pour automatiser le processus.
Déclencher des sauvegardes pour tous les sites d’un compte Kinsta
Comme pour toutes les API, il n’y a pas toujours un seul point de terminaison pour faire tout ce dont vous avez besoin – vous devez souvent combiner plusieurs points de terminaison pour obtenir le résultat souhaité.
L’API Kinsta n’est pas différente. Bien qu’il existe des points de terminaison spécifiques pour la gestion des sauvegardes, ces points de terminaison nécessitent certains paramètres, tels que les ID d’environnement, que vous obtenez en effectuant des requêtes supplémentaires à d’autres points de terminaison.
Par exemple, pour déclencher une sauvegarde manuelle d’un site, vous avez besoin de l’identifiant de l’environnement en question. Pour obtenir l’ID de l’environnement, vous devez d’abord obtenir l’ID du site. Cela signifie que vous devez effectuer plusieurs appels à l’API : un pour obtenir l’ID du site, un autre pour récupérer l’ID de l’environnement et, enfin, une requête pour déclencher la sauvegarde.
Étape 1 : Récupérer tous les sites WordPress avec l’API Kinsta
La première étape consiste à récupérer une liste de tous les sites associés à votre compte Kinsta. L’API de Kinsta fournit un point de terminaison pour récupérer ces données, qui comprennent les ID des sites, les noms et d’autres détails pertinents. En utilisant le point de terminaison GET /sites
, vous pouvez obtenir une liste de tous les sites sous le compte de votre entreprise.
Voici un exemple utilisant Node.js et Fetch API:
require('dotenv').config();
const KINSTA_API_URL = 'https://api.kinsta.com/v2';
const API_KEY = process.env.KINSTA_API_KEY;
async function getAllSites() {
const response = await fetch(`${KINSTA_API_URL}/sites`, {
headers: {
Authorization: `Bearer ${API_KEY}`
}
});
const data = await response.json();
return data.company.sites; // Returns array of all sites
}
Cette fonction renvoie un tableau de tous les sites de votre compte. Chaque site contient des informations telles que l’identifiant, le nom et l’environnement du site.
Étape 2 : Récupérer les identifiants d’environnement pour chaque site WordPress
Chaque site peut avoir plusieurs environnements (comme production ou staging), et les sauvegardes sont déclenchées par environnement. Pour récupérer les identifiants d’environnement pour chaque site, vous faites un autre appel API au point de terminaison GET /sites/{site_id}/environments
.
Voici un exemple de fonction qui récupère les environnements pour un site spécifique :
async function getSiteEnvironments(siteId) {
const response = await fetch(`${KINSTA_API_URL}/sites/${siteId}/environments`, {
headers: {
Authorization: `Bearer ${API_KEY}`
}
});
const data = await response.json();
return data.site.environments;
}
Étape 3 : Déclencher des sauvegardes pour chaque environnement
Une fois que vous avez les identifiants d’environnement, vous pouvez déclencher des sauvegardes pour chaque environnement à l’aide du point de terminaison POST /sites/environments/{env_id}/manual-backups
. L’API vous permet de créer une sauvegarde manuelle en fournissant un identifiant d’environnement et un libellé facultatif pour identifier la sauvegarde.
Voici comment déclencher une sauvegarde pour un environnement donné :
async function createBackup(environmentId, tag) {
const response = await fetch(`${KINSTA_API_URL}/sites/environments/${environmentId}/manual-backups`, {
method: 'POST',
headers: {
Authorization: `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ tag })
});
if (response.ok) {
console.log(`Backup created for environment ${environmentId} with tag: ${tag}`);
} else {
console.error(`Failed to create backup for environment ${environmentId}`);
}
}
Cette fonction déclenche une sauvegarde manuelle pour l’identifiant d’environnement donné. Vous pouvez également labelliser votre sauvegarde pour faciliter son identification.
Étape 4 : Automatiser les sauvegardes pour tous les sites
Maintenant que vous disposez de fonctions pour rechercher tous les sites, récupérer les identifiants d’environnement et déclencher des sauvegardes, vous pouvez les combiner pour créer un script qui automatise les sauvegardes pour chaque site de votre compte Kinsta.
Voici comment vous pouvez lier le tout :
async function backupAllSites() {
const sites = await getAllSites();
for (const site of sites) {
const environments = await getSiteEnvironments(site.id);
for (const environment of environments) {
await createBackup(environment.id, `Backup-${new Date().toISOString()}`);
}
}
console.log('Backups for all sites have been triggered.');
}
Cette fonction parcourt tous les sites, récupère leurs environnements et déclenche des sauvegardes pour chaque environnement avec une balise horodatée.
Maintenant, lorsque vous exécutez backupAllSites()
, cela déclenche une sauvegarde pour chaque environnement dans votre compte Kinsta.
Exemple de commande Slack
Vous pouvez intégrer ce processus de sauvegarde dans une commande Slack pour une gestion encore plus facile. Avec une application Slack configurée, les utilisateurs peuvent déclencher des sauvegardes sur tous les sites avec une seule commande comme /backup_all_sites
.
Voici un exemple rapide de la façon dont cela pourrait fonctionner :
app.command('/backup_all_sites', async ({ ack, say }) => {
await ack();
await backupAllSites();
say('Backups for all sites have been triggered.');
});
Déclencher des sauvegardes pour des sites sélectionnés à l’aide d’identifiants d’environnement
Dans certains cas, vous pouvez vouloir déclencher des sauvegardes pour des sites ou des environnements spécifiques plutôt que pour tous les sites de votre compte Kinsta. Cela peut être utile si vous souhaitez sauvegarder uniquement des environnements de production ou certains sites prioritaires.
En utilisant l’API Kinsta, nous pouvons automatiser les sauvegardes pour des environnements sélectionnés en passant un tableau d’ID d’environnement. Voyons comment mettre cela en œuvre.
Étape 1 : Transmettre les ID d’environnement
Lorsque vous souhaitez déclencher des sauvegardes pour des sites sélectionnés, vous avez besoin des ID d’environnement pour ces sites. Vous pouvez soit coder ces ID en dur, soit les récupérer depuis l’API Kinsta, soit les passer dynamiquement (comme par un argument de ligne de commande, une commande Slack, etc.)
Voici une fonction qui accepte un tableau d’ID d’environnement et déclenche des sauvegardes pour chacun d’entre eux :
async function backupSelectedEnvironments(environmentIds, tag) {
for (const envId of environmentIds) {
await createBackup(envId, tag);
}
}
La fonction ci-dessus reçoit un tableau d’identifiants d’environnement que vous souhaitez sauvegarder (environmentIds
). La fonction createBackup(envId, tag)
déclenche la sauvegarde pour chaque environnement du tableau à l’aide de la fonction createBackup()
(expliquée à l’étape 2).
Étape 2 : Déclencher la sauvegarde
Pour déclencher la sauvegarde pour chaque environnement, utilisez le point de terminaison POST /sites/environments/{env_id}/manual-backups
de l’API Kinsta comme nous l’avons fait pour tous les sites. Voici comment cela fonctionne :
async function createBackup(environmentId, tag) {
const response = await fetch(`${KINSTA_API_URL}/sites/environments/${environmentId}/manual-backups`, {
method: 'POST',
headers: {
Authorization: `Bearer ${API_KEY}`,
'Content-Type': 'application/json'
},
body: JSON.stringify({ tag })
});
if (response.ok) {
console.log(`Backup created for environment ${environmentId} with tag: ${tag}`);
} else {
console.error(`Failed to create backup for environment ${environmentId}: ${response.statusText}`);
}
}
Étape 3 : Exécuter les sauvegardes pour les environnements sélectionnés
Maintenant que nous avons des fonctions pour déclencher des sauvegardes et gérer des environnements multiples, nous pouvons les combiner pour sauvegarder des environnements spécifiques. Cet exemple suppose que nous disposons déjà des identifiants d’environnement que nous souhaitons sauvegarder.
const selectedEnvironments = ['12345', '67890']; // Replace with actual environment IDs
backupSelectedEnvironments(selectedEnvironments, 'Manual Backup');
Dans ce cas :
- Le tableau
selectedEnvironments
contient les identifiants de l’environnement que vous souhaitez sauvegarder. - La fonction
backupSelectedEnvironments()
parcourt en boucle chaque ID et déclenche la sauvegarde avec le label « Mnual Backup ».
Exemple de commande Slack
Si vous utilisez une application Slack ou une interface de ligne de commande, vous pouvez également permettre aux utilisateurs de spécifier les environnements à sauvegarder.
Voici comment vous pourriez mettre cela en œuvre dans une application Slack :
app.command('/backup_selected_envs', async ({ command, ack, say }) => {
await ack();
const [tag, ...envIds] = command.text.split(' '); // First part is the tag, rest are env IDs
await backupSelectedEnvironments(envIds, tag);
say(`Backups triggered for selected environments with tag ${tag}.`);
});
L’utilisateur saisit une commande telle que /backup_selected_envs Backup-Tag 12345 67890
, où Backup-Tag
est la balise et 12345, 67890
les identifiants de l’environnement.
Le texte de la commande est scindé et les identifiants d’environnement sont transmis à la fonction backupSelectedEnvironments()
.
Après avoir déclenché les sauvegardes, l’application répond à l’utilisateur en confirmant la sauvegarde.
Planifier des sauvegardes pour vos sites WordPress
L’un des aspects les plus puissants de l’automatisation est la possibilité de programmer des tâches à des moments précis sans intervention manuelle.
Maintenant que nous avons vu comment déclencher des sauvegardes pour tous les sites et les sites sélectionnés, la prochaine étape est d’automatiser ces processus en ajoutant la planification.
Que vous souhaitiez planifier des sauvegardes localement, sur une plateforme hébergée comme Kinsta, ou dynamiquement via Slack, il existe plusieurs façons de mettre cela en œuvre.
Comprendre les expressions cron
Avant d’explorer les différentes approches de la planification des sauvegardes, il est important de comprendre les expressions cron, qui sont utilisées pour spécifier le calendrier des tâches planifiées sur diverses plateformes et outils.
Les expressions cron définissent le moment où une tâche doit être exécutée. Elles sont utilisées dans de nombreuses bibliothèques et services de planification, tels que node-cron, node-schedule, et même les travaux cron côté serveur comme ceux disponibles dans la plateforme d’hébergement d’applications de Kinsta.
Les expressions cron se composent de cinq champs, chacun contrôlant un aspect spécifique du moment où la tâche doit être exécutée. Une expression cron typique ressemble à ceci :
* * * * *
| | | | |
| | | | └─── Day of the week (0 - 7) (Sunday to Saturday, 0 and 7 represent Sunday)
| | | └────── Month (1 - 12)
| | └──────── Day of the month (1 - 31)
| └────────── Hour (0 - 23)
└──────────── Minute (0 - 59)
Voyons ce que chaque champ représente :
- Minute : La minute de l’heure à laquelle la tâche doit être exécutée (0 – 59).
- Hour : L’heure de la journée à laquelle la tâche doit être exécutée (0 – 23).
- Day of the month : Le jour spécifique du mois où la tâche doit être exécutée (1 – 31).
- Month : Le mois de l’année au cours duquel la tâche doit être exécutée (1 – 12).
- Day of the week : Le jour spécifique de la semaine où la tâche doit être exécutée (0 – 7, où 0 et 7 représentent tous deux le dimanche).
Vous pouvez utiliser des valeurs spécifiques, des caractères génériques (*
) ou des plages dans chaque champ pour définir la planification.
Exemples d’expressions cron :
0 0 * * *
: Tous les jours à minuit (00:00)0 3 * * 1
: Tous les lundis à 3 heures du matin*/10 * * * *
: Toutes les 10 minutes0 9-18 * * *
: Toutes les heures entre 9 heures et 18 heures.
Avec une solide compréhension des expressions cron, nous pouvons maintenant passer aux différentes méthodes de planification des sauvegardes pour vos sites WordPress en utilisant l’API Kinsta.
Approche 1 : Planification locale avec node-cron
Le paquetage Node.js node-cron permet d’exécuter des tâches planifiées basées sur une syntaxe de type cron. Il est idéal pour exécuter des tâches automatisées dans des applications Node.js locales ou autonomes, et c’est un choix populaire pour programmer des sauvegardes, envoyer des e-mails ou exécuter d’autres tâches récurrentes.
Dans node-cron, vous définissez une tâche (comme votre fonction de sauvegarde) et utilisez une expression cron pour spécifier quand la tâche doit s’exécuter. L’expression cron se compose de cinq champs qui définissent la minute, l’heure, le jour du mois, le mois et le jour de la semaine où la tâche doit être exécutée.
Tout d’abord, installez node-cron dans votre projet :
npm install node-cron
Supposons que vous souhaitiez planifier une sauvegarde quotidienne de tous les sites à minuit à l’aide de node-cron. Voici comment vous pouvez le faire :
const cron = require('node-cron');
const { backupAllSites } = require('./app'); // Import the backup function
// Schedule to run backups for all sites at midnight every day
cron.schedule('0 0 * * *', () => {
console.log('Running scheduled backup for all sites at midnight...');
backupAllSites();
});
De même, si vous souhaitez sauvegarder des environnements sélectionnés à 2 heures du matin tous les jours, vous pouvez le programmer comme ceci :
cron.schedule('0 2 * * *', () => {
const environmentIds = ['env12345', 'env67890']; // Specific environments to back up
console.log('Running scheduled backup for selected environments...');
backupSelectedEnvironments(environmentIds, 'Scheduled Backup');
});
Approche 2 : Utilisation de tâches cron dans l’hébergement cloud (comme Kinsta)
Lorsque vous déployez votre application Node.js sur une plateforme comme celle de Kinsta, vous pouvez exploiter la fonctionnalité de tâches cron intégrée à la plateforme pour planifier des tâches telles que les sauvegardes. Cependant, la configuration des tâches cron dans les environnements cloud nécessite une structure légèrement différente des outils de planification locaux comme node-cron.
Lorsque vous déployez votre application sur Kinsta, elle doit avoir un processus web en cours d’exécution (même si elle ne sert pas réellement le trafic web).
Pour vous assurer que votre projet fonctionne correctement et n’appelle pas automatiquement des fonctions de sauvegarde, vous pouvez créer un fichier qui exécute un simple serveur web. Ce fichier agit comme un processus web « factice », tandis que les tâches cron gèrent la logique de sauvegarde.
Vous pouvez ajouter ce code :
require('http').createServer((req, res) => {
res.writeHead(302, { Location: 'https://www.google.com' });
res.end();
}).listen(process.env.PORT);
De cette manière, vous pouvez mettre en place une commande de script pour distinguer le processus web (start
) du processus de la tâche cron (cron
).
"scripts": {
"start": "node index.js", // Web process
"cron": "node app.js" // Cron job process
},
Enfin, configurez la tâche cron dans Kinsta pour appeler votre fonction de sauvegarde à l’heure spécifiée. En utilisant les paramètres de la tâche cron, vous pouvez définir la commande pour exécuter la sauvegarde.
Dans l’onglet Processus des applications du tableau de bord MyKinsta, définissez la commande pour le processus web :
npm run start
Et définissez la commande de la tâche cron comme ceci :
npm run cron
Pour exécuter le travail cron à une heure précise (tous les jours à 11h30), définissez l’expression cron comme suit :
30 11 * * *
Cette commande déclenchera la fonction backupAllSites()
tous les jours à 11h30.
Configuration d’une tâche cron dans l’hébergement d’applications de Kinsta.
Approche 3 : Planification avec node-schedule
Une autre bibliothèque Node.js, node-schedule, peut planifier des tâches en utilisant le format cron et prend également en charge des planifications plus complexes.
Voici un exemple qui permet aux utilisateurs de planifier des sauvegardes via Slack en utilisant le format cron de node-schedule :
const schedule = require('node-schedule');
const { backupAllSites } = require('./app');
// Slack command to schedule backups dynamically
app.command('/schedule_backup', async ({ command, ack, say }) => {
await ack();
// Extract hour and minute from the command (expects HH:MM format)
const [hour, minute] = command.text.split(':');
// Validate input
if (!hour || !minute) {
say('Please specify the time in HH:MM format.');
return;
}
// Schedule the backup using node-schedule's cron-like format
const job = schedule.scheduleJob(`${minute} ${hour} * * *`, () => {
console.log(`Running scheduled backup at ${hour}:${minute}`);
backupAllSites(); // This triggers the backup for all sites
});
say(`Backup scheduled at ${hour}:${minute} successfully.`);
});
Par exemple, un utilisateur peut exécuter la commande Slack suivante pour planifier une sauvegarde à 23 h 30 :
/schedule_backup 23:30
Après avoir exécuté cette commande, la sauvegarde sera programmée pour s’exécuter à 23h30 tous les jours. La réponse de Slack pourrait ressembler à ceci :
Backup scheduled at 23:30 successfully.
Cette approche permet aux utilisateurs de planifier dynamiquement des sauvegardes à partir de Slack en spécifiant simplement l’heure sans avoir besoin d’interagir avec le serveur ou le code de l’application. Il s’agit d’un moyen flexible et puissant de gérer des tâches planifiées telles que les sauvegardes de manière conviviale.
Résumé
Planifier des sauvegardes sur plusieurs sites WordPress est intéressant pour les agences qui gèrent de nombreux sites web de clients. Automatiser ces sauvegardes permet non seulement de gagner du temps, mais aussi d’assurer la cohérence, de réduire le risque d’erreur humaine et d’assurer la tranquillité d’esprit.
Cette solution serait-elle utile à votre agence ? Nous aimerions savoir ce que vous en pensez. Partagez-les dans la section des commentaires ci-dessous !
Laisser un commentaire