Las copias de seguridad ofrecen a los propietarios de sitios web una red de seguridad que aumenta la confianza en caso de contratiempos. Los usuarios del servicio de Alojamiento Administrado de WordPress de Kinsta se benefician de seis tipos de copias de seguridad: automáticas diarias, opcionales cada hora, manuales, generadas por el sistema, descargables y externas enviadas automáticamente a tu almacenamiento en la nube de Amazon S3 o Google.

Gestionar estas copias de seguridad es pan comido en el panel de control de MyKinsta. Y ahora la API de Kinsta abre la puerta a tu forma de trabajar con sitios de WordPress y sus copias de seguridad. Desde agencias con sus paneles de control para gestionar cientos de instalaciones hasta equipos que buscan aprovechar herramientas de productividad como Slack, la API de Kinsta puede ayudar a conectarlo todo.

Esta guía explora los distintos endpoints de copia de seguridad disponibles a través de la API, su potencial y cómo puedes utilizarlos para gestionar copias de seguridad en un entorno Slack.

Comprender la API de Kinsta

La API de Kinsta es una potente herramienta que te permite interactuar con los servicios de Kinsta, como los sitios de WordPress alojados, mediante programación. Puede ayudarte a automatizar varias tareas relacionadas con la gestión de WordPress, como la creación de sitios, la recuperación de información sobre sitios, la obtención del estado de un sitio, la consulta y restauración de copias de seguridad, etc.

Para utilizar la API de Kinsta, debes tener una cuenta con al menos un sitio de WordPress, aplicación o base de datos en MyKinsta. También necesitas generar una clave API para autenticarte y acceder a tu cuenta.

Para generar una clave API:

  1. Ve a tu panel de MyKinsta.
  2. Ve a la página Claves API (Tu nombre > Configuración de la empresa > Claves API).
  3. Haz clic en Crear Clave API.
  4. Elige una fecha de caducidad o establece una fecha de inicio personalizada y un número de horas para que caduque la clave.
  5. Dale a la clave un nombre único.
  6. Haz clic en Generar.

Después de crear una clave API, cópiala y guárdala en un lugar seguro (se recomienda utilizar un gestor de contraseñas), ya que es la única vez que se revela dentro de MyKinsta. Puedes generar varias claves API, que aparecerán en la página Claves API. Si necesitas revocar una clave API, haz clic en el botón Revocar junto a su nombre y fecha de caducidad.

Gestionar las Copias de Seguridad del Sitio de WordPress con la API de Kinsta

La API de Kinsta tiene endpoints para estas operaciones relacionadas con las copias de seguridad:

Para interactuar con estos endpoints, necesitarás la clave API que generaste anteriormente. Vamos a explorar estos endpoints y después los integraremos en un Slackbot para que puedas utilizar los comandos Slash en Slack para interactuar con la API de Kinsta.

Cómo Obtener Copias de Seguridad Manuales, Programadas y Generadas por el Sistema con la API de Kinsta

Cuando navegues a un sitio de WordPress específico dentro de tu panel de control MyKinsta y hagas clic en la pestaña Copias de Seguridad, encontrarás una lista de copias de seguridad, incluyendo copias de seguridad diarias, cada hora (si están activadas), manuales y generadas por el sistema.

Ahora, si quieres acceder a estos datos o ejecutar acciones desde una aplicación o plataforma externa, nuestra API simplifica el proceso.

Puedes recuperar los detalles de la copia de seguridad, como el ID, el nombre, el tipo y la hora de creación, mediante programación. Utilizando la API en tus propias herramientas, puedes eliminar la necesidad de acceder al panel de control siempre que se necesite esta información

Para acceder a este endpoint, obtén el ID del entorno de tu sitio mediante programación a través del endpoint obtener entorno del sitio, que devuelve detalles sobre el entorno de tu sitio, incluido su ID:

{
  "site": {
    "environments": [
      {
        "id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
        "name": "first-site",
        "display_name": "First site",
        "is_blocked": false,
        "id_edge_cache": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
        "cdn_cache_id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
        "is_premium": false,
        "domains": [
          {
            "id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
            "name": "example.com",
            "type": "live"
          }
        ],
        "primaryDomain": {
          "id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
          "name": "example.com",
          "type": "live"
        },
        "ssh_connection": {
          "ssh_port": "808080",
          "ssh_ip": {
            "external_ip": "1xx.1xx.1xx.1xx"
          }
        },
        "container_info": {
          "id": "54fb80af-576c-4fdc-ba4f-b596c83f15a1",
          "php_engine_version": "php8.0"
        }
      }
    ]
  }
}

Cuando conozcas el ID del entorno de tu sitio, puedes enviar una solicitud  GET a https://api.kinsta.com/v2/sites/environments/${envId}/backups para recuperar un array de todas las copias de seguridad de tu sitio:

curl -i -X GET \
  'https://api.kinsta.com/v2/sites/environments/{env_id}/backups' \
  -H 'Authorization: Bearer '

Esto devolverá un Objeto con un array de copias de seguridad, que puedes incluir en bucle en tu cliente y también manipular sus datos:

{
  "environment": {
    "display_name": "MyEnvironment",
    "backups": [
      {
        "id": 123456789,
        "name": "mySiteName-1234567890-backupType",
        "note": "Daily Auto Backup",
        "type": "manual",
        "created_at": 1665382600770
      }
    ]
  }
}

Cómo Restaurar una Copia de Seguridad Programada, Manual o Generada por el Sistema con la API de Kinsta

Con la API Kinsta, también puedes restaurar una copia de seguridad específica de la lista generada a un entorno utilizando una solicitud POST.

Todo lo que necesitas es el ID de la copia de seguridad, el ID del entorno de destino y el nombre del entorno de la copia de seguridad. Esta acción también elimina la necesidad de volver a visitar el panel de MyKinsta para las tareas de restauración.

curl -i -X POST \
  'https://api.kinsta.com/v2/sites/environments/{target_env_id}/backups/restore' \
  -H 'Authorization: Bearer ' \
  -H 'Content-Type: application/json' \
  -d '{
    "backup_id": 123456789,
    "env_display_name_of_backup": "my-env"
  }'

La respuesta a esta solicitud incluye un estado de la operación y un ID de operación, lo que te permite seguir programáticamente el progreso de la restauración con nuestro endpoint de estado de la operación:

{
  "operation_id": "backups:restore-54fb80af-576c-4fdc-ba4f-b596c83f15a1",
  "message": "Restoring a backup to environment in progress",
  "status": 202
}

Cómo Obtener Copias de Seguridad Descargables con la API de Kinsta

Aunque actualmente no existe un endpoint para crear copias de seguridad descargables, puedes acceder a las copias de seguridad descargables existentes y a sus enlaces de descarga mediante programación.

Esto puede hacerse enviando una solicitud GET a https://api.kinsta.com/v2/sites/environments/{env_id}/downloadable-backups para recuperar un array de todas las copias de seguridad descargables de tu sitio:

curl -i -X GET \
  'https://api.kinsta.com/v2/sites/environments/{env_id}/downloadable-backups' \
  -H 'Authorization: Bearer '

Cada copia de seguridad descargable del array incluye un ID, una marca de tiempo de creación, un enlace de descarga, una marca de tiempo de caducidad y un estado que indica si el proceso de generación está en curso:

{
  "environment": {
    "display_name": "MyEnvironment",
    "downloadable_backups": [
      {
        "id": "1915fa3a-7ef4-4766-806d-71104be7deb0",
        "created_at": 1665382600770,
        "download_link": "https://example.com",
        "expires_at": 1665382600770,
        "is_generation_in_progress": true
      }
    ]
  }
}

Al hacer clic en el enlace de descarga, se inicia la descarga del archivo zip de la copia de seguridad, lo que te permite incrustar el enlace en tu aplicación para que tus usuarios puedan acceder a él y descargarlo cómodamente.

Implementación de Comandos Slash de Slack para Gestionar Copias de Seguridad con la API de Kinsta

En una guía reciente, se detallaba el proceso de creación de un Slackbot utilizando Node.js y la API de Kinsta para la gestión de sitios. La guía describía la creación de un Slackbot y el establecimiento de la interacción con la API de Kinsta a través de una aplicación Node.js alojada en nuestra plataforma de Alojamiento de Aplicaciones.

Aquí, te centrarás en crear nuevos comandos Slash en Slack para los tres endpoints de copia de seguridad. Para continuar, primero revisa la guía anterior para entender la aplicación Node.js y cómo configurar tu Slackbot personalizado.

Una vez completado, puedes proceder a clonar nuestro proyecto de inicio con Git:

  1. Navega a tu directorio preferido para almacenar tu código y ejecuta el siguiente comando en tu terminal:
    git clone -b tutorial-1 --single-branch https://github.com/olawanlejoel/SlackBot-KinstaAPI.git
  2. Desplázate a la carpeta del proyecto e instala todas las dependencias necesarias:
    cd SlackBot-KinstaAPI
    npm install

Crear comandos Slash en Slack para Gestionar Copias de Seguridad

En el artículo anterior, se crearon cinco comandos slash para manejar lo siguiente:

  • /site_id [site name]: Se utiliza para recuperar el ID del sitio.
  • /environment_id [site name]: Se utiliza para obtener el ID del entorno.
  • /clear_site_cache [environment id]: Se utiliza para borrar la caché del sitio.
  • /restart_php_engine [environment id]: Se utiliza para reiniciar el motor PHP de un sitio.
  • /operation_status [operation id]: Se utiliza para comprobar el estado de una operación.

En esta guía, añades tres nuevos comandos. Para crear comandos Slash en Slack, navega hasta tu aplicación Slack, haz clic en la opción de menú Comandos Slash de la barra lateral izquierda y haz clic en el botón Crear Nuevo Comando. Crea tres comandos con la información que se indica a continuación:

Comando Descripción breve Sugerencia de uso
/get_backups Recupera todas las copias de seguridad de tu sitio con su información asociada [ID del entorno]
/get_downloadable_backups Recupera todas las copias de seguridad descargables de tu sitio con su información asociada y enlace [ID del entorno]
/restore_backup Restaurar una copia de seguridad programada o manual o generada por el sistema en un entorno [ID del entorno de destino] [ID de la copia de seguridad] [Nombre del entorno]

Una vez que hayas creado estos comandos, puedes comprobar tu entorno Slack escribiendo /. Verás que se han añadido estos comandos.

El siguiente paso es implementar la interacción con la API de Kinsta para que los datos pasados desde Slack puedan ser recibidos y utilizados para consultar el endpoint específico de la API.

Implementar Solicitudes Fetch de Node.js para Operaciones de Copia de Seguridad

Una vez que hayas creado los comandos slash necesarios, ahora puedes modificar tu aplicación Node.js para que responda a ellos. Empecemos creando funciones asíncronas para interactuar con cada endpoint.

En el archivo app.js, vamos a definir tres funciones:

  • getBackups(environmentId): Obtiene información sobre las copias de seguridad de un entorno específico.
  • getDownloadableBackups(environmentId): Recupera las copias de seguridad descargables para un entorno determinado.
  • restoreBackup(targetEnvironmentId, backupId, environmentName): Inicia un proceso de restauración de una determinada copia de seguridad en un entorno especificado.

Aquí tienes la petición Fetch para cada función:

async function getBackups(environmentId) {
    const resp = await fetch(
        `${KinstaAPIUrl}/sites/environments/${environmentId}/backups`,
        {
            method: 'GET',
            headers: getHeaders,
        }
    );
    const data = await resp.json();
    return data;
}

async function getDownloadableBackups(environmentId) {
    const resp = await fetch(
        `${KinstaAPIUrl}/sites/environments/${environmentId}/downloadable-backups`,
        {
            method: 'GET',
            headers: getHeaders,
        }
    );
    const data = await resp.json();
    return data;
}

async function restoreBackup(targetEnvironmentId, backupId, environmentName) {
    const resp = await fetch(
        `${KinstaAPIUrl}/sites/environments/${targetEnvironmentId}/backups/restore`,
        {
            method: 'POST',
            headers: postHeaders,
            body: JSON.stringify({
                backup_id: backupId,
                env_display_name_of_backup: environmentName,
            }),
        }
    );
    const data = await resp.json();
    return data;
}

Cada función está construida para comunicarse con la API de Kinsta utilizando la API Fetch de JavaScript. Los parámetros para los ID de entorno, los ID de copia de seguridad y los nombres de entorno son entradas esperadas, que deben recibirse de los comandos de Slack y luego pasarse a estas funciones para su ejecución.

Para agilizar el código y evitar repeticiones, observarás el uso de tres variables utilizadas para almacenar elementos esenciales: la URL de la API base y las cabeceras de las solicitudes GET y POST.

const KinstaAPIUrl = 'https://api.kinsta.com/v2';

const getHeaders = {
    Authorization: `Bearer ${process.env.KINSTA_API_KEY}`,
};

const postHeaders = {
    'Content-Type': 'application/json',
    Authorization: `Bearer ${process.env.KINSTA_API_KEY}`,
};

Además, las claves y tokens sensibles, como el secreto de firma de Slack, el token del bot, el token de la app, el ID de la empresa y la clave de la API, se almacenan de forma segura dentro del archivo .env.

SLACK_SIGNING_SECRET="YOUR_SIGNING_SECRET"
SLACK_BOT_TOKEN="xoxb-YOUR_BOT_TOKEN"
APP_TOKEN="xapp-YOUR_APP_TOKEN"

Una vez establecidas estas funciones y claves, el siguiente paso consiste en configurar los comandos de Slack. Esta configuración implica recibir valores de entrada de Slack, invocar los métodos pertinentes en función de esta entrada, y enviar una respuesta específica de vuelta a Slack.

Configurar Comandos Slash con Node.js para Gestionar Copias de Seguridad

Para configurar un comando Slash, utiliza la función app.command(), que funciona de forma similar a los escuchadores de eventos en JavaScript. Especifica el comando que deseas escuchar y, a continuación, crea una función de devolución de llamada asíncrona para definir la acción deseada. Esta función recibe tres parámetros:

  • command: Contiene los detalles del comando de barra enviado por el usuario.
  • ack: Acusa recibo del comando slash.
  • say: Envía un mensaje de vuelta al canal Slack.

Ésta es la configuración de los tres comandos:

app.command('/get_backups', async ({ command, ack, say }) => {
    await ack();

    let environmentId = command.text;
    let response = await getBackups(environmentId);
    let backups = response.environment.backups;

    let backupDetails = backups
        .map((backup) => {
            return `Backup ID: ${backup.id}\nName: ${backup.name}\nNote: ${
                backup.note
            }\nType: ${backup.type}\nCreated At: ${new Date(backup.created_at)}\n\n`;
        })
        .join('');

    if (backupDetails) {
        say(
            `Hey 👋, here are the backup details for environment ID ${environmentId}:\n\n${backupDetails}`
        );
    } else {
        say(`No backups found for environment ID ${environmentId}`);
    }
});

app.command('/get_downloadable_backups', async ({ command, ack, say }) => {
    await ack();

    let environmentId = command.text;
    let response = await getDownloadableBackups(environmentId);
    let backups = response.environment.downloadable_backups;

    let downloadable_backupDetails = backups
        .map((backup) => {
            return `Backup ID: ${backup.id}\nDownload Link: ${
                backup.download_link
            }\nCreated At: ${new Date(backup.created_at)}\nExpires At: ${new Date(
                backup.expires_at
            )}\nIs Generation in Progress: ${backup.is_generation_in_progress}\n\n`;
        })
        .join('');

    if (downloadable_backupDetails) {
        say(
            `Hey 👋, here are the downloadable backup details for environment ${environmentId}:\n\n${downloadable_backupDetails}`
        );
    } else {
        say(`No downloadable backups found for environment ${environmentId}`);
    }
});

app.command('/restore_backup', async ({ command, ack, say }) => {
    await ack();

    const [targetEnvironmentId, backupId, environmentName] =
        command.text.split(' ');

    let response = await restoreBackup(
        targetEnvironmentId,
        backupId,
        environmentName
    );

    if (response) {
        say(
            `Hey 👋, \n\n${response.message}. You can use the /operation_status slack commmand to check the status of this Operation Id ${response.operation_id}`
        );
    }
});

Los comandos de Slack anteriores gestionan varias tareas relacionadas con las copias de seguridad: /get_backups recupera detalles de la copia de seguridad específicos del entorno, /get_downloadable_backups obtiene información descargable de la copia de seguridad y /restore_backup inicia la restauración basándose en los parámetros proporcionados.

Cada comando acusa recibo, procesa la entrada, activa las funciones respectivas (getBackups(), getDownloadableBackups(), restoreBackup()), formatea las respuestas y comunica los resultados a Slack, ofreciendo una interfaz completa para las operaciones de copia de seguridad.

Ahora, cuando despliegues tu aplicación, puedes visitar Slack para probar los distintos comandos.

Interacción con los endpoints de copia de seguridad de la API de Kinsta mediante comandos Slash en Slack
Interacción con los endpoints de copia de seguridad de la API de Kinsta mediante comandos Slash en Slack

Puedes acceder al código completo de este proyecto en nuestro repositorio de GitHub.

Resumen

En esta guía, has aprendido a utilizar eficazmente los últimos endpoints de copia de seguridad integrados en la API Kinsta. Estos endpoints te permiten incorporar sin problemas operaciones de copia de seguridad en tus aplicaciones frontend, establecer flujos de trabajo y realizar diversas tareas que simplifican la gestión de tus sitios a través de medios programáticos.

La API de Kinsta ofrece muchas capacidades más allá de éstas, por lo que te animamos a explorar endpoints adicionales y a idear formas innovadoras de aprovecharlos en tus proyectos.

¿Cómo aprovechas actualmente la API de Kinsta? ¿Hay alguna función específica que te gustaría ver introducida o accesible en el futuro?

Joel Olawanle Kinsta

Joel is a Frontend developer working at Kinsta as a Technical Editor. He is a passionate teacher with love for open source and has written over 200 technical articles majorly around JavaScript and it's frameworks.