jq debe estar instalado para procesar las respuestas JSON de la API:
para instalarlo:
sudo apt install jq
debemos de crear el script con nano:
nano /usr/local/hestia/bin/heztner_snapshoot.sh
En este caso estamos usando hestiacp.
Debes de crear una api en hetzner de tu servidor, tener el id de la maquina y la url de la api de hetner siempre es la misma por default asique en el archivo heztner_snapshoot.sh
Solo debes de cambiar HETZNER_API_KEY=“TU_CLAVE_API” ------ donde pone TU_CLAVE_API poner la clave generada
y modificar la variable:
SERVER_ID=“TU_ID_DEL_SERVIDOR” en la cual deberas de poner el id del servidor para hacer los backups
Para obtener el SERVER_ID y confirmar la URL base de la API de Hetzner, sigue estos pasos:
- Generar una Clave API de Hetzner
Si aún no tienes una clave API:
Inicia sesión en Hetzner Cloud Console.
Ve a Security > API Tokens.
Crea un nuevo token:
Asigna un nombre.
Selecciona los permisos adecuados (por ejemplo, “Read” y “Write”).
Guarda el token en un lugar seguro.
Este token es lo que se asigna a la variable HETZNER_API_KEY.
- Obtener el ID del Servidor (SERVER_ID)
Usa tu clave API para listar tus servidores y encontrar su ID.
Abre una terminal.
Ejecuta el siguiente comando reemplazando TU_CLAVE_API con tu clave API:
bash
(EN LA URL JUNTAR DESDE EL HTTPS HASTA LOS PUNTOS) SOY NUEVO USUARIO NO PUEDO MAS DE " LINKS
curl -s -X GET “https ://api.hetzner.cloud/v1/servers”
-H “Authorization: Bearer TU_CLAVE_API” | jq
Esto devolverá una lista de servidores con información detallada. Busca el campo “id” correspondiente a tu servidor.
Ejemplo de respuesta:
json:
{
“servers”: [
{
“id”: 1234567,
“name”: “mi-servidor”,
“status”: “running”,
…
}
]
}
En este caso, el SERVER_ID sería 1234567.
- Confirmar la URL Base de la API
La URL base de la API de Hetzner es siempre:
plaintext:
(Tengo que poner espacios por ser nuevo usuario… ) quita los espacios para que el link funcione correctamente.
https: //api. hetzner .cloud/v1
Esto está documentado en la documentación oficial de la API de Hetzner.
- Configurar el Script
Con estos valores:
Clave API: TU_CLAVE_API
ID del Servidor: 1234567
Modifica las variables en el script:
HETZNER_API_KEY=“TU_CLAVE_API”
SERVER_ID=“1234567”
(QUITAR LOS ESPACIOS)
HETZNER_API_URL=“https ://api. hetzner. cloud/v1”
5 Prueba del Script
Puedes probar si la configuración funciona correctamente ejecutando un comando sencillo para listar imágenes (snapshots existentes):
curl -s -X GET “https://api.hetzner.cloud/v1/images?type=snapshot”
-H “Authorization: Bearer TU_CLAVE_API” | jq
Esto debería mostrar una lista de snapshots disponibles en tu cuenta. Si no aparece nada, verifica la clave API y el ID del servidor.
AVECES EL SCRIPT TIENE PROBEMAS DEBIDO A USUARIOS NO EXPERTOS, PARA ELLO CORRIJALOS DE LA SIGUIENTE FORMA:
- Verificar la Ruta Actual del Script
Asegúrate de estar en el directorio correcto. Si el archivo está en el directorio actual, verifica su existencia:
ls -l hetzner_snapshot.sh
Esto mostrará los permisos actuales del archivo. Busca una línea similar a:
-rw-r–r-- 1 user user … hetzner_snapshot.sh
Si no ves una x en los permisos, significa que no es ejecutable. (HAY QUE DARLE LOS PERMISOS DE EJECUCION)
- Dar Permisos de Ejecución
Usa el siguiente comando para otorgar permisos de ejecución:
chmod +x hetzner_snapshot.sh
- Ejecutar el Script
Intenta ejecutarlo nuevamente:
./hetzner_snapshot.sh
- Verificar el Intérprete del Script
Asegúrate de que la primera línea del script especifique el intérprete correcto, como bash:
#!/bin/bash
Si usas sh en lugar de bash, cambia la ejecución a:
sh hetzner_snapshot.sh
- Ejecutar con Permisos Elevados (si es necesario)
Si el script realiza acciones que requieren permisos administrativos, usa sudo:
sudo ./hetzner_snapshot.sh
El script es el siguiente, guardar el siguiente codigo con el nombre:
(-- hetzner_snapshot.sh --)
#!/bin/bash
Ruta al archivo de configuración de HestiaCP
HESTIA_CONFIG=“/usr/local/hestia/conf/hestia.conf”
Cargar configuración de HestiaCP
if [ -f “$HESTIA_CONFIG” ]; then
source “$HESTIA_CONFIG”
else
echo “Archivo de configuración de Hestia no encontrado.”
exit 1
fi
Clave API de Hetzner
HETZNER_API_KEY=“TU_CLAVE_API”
ID del servidor en Hetzner
SERVER_ID=“TU_ID_DEL_SERVIDOR”
URL base de la API de Hetzner
HETZNER_API_URL=“https://api.hetzner.cloud/v1”
Máximo de snapshots permitidos
MAX_SNAPSHOTS=10
Crear un nuevo snapshot
create_snapshot() {
local snapshot_name=“snapshot-$(date +‘%Y%m%d-%H%M%S’)”
echo “Creando snapshot con nombre: $snapshot_name”
curl -s -X POST “$HETZNER_API_URL/servers/$SERVER_ID/actions/create_image”
-H “Authorization: Bearer $HETZNER_API_KEY”
-H “Content-Type: application/json”
-d “{"type": "snapshot", "description": "$snapshot_name"}” | jq
}
Listar snapshots del servidor
list_snapshots() {
curl -s -X GET “$HETZNER_API_URL/images?type=snapshot”
-H “Authorization: Bearer $HETZNER_API_KEY” | jq -r ‘.images | “(.id) (.created)”’
}
Eliminar un snapshot por ID
delete_snapshot() {
local snapshot_id=“$1”
echo “Eliminando snapshot con ID: $snapshot_id”
curl -s -X DELETE “$HETZNER_API_URL/images/$snapshot_id”
-H “Authorization: Bearer $HETZNER_API_KEY” | jq
}
Limpiar snapshots antiguos si exceden el máximo permitido
cleanup_snapshots() {
echo “Verificando snapshots…”
local snapshots
snapshots=$(list_snapshots | sort -k2) # Ordenar por fecha de creación
local snapshot_count
snapshot_count=$(echo "$snapshots" | wc -l)
if (( snapshot_count > MAX_SNAPSHOTS )); then
local snapshots_to_delete
snapshots_to_delete=$((snapshot_count - MAX_SNAPSHOTS))
echo "Hay $snapshot_count snapshots, eliminando los $snapshots_to_delete más antiguos..."
# Eliminar snapshots más antiguos
echo "$snapshots" | head -n "$snapshots_to_delete" | while read -r snapshot; do
local snapshot_id
snapshot_id=$(echo "$snapshot" | awk '{print $1}')
delete_snapshot "$snapshot_id"
done
else
echo "No hay más de $MAX_SNAPSHOTS snapshots. No se requiere limpieza."
fi
}
Crear un snapshot y limpiar si excede el límite
create_and_cleanup() {
create_snapshot
cleanup_snapshots
}
Ejecutar la función principal
create_and_cleanup
- Editar el Cron Job
Abre el archivo de configuración de cron para el usuario actual:
crontab -e
Si es la primera vez que usas crontab, se te pedirá que elijas un editor. Selecciona tu preferido, como nano.
- Añadir una Entrada al Cron
Al final del archivo, agrega la siguiente línea:
0 0 * * * /usr/local/hestia/bin/hetzner_snapshot.sh
Esto ejecutará el script todos los días a la medianoche. Cambia 0 0 a la hora deseada (formato 24 horas). Por ejemplo:
A las 6:30 AM: 30 6 * * *
A las 8:00 PM: 0 20 * * *
-
Guardar y Salir
En nano, presiona CTRL + O para guardar, luego ENTER y CTRL + X para salir. -
Verificar el Cron Job
Confirma que el cron job se agregó correctamente:
crontab -l
Esto mostrará la lista de tareas programadas.
- Probar el Script
Ejecuta el script manualmente una vez para asegurarte de que funciona correctamente:
/usr/local/hestia/bin/hetzner_snapshot.sh
¡Listo! Ahora el script se ejecutará automáticamente todos los días según lo programado.