Cómo instalar Kuma – Alternativa de robot de tiempo de actividad autohospedado en Ubuntu 20.04
Uptime-Kuma es una herramienta de monitoreo de código abierto como «Uptime Robot» escrita en Nodejs. Es una herramienta de monitoreo autohospedada con un hermoso panel elegante y admite múltiples métodos de notificación. Uptime-Kuma monitoreará el tiempo de actividad de los hosts o servidores a través del protocolo HTTP(s), TCP y Ping. Si no se puede acceder a los hosts a través de estos protocolos en tales intervalos de tiempo, los hosts de tiempo de actividad enviarán notificaciones a través de Webhooks, Telegram, Discord, Gotify, Slack, Pushover, correo electrónico (SMTP), etc.
En esta guía, aprenderá cómo instalar Uptime-Kuma en un servidor Ubuntu y usar el servidor web Apache como un proxy inverso con un certificado Let’s Encrypt SSL gratuito delante. Durante la instalación, también aprenderá sobre la instalación de nodejs a través de nvm (administrador de versiones de nodos).
requisitos previos
- Un servidor Ubuntu 20.04.
- Un usuario con privilegios de root. Utilizará este usuario para instalar nuevos paquetes y modificar la configuración del sistema.
Agregar nuevo usuario
Lo primero, agregará un nuevo usuario al sistema Ubuntu. Por razones de seguridad, la aplicación Uptime-Kuma se ejecutará como usuario no root.
1. Agregue un nuevo usuario ejecutando el siguiente comando. Para este ejemplo, usaremos el nombre de usuario «johndoe«. asegúrese de cambiar el nombre de usuario por el suyo propio.
useradd -m -s /bin/bash johndoe
Opciones que debes conocer:
- -metro = crea automáticamente el directorio de inicio para el nombre de usuario, que estará disponible en el directorio ‘/home’.
- -s = define la ruta del shell para el usuario, la mayoría de Linux tiene el shell `/bin/bash.
2. Después de eso, ejecute el siguiente comando para configurar la contraseña para el usuario «johndoe».
passwd johndoe
Ahora escriba una nueva contraseña segura y repita, luego presione «Ingresar» para confirmar.
3. A continuación, agregue el usuario «johndoe» al grupo «sudo» usando el siguiente comando.
usermod -aG sudo johndoe
Al agregar usuarios a la «sudo» grupo, permitirá a los usuarios ejecutar el «sudo su» comando y obtener los privilegios de root.
Instalar NVM (Administrador de versiones de nodos)
NVM o Node Version Manager es una herramienta de línea de comandos para instalar múltiples versiones de nodejs en un sistema. Esta herramienta le permite instalar una versión específica de nodejs para sus aplicaciones, hace que su entorno de desarrollo e implementación sea flexible.
Para esta fase, instalará el nvm bajo el usuario no root «johndoe».
1. Desde su shell raíz, inicie sesión en el usuario «johndoe» usando el siguiente comando.
su - johndoe
2. Descargue y ejecute el script de instalación de nvm de la siguiente manera.
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
3. Después de tener éxito, vuelva a cargar el entorno bash usando el siguiente comando.
source ~/.bashrc
4. Ahora verifique el «nvm«instalación ejecutando el siguiente comando.
command -v nvm
Si su instalación es exitosa, verá el resultado «nvm«. De lo contrario, no verá nada o un resultado en blanco.
Ahora ejecute el comando nvm como se muestra a continuación.
nvm --help
Y verá la página de ayuda manual del comando nvm.
Node Version Manager (v0.38.0)
Note: <version> refers to any version-like string nvm understands. This includes:
– full or partial version numbers, starting with an optional «v» (0.10, v0.1.2, v1)
– default (built-in) aliases: node, stable, unstable, iojs, system
– custom aliases you define with `nvm alias foo`
Any options that produce colorized output should respect the `–no-colors` option.
Usage:
nvm –help Show this message
–no-colors Suppress colored output
…..
Note:
to remove, delete, or uninstall nvm – just remove the `$NVM_DIR` folder (usually `~/.nvm`)
Instalar la versión LTS de Nodejs
Para instalar la aplicación uptime-Kuma, debe instalar el nodos js >= 14, gity pm2. Para este punto, instalará la última versión de nodejs LTS usando el comando nvm.
1. Ejecute el siguiente comando nvm para instalar la última versión de nodejs LTS.
nvm install --lts
Una vez que la instalación se realice correctamente, verá un resultado similar al que se muestra a continuación.
La primera versión de nodejs que instale se convierte en la versión predeterminada en su entorno de desarrollo.
2. Ahora ejecute el siguiente comando para verificar la instalación de nodejs.
node --version npm --version
Si su instalación tiene éxito, verá un resultado similar al que se muestra a continuación.
# nodejs version v14.17.4
# npm version
6.14.14
Descargar e instalar Uptime-Kuma
En este punto, está listo para instalar la aplicación Uptime-Kuma.
1. Clone el código fuente de uptime-Kuma usando el siguiente comando git.
git clone https://github.com/louislam/uptime-kuma.git
2. Después de eso, cambie el directorio de trabajo a «uptime-kuma/» y ejecute el comando npm para instalar todos los paquetes necesarios para uptime-kuma.
cd uptime-kuma/ npm run setup
Y verá una salida similar a la siguiente.
Configuración de Uptime-Kuma con pm2
¿Qué es pm2? Es un administrador de procesos de nodejs que lo ayudará a administrar y mantener viva su aplicación nodejs para siempre. pm2 tiene algunas características integradas que facilitan la implementación de la aplicación nodejs, le permite monitorear el estado de su aplicación, los registros e incluso configurar el archivo de servicio para su aplicación.
1. Instale el paquete pm2 usando el comando npm a continuación.
npm install pm2
2. Una vez completada la instalación, ejecute el siguiente comando pm2 para iniciar la aplicación uptime-kuma.
pm2 start npm --name uptime-kuma -- run start-server -- --port=3001 --hostname=127.0.0.1
Y verá los mensajes de salida como se muestra a continuación.
Como se ve en la imagen, el nombre de la aplicación «uptime-kuma» se está ejecutando con el estado «en línea«.
3. Para verificar el estado de su aplicación en pm2, ejecute los siguientes comandos a continuación.
Verifique el estado de la aplicación nodejs.
pm2 status
Verifique los registros de la aplicación nodejs.
pm2 logs
Monitoreo de aplicaciones nodejs en tiempo real.
pm2 monit
4. A continuación, ejecute el siguiente comando pm2 para generar el archivo de servicio para la aplicación uptime-kuma.
pm2 startup
Después de eso, debe ejecutar el comando según lo ordenado en la salida.
sudo env PATH=$PATH:/home/johndoe/.nvm/versions/node/v14.17.4/bin /home/johndoe/.nvm/versions/node/v14.17.4/lib/node_modules/pm2/bin/pm2 startup systemd -u johndoe --hp /home/johndoe
Asegúrese de usar el «sudo» comando e ingrese la contraseña correcta para que su usuario obtenga los privilegios de root.
Una vez que se complete el comando, verá el siguiente resultado.
Como se ve en la captura de pantalla, el pm2 genera un servicio systemd basado en el usuario, para este ejemplo es «pm2-johndoe.servicio«.
Ahora ejecute el siguiente comando para generar y guardar el estado de la aplicación uptime-kuma. Este comando es importante para que la aplicación uptime-kuma siempre se ejecute en segundo plano, incluso después del arranque del sistema.
pm2 save
5. Para verificar el servicio ‘pm2-johndoe’ejecute el siguiente comando.
sudo systemctl is-enabled pm2-johndoe
Verá la salida `activado`, lo que significa que la aplicación uptime-kuma se ejecutará automáticamente después del arranque del sistema.
Además, puede intentar reiniciar su sistema e iniciar sesión nuevamente en el servidor, luego verifique el servicio uptime-kuma.
sudo systemctl status pm2-johndoe
Y debería ver una salida similar a la siguiente.
? pm2-johndoe.service - PM2 process manager Loaded: loaded (/etc/systemd/system/pm2-johndoe.service; enabled; vendor preset: enabled) Active: active (running) since Tue 2021-08-10 01:52:37 UTC; 3min 57s ago Docs: https://pm2.keymetrics.io/ Main PID: 745 (PM2 v5.1.0: God) Tasks: 34 (limit: 2343) Memory: 120.4M CGroup: /system.slice/pm2-johndoe.service ??745 PM2 v5.1.0: God Daemon (/home/johndoe/.pm2) ??772 npm ??873 sh -c node server/server.js "--port=3001" "--hostname=127.0.0.1" ??874 node server/server.js --port=3001 --hostname=127.0.0.1
Aug 10 01:52:36 ubuntu64 pm2[633]: [PM2] Spawning PM2 daemon with pm2_home=/home/johndoe/.pm2
Aug 10 01:52:37 ubuntu64 pm2[633]: [PM2] PM2 Successfully daemonized
Aug 10 01:52:37 ubuntu64 pm2[633]: [PM2] Resurrecting
Aug 10 01:52:37 ubuntu64 pm2[633]: [PM2] Restoring processes located in /home/johndoe/.pm2/dump.pm2
Aug 10 01:52:37 ubuntu64 pm2[633]: [PM2] Process /home/johndoe/.nvm/versions/node/v14.17.4/bin/npm restored
Los «pm2-johndoe.servicio» está en funcionamiento en el arranque del sistema.
Configurar Apache como un proxy inverso
Para esta guía, instalará y configurará el servidor web Apache como un proxy inverso para la aplicación uptime-Kuma.
1. Ejecute el siguiente comando para instalar los paquetes del servidor web Apache.
sudo apt install apache2
Escribe «y» y presione «Ingresar» para instalar el servidor web apache.
2. Después de eso, habilite algunos módulos de apache usando el siguiente comando.
sudo a2enmod ssl proxy proxy_ajp proxy_wstunnel proxy_http rewrite deflate headers proxy_balancer proxy_connect proxy_html
3. A continuación, cree una nueva configuración de host virtual ‘uptime-kuma.conf‘ usando el comando del editor nano a continuación.
sudo nano /etc/apache2/sites-available/uptime-kuma.conf
Pegue la siguiente configuración en su shell de terminal y cambie el nombre de dominio «uptime.ejemplo.net» con su dominio como «dominio.com«.
<VirtualHost *:80> ServerName uptime.example.net
ProxyPass / http://localhost:3001/
RewriteEngine on
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/?(.*) «ws://localhost:3001/$1» [P,L]
</VirtualHost>
Prensa «Control+x» y escriba «Y» para guardar la configuración.
4. Ahora active la configuración de host virtual de apache «uptime-kuma» usando el siguiente comando.
sudo a2ensite uptime-kuma
Después de eso, ejecute el siguiente comando para verificar la configuración de Apache y asegúrese de que no tenga ningún error.
sudo apachectl configtest
5. Ahora aplique la nueva configuración reiniciando el servicio de apache usando el siguiente comando.
sudo systemctl restart apache2
Protección de Uptime-kuma con SSL Letsencrypt
Para asegurar el acceso a Uptime-Kuma, configurará el SSL de Letsencrypt para el servidor web apache.
1. En primer lugar, instale la herramienta certbot ejecutando el siguiente comando.
sudo apt install python3-certbot-apache
Escribe «y» y presione «Ingresar» para iniciar la instalación.
2. Una vez completada la instalación, genere el SSL letsencrypt usando el comando certbot como se muestra a continuación.
sudo certbot --apache yourdomain.com
Escriba su dirección de correo electrónico para registrarse en Letsencrypt y presione «Ingresar» para continuar. Letsencrypt enviará correos electrónicos a su dirección de correo electrónico cada vez que caduquen sus certificados SSL.
``` Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator apache, Installer apache Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): [email protected]
Para los TOS de Letsencrypt (Términos de servicio), escriba «A«aceptar y presionar»Ingresar» continuar.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (A)gree/(C)ancel: A
Para compartir el correo electrónico con EFF (Electronic Frontier Foundation), puede escribir «Y«por si y»norte» para no. Para este ejemplo, no compartiremos una dirección de correo electrónico con EFF.
Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: N
Ahora la herramienta certbot generará SSL Letsencrypt para el nombre de dominio Uptime-Kuma. Además, agregará algunas configuraciones adicionales para la configuración del host virtual de apache.
Se le pedirá que configure la redirección automática de HTTP a HTTPS. Teclea un número «2» para configurar la redirección automática de apache de HTTP a HTTPS y presione «Ingresar«.
``` Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2
Una vez que el proceso de implementación sea exitoso, verá un resultado similar al siguiente.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Congratulations! You have successfully enabled https://uptime.example.net
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=uptime.example.net
– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –
IMPORTANT NOTES:
– Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/uptime.example.net/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/uptime.example.net/privkey.pem
Your cert will expire on 2021-10-10. To obtain a new or tweaked
version of this certificate in the future, simply run certbot again
with the «certonly» option. To non-interactively renew *all* of
your certificates, run «certbot renew»
– Your account credentials have been saved in your Certbot
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Certbot so
making regular backups of this folder is ideal.
– If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
– We were unable to subscribe you the EFF mailing list because your
e-mail address appears to be invalid. You can try again later by
visiting https://act.eff.org.
Verifique la instalación de Uptime-Kuma
1. Abra su navegador web y escriba la instalación URL de Uptime-Kuma en la barra de direcciones.
https://uptime.example.net/
Será redirigido a la conexión segura HTTPS.
2. En la primera página, cree un nuevo usuario administrador para Uptime-kuma. Escriba su usuario y contraseña de administrador, luego haga clic en «Crear» botón
3. Después de eso, inicie sesión con su nuevo nombre de usuario y contraseña, luego haga clic en «Acceso» botón.
Ahora verá el panel de uptime-kuma.
4. Para agregar un nuevo host para monitorear, haga clic en el botón «Agregar nuevo monitor«.
5. Para este ejemplo, estará monitoreando el sitio web, así que elija «Tipo de monitor» como «HTTP(s)«, escriba la dirección URL del sitio web, haga clic en «Notificación de configuración» para soporte de notificaciones, luego haga clic en el botón «Ahorrar » en la parte inferior de la página.
6. Ahora será redirigido al panel de tiempo de actividad-Kuma y verá su host en la página del panel.
A continuación se muestra otro ejemplo después de agregar el nuevo tipo «TCP/IP» con puertos cerrados, y el resultado es «ENCONTRADO» o error de conexión porque el puerto es rechazado/cerrado.
Conclusión
¡Felicidades! Ha instalado correctamente Uptime-Kuma con el servidor web Apache como proxy inverso y ha asegurado la implementación de Uptime-Kuma con SSL Letsencrypt. Para la siguiente fase, puede agregar sus hosts y activar la notificación para cualquier incidente caído.