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.
Haz clic en el enlace Panel de control de la parte inferior para acceder a la pantalla de inicio de sesión.
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.
Para añadir un nuevo servicio, haz clic en el botón Crear y rellena los valores requeridos.
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.
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.