Pasos
Los pasos se ejecutan en orden. Algunos se pueden omitir y otros dependen de los anteriores.
| # | Paso | Depende de | Omitible | Qué hace |
|---|---|---|---|---|
| 1 | Ubuntu | Ubuntu | Parcial | IP fija, actualización, SSH, exporters de Prometheus |
| 2 | SMTP Relay | - | Parcial | Relay de correo saliente con exim4 |
| 3 | Core Scripts | - | No | Scripts de copias de seguridad y montaje NFS |
| 4 | Pi-hole | Core Scripts | No | DNS interno (y DHCP opcional) |
| 5 | PiVPN | Pi-hole | Sí | VPN WireGuard para el acceso remoto |
| 6 | NTP Server | - | Sí | chrony como servidor NTP local |
| 7 | Webserver | - | No | lighttpd con PHP CGI |
| 8 | Certbot | Webserver, Pi-hole | No | Certificados de Let's Encrypt vía DNS de Cloudflare |
| 9 | PostgreSQL | - | No | Base de datos con acceso remoto y copias de seguridad |
| 10 | Nagios | Webserver, PostgreSQL | No | Nagios compilado desde el código fuente |
| 11 | Sora Horizon | Webserver, PostgreSQL, Nagios | Sí | 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 opcionalmentevim. - 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
ScrapeConfignecesarios 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.
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.
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.
La compilación puede tardar bastante y fallar según el entorno. El asistente avisa antes de empezar.
| Sub-paso | Qué hace |
|---|---|
| Build Core, Plugins y NRPE | Descarga y compila los tres |
| Backup | Copia diaria de la configuración y un marcador last_backup para su check |
| NRPE | Hosts permitidos y comandos (check_disk_root, check_load, check_users, ...) |
| Base | Contacto de notificaciones, grupos y la monitorización del propio servidor |
| lighttpd | Publica la web de Nagios con usuario y contraseña |
| Sora Objects | Publica 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.
| Plantilla | Grupo de servicio |
|---|---|
sora-service | - |
sora-hdd | HDD |
sora-metrics | Metrics |
sora-web | Web |
sora-health | HealthStatus |
sora-health-slow | HealthStatus (cada 5 minutos, para servicios lentos) |
sora-db | DB, HealthStatus |
sora-backup | Backup (un único intento) |
sora-certificates | HealthStatus (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-paso | Qué hace |
|---|---|
| Install | Descarga los paquetes publicados, verifica su checksum y los extrae |
| Database | Crea la base de datos en PostgreSQL, o reutiliza una existente |
| Configuration | Escribe el .env de la API, el env.js de la web y el servicio de systemd |
| Migration | Aplica el esquema y arranca la API |
| lighttpd | Publica la web y hace de proxy de la API |
| Backup | Copia diaria de los ficheros que no están en PostgreSQL |
| Nagios | Registra el check de la copia y los de la web y la API |
| Nagios SSH Access | Crea el usuario, la clave y los permisos con los que Horizon escribe en Nagios |
| Initial Data | Registra 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:
- Email:
[email protected] - Contraseña:
changeme
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.
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.