bolt Valebyte VPS desde $4/mes — NVMe, despliegue en 60s.

Obtener VPS arrow_forward
eco Principiante Tutorial/Cómo hacer

Instalación de Healthchecks.io

calendar_month Jul 04, 2026 schedule 21 min de lectura visibility 7 vistas
info

¿Necesitas un servidor para esta guía? Ofrecemos servidores dedicados y VPS en más de 50 países con configuración instantánea.

¿Necesitas un VPS para esta guía?

Explore otras opciones de servidores dedicados en

Instalación de Healthchecks.io en un VPS: Monitoreo de tareas Cron y procesos en segundo plano

TL;DR

En esta guía detallada, configuraremos paso a paso Healthchecks.io —un potente sistema de monitoreo de tareas Cron, procesos en segundo plano y otras tareas periódicas— en su propio VPS. Aprenderá cómo implementarlo utilizando Docker Compose, asegurar el acceso a través de Caddy con HTTPS automático, y configurar copias de seguridad y mantenimiento para un funcionamiento fiable.

  • Implementación de Healthchecks.io en Ubuntu 24.04 LTS con Docker Compose.
  • Configuración de acceso seguro a través de un nombre de dominio con HTTPS, utilizando el servidor web Caddy.
  • Configuración de la base de datos PostgreSQL y los parámetros principales de Healthchecks.io.
  • Implementación de mecanismos de copia de seguridad para preservar sus datos.
  • Instrucciones paso a paso para la preparación del servidor, instalación de software, configuración y resolución de problemas.
  • Comandos y versiones de software actualizados, relevantes para el año 2026.

¿Qué configuramos y por qué?

En el mundo moderno, donde la automatización y los procesos en segundo plano desempeñan un papel clave en el funcionamiento de las aplicaciones web, las bases de datos y la infraestructura, es fundamental contar con un método fiable para asegurar que todas estas tareas se ejecuten a tiempo y sin errores. Para esto precisamente está diseñado Healthchecks.io.

Healthchecks.io es una potente herramienta para monitorear tareas periódicas. Funciona según el principio de "monitoreo inverso": en lugar de verificar si un servicio está en ejecución, Healthchecks.io espera "pings" (solicitudes HTTP) de sus tareas en intervalos de tiempo definidos. Si una tarea no envía un ping dentro de la ventana esperada, Healthchecks.io envía inmediatamente una notificación de fallo.

Es la solución ideal para:

  • Tareas Cron: Asegúrese de que sus copias de seguridad diarias, procesamiento de datos o envío de informes se ejecuten exactamente según lo programado.
  • Procesos en segundo plano: Monitoreo de demonios, workers de colas u otros procesos de larga duración que deben informar regularmente sobre su estado de funcionamiento.
  • Dispositivos IoT: Verificación de la actividad de dispositivos remotos que deben enviar datos regularmente.
  • Scripts de automatización: Confirmación de la finalización exitosa de despliegues o sincronizaciones automáticas.

Al final, el lector obtendrá un sistema de monitoreo completamente funcional y autosuficiente, implementado en su propio servidor. Esto le dará control total sobre los datos, la configuración y la seguridad, además de permitirle evitar los costos de los servicios de monitoreo en la nube de terceros.

Alternativas: Cloud-managed vs Self-hosted

En el mercado existen muchas alternativas a Healthchecks.io, tanto en la nube (cloud-managed) como autoalojadas (self-hosted).

  • Servicios Cloud-managed: Incluyen soluciones como UptimeRobot, Better Uptime, Cronitor, Pingdom y el propio Healthchecks.io ofrece una versión SaaS.
    • Pros: Facilidad de configuración, no es necesario gestionar el servidor, escalabilidad, a menudo rica funcionalidad.
    • Contras: Cuota mensual (que puede aumentar con el número de comprobaciones), dependencia de un proveedor externo, posibles problemas de privacidad de datos.
  • Soluciones Self-hosted: Además de Healthchecks.io, se pueden considerar herramientas como Prometheus/Grafana (aunque son más para métricas que para pings), Netdata (para monitoreo de recursos del sistema) o incluso scripts personalizados.
    • Pros del self-hosted en un VPS: Control total sobre los datos y la infraestructura, ausencia de pagos mensuales (excepto el costo del VPS), posibilidad de personalización profunda, mayor privacidad.
    • Contras: Requiere ciertos conocimientos técnicos para la instalación y el mantenimiento, la responsabilidad de la seguridad y las copias de seguridad recae en usted.

La elección de Healthchecks.io autoalojado en un VPS está justificada si valora el control, la privacidad y desea evitar los recurring costs, poseyendo al mismo tiempo las habilidades suficientes para gestionar su propio servidor. Es una solución económica y flexible para monitorear sus tareas críticas.

¿Qué configuración de VPS se necesita para esta tarea?

Healthchecks.io es una aplicación relativamente ligera, especialmente si utiliza Docker Compose, que optimiza el consumo de recursos. Sin embargo, para un funcionamiento estable, especialmente considerando la base de datos PostgreSQL y el servidor web, se requieren ciertas características mínimas.

Requisitos mínimos

  • CPU: 1 núcleo. Los procesadores modernos son lo suficientemente potentes para manejar decenas de miles de comprobaciones.
  • RAM: 1-2 GB. Esto será suficiente para el sistema operativo, los contenedores Docker de Healthchecks.io y PostgreSQL. Si se planea un número muy grande de comprobaciones (cientos de miles), considere 4 GB.
  • Disco: 20-40 GB SSD. Healthchecks.io no almacena muchos datos por defecto, pero PostgreSQL crecerá con el tiempo. El SSD es críticamente importante para el rendimiento de la base de datos.
  • Red: 100 Mbps o 1 Gbps. Para los pings entrantes y las notificaciones salientes, un ancho de banda básico es suficiente.

Plan de VPS específico para la tarea

Para la mayoría de los escenarios de monitoreo de hasta varios miles de comprobaciones, un VPS con las siguientes características será adecuado:

  • 2 x vCPU
  • 4 GB RAM
  • 60-80 GB SSD
  • Interfaz de red de 1 Gbps

Esta configuración será más que suficiente para el funcionamiento estable de Healthchecks.io, el procesamiento de notificaciones y el almacenamiento del historial de comprobaciones durante un largo período. Puede considerar un VPS con las características indicadas para alojar su instancia de Healthchecks.io.

Cuándo se necesita un servidor dedicado, no un VPS

En la mayoría de los casos, un VPS será suficiente para Healthchecks.io. Sin embargo, un servidor dedicado puede estar justificado en las siguientes situaciones:

  • Un número muy grande de comprobaciones: Si planea monitorear cientos de miles o millones de tareas con intervalos muy cortos, lo que crea una alta carga en la base de datos y el servidor web.
  • Requisitos de rendimiento: Si cada milisegundo de retraso es crítico al procesar pings o enviar notificaciones, y desea eliminar por completo el "ruido del vecino" (noisy neighbor) en un entorno virtualizado.
  • Requisitos estrictos de seguridad/cumplimiento: Algunos requisitos regulatorios pueden prescribir el uso de hardware físicamente aislado.
  • Integración con otros servicios: Si se planea alojar otros servicios críticos que requieren recursos significativos en el mismo servidor.

Para la mayoría de los usuarios, incluso con varios miles de comprobaciones, un VPS bien configurado será la opción óptima y más económica.

Ubicación: en qué influye

La elección de la ubicación geográfica del VPS tiene varios aspectos importantes:

  • Latencia: Cuanto más cerca esté el servidor de las fuentes de sus pings (sus otros servidores, aplicaciones), menor será la latencia. Para Healthchecks.io esto no es crítico, ya que los pings son pequeñas solicitudes HTTP, pero para la capacidad de respuesta general del sistema puede ser importante.
  • Disponibilidad de notificaciones: Si sus notificaciones (por ejemplo, por correo electrónico) deben llegarle rápidamente, la ubicación del servidor más cercana a su ubicación de trabajo principal puede ser preferible.
  • Legislación y cumplimiento: Dependiendo de qué datos planee monitorear y quién sea el usuario de Healthchecks.io, la ubicación del servidor puede influir en la legislación aplicable sobre protección de datos (por ejemplo, GDPR en Europa).
  • Precio: Los precios de los VPS pueden variar según la región.

Normalmente se recomienda elegir una ubicación que esté geográficamente más cerca de sus servicios principales que enviarán pings, o de su equipo que recibirá las notificaciones.

Preparación del servidor

Antes de proceder con la instalación de Healthchecks.io, es necesario realizar una configuración básica de su nuevo VPS para garantizar la seguridad y preparar el entorno para una futura implementación. Utilizaremos Ubuntu 24.04 LTS (Noble Numbat) como base para nuestro tutorial, ya que es un sistema operativo actual y compatible para el año 2026.

1. Conexión al servidor por SSH

Utilice un cliente SSH para conectarse a su VPS. Reemplace your_username y your_vps_ip con sus datos actuales.


ssh your_username@your_vps_ip

Si está utilizando el usuario root, se recomienda crear inmediatamente un nuevo usuario con privilegios limitados.

2. Creación de un nuevo usuario y configuración de sudo

Trabajar como usuario root no es seguro. Cree un nuevo usuario y otórguele permisos sudo.


# Añadir nuevo usuario
sudo adduser newuser

# Añadir usuario al grupo sudo
sudo usermod -aG sudo newuser

# Cambiar al nuevo usuario
su - newuser

A partir de ahora, todos los comandos se ejecutarán como newuser utilizando sudo.

3. Configuración de claves SSH (recomendado)

Para mejorar la seguridad, se recomienda utilizar claves SSH en lugar de contraseñas. Si aún no las ha configurado, copie su clave pública al servidor.


# En su máquina local
ssh-copy-id newuser@your_vps_ip

# En el servidor, después de asegurarse de que el inicio de sesión con clave funciona, desactive el inicio de sesión con contraseña para root
# Edite el archivo /etc/ssh/sshd_config
sudo nano /etc/ssh/sshd_config

Encuentre y modifique las siguientes líneas:


PermitRootLogin no
PasswordAuthentication no

Guarde el archivo (Ctrl+O, Enter) y salga (Ctrl+X). Luego, reinicie el servicio SSH:


sudo systemctl restart sshd

4. Actualización del sistema

Siempre comience actualizando la lista de paquetes e instalando las últimas versiones del software ya instalado.


# Actualizar la lista de paquetes
sudo apt update

# Actualizar los paquetes instalados a las últimas versiones
sudo apt upgrade -y

# Eliminar paquetes innecesarios y limpiar la caché
sudo apt autoremove -y && sudo apt clean

5. Configuración del firewall (UFW)

UFW (Uncomplicated Firewall) es una interfaz fácil de usar para iptables. Lo configuraremos para permitir SSH y los futuros puertos de Healthchecks.io (HTTP/HTTPS).


# Permitir SSH (puerto 22)
sudo ufw allow OpenSSH

# Permitir HTTP (puerto 80) - para Caddy y Let's Encrypt
sudo ufw allow http

# Permitir HTTPS (puerto 443) - para Caddy y Let's Encrypt
sudo ufw allow https

# Habilitar el firewall
sudo ufw enable

Confirme la habilitación introduciendo y. Verifique el estado del firewall:


sudo ufw status verbose

6. Instalación de Fail2ban

Fail2ban ayuda a proteger su servidor contra ataques de fuerza bruta, bloqueando las direcciones IP desde las cuales se realizan demasiados intentos de inicio de sesión fallidos.


# Instalación de Fail2ban
sudo apt install fail2ban -y

# Habilitar e iniciar el servicio
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# Verificar el estado (opcional)
sudo systemctl status fail2ban

Fail2ban ya está configurado por defecto para proteger SSH. Para una configuración más fina, puede copiar y editar el archivo /etc/fail2ban/jail.conf en /etc/fail2ban/jail.local.

7. Instalación de utilidades básicas

Instalaremos algunas utilidades útiles que pueden ser de ayuda más adelante.


# Instalación de curl, wget, git, htop
sudo apt install curl wget git htop -y

Ahora su servidor está listo para la instalación de Healthchecks.io y sus dependencias.

Instalación de software — paso a paso

Instalación de Software — paso a paso

Para instalar Healthchecks.io, utilizaremos Docker Compose. Este es el método de despliegue más recomendado, ya que simplifica la gestión de dependencias (PostgreSQL, Redis) y las actualizaciones. Utilizaremos las versiones actuales de Docker y Healthchecks.io disponibles en 2026.

1. Instalación de Docker y Docker Compose

Primero, instalaremos Docker Engine y Docker Compose. Utilizaremos los repositorios oficiales de Docker para obtener las últimas versiones.


# Eliminación de versiones antiguas de Docker (si existen)
sudo apt remove docker docker-engine docker.io containerd runc

# Instalación de dependencias para añadir el repositorio de Docker
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

# Añadir clave GPG de Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

# Añadir repositorio de Docker
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# Actualización de la lista de paquetes después de añadir el repositorio
sudo apt update

# Instalación de Docker Engine, Docker CLI y containerd (versiones actuales para 2026)
sudo apt install docker-ce docker-ce-cli containerd.io -y

# Añadir el usuario actual al grupo docker para ejecutar comandos sin sudo
sudo usermod -aG docker ${USER}

# Aplicar cambios de grupo (requerirá reconexión SSH o reinicio)
# newgrp docker
# Ejecute exit y vuelva a conectarse al servidor por SSH para que los cambios surtan efecto.

Después de reconectarse a SSH, verifique la instalación de Docker:


# Verificación de la versión de Docker
docker --version

# Verificación de la versión de Docker Compose (se instalará como un plugin)
docker compose version

Versiones esperadas: Docker Engine 25.x.x+, Docker Compose v2.x.x+.

2. Descarga de la configuración de Healthchecks.io

Utilizaremos el repositorio oficial de Healthchecks.io para obtener el archivo docker-compose.yml y los archivos relacionados.


# Creación del directorio para Healthchecks.io
mkdir ~/healthchecks
cd ~/healthchecks

# Descarga del archivo docker-compose.yml y .env.example
# Usamos wget para descargar directamente desde GitHub para mayor estabilidad
wget https://raw.githubusercontent.com/healthchecks/healthchecks/master/docker-compose.yml
wget https://raw.githubusercontent.com/healthchecks/healthchecks/master/.env.example

# Renombrar el archivo de ejemplo de variables de entorno
mv .env.example .env

3. Configuración del archivo .env

El archivo .env contiene variables de entorno críticas para Healthchecks.io, incluyendo la clave secreta, los datos de conexión a la base de datos y la configuración de correo electrónico. Ábralo para editar:


# Apertura del archivo .env para edición
nano .env

Asegúrese de cambiar los siguientes parámetros:

  • SECRET_KEY: Genere una cadena aleatoria muy larga (por ejemplo, más de 50 caracteres) utilizando un generador de contraseñas o el comando openssl rand -hex 32. Esta clave se utiliza para operaciones criptográficas.
  • SITE_ROOT: Especifique la URL completa de su instancia de Healthchecks.io, por ejemplo, https://monitor.yourdomain.com. Esto es importante para el correcto funcionamiento de los enlaces en las notificaciones y en la interfaz web.
  • DB_HOST, DB_NAME, DB_USER, DB_PASS: Utilice los valores predeterminados de docker-compose.yml (normalmente db, hc, hc, hc), pero DEBE cambiar DB_PASS por una contraseña aleatoria y segura.
  • EMAIL_HOST, EMAIL_PORT, EMAIL_HOST_USER, EMAIL_HOST_PASSWORD, EMAIL_USE_TLS, DEFAULT_FROM_EMAIL: Configure estos parámetros para el envío de notificaciones por correo electrónico. Utilice los datos de su proveedor SMTP. Si no lo configura, Healthchecks.io no podrá enviar notificaciones.
  • PING_KEY: Genere una clave única (por ejemplo, un UUID) que se utilizará para la autorización al enviar pings, si desea reforzar la seguridad. Si no se especifica, se utiliza un mecanismo interno.

Ejemplo de líneas editadas en .env:


SECRET_KEY='your_very_long_and_random_secret_key_here_e.g._openssl_rand_hex_32_output'
SITE_ROOT='https://monitor.yourdomain.com'

DB_HOST=db
DB_NAME=hc
DB_USER=hc
DB_PASSWORD='your_strong_db_password_here'

EMAIL_HOST=smtp.mailtrap.io
EMAIL_PORT=2525
EMAIL_HOST_USER=your_smtp_username
EMAIL_HOST_PASSWORD=your_smtp_password
EMAIL_USE_TLS=True
[email protected]

PING_KEY='your_optional_ping_key_uuid'

Guarde los cambios (Ctrl+O, Enter) y salga (Ctrl+X).

4. Inicialización de la base de datos

Antes de la primera ejecución de Healthchecks.io, es necesario inicializar la base de datos y aplicar las migraciones.


# Inicio del contenedor de la base de datos y ejecución de migraciones
docker compose run --rm web python manage.py migrate

Este comando inicia el contenedor web, ejecuta el comando python manage.py migrate para crear las tablas necesarias en la base de datos y luego elimina el contenedor (--rm).

5. Creación de un superusuario

Para acceder al panel de administración de Healthchecks.io, es necesario crear una cuenta de superusuario.


# Inicio del contenedor web y creación de un superusuario
docker compose run --rm web python manage.py createsuperuser

Se le pedirá que introduzca un nombre de usuario, una dirección de correo electrónico y una contraseña. Utilice una contraseña segura.

6. Inicio de Healthchecks.io

Ahora puede iniciar todos los servicios de Healthchecks.io en segundo plano.


# Inicio de todos los servicios en segundo plano
docker compose up -d

Verifique que los contenedores estén en ejecución:


# Verificación del estado de los contenedores en ejecución
docker compose ps

Debería ver los estados Up para los contenedores db, redis y web.

En este punto, Healthchecks.io está en ejecución y disponible en el puerto 8000 dentro de la red Docker. El siguiente paso es configurar el servidor web Caddy para acceso externo y HTTPS.

Configuración

Después de instalar los componentes básicos de Healthchecks.io, es necesario configurar el acceso externo a la aplicación a través de un nombre de dominio y asegurar la conexión con HTTPS. Utilizaremos Caddy, un servidor web moderno que gestiona automáticamente los certificados de Let's Encrypt.

Nota importante: Antes de continuar, asegúrese de que su dominio (por ejemplo, monitor.yourdomain.com) apunte a la dirección IP de su VPS. Añada el registro A correspondiente en la configuración DNS de su registrador de dominios.

1. Instalación de Caddy

Caddy se puede instalar desde el repositorio oficial. Esto asegurará versiones actualizadas y facilidad de mantenimiento.


# Instalación de dependencias para añadir el repositorio de Caddy
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https

# Añadir clave GPG de Caddy
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg

# Añadir repositorio de Caddy
echo "deb [signed-by=/usr/share/keyrings/caddy-stable-archive-keyring.gpg] https://dl.cloudsmith.io/public/caddy/stable/deb/debian $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/caddy-stable.list

# Actualización de la lista de paquetes
sudo apt update

# Instalación de Caddy (versión actual para 2026)
sudo apt install caddy -y

# Verificación de la versión de Caddy
caddy version

Versión esperada: Caddy 2.x.x+.

2. Configuración del Caddyfile

Caddyfile es el archivo de configuración principal de Caddy. Lo crearemos para hacer proxy de las solicitudes a nuestro contenedor de Healthchecks.io.


# Apertura del archivo Caddyfile para edición
sudo nano /etc/caddy/Caddyfile

Elimine todo el contenido existente y añada la siguiente configuración, reemplazando monitor.yourdomain.com por su dominio real:


monitor.yourdomain.com {
    # Proxy de todas las solicitudes al contenedor de Healthchecks.io
    reverse_proxy 127.0.0.1:8000 {
        # Cabeceras para el correcto funcionamiento del proxy
        header_up Host {host}
        header_up X-Real-IP {remote_ip}
        header_up X-Forwarded-For {remote_ip}
        header_up X-Forwarded-Proto {scheme}
    }

    # Habilitar compresión (opcional, pero recomendado)
    encode gzip zstd

    # Registro de acceso (opcional)
    log {
        output file /var/log/caddy/access.log
        format json
    }

    # Manejo de errores (opcional)
    handle_errors {
        respond "{err.status_code} {err.status_text}" {err.status_code}
    }
}

Explicación:

  • monitor.yourdomain.com: Indica el dominio al que se aplica esta configuración. Caddy obtendrá automáticamente un certificado HTTPS para él.
  • reverse_proxy 127.0.0.1:8000: Redirige todas las solicitudes entrantes al puerto local 8000, donde se ejecuta Healthchecks.io (dentro de la red Docker es accesible a través de 127.0.0.1, si en docker-compose.yml se especifica ports: - "127.0.0.1:8000:8000").
  • header_up ...: Pasa las cabeceras originales del host, la dirección IP y el esquema de protocolo a Healthchecks.io, lo cual es importante para el correcto funcionamiento de la aplicación, especialmente al generar enlaces.

Guarde el archivo (Ctrl+O, Enter) y salga (Ctrl+X).

3. Creación del directorio para los logs de Caddy

Si ha habilitado el registro en Caddyfile, asegúrese de que el directorio para los logs exista y que Caddy tenga acceso a él.


# Creación del directorio para los logs de Caddy
sudo mkdir -p /var/log/caddy

# Establecer los permisos correctos
sudo chown caddy:caddy /var/log/caddy

4. Reinicio de Caddy

Aplique la nueva configuración reiniciando el servicio Caddy.


# Verificación de errores en la configuración del Caddyfile
sudo caddy validate --config /etc/caddy/Caddyfile

# Reinicio del servicio Caddy
sudo systemctl restart caddy

# Asegúrese de que Caddy esté iniciado y funcionando
sudo systemctl status caddy

En la salida de systemctl status caddy, debería ver active (running).

5. Configuración del firewall para Caddy

Ya abrimos los puertos 80 y 443 durante la fase de preparación del servidor, pero si no lo hizo, asegúrese de que estén abiertos.


# Permitir HTTP (puerto 80)
sudo ufw allow 80/tcp

# Permitir HTTPS (puerto 443)
sudo ufw allow 443/tcp

# Recargar UFW si se realizaron cambios
sudo ufw reload

6. Verificación de la operatividad

Ahora puede verificar la disponibilidad de Healthchecks.io a través de su dominio.

  • A través del navegador: Abra https://monitor.yourdomain.com en su navegador web. Debería ver la página de inicio de sesión de Healthchecks.io.
  • A través de curl en el servidor:

# Verificación de la disponibilidad a través de HTTPS
curl -I https://monitor.yourdomain.com

Debería ver las cabeceras de respuesta HTTP, incluyendo HTTP/2 200 y las cabeceras que indican Healthchecks.io.

  • Verificación de los logs de Caddy:

# Ver logs de Caddy
sudo journalctl -u caddy -f
# O si se configuró en un archivo:
sudo tail -f /var/log/caddy/access.log

Debería ver registros de solicitudes entrantes y respuestas exitosas.

Si todo está configurado correctamente, Healthchecks.io debería estar completamente accesible a través de su dominio con una conexión HTTPS segura. Ahora puede iniciar sesión utilizando el superusuario creado anteriormente y comenzar a añadir sus primeras comprobaciones.

Copias de seguridad y mantenimiento

Las copias de seguridad regulares y el mantenimiento oportuno son la clave para la fiabilidad de cualquier sistema. Healthchecks.io no es una excepción. En esta sección, veremos qué exactamente necesita ser respaldado, cómo automatizar el proceso y cómo mantener el sistema actualizado.

1. Qué respaldar

Para una recuperación completa de Healthchecks.io, necesitará guardar tres tipos principales de datos:

  • Base de datos PostgreSQL: Contiene todas sus comprobaciones, pings, configuraciones de usuario, historial de eventos y notificaciones. Este es el componente más crítico.
  • Archivo de configuración .env: Contiene la clave secreta, la configuración SMTP, las claves API y otros parámetros importantes.
  • Configuración de Caddyfile: Aunque es fácil de recrear, guardar la versión actual puede ahorrar tiempo durante la recuperación.

2. Script simple de copia de seguridad automática

Crearemos un script simple que realizará un volcado de la base de datos y copiará los archivos de configuración.


# Creación del directorio para los scripts de copia de seguridad
mkdir -p ~/backups
nano ~/backups/backup_healthchecks.sh

Añada el siguiente contenido al archivo backup_healthchecks.sh. Reemplace /path/to/healthchecks con la ruta real a su directorio de Healthchecks.io (por ejemplo, /home/newuser/healthchecks).


#!/bin/bash

# Directorio donde se encuentran los archivos de Healthchecks.io
HEALTHCHECKS_DIR="/home/newuser/healthchecks"
# Directorio para almacenar las copias de seguridad
BACKUP_DIR="/home/newuser/backups/healthchecks_data"
# Nombre del archivo de volcado de la base de datos
DB_DUMP_FILE="healthchecks_db_$(date +%Y%m%d_%H%M%S).sql.gz"
# Número de días para almacenar las copias de seguridad locales
RETENTION_DAYS=7

# Creación del directorio de copias de seguridad, si no existe
mkdir -p "${BACKUP_DIR}"

echo "--- Iniciando el proceso de copia de seguridad de Healthchecks.io ---"

# 1. Copia de seguridad de la base de datos PostgreSQL
echo "Volcando la base de datos PostgreSQL..."
docker compose -f "${HEALTHCHECKS_DIR}/docker-compose.yml" exec -T db pg_dumpall -U hc | gzip > "${BACKUP_DIR}/${DB_DUMP_FILE}"

if [ $? -eq 0 ]; then
    echo "Base de datos guardada exitosamente en ${BACKUP_DIR}/${DB_DUMP_FILE}"
else
    echo "ERROR: No se pudo guardar la base de datos."
    exit 1
fi

# 2. Copia del archivo .env
echo "Copiando el archivo .env..."
cp "${HEALTHCHECKS_DIR}/.env" "${BACKUP_DIR}/.env_$(date +%Y%m%d_%H%M%S)"

if [ $? -eq 0 ]; then
    echo "Archivo .env copiado exitosamente."
else
    echo "ERROR: No se pudo copiar el archivo .env."
fi

# 3. Copia de Caddyfile
echo "Copiando Caddyfile..."
sudo cp /etc/caddy/Caddyfile "${BACKUP_DIR}/Caddyfile_$(date +%Y%m%d_%H%M%S)"

if [ $? -eq 0 ]; then
    echo "Caddyfile copiado exitosamente."
else
    echo "ERROR: No se pudo copiar Caddyfile."
fi

# 4. Eliminación de copias de seguridad antiguas (más de RETENTION_DAYS días)
echo "Eliminando copias de seguridad antiguas (más de ${RETENTION_DAYS} días)..."
find "${BACKUP_DIR}" -type f -name "healthchecks_db_*.sql.gz" -mtime +"${RETENTION_DAYS}" -delete
find "${BACKUP_DIR}" -type f -name ".env_*" -mtime +"${RETENTION_DAYS}" -delete
find "${BACKUP_DIR}" -type f -name "Caddyfile_*" -mtime +"${RETENTION_DAYS}" -delete
echo "Copias de seguridad antiguas eliminadas."

echo "--- Proceso de copia de seguridad completado ---"

Haga el script ejecutable:


chmod +x ~/backups/backup_healthchecks.sh

3. Dónde almacenar las copias de seguridad (almacenamiento externo)

Almacenar las copias de seguridad en el mismo servidor que los datos originales es extremadamente arriesgado. En caso de fallo del servidor o pérdida de datos, también perderá las copias de seguridad. Asegúrese de configurar la copia de las copias de seguridad a un almacenamiento externo, geográficamente remoto:

  • Almacenamiento compatible con S3 (AWS S3, DigitalOcean Spaces, Backblaze B2): La opción más fiable y escalable. Utilice awscli o rclone para la sincronización automática.
  • VPS separado: Puede configurar un segundo VPS, más económico, y usar rsync o scp para copiar las copias de seguridad a través de SSH.
  • Compartir NFS/SMB: Si tiene un almacenamiento en red, puede montarlo y copiar los archivos allí.

Ejemplo de cómo añadir la sincronización con S3 usando awscli (se asume que awscli está instalado y configurado):


# Añada esto a su script backup_healthchecks.sh después de la sección "Eliminación de copias de seguridad antiguas":
echo "Sincronizando copias de seguridad con S3..."
/usr/local/bin/aws s3 sync "${BACKUP_DIR}" s3://your-s3-bucket-name/healthchecks/
if [ $? -eq 0 ]; then
    echo "Copias de seguridad sincronizadas exitosamente con S3."
else
    echo "ERROR: No se pudieron sincronizar las copias de seguridad con S3."
fi

No olvide configurar awscli en el servidor con las credenciales y permisos de acceso adecuados para su bucket S3.

4. Automatización con Cron

Añada el script de copia de seguridad a Cron para su ejecución automática. Por ejemplo, para una copia de seguridad diaria a las 03:00 de la mañana:


# Abrir crontab para el usuario actual
crontab -e

Añada la siguiente línea al final del archivo:


0 3 * * * /home/newuser/backups/backup_healthchecks.sh >> /home/newuser/backups/backup.log 2>&1

Esta línea ejecuta el script cada día a las 03:00 y redirige toda la salida (incluidos los errores) al archivo backup.log para su posterior revisión.

5. Actualizaciones: Rolling vs. Ventana de mantenimiento

Las actualizaciones regulares son cruciales para la seguridad y para obtener nuevas funciones.

  • Actualización del SO: Se recomienda realizarla una vez al mes.
    
    sudo apt update && sudo apt upgrade -y
    sudo apt autoremove -y && sudo apt clean
    
  • Actualización de contenedores Docker (Healthchecks.io, PostgreSQL, Redis):

    Healthchecks.io se actualiza obteniendo nuevas imágenes Docker. Esto se puede hacer sin un tiempo de inactividad significativo (actualización continua) si utiliza varias instancias, pero para un solo VPS se requerirá una breve ventana de mantenimiento.

    
    cd ~/healthchecks
    # Detener servicios
    docker compose down
    
    # Obtener las últimas imágenes
    docker compose pull
    
    # Iniciar servicios con las nuevas imágenes
    docker compose up -d
    
    # Eliminar imágenes y volúmenes antiguos no utilizados
    docker system prune -f
    docker volume prune -f
    

    Se recomienda realizar estos pasos en una ventana de mantenimiento predefinida para minimizar el impacto en los usuarios. Antes de actualizar, siempre revise la documentación oficial de Healthchecks.io para detectar cambios en la configuración o migraciones de la base de datos que puedan requerir pasos adicionales.

Recuerde que probar regularmente el proceso de recuperación a partir de las copias de seguridad es tan importante como la creación de las copias de seguridad en sí. Esto garantiza que, en caso de fallo, podrá restaurar rápidamente su sistema.

Solución de problemas + Preguntas frecuentes

Incluso con la configuración más cuidadosa, pueden surgir problemas. Esta sección le ayudará a diagnosticar y resolver los problemas más comunes, así como a responder a las preguntas frecuentes.

No puedo acceder a Healthchecks.io a través del navegador. ¿Qué debo verificar?

Si no puede abrir la interfaz web de Healthchecks.io a través de su nombre de dominio (por ejemplo, https://monitor.yourdomain.com), verifique lo siguiente:

  1. Registro DNS: Asegúrese de que el registro A de su dominio apunte correctamente a la dirección IP de su VPS. Use dig monitor.yourdomain.com o herramientas en línea.
  2. Cortafuegos (UFW): Verifique si los puertos 80 (HTTP) y 443 (HTTPS) están abiertos en su VPS. Use sudo ufw status verbose.
  3. Caddy: Asegúrese de que el servicio Caddy esté en ejecución (sudo systemctl status caddy) y que su archivo de configuración (/etc/caddy/Caddyfile) esté configurado correctamente y apunte al puerto correcto (127.0.0.1:8000). Revise los registros de Caddy: sudo journalctl -u caddy -f.
  4. Contenedores Docker: Asegúrese de que todos los contenedores de Healthchecks.io estén en ejecución: cd ~/healthchecks && docker compose ps. Todos los contenedores (db, redis, web) deben estar en estado Up.
  5. SITE_ROOT en .env: Asegúrese de que la variable SITE_ROOT en el archivo .env esté configurada con la URL HTTPS completa de su dominio (por ejemplo, https://monitor.yourdomain.com).

El contenedor de Healthchecks.io (web) no se inicia o se reinicia constantemente.

Esto generalmente indica un problema con la configuración o las dependencias. Revise los registros del contenedor:


cd ~/healthchecks
docker compose logs web

Busque mensajes de error en la salida. Las causas típicas son:

  • Problemas con la base de datos: Credenciales incorrectas en .env (DB_USER, DB_PASSWORD), o el contenedor db no está en ejecución.
  • SECRET_KEY incorrecta: SECRET_KEY debe ser una cadena larga y aleatoria.
  • Problemas con las migraciones: Asegúrese de que python manage.py migrate se haya ejecutado correctamente.
  • Problemas con Redis: El contenedor redis no está en ejecución o no es accesible.

No recibo notificaciones por correo electrónico.

Verifique los siguientes puntos:

  1. Configuración SMTP en .env: Asegúrese de que todas las variables EMAIL_HOST, EMAIL_PORT, EMAIL_HOST_USER, EMAIL_HOST_PASSWORD, EMAIL_USE_TLS y DEFAULT_FROM_EMAIL en el archivo .env estén configuradas correctamente para su proveedor SMTP.
  2. Correo electrónico de prueba: Intente enviar un correo electrónico de prueba desde la consola de Healthchecks.io:
    
    cd ~/healthchecks
    docker compose run --rm web python manage.py sendtestemail [email protected]
                

    Esto debería mostrar errores de envío, si los hay.

  3. Cortafuegos del VPS: Asegúrese de que su VPS pueda establecer conexiones salientes al puerto SMTP de su proveedor (generalmente 587 o 465).
  4. Filtros de spam: Revise la carpeta "Spam" en su buzón de correo.

Los pings no se registran en Healthchecks.io.

Si sus tareas envían pings, pero Healthchecks.io no los ve:

  1. URL del ping: Asegúrese de que la URL que su tarea utiliza para enviar el ping sea absolutamente precisa (incluido el UUID de la comprobación). Debe tener el formato https://monitor.yourdomain.com/ping/YOUR_CHECK_UUID/.
  2. Disponibilidad de la red: Asegúrese de que el servidor que envía el ping pueda alcanzar su instancia de Healthchecks.io. Verifique con curl -I https://monitor.yourdomain.com desde el servidor que envía el ping.
  3. PING_KEY: Si ha configurado la variable PING_KEY en .env, asegúrese de que sus tareas envíen esta clave en el encabezado X-Ping-Key.
  4. Zona horaria: Asegúrese de que las zonas horarias en el VPS y en Healthchecks.io estén configuradas correctamente para evitar problemas de programación.

¿Qué configuración mínima de VPS es adecuada?

Para un uso básico de Healthchecks.io, monitoreando decenas o incluso un par de cientos de tareas, un VPS con 1 vCPU, 1-2 GB de RAM y 20-40 GB de SSD será suficiente. Esto será suficiente para el sistema operativo, Docker, Healthchecks.io y su base de datos. Sin embargo, para una mayor estabilidad y posibilidad de crecimiento, se recomienda 2 vCPU, 4 GB de RAM y 60-80 GB de SSD.

¿Qué elegir: VPS o dedicado para esta tarea?

Para la mayoría de los usuarios y escenarios de monitoreo, Healthchecks.io en un VPS es la solución óptima. Es rentable, suficientemente potente y proporciona el nivel necesario de aislamiento. Los servidores dedicados solo se justifican en casos muy específicos: al monitorear cientos de miles o millones de tareas, cuando se requiere el máximo rendimiento y la ausencia total de "ruido de vecinos", o cuando existen requisitos estrictos de aislamiento físico del hardware.

Conclusiones y próximos pasos

¡Felicidades! Ha instalado y configurado con éxito Healthchecks.io en su VPS, asegurando un monitoreo fiable para sus tareas Cron y procesos en segundo plano. Ahora tiene control total sobre su sistema de monitoreo, lo que garantiza notificaciones oportunas sobre cualquier fallo o retraso en el funcionamiento de sus tareas críticas. Esto aumentará significativamente la fiabilidad de su infraestructura y le permitirá reaccionar rápidamente ante los problemas.

Próximos pasos

  1. Integración con notificaciones: Configure canales de notificación adicionales de Healthchecks.io, como Slack, Telegram, PagerDuty o webhooks personalizados, para recibir alertas de la manera más conveniente para usted.
  2. Comprobaciones adicionales: Empiece a añadir todas sus tareas periódicas a Healthchecks.io. Considere monitorear no solo scripts, sino también operaciones regulares como la actualización de cachés, la verificación del espacio en disco o la limpieza de registros.
  3. Monitoreo de recursos del servidor: Para una visión completa del estado de su sistema, considere instalar una herramienta adicional de monitoreo de recursos del servidor, como Netdata o Prometheus/Grafana, para rastrear la CPU, RAM, disco y red de su VPS.

¿Te fue útil esta guía?

Instalación de healthchecks.io en VPS: monitoreo de tareas cron y procesos en segundo plano
support_agent
Valebyte Support
Usually replies within minutes
Hi there!
Send us a message and we'll reply as soon as possible.