--- title: "Cómo instalar Statping-ng con Docker en Ubuntu 24.04" description: "Despliega Statping-ng con Docker Compose y PostgreSQL en Ubuntu 24.04, publícalo con Nginx y HTTPS, añade servicios a monitorizar y configura alertas y copias." category: "Páginas de Estado e Incidentes" language: es source: https://cubepath.com/es/docs/páginas-de-estado-e-incidentes/instalacion-de-statping-ng-pagina-de-estado updated: 2026-09-25 --- # Cómo instalar Statping-ng con Docker en Ubuntu 24.04 Statping-ng es una herramienta de monitorización de disponibilidad escrita en Go que comprueba periódicamente tus servicios (HTTP, TCP o UDP) y publica una página de estado con el uptime, los tiempos de respuesta y el historial de caídas. Es la continuación mantenida por la comunidad del proyecto Statping original. En este tutorial desplegarás Statping-ng con Docker Compose y PostgreSQL en Ubuntu 24.04, lo publicarás con Nginx y HTTPS, añadirás servicios desde el panel y la API, configurarás una notificación y programarás copias de seguridad. ## Requisitos previos Para seguir esta guía necesitas: - Un servidor con Ubuntu 24.04 LTS, por ejemplo un VPS de CubePath, con al menos 1 GB de RAM. - Un usuario no root con privilegios `sudo`. - Docker Engine y el plugin Docker Compose instalados desde el repositorio oficial. - Un subdominio, por ejemplo `status.your_domain`, con un registro DNS A apuntando a la IP del servidor. - Los puertos 80 y 443 abiertos. Aloja la página de estado en un servidor distinto al de los servicios que monitoriza: si todo está en la misma máquina, una caída se llevaría también la página que debe informar de ella. ## Paso 1: Preparar el directorio y los secretos Crea el directorio del proyecto: ```bash sudo mkdir -p /opt/statping sudo chown "$USER":"$USER" /opt/statping cd /opt/statping ``` Genera la contraseña de PostgreSQL, la del usuario administrador y el secreto de la API, y guárdalos en un archivo `.env` que Docker Compose lee automáticamente: ```bash cat > .env <8080/tcp ``` Comprueba en los logs que se ha conectado a la base de datos y que no hay errores: ```bash docker compose logs --tail 30 statping ``` Verifica que responde en local: ```bash curl -s -o /dev/null -w '%{http_code}\n' http://127.0.0.1:8080/ ``` ```output 200 ``` ## Paso 4: Publicar Statping-ng con Nginx y HTTPS Instala Nginx y Certbot y permite el tráfico web en UFW: ```bash sudo apt update sudo apt install -y nginx certbot python3-certbot-nginx sudo ufw allow 'Nginx Full' ``` Crea el bloque de servidor, sustituyendo `status.your_domain` por tu subdominio: ```bash sudo nano /etc/nginx/sites-available/statping ``` ```nginx server { listen 80; listen [::]:80; server_name status.your_domain; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } ``` Activa el sitio, valida la sintaxis y recarga Nginx: ```bash sudo ln -s /etc/nginx/sites-available/statping /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx ``` Obtén el certificado de Let's Encrypt. Certbot añadirá la configuración de TLS y la redirección de HTTP a HTTPS: ```bash sudo certbot --nginx -d status.your_domain ``` Abre `https://status.your_domain`. Verás la página pública, todavía sin servicios. Entra en el panel con **Dashboard** (o en `https://status.your_domain/login`) con el usuario `admin` y la contraseña del paso 1. ## Paso 5: Añadir servicios desde el panel En el panel, ve a **Services** y pulsa **Create**. Para monitorizar una web configura: - **Service Type**: `HTTP Service`. - **Service Endpoint (URL)**: `https://your_domain`. - **Expected Status Code**: `200`. - **Check Interval**: cada cuánto se comprueba, por ejemplo 60 segundos. - **Request Timeout**: por ejemplo 15 segundos. - **Public**: activado si quieres que aparezca en la página de estado. Para un servicio que no es HTTP, como una base de datos o un servidor de correo, elige `TCP Service` e indica el host y el puerto. Guarda el servicio y, pasado el primer intervalo, la página pública mostrará su estado, el uptime y una gráfica de latencia. > Consejo: marca como no públicos los servicios internos (bases de datos, paneles de administración). Seguirán monitorizándose y enviando alertas, pero no revelarás su existencia en la página pública. ## Paso 6: Gestionar servicios con la API La API REST es útil para dar de alta servicios de forma automática, por ejemplo desde un script de aprovisionamiento. Se autentica con la cabecera `Authorization: Bearer` y el valor de `API_SECRET`. Carga el secreto en tu sesión: ```bash export STATPING_URL="https://status.your_domain" export API_SECRET=$(grep '^API_SECRET=' /opt/statping/.env | cut -d= -f2) ``` Lista los servicios existentes: ```bash curl -s "$STATPING_URL/api/services" -H "Authorization: Bearer $API_SECRET" | jq '.[] | {id, name, online}' ``` ```output { "id": 1, "name": "Web principal", "online": true } ``` Crea un servicio TCP que compruebe el puerto SSH de otro servidor cada minuto: ```bash curl -s -X POST "$STATPING_URL/api/services" \ -H "Authorization: Bearer $API_SECRET" \ -H "Content-Type: application/json" \ -d '{ "name": "SSH servidor de backups", "domain": "backup.your_domain", "port": 22, "type": "tcp", "check_interval": 60, "timeout": 10, "public": false }' ``` La respuesta devuelve el servicio creado con su `id`. Consulta su detalle, incluidos el estado y las métricas de uptime: ```bash curl -s "$STATPING_URL/api/services/2" -H "Authorization: Bearer $API_SECRET" | jq '{name, online, online_24_hours, avg_response}' ``` Si necesitas instalar `jq`, ejecuta `sudo apt install jq`. ## Paso 7: Configurar las notificaciones Statping-ng puede avisar cuando un servicio cae y cuando se recupera. Los canales disponibles (correo SMTP, Slack, Discord, Telegram, webhooks, entre otros) se configuran en **Settings > Notifiers**. Por ejemplo, para correo: 1. Abre el notificador **Email**. 2. Introduce el host SMTP, el puerto (587), el usuario, la contraseña, el remitente y el destinatario de las alertas. 3. Activa **Enable** y guarda. 4. Pulsa **Test** para enviar un mensaje de prueba y confirma que llega. Para Slack o Discord basta con pegar la URL del webhook entrante del canal. En cada servicio, la opción **Notify All Changes** controla si se envía un aviso en cada cambio de estado. Para comprobar que las alertas funcionan, crea un servicio HTTP de prueba contra una URL que no exista, por ejemplo `https://your_domain/no-existe` con código esperado `200`. Tras el primer intervalo se marcará como caído y recibirás la notificación. Bórralo después. ## Paso 8: Programar copias de seguridad Los servicios, el historial y la configuración se guardan en PostgreSQL. Crea un script que haga un volcado comprimido y conserve los últimos 14 días: ```bash sudo nano /usr/local/bin/statping-backup.sh ``` ```bash #!/usr/bin/env bash set -euo pipefail backup_dir="/var/backups/statping" mkdir -p "$backup_dir" docker compose -f /opt/statping/compose.yaml exec -T postgres \ pg_dump -U statping statping | gzip > "$backup_dir/statping-$(date +%F).sql.gz" find "$backup_dir" -name 'statping-*.sql.gz' -mtime +14 -delete ``` Hazlo ejecutable y pruébalo: ```bash sudo chmod 755 /usr/local/bin/statping-backup.sh sudo /usr/local/bin/statping-backup.sh ls -lh /var/backups/statping ``` ```output -rw-r--r-- 1 root root 38K Sep 25 03:00 statping-2026-09-25.sql.gz ``` Prográmalo cada noche a las 03:00 con cron: ```bash echo '0 3 * * * root /usr/local/bin/statping-backup.sh' | sudo tee /etc/cron.d/statping-backup ``` Guarda también una copia de `/opt/statping/.env` fuera del servidor, y lleva los volcados a otro sitio (otro servidor o almacenamiento de objetos) para que sobrevivan a la pérdida de la máquina. ## Paso 9: Actualizar Statping-ng Para actualizar a una imagen más reciente, haz antes una copia de seguridad y después descarga las imágenes y recrea los contenedores: ```bash sudo /usr/local/bin/statping-backup.sh cd /opt/statping docker compose pull docker compose up -d docker compose logs --tail 30 statping ``` ## Solución de problemas **Statping-ng se reinicia en bucle.** Revisa `docker compose logs statping`. Si el error es de conexión a la base de datos, comprueba que `postgres` está `healthy` y que `DB_PASSWORD` no ha cambiado desde el primer arranque: PostgreSQL solo aplica `POSTGRES_PASSWORD` al crear el volumen. **Todos los servicios aparecen caídos.** El contenedor no resuelve DNS o no tiene salida a Internet. Prueba desde dentro con `docker compose exec statping wget -qO- https://your_domain | head -c 100`. Si falla, revisa la configuración de red de Docker y el firewall de salida del servidor. **Nginx devuelve `502 Bad Gateway`.** Statping-ng no está en marcha o no escucha en `127.0.0.1:8080`. Comprueba `docker compose ps` y `curl -I http://127.0.0.1:8080/`. **La API responde `401`.** Falta la cabecera `Authorization: Bearer` o el valor no coincide con `API_SECRET` del archivo `.env`. ## Conclusión Tienes Statping-ng monitorizando tus servicios desde Ubuntu 24.04, con PostgreSQL, una página de estado pública con HTTPS, alertas por correo o chat y copias de seguridad diarias. Como siguientes pasos, puedes agrupar servicios en la página pública desde **Groups**, añadir comprobaciones de palabras clave en la respuesta HTTP o integrar la API en tu herramienta de aprovisionamiento para que cada nuevo servidor se monitorice automáticamente.