Docs
Instalación

Instalación manual

Todas las demás formas de instalar el servidor principal y los agentes. Incluye el paquete de distribución en cada servidor, descargar primero el instalador, wget, certificados autofirmados, SSH, cloud-init y Ansible, y una instalación completa a mano sin install.sh.

La forma más rápida de agregar un servidor es el comando de una línea del panel: consulte Instalar los agentes. Esta página explica todas las demás formas de instalar el servidor principal y los agentes.

MétodoCuándo usarlo
Agente desde el paquete de distribuciónEl programa debe salir del paquete, no del servidor principal
Descargar primero el instaladorQuiere leer el script antes de ejecutarlo, o responder usted mismo a sus preguntas
Con wget en lugar de curlEl servidor no tiene curl
Un servidor principal con certificado autofirmadoEl panel usa HTTPS con un certificado en el que los servidores no confían
Muchos servidores desde un script o una herramientaSSH, cloud-init, Ansible
El servidor principal a manoNo puede o no quiere ejecutar install.sh
Un agente a manoLo mismo, en los agentes

Qué necesita para un agente

Todos los métodos necesitan la dirección del servidor principal y el token del servidor o la clave de registro. Para aprobar reparaciones de la IA, también necesitan las huellas de la clave de firma del servidor principal y de sus llaves de acceso. Copie el comando de instalación del panel y tome los valores de ahí:

ValorDónde encontrarlo
URL del servidor principal (--master)La dirección con la que abre el panel: Configuración → General → Dirección pública del panel
Token (--token)Después de Servidores → + Agregar servidor, o más tarde en Servidores → ⋯ → Comando de instalación. En el servidor principal, sudo 3rmonitor server add --name NOMBRE también muestra uno.
Clave de registro (--enroll)Servidores → Registrar muchos servidores con un comando
MASTER_FP, PASSKEY_FP (--master-key, --approvers)En esos mismos comandos, o en Configuración → Llaves de acceso → Huellas para comparar. --approvers lista todas las llaves de acceso de confianza, separadas por comas; omítalo si todavía no tiene ninguna llave.

La arquitectura de CPU

El instalador encuentra solo el programa correcto. Para la instalación a mano, necesita saber qué archivo usar:

uname -mPrograma
x86_643rmonitor-linux-amd64
aarch643rmonitor-linux-arm64
armv7l3rmonitor-linux-arm
i686, i3863rmonitor-linux-386

Esto define ARCH para los comandos de abajo:

case "$(uname -m)" in x86_64) ARCH=amd64 ;; aarch64) ARCH=arm64 ;; armv7l) ARCH=arm ;; i?86) ARCH=386 ;; esac; echo "$ARCH"

Agentes con el instalador

Agente desde el paquete de distribución

Copie el paquete de distribución al servidor y descomprímalo, igual que para el servidor principal. Luego, en su directorio:

sudo bash install.sh agent --master 'https://monitor.example.com' --token 'TOKEN' --master-key MASTER_FP --approvers PASSKEY_FP

Con la clave de registro en lugar de un token, el servidor se registra solo:

sudo bash install.sh agent --master 'https://monitor.example.com' --enroll 'CLAVE_DE_REGISTRO' --master-key MASTER_FP --approvers PASSKEY_FP --name web-2 --group Produccion

El instalador verifica la suma del programa y lo instala desde el paquete en lugar de descargarlo. Todo lo demás es igual que con el comando del panel. El servidor debe poder llegar al servidor principal de todos modos, para el reporte de prueba y para reportar después, y se actualiza solo desde el servidor principal como siempre.

Con el paquete de distribución, indique --master y --token (o --enroll) en la línea de comandos. Si en cambio elige 1) Agente en el menú, el instalador no los pregunta y se detiene con "No se pudo escribir la configuración del agente". Para entonces el programa ya está copiado: ejecute el comando de arriba para terminar.

Descargar primero el instalador

Para leer el instalador antes de ejecutarlo, descárguelo del servidor principal. El enlace necesita el token o la clave de registro (?t=):

curl -fsSL -o install.sh 'https://monitor.example.com/dl/install.sh?t=TOKEN'
less install.sh
sudo bash install.sh agent --master 'https://monitor.example.com' --token 'TOKEN' --master-key MASTER_FP --approvers PASSKEY_FP

O ejecute sudo bash install.sh sin opciones y elija 1) Agente. El instalador pregunta entonces la URL del servidor principal, el Token del servidor (presione Enter para usar una clave de registro) y la Clave de registro. Así no confía en ninguna clave: ejecute después sudo 3rmonitor approvers trust si quiere reparaciones de la IA aprobadas en este servidor.

En los dos casos, el programa se descarga del servidor principal y se verifica su suma.

Con wget en lugar de curl

wget -qO- 'https://monitor.example.com/dl/install.sh?t=TOKEN' | sudo bash -s -- agent --master 'https://monitor.example.com' --token 'TOKEN' --master-key MASTER_FP --approvers PASSKEY_FP

El propio instalador también usa wget cuando curl no está instalado.

Un servidor principal con certificado autofirmado

Tanto la descarga como el agente deben omitir la verificación del certificado. Agregue -k a curl (--no-check-certificate a wget) y --insecure al instalador:

curl -fsSLk 'https://monitor.example.com/dl/install.sh?t=TOKEN' | sudo bash -s -- agent --master 'https://monitor.example.com' --token 'TOKEN' --insecure --master-key MASTER_FP --approvers PASSKEY_FP

--insecure escribe insecure = true en agent.conf, así que el agente sigue omitiendo la verificación cuando reporta.

Muchos servidores desde un script o una herramienta

Use el comando de registro: es el mismo para todos los servidores, y cada uno se registra solo. Agregue -y para que el instalador no pregunte nada. El nombre predeterminado es el nombre del host del servidor.

for h in web-1 web-2 db-1; do
  ssh root@$h "curl -fsSL 'https://monitor.example.com/dl/install.sh?t=CLAVE_DE_REGISTRO' | bash -s -- agent --master 'https://monitor.example.com' --enroll 'CLAVE_DE_REGISTRO' --master-key MASTER_FP --approvers PASSKEY_FP --name $h --group Produccion -y"
done
  • Guarde la clave de registro en los secretos de su herramienta (por ejemplo, Ansible Vault): cualquiera que la tenga puede agregar servidores a su panel.
  • Las huellas deben coincidir con las llaves de acceso de confianza en este momento. Después de agregar o revocar una llave de acceso, vuelva a copiar el comando. Si no coinciden, el agente se instala igual, pero el instalador advierte "No se fijaron las claves" y el servidor no confía en ninguna clave: ejecute sudo 3rmonitor approvers trust en él.

Todo a mano, sin install.sh

Estos pasos hacen lo mismo que install.sh y crean los mismos archivos y servicios. Así, las actualizaciones posteriores, las actualizaciones automáticas de los agentes e install.sh uninstall funcionan como siempre. Reemplace los valores en mayúsculas por los suyos.

AlmaLinux, Rocky, RHEL y CentOS

En estos sistemas sudo no busca en /usr/local/bin. Por eso los pasos también enlazan el comando 3rmonitor en /usr/bin, como hace install.sh. Sin ese enlace, sudo 3rmonitor … responde "command not found".

El servidor principal a mano

Descomprima el paquete de distribución y verifíquelo.

tar xzf 3rmonitor-1.1.1.tar.gz && cd 3rmonitor-1.1.1
sha256sum -c --ignore-missing SHA256SUMS

Cada programa debe mostrar OK. Defina ARCH para este servidor (consulte La arquitectura de CPU), por ejemplo ARCH=amd64.

Cree el usuario y los directorios. El servidor principal se ejecuta con el usuario sin privilegios 3rmonitor.

sudo useradd --system --home-dir /var/lib/3rmonitor --no-create-home --shell /usr/sbin/nologin 3rmonitor
sudo install -d -m 750 -o 3rmonitor -g 3rmonitor /var/lib/3rmonitor /var/lib/3rmonitor/update
sudo install -d /etc/3rmonitor /opt/3rmonitor/dist

Instale el programa y los paquetes de los agentes. Los agentes descargan el programa de /opt/3rmonitor/dist cuando se instalan y cuando se actualizan. Solo se actualizan a los programas que figuran en la firma de 3R Soft, SHA256SUMS.sig, así que cópiela también. Deje install.sh en /opt/3rmonitor para actualizar y desinstalar.

sudo install -m 755 3rmonitor-linux-$ARCH /opt/3rmonitor/3rmonitor
sudo ln -sf /opt/3rmonitor/3rmonitor /usr/local/bin/3rmonitor
sudo ln -sf /opt/3rmonitor/3rmonitor /usr/bin/3rmonitor
sudo install -m 755 install.sh /opt/3rmonitor/install.sh
sudo cp 3rmonitor-linux-* SHA256SUMS SHA256SUMS.sig install.sh /opt/3rmonitor/dist/
sudo chmod -R a+rX /opt/3rmonitor/dist
if [ -f geoip-country.mmdb ]; then sudo install -m 640 -o 3rmonitor -g 3rmonitor geoip-country.mmdb /var/lib/3rmonitor/; fi

Escriba la configuración. Cada clave se explica en Archivos de configuración.

sudo tee /etc/3rmonitor/master.conf >/dev/null <<'EOF'
listen = 0.0.0.0:8899
data_dir = /var/lib/3rmonitor
dist_dir = /opt/3rmonitor/dist
public_url = http://203.0.113.10:8899/
EOF
sudo chgrp 3rmonitor /etc/3rmonitor/master.conf
sudo chmod 640 /etc/3rmonitor/master.conf

Cree la base de datos y el administrador. La contraseña necesita al menos 8 caracteres.

sudo 3rmonitor init --public-url http://203.0.113.10:8899/ --admin admin --password 'CONTRASEÑA_SEGURA'

Crea la base de datos y la clave de firma del servidor principal en /var/lib/3rmonitor, con el usuario 3rmonitor. El idioma del sistema del panel se toma de la terminal; para elegirlo, escriba por ejemplo sudo MONITOR_LANG=es 3rmonitor init … (en, es o zh).

Cree los servicios: el servidor principal, su configuración de aislamiento, y el servicio root que instala las actualizaciones que usted inicia desde el panel.

sudo tee /etc/systemd/system/3rmonitor-master.service >/dev/null <<'EOF'
[Unit]
Description=3R Monitor master (web panel, checks, alerts)
After=network-online.target
Wants=network-online.target
StartLimitIntervalSec=0

[Service]
Type=notify
NotifyAccess=main
User=3rmonitor
Group=3rmonitor
ExecStart=/opt/3rmonitor/3rmonitor master -c /etc/3rmonitor/master.conf
Restart=always
RestartSec=3
WatchdogSec=60
TimeoutStartSec=60
LimitNOFILE=65536
AmbientCapabilities=CAP_NET_RAW CAP_NET_BIND_SERVICE
CapabilityBoundingSet=CAP_NET_RAW CAP_NET_BIND_SERVICE
NoNewPrivileges=true
ProtectSystem=full
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/var/lib/3rmonitor

[Install]
WantedBy=multi-user.target
EOF

sudo mkdir -p /etc/systemd/system/3rmonitor-master.service.d
sudo tee /etc/systemd/system/3rmonitor-master.service.d/hardening.conf >/dev/null <<'EOF'
[Service]
ProtectSystem=strict
ReadWritePaths=/var/lib/3rmonitor
PrivateDevices=true
ProtectKernelTunables=true
ProtectKernelModules=true
ProtectKernelLogs=true
ProtectControlGroups=true
ProtectClock=true
ProtectHostname=true
RestrictNamespaces=true
RestrictRealtime=true
RestrictSUIDSGID=true
LockPersonality=true
MemoryDenyWriteExecute=true
SystemCallArchitectures=native
SystemCallFilter=@system-service
SystemCallErrorNumber=EPERM
RestrictAddressFamilies=AF_INET AF_INET6 AF_UNIX AF_NETLINK
UMask=0027
EOF

sudo tee /etc/systemd/system/3rmonitor-update.path >/dev/null <<'EOF'
[Unit]
Description=3R Monitor one-click update trigger (watches for a request from the panel)

[Path]
PathExists=/var/lib/3rmonitor/update/request
Unit=3rmonitor-update.service

[Install]
WantedBy=multi-user.target
EOF

sudo tee /etc/systemd/system/3rmonitor-update.service >/dev/null <<'EOF'
[Unit]
Description=3R Monitor one-click update (verifies the signed package, then runs install.sh upgrade)

[Service]
Type=oneshot
ExecStart=/opt/3rmonitor/3rmonitor apply-update -c /etc/3rmonitor/master.conf
TimeoutStartSec=20min
EOF

Inícielo y compruébelo.

sudo systemctl daemon-reload
sudo systemctl enable --now 3rmonitor-master 3rmonitor-update.path
sleep 5
curl -fsS http://127.0.0.1:8899/healthz      # {"status":"ok"}
3rmonitor status

hardening.conf impide que el servidor principal escriba fuera de su directorio de datos. Algunos sistemas, por ejemplo ciertos contenedores LXC, no admiten todos sus ajustes, y el servidor principal entonces no arranca (journalctl -u 3rmonitor-master indica el motivo). Ahí quítelo, como hace install.sh:

sudo rm -r /etc/systemd/system/3rmonitor-master.service.d
sudo systemctl daemon-reload && sudo systemctl restart 3rmonitor-master

Abra el puerto si el servidor tiene firewall:

sudo ufw allow 8899/tcp                                                              # ufw (Ubuntu, Debian)
sudo firewall-cmd --permanent --add-port=8899/tcp && sudo firewall-cmd --reload      # firewalld (AlmaLinux, Rocky, RHEL)

Luego inicie sesión con la cuenta de administrador.

Monitorear también el servidor principal (servidor principal + agente)

En el servidor principal, registre el propio servidor principal y ejecute su agente. Reporta al servidor principal por 127.0.0.1:

TOKEN=$(sudo 3rmonitor server add --name "$(hostname)" --group 'Servidor principal' --reuse -q)
sudo 3rmonitor bind --master http://127.0.0.1:8899 --token "$TOKEN"
sudo chmod 600 /etc/3rmonitor/agent.conf
sudo 3rmonitor agent --test
sudo 3rmonitor agent secure
sudo 3rmonitor approvers trust --yes

-q muestra solo el token, y --reuse lo reutiliza si ya existe un servidor con ese nombre. approvers trust --yes confía en las claves sin preguntar, porque el servidor principal está en este mismo servidor. La sección siguiente explica cada paso.

Un dominio con HTTPS

Lo que hacen --domain y --https, a mano: un proxy inverso en Nginx o Apache y luego un certificado de Let's Encrypt con certbot.

sudo tee /etc/nginx/conf.d/3rmonitor.conf >/dev/null <<'EOF'
server {
    listen 80;
    server_name monitor.example.com;
    client_max_body_size 8m;
    location / {
        proxy_pass http://127.0.0.1:8899;
        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;
        proxy_set_header Connection "";
        proxy_buffering off;
        proxy_read_timeout 1h;
    }
}
EOF
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d monitor.example.com --no-redirect

Si hace falta, instale primero certbot y su complemento para Nginx o Apache (python3-certbot-nginx o python3-certbot-apache; en AlmaLinux, Rocky y RHEL vienen de EPEL). Luego configure Configuración → General → Dirección pública del panel como https://monitor.example.com/.

  • --no-redirect es a propósito: los agentes que reportan a la dirección http:// siguen funcionando, y el propio servidor principal envía los navegadores a https://. Consulte Qué pasa con las direcciones http://.
  • El valor predeterminado trust_proxy = auto ya toma la IP real del visitante de un proxy en el mismo servidor.
  • Para servir el panel solo a través del proxy, use listen = 127.0.0.1:8899 en master.conf, pero solo si ningún agente de otro servidor reporta a http://IP:8899.

Un agente a mano

Primero registre el servidor en el panel (+ Agregar servidor), o con sudo 3rmonitor server add en el servidor principal. Luego tome la URL del servidor principal, el token y las huellas de su comando de instalación.

Descargue el programa del servidor principal y verifíquelo. Primero defina ARCH (consulte La arquitectura de CPU).

MASTER='https://monitor.example.com'
TOKEN='TOKEN'
mkdir -p /tmp/3rmonitor && cd /tmp/3rmonitor
curl -fsSL -o 3rmonitor-linux-$ARCH "$MASTER/dl/3rmonitor-linux-$ARCH?t=$TOKEN"
curl -fsSL -o SHA256SUMS "$MASTER/dl/SHA256SUMS?t=$TOKEN"
curl -fsSL -o install.sh "$MASTER/dl/install.sh?t=$TOKEN"
sha256sum -c --ignore-missing SHA256SUMS

Debe mostrar 3rmonitor-linux-…: OK. Con wget, use wget -qO ARCHIVO URL en lugar de curl -fsSL -o ARCHIVO URL. También puede tomar esos mismos tres archivos del paquete de distribución.

Instálelo.

sudo install -D -m 755 3rmonitor-linux-$ARCH /opt/3rmonitor/3rmonitor
sudo install -m 755 install.sh /opt/3rmonitor/install.sh
sudo ln -sf /opt/3rmonitor/3rmonitor /usr/local/bin/3rmonitor
sudo ln -sf /opt/3rmonitor/3rmonitor /usr/bin/3rmonitor

Conéctelo al servidor principal. Esto escribe /etc/3rmonitor/agent.conf:

sudo 3rmonitor bind --master "$MASTER" --token "$TOKEN"
sudo chmod 600 /etc/3rmonitor/agent.conf

Con la clave de registro, use --enroll 'CLAVE_DE_REGISTRO' --name web-2 --group Produccion en lugar de --token. Para un certificado autofirmado, agregue --insecure.

Reporte una vez.

sudo 3rmonitor agent --test

Muestra "Reporte exitoso: el servidor principal registró esta máquina como #N…". Con una clave de registro, es en este momento cuando el servidor se registra y guarda su token.

Cree los servicios.

sudo 3rmonitor agent secure

Crea el usuario 3rmonitor-agent (en los grupos adm y systemd-journal, para leer los registros) y deja agent.conf como root:3rmonitor-agent 0640. Donde setfacl está instalado, da a ese usuario acceso de lectura a los registros de acceso. Luego crea e inicia el ayudante root 3rmonitor-helper y el servicio 3rmonitor-agent, que se ejecuta con ese usuario. Muestra "El agente ahora se ejecuta como el usuario sin privilegios 3rmonitor-agent…".

Confíe en las claves, para las reparaciones de la IA aprobadas:

sudo 3rmonitor approvers trust --master-key MASTER_FP --approvers PASSKEY_FP

Sin las huellas, las muestra y pregunta: compárelas con Configuración → Llaves de acceso → Huellas para comparar y escriba yes.

Compruébelo.

3rmonitor status
systemctl status 3rmonitor-agent 3rmonitor-helper

Después de unos segundos, el servidor aparece en la lista Servidores del panel.

Qué se crea

Servidor principalAgente
Programa/opt/3rmonitor/3rmonitor, el comando 3rmonitor en /usr/local/bin y /usr/binLo mismo
Instalador, para actualizar y desinstalar/opt/3rmonitor/install.shLo mismo
Paquetes de los agentes/opt/3rmonitor/dist, con SHA256SUMS y su firma SHA256SUMS.sig—
Configuración/etc/3rmonitor/master.conf (root:3rmonitor, 0640)/etc/3rmonitor/agent.conf (root:3rmonitor-agent, 0640)
Datos/var/lib/3rmonitor: base de datos y clave de firma, del usuario 3rmonitor/var/lib/3rmonitor-helper: las claves de confianza, solo root
Usuario3rmonitor3rmonitor-agent
Servicios3rmonitor-master (con 3rmonitor-master.service.d/hardening.conf), 3rmonitor-update.path y 3rmonitor-update.service3rmonitor-agent, 3rmonitor-helper

Actualizar y desinstalar

Igual que después de una instalación con install.sh. Actualice el servidor principal desde el panel, o con sudo bash install.sh upgrade en un paquete nuevo; los agentes se actualizan solos. Para quitarlo, ejecute sudo bash /opt/3rmonitor/install.sh uninstall, con --purge para eliminar también la configuración y los datos. Consulte Actualización y desinstalación.

En esta página