Saltar al contenido principal

Pasos

Los pasos se ejecutan en orden. Algunos se pueden omitir y otros dependen de los anteriores.

#PasoDepende deOmitibleQué hace
1UbuntuUbuntuParcialIP fija, actualización, SSH, exporters de Prometheus
2SMTP Relay-ParcialRelay de correo saliente con exim4
3Core Scripts-NoScripts de copias de seguridad y montaje NFS
4Pi-holeCore ScriptsNoDNS interno (y DHCP opcional)
5PiVPNPi-holeSíVPN WireGuard para el acceso remoto
6NTP Server-Síchrony como servidor NTP local
7Webserver-Nolighttpd con PHP CGI
8CertbotWebserver, Pi-holeNoCertificados de Let's Encrypt vía DNS de Cloudflare
9PostgreSQL-NoBase de datos con acceso remoto y copias de seguridad
10NagiosWebserver, PostgreSQLNoNagios compilado desde el código fuente
11Sora HorizonWebserver, PostgreSQL, NagiosSíDespliega Sora Horizon

1. Ubuntu​

Solo aparece si el sistema es Ubuntu.

  • IP fija con netplan: dirección en CIDR, gateway, DNS y hostname. Si algo cambia, se aplica al momento.
  • Actualización completa del sistema (apt update + apt upgrade), y opcionalmente vim.
  • SSH: banner de inicio, desactivar el acceso por contraseña y gestionar las claves públicas autorizadas.
  • Métricas de Prometheus (omitible): exporter de temperatura (vía lighttpd) y Node Exporter. Genera los ScrapeConfig necesarios para un Prometheus Operator.

2. SMTP Relay​

Varios servicios necesitan enviar correos (copias de seguridad, alertas, ...). En lugar de configurar las credenciales en cada uno, exim4 hace de pasarela hacia un servidor SMTP externo.

  • Configuración: servidor, puerto, modo TLS (STARTTLS o TLS implícito), usuario, contraseña, remitente y nombre visible.
  • Direcciones: qué usuarios del sistema (incluido root) envían con el remitente configurado.
  • Prueba: envía un correo, lee el log de exim4 y muestra si se ha entregado. Si falla, se puede volver atrás y corregir.
información

Un relay no es un servidor de correo: no recibe ni guarda nada, únicamente reenvía.

3. Core Scripts​

Descarga los scripts de scripts-backup usados por todas las copias de seguridad: mount.sh (monta el NFS), rotateFiles.sh (rota las carpetas numeradas), notifyCSV.sh (registra el resultado) y notificationChecker.pl (el check de Nagios que lo lee).

Pregunta la ruta de los scripts (/opt/scripts por defecto), el servidor y la ruta NFS, el punto de montaje, la carpeta de notificaciones y su retención. Opcionalmente prueba el montaje.

nota

Va antes de Pi-hole porque su copia de seguridad ya necesita estos scripts y el montaje.

4. Pi-hole​

Convierte el servidor en el DNS interno de toda la red, y opcionalmente en su DHCP.

Si Pi-hole no está instalado, Conductor se cierra e indica el comando a ejecutar en una terminal limpia:

curl -sSL https://install.pi-hole.net | sudo bash

Como DNS externo se recomienda Quad9 (filtered, ECS, DNSSEC): solo se usa para resolver Internet, los nombres internos los resuelve Pi-hole.

Al volver a lanzar Conductor, configura la contraseña de administración, la copia de seguridad diaria (ruta, retención y hora) y, opcionalmente, apunta el DNS del propio servidor a Pi-hole.

5. PiVPN​

Instala un servidor VPN para acceder a la red desde fuera, usando Pi-hole como DNS. Igual que Pi-hole, Conductor se cierra e indica el comando:

sudo su -
curl -L https://install.pivpn.io | bash

Opciones recomendadas: sin IP fija (ya está configurada), WireGuard, puerto 51820, DNS Pi-hole y actualizaciones desatendidas. Tras instalarlo, reiniciar y volver a lanzar Conductor.

6. NTP Server​

Instala chrony como servidor NTP para toda la red. Pregunta los servidores del pool externo y la red que puede consultarlo, y comprueba la sincronización al terminar.

7. Webserver​

Instala lighttpd con PHP CGI, que publica las webs del orquestador (Nagios, el exporter de temperatura y Horizon). Escucha por defecto en el puerto 81, ya que Pi-hole ocupa el 80.

8. Certbot​

Instala certbot con el plugin de Cloudflare y genera un certificado mediante el reto DNS. Pregunta el token de Cloudflare, el dominio, el correo para Let's Encrypt y el tiempo de propagación.

Después configura lighttpd para HTTPS (puerto 444 por defecto) y añade un deploy hook que reinicia lighttpd en cada renovación.

9. PostgreSQL​

Instala la última versión de PostgreSQL y bloquea sus paquetes para evitar actualizaciones inesperadas. También:

  • Abre el acceso remoto para la red indicada.
  • Programa una copia de seguridad diaria de todas las bases de datos (pg_dumpall) con su retención.
  • Deja un script para crear bases de datos con su propio usuario:
sudo /opt/scripts/create_db.sh <dbname> [password]

Si no se indica la contraseña, genera una aleatoria de 40 caracteres.

10. Nagios​

El paso más complejo: compila desde el código fuente Nagios Core, los plugins y NRPE, y lo deja configurado.

aviso

La compilación puede tardar bastante y fallar según el entorno. El asistente avisa antes de empezar.

Sub-pasoQué hace
Build Core, Plugins y NRPEDescarga y compila los tres
BackupCopia diaria de la configuración y un marcador last_backup para su check
NRPEHosts permitidos y comandos (check_disk_root, check_load, check_users, ...)
BaseContacto de notificaciones, grupos y la monitorización del propio servidor
lighttpdPublica la web de Nagios con usuario y contraseña
Sora ObjectsPublica las plantillas sora-* y el comando check_http_host

Las plantillas sora-* son la base sobre la que Horizon publica los checks de las máquinas que despliega: llevan el grupo de servicio y los intervalos, así que una plantilla de Horizon únicamente indica el nombre del check, el comando y la plantilla.

PlantillaGrupo de servicio
sora-service-
sora-hddHDD
sora-metricsMetrics
sora-webWeb
sora-healthHealthStatus
sora-health-slowHealthStatus (cada 5 minutos, para servicios lentos)
sora-dbDB, HealthStatus
sora-backupBackup (un único intento)
sora-certificatesHealthStatus (cada hora, una notificación diaria)

La lista completa de comandos, plantillas y cómo añadir un host está en conductor-nagios-commands.md.

11. Sora Horizon​

Despliega Sora Horizon en el orquestador. Si se omite el primer sub-paso, se omite todo el paso: un panel de control a medio desplegar es peor que ninguno.

Sub-pasoQué hace
InstallDescarga los paquetes publicados, verifica su checksum y los extrae
DatabaseCrea la base de datos en PostgreSQL, o reutiliza una existente
ConfigurationEscribe el .env de la API, el env.js de la web y el servicio de systemd
MigrationAplica el esquema y arranca la API
lighttpdPublica la web y hace de proxy de la API
BackupCopia diaria de los ficheros que no están en PostgreSQL
NagiosRegistra el check de la copia y los de la web y la API
Nagios SSH AccessCrea el usuario, la clave y los permisos con los que Horizon escribe en Nagios
Initial DataRegistra en Horizon el Pi-hole, el NTP y el Nagios de este servidor

Requiere Horizon 2.0.0 o superior, un servidor linux-x64 y la cuenta SMTP del paso 2 (Horizon autentica directamente contra el proveedor, no contra el relay).

Horizon comparte el servidor web con Nagios y el exporter, cada uno bajo su propia ruta:

https://<dominio>:<puerto ssl>/horizon → la web
https://<dominio>:<puerto ssl>/horizon-api → la API (proxy hacia 127.0.0.1:3000)

Si el paso de Certbot se omitió, se usa http://<hostname>:<puerto http>.

Primer inicio de sesión​

En una base de datos nueva se crea un administrador por defecto, que se muestra al terminar:

Cambia la contraseña inmediatamente desde el perfil. Esta cuenta solo se crea cuando no existe ningún usuario, así que nunca reaparece al actualizar.

Actualizar​

Volver a ejecutar el paso con una versión más nueva:

./conductor.sh --step 11

Detecta la instalación existente y pide confirmación (detener la API cancela cualquier despliegue en curso). Después guarda copia del .env y env.js, sustituye los ficheros, regenera la configuración, migra y reinicia.

peligro

La clave HORIZON_VAULT_KEY del .env cifra todas las credenciales guardadas en la base de datos. Conductor nunca la regenera, y la copia de seguridad del paso la incluye. Perderla significa perder todas las credenciales. Trata ese backup igual que el de la base de datos.