Cómo instalar Statping en Ubuntu 22.04

Statping es un monitor de tiempo de actividad de código abierto que realiza un seguimiento de los sitios web y aplicaciones alojados en varios servidores. Puede generar una bonita página de estado obteniendo datos en tiempo real de varias fuentes. Puede funcionar con varios sistemas de bases de datos, como SQLite, MySQL y Postgres. Para nuestro tutorial, utilizaremos la bifurcación de Statping, llamada Statping-ng, ya que la aplicación original ya no se desarrolla.

En este tutorial, aprenderás a instalar Statping en un servidor Ubuntu 22.04 utilizando Docker y el servidor Nginx como proxy.

Requisitos previos

  • Un servidor con Ubuntu 22.04.
  • Un usuario no root con privilegios sudo.
  • El cortafuegos sin complicaciones (UFW) está activado y en ejecución.
  • Un nombre de dominio totalmente cualificado (FQDN) que apunte al servidor como, por ejemplo, status.example.com.
  • Todo está actualizado.
    $ sudo apt update && sudo apt upgrade
    

Paso 1 – Configurar el Cortafuegos

Antes de instalar ningún paquete, el primer paso es configurar el cortafuegos para que permita las conexiones HTTP y HTTPS.

Comprueba el estado del cortafuegos.

$ sudo ufw status

Deberías ver algo como lo siguiente

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)

Permitir puertos HTTP y HTTPs.

$ sudo ufw allow http
$ sudo ufw allow https

Vuelve a comprobar el estado para confirmarlo.

$ sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
443                        ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
443 (v6)                   ALLOW       Anywhere (v6)

Paso 2 – Instala Docker

Añade la clave GPG oficial de Docker.

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg

Ejecuta el siguiente comando para añadir el repositorio de Docker.

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

Actualiza el sistema para incluir el repositorio de Docker.

$ sudo apt update

Instala Docker y el plugin Docker compose.

$ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

Este tutorial utilizará el plugin Docker Compose v2 en lugar del antiguo binario heredado. Por lo tanto, el comando para ejecutarlo ha cambiado de docker-compose a docker compose y esto se refleja aquí.

Docker se ejecuta con privilegios elevados, por lo que tendrás que utilizar sudo con frecuencia para ejecutar comandos. La mejor opción es añadir tu cuenta de usuario Linux al grupo de usuarios docker.

$ sudo usermod -aG docker ${USER}

La variable ${USER} recoge la cuenta del sistema actualmente conectada. Si no has iniciado sesión con el usuario al que quieres dar privilegios, sustituye ${USER} por el nombre de usuario.

Para solicitar la pertenencia al nuevo grupo, sal del servidor y vuelve a entrar, o utiliza el siguiente comando. Se te pedirá la contraseña del usuario.

$ su - ${USER}

Paso 3 – Instalar Nginx

Ubuntu 22.04 incluye una versión antigua de Nginx. Para instalar la última versión, necesitas descargar el repositorio oficial de Nginx.

Importa la clave de firma de Nginx.

$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Añade el repositorio de la versión estable de Nginx.

$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list

Actualiza los repositorios del sistema.

$ sudo apt update

Instala Nginx.

$ sudo apt install nginx

Verifica la instalación.

$ nginx -v
nginx version: nginx/1.22.0

Paso 4 – Instalar SSL

Necesitamos instalar Certbot para generar el certificado SSL. Puedes instalar Certbot utilizando el repositorio de Ubuntu o descargar la última versión utilizando la herramienta Snapd. Nosotros utilizaremos la versión Snapd.

Ubuntu 22.04 viene con Snapd instalado por defecto. Ejecuta los siguientes comandos para asegurarte de que tu versión de Snapd está actualizada.

$ sudo snap install core

Instala Certbot.

$ sudo snap install --classic certbot

Utiliza el siguiente comando para asegurarte de que se puede ejecutar el comando Certbot creando un enlace simbólico al directorio /usr/bin.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Ejecuta el siguiente comando para generar un certificado SSL.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d status.example.com

El comando anterior descargará un certificado en el directorio /etc/letsencrypt/live/status.example.com de tu servidor.

Genera un certificado de grupo Diffie-Hellman.

$ sudo openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096

Abre el archivo /etc/letsencrypt/renewal/status.example.com.conf para editarlo.

$ sudo nano /etc/letsencrypt/renewal/status.example.com.conf

Pega el siguiente código en la parte inferior.

pre_hook = systemctl stop nginx
post_hook = systemctl start nginx

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Hemos generado el certificado SSL utilizando la opción autónoma de Certbot. Ejecuta su servidor web para crear el certificado, lo que significa que Nginx debe estar apagado durante la renovación. Los comandos pre_hook y post_hook se ejecutan antes y después de la renovación para apagar y reiniciar automáticamente el servidor Nginx, por lo que no requieren intervención manual.

Para comprobar si la renovación SSL funciona correctamente, realiza una ejecución en seco del proceso.

$ sudo certbot renew --dry-run

Si no ves ningún error, ya está todo listo. Tu certificado se renovará automáticamente.

Paso 5 – Configurar el archivo Docker Compose

Crea un directorio para el archivo Docker Compose.

$ mkdir ~/statping

Cambia al directorio.

$ cd ~/statping

Crea y abre el archivo docker compose para editarlo.

$ nano docker-compose.yml

Pega en él el siguiente código.

services:
  statping:
    container_name: statping
    image: adamboutcher/statping-ng
    restart: always
    ports:
      - 8080:8080
    volumes:
      - ./statping_data:/app
    links:
      - postgres
    depends_on:
      - postgres
    environment:
      DB_CONN: postgres
      DB_HOST: postgres
      DB_PORT: 5432
      DB_DATABASE: statping
      DB_USER: root
      DB_PASS: password123
      NAME: 'Howtoforge Statping page'
      DESCRIPTION: 'Statping Demo page'
      USE_ASSETS: 'true'
      SAMPLE_DATA: 'false'
      ALLOW_REPORTS: 'false'
      ADMIN_USER: navjot
      ADMIN_PASSWORD: yourpassword

  postgres:
    container_name: postgres
    image: postgres:14-alpine
    ports:
      - 5432:5432
    volumes:
      - ./pg_data:/var/lib/postgresql/data/pg_data
    environment:
      POSTGRES_PASSWORD: password123
      POSTGRES_DB: statping
      POSTGRES_USER: root
      POSTGRES_PORT: 5432
      PGDATA: /var/lib/postgresql/data/pg_data

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te pida.

Estamos configurando las imágenes docker Statping y Postgres. La mayor parte del archivo docker es fácil de seguir. Estamos utilizando copias de seguridad en disco local para almacenar los datos de la app y la base de datos Postgres. También hemos configurado varias variables de entorno para configurar la aplicación y la base de datos. Echémosles un vistazo. Para obtener una lista completa de las variables de entorno que puedes definir, consulta la lista oficial del repositorio GitHub de Statping.

  • La variable USE_ASSETS permite que la aplicación utilice los activos de la carpeta assets.
  • La variable SAMPLE_DATA se establece en false para desactivar los monitores por defecto que Statping configura durante la instalación.
  • La variable ALLOW_REPORTS se establece en false para desactivar los informes de error anónimos que envía Statping.
  • Las variables ADMIN_USER y ADMIN_PASSWORD se utilizan para establecer la información de inicio de sesión del usuario predeterminado.
  • Las variables DB_ se utilizan para establecer las credenciales de la base de datos, que deben coincidir con las variables definidas para el contenedor Postgres.

Paso 6 – Configurar NGinx

Abre el archivo /etc/nginx/nginx.conf para editarlo.

$ sudo nano /etc/nginx/nginx.conf

Añade la siguiente línea antes de la línea include /etc/nginx/conf.d/*.conf;.

server_names_hash_bucket_size  64;

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Crea y abre el archivo /etc/nginx/conf.d/statusping.conf para editarlo.

$ sudo nano /etc/nginx/conf.d/statusping.conf

Pega en él el siguiente código. Sustituye status.example.com por el nombre de tu dominio.

upstream backend {
   server 127.0.0.1:8080;
   keepalive 32;
}

server {
  listen 80 default_server;
  server_name status.example.com;
  return 301 https://$server_name$request_uri;
}

server {
   listen 443 ssl http2;
   server_name status.example.com;

   http2_push_preload on; # Enable HTTP/2 Server Push

   ssl_certificate /etc/letsencrypt/live/status.example.com/fullchain.pem;
   ssl_certificate_key /etc/letsencrypt/live/status.example.com/privkey.pem;
   ssl_trusted_certificate /etc/letsencrypt/live/status.example.com/chain.pem;
   ssl_session_timeout 1d;

   # Enable TLS versions (TLSv1.3 is required upcoming HTTP/3 QUIC).
   ssl_protocols TLSv1.2 TLSv1.3;

   # Enable TLSv1.3's 0-RTT. Use $ssl_early_data when reverse proxying to
   # prevent replay attacks.
   #
   # @see: https://nginx.org/en/docs/http/ngx_http_ssl_module.html#ssl_early_data
   ssl_early_data on;

   ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384';
   ssl_prefer_server_ciphers on;
   ssl_session_cache shared:SSL:50m;
   # OCSP Stapling --- fetch OCSP records from URL in ssl_certificate and cache them
   ssl_stapling on;
   ssl_stapling_verify on;
   ssl_dhparam /etc/ssl/certs/dhparam.pem;

   add_header X-Early-Data $tls1_3_early_data;

   access_log /var/log/nginx/statusping.access.log main;
   error_log  /var/log/nginx/statusping.error.log;

   location / {
       client_max_body_size 50M;
       proxy_set_header Connection "";
       proxy_set_header Host $http_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;
       proxy_set_header X-Frame-Options SAMEORIGIN;
       proxy_set_header X-Client-Verify  SUCCESS;
       proxy_set_header X-Client-DN      $ssl_client_s_dn;
       proxy_set_header X-SSL-Subject    $ssl_client_s_dn;
       proxy_set_header X-SSL-Issuer     $ssl_client_i_dn;
       proxy_buffers 256 16k;
       proxy_buffer_size 16k;
       proxy_read_timeout 1800s;
       proxy_connect_timeout 1800s;
       proxy_http_version 1.1;
       proxy_pass http://backend;
   }
}

# This block is useful for debugging TLS v1.3. Please feel free to remove this
# and use the `$ssl_early_data` variable exposed by NGINX directly should you
# wish to do so.
map $ssl_early_data $tls1_3_early_data {
  "~." $ssl_early_data;
  default "";
}

Guarda el archivo pulsando Ctrl + X e introduciendo Y cuando se te solicite.

Comprueba la configuración de Nginx.

$ sudo nginx -t

Reinicia el servidor Nginx.

$ sudo systemctl restart nginx

Paso 7 – Ejecutar Statping

Cambia al directorio Statping.

$ cd ~/statping

Crea e inicia el contenedor Docker.

$ docker compose up -d

Comprueba el estado del contenedor.

$ docker compose ps

Verás la siguiente salida.

NAME                COMMAND                  SERVICE             STATUS              PORTS
postgres            "docker-entrypoint.s…"   postgres            running             0.0.0.0:5432->5432/tcp
statping            "/bin/sh -c 'statpin…"   statping            running (healthy)   0.0.0.0:8080->8080/tcp

También puedes utilizar el comando docker ps para obtener un estado más detallado. Para comprobar los registros del contenedor, utiliza el comando docker logs <container name>.

Paso 8 – Configurar el Statping

Ahora que tu contenedor se está ejecutando, lanza la URL https://status.example.com en tu navegador y verás una página de estado en blanco. Si omites la variable SAMPLE_DATA en el archivo docker compose, verás una página completa con diferentes servicios predefinidos.

Página de Estado de Statping

Haz clic en el enlace Panel de control de la parte inferior para acceder a la pantalla de inicio de sesión.

Pantalla de inicio de sesión de Statping

Introduce admin como nombre de usuario por defecto y como contraseña. Asegúrate de escribir también el nombre de usuario aunque parezca que ya está rellenado. Haz clic en el botón Iniciar sesión para acceder al panel de control de Statping.

Tablero de estadísticas

Para añadir un nuevo servicio, haz clic en el botón Crear y rellena los valores requeridos.

Servicio de creación de estadísticas

Haz clic en el botón Crear servicio de la parte inferior para terminar. Para configurar el correo electrónico y otras notificaciones, visita la página de configuración. También puedes dar un nuevo nombre a tu página de estadísticas.

Statping Página de estado con Servicio Live

Paso 9 – Actualizar Statping

Actualizar Statping es un paso sencillo. Cambia al directorio de composición Docker de Statping.

$ cd ~/statping

A continuación, detén y elimina el contenedor existente. No obstante, tus datos se conservarán.

$ docker compose down --remove-orphans

Extrae la última versión de la imagen Docker de Statping.

$ docker compose pull

Inicia de nuevo los contenedores.

$ docker compose up -d

Tu instalación de Statping está actualizada y arrancada de nuevo.

Conclusión

Con esto concluye el tutorial en el que has aprendido a instalar Statping en un servidor Ubuntu 22.04. Si tienes alguna pregunta, publícala en los comentarios a continuación.

También te podría gustar...