Instalación automática

Método automático: un solo script desde su área personal prepara todo el servidor (pila web Apache + PHP, base de datos, herramientas de seguridad, cron). Después: desplegar el panel, emitir el SSL e introducir la licencia. Funciona en Ubuntu/Debian: en un VPS nuevo lo configura todo desde cero, y en un servidor ya configurado solo de forma aditiva (perfil «Servidor configurado», paso 01). Todos los comandos siguientes van en orden; solo tiene que desplazarse de arriba abajo.

Los valores de ejemplo de los comandos reemplácelos por los suyos: monitor.example.com, su dominio; 203.0.113.10, la IP real del servidor; /var/www/monitor, la raíz del panel (donde se encuentran public/, assets/, config.php); y elija su propia contraseña para la base de datos.
El conjunto completo («Protección total») está pensado para un VPS nuevo. En una Ubuntu/Debian limpia configura el sistema de seguridad desde cero: Fail2ban (jail.local), root-crontab, reglas de UFW, configuración de Apache. Si el servidor ya está configurado (panel en funcionamiento, sitios, correo, sus propios jails), elija el perfil «Servidor configurado»: solo introduce cambios aditivos y no toca su cortafuegos, Fail2ban, correo, SSH ni sysctl. Al detectar un panel de hosting, el script cambia a este modo por sí mismo. Antes del primer arranque puede activar la ejecución en seco (casilla en el área personal): le mostrará qué se hará sin cambiar nada. En un servidor en funcionamiento, por si acaso, haga una instantánea (snapshot).

01. Comando de autoconfiguración desde el área personal

El comando lo obtiene en su área personal my.arciveo.com → sección «Configuración del servidor» (disponible tras contratar Arcivéo Monitor). Está vinculado a su cuenta y contiene un token personal.

El script prepara todo el servidor: la pila web (Apache + PHP), la base de datos, las herramientas para SSL, el conjunto completo de medidas de protección y las tareas de cron (Lynis, SMART, debsums, Logwatch, informe diario, actualización de ipsum).

1) Elija el nivel de protección (en el área personal, antes de copiar el comando):

  • Protección completa (recomendada) — UFW (cortafuegos), Fail2ban, CrowdSec + bouncer, ipsum (lista de bloqueo de IP), Suricata (IDS/IPS), Falco, ModSecurity + OWASP CRS (WAF), PSAD, mod_evasive (anti-DoS), AIDE (integridad de archivos), debsums, ClamAV + maldet (antivirus), Auditd, AppArmor, Monit, Lynis (auditoría), Logwatch, actualizaciones de seguridad automáticas.
  • Ligera — para VPS con poca RAM: conjunto básico sin componentes pesados.
  • Servidor ya configurado (panel de hosting) — para un servidor ya en funcionamiento con panel (HestiaCP, etc.), sitios y correo: solo cambios aditivos (instalación adicional de herramientas, cron, reglas de sudo), mientras que el cortafuegos, Fail2ban, el correo, SSH y sysctl quedan como están. En un servidor con panel el script elige este modo por sí mismo.
Simulación. En el área personal puede marcar la casilla «Simulación»: entonces el comando solo mostrará qué instalará y cambiará el script, y terminará sin tocar nada. Útil en un servidor ya configurado: primero la simulación, luego la ejecución real sin la casilla.

2) Ejecute en el servidor como root el comando del área personal — tiene este aspecto:

curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN" | sudo bash
Mantenga en secreto el comando — está vinculado a su cuenta. El enlace tiene una validez limitada; si ha caducado, pulse en el área personal «Obtener un enlace nuevo».
Tras la autoconfiguración, el servidor web es Apache + PHP-FPM, y las herramientas de seguridad y las tareas de cron ya están instaladas y funcionan «de fábrica» — no hay que configurar nada más.

02. Dominio y DNS

Para abrir el panel en una dirección como monitor.example.com y obtener un SSL gratuito, el dominio debe apuntar al servidor. En el panel de control de DNS (en su registrador u hosting) cree un registro A:

Tipo: A Nombre: monitor (subdominio → monitor.example.com) o @ (raíz del dominio → example.com) Valor: 203.0.113.10 ← IP de su servidor TTL: 3600

Al cabo de unos minutos (a veces hasta una hora) compruebe que el dominio apunta al servidor:

dig +short monitor.example.com # debe devolver su IP # o, si no tiene dig: getent hosts monitor.example.com
El certificado SSL (paso 06) solo se emite para un dominio, por eso el DNS debe apuntar al servidor antes de emitir el certificado.

03. Suba los archivos del panel

La configuración automática ya ha creado el directorio del panel /var/www/monitor y ha configurado el sitio de Apache (DocumentRoot en la raíz del panel, PHP-FPM, AllowOverride para .htaccess). No es necesario crear el directorio ni el vhost por separado: solo suba los archivos y asigne los permisos.
Los archivos del panel (el archivo de la distribución) se descargan tras la compra en el área personal my.arciveo.com«Descargas». Descomprima el archivo antes de subirlo al servidor.

Suba el contenido de la distribución a /var/www/monitor (de modo que dentro queden public/, assets/, config.php, etc.) por SFTP/SCP (FileZilla / WinSCP) o con el comando scp desde su equipo local:

scp -r ./monitor/* deploy@203.0.113.10:/var/www/monitor/
Para que en el vhost quede registrado directamente su dominio (ServerName), se pasa al comando de configuración automática ya en el paso 01: … | sudo bash -s -- monitor.example.com (o se indica el dominio en el campo «Dominio del panel» del área personal). Si no se pasó el dominio, el panel responde a cualquier host y por IP, y certbot registrará el ServerName al emitir el SSL (paso 06); no hace falta reinstalar nada.
Asigne los permisos de los archivos: es un paso obligatorio. Si los subió como root o por SFTP, los archivos pertenecen a root y el servidor web (www-data) no podrá leerlos: el panel se abrirá vacío o con error 403 (en el registro: .htaccess unreadable / directory not executable). El comando de abajo lo soluciona:
# Normalizamos los permisos de todo el webroot: el directorio creado por root # es inaccesible para el servidor web (www-data); sin esto el panel sirve una página vacía o 403. cd /var/www/monitor # Las carpetas de trabajo se crean ANTES del chown; de lo contrario los nuevos directorios quedarán como root:root # y con chmod 750 el servidor web (www-data) no podrá escribir en ellos. sudo mkdir -p data/lynis data/logwatch tmp logs sudo chown -R www-data:www-data /var/www/monitor sudo find /var/www/monitor -type d -exec chmod 755 {} \; sudo find /var/www/monitor -type f -exec chmod 644 {} \; sudo chmod 640 /var/www/monitor/config.php sudo chmod 750 data tmp logs

Habilite para usted mismo la subida por SFTP. Tras el comando anterior todos los archivos pertenecen a www-data, mientras que FileZilla / WinSCP se conectan con su propio usuario: la subida fallará con SSH_FX_PERMISSION_DENIED (Permission denied). Elija una de las dos variantes.

Variante A: una ACL solo para su usuario (recomendado). El permiso de escritura lo obtiene únicamente usted; el servidor web sigue sin poder sobrescribir el código del panel:

sudo apt install -y acl # Permiso de escritura para su usuario en todo el directorio del panel: sudo setfacl -R -m u:deploy:rwX /var/www/monitor # La misma regla por defecto: para archivos y carpetas creados más adelante: sudo setfacl -R -d -m u:deploy:rwX /var/www/monitor

Variante B: mediante el grupo www-data. Más sencilla, pero el servidor web también obtiene permiso de escritura sobre los archivos del panel: ante una vulnerabilidad en PHP se podría sustituir el código. El orden de los comandos importa: config.php y las carpetas de trabajo se cierran al final:

sudo usermod -aG www-data deploy # Escritura para el grupo + setgid (el bit 2): los archivos subidos por SFTP # permanecen en el grupo www-data; de lo contrario el panel no podrá sobrescribirlos. sudo find /var/www/monitor -type d -exec chmod 2775 {} \; sudo find /var/www/monitor -type f -exec chmod 664 {} \; sudo chmod 640 /var/www/monitor/config.php sudo chmod 2750 /var/www/monitor/data /var/www/monitor/tmp /var/www/monitor/logs
Tras la variante B, vuelva a conectarse en FileZilla (Servidor → Desconectar y entrar de nuevo): el nuevo grupo solo se aplica en un inicio de sesión nuevo, hasta entonces seguirá sin permisos. Comprobación: id deploy, en la lista de grupos debe aparecer www-data; ls -ld /var/www/monitor, permisos drwxrwsr-x, la letra s en lugar de x significa que setgid está activo.

04. Base de datos

Cree la base de datos y el usuario, luego importe el esquema. El bloque de la BD se pega en la terminal completo (sudo mysql accede como root por socket unix; no se necesita la contraseña de root). monitor_db y monitor_user son nombres de ejemplo, puede definir los que desee; recuerde el nombre de la base, el usuario y la contraseña — los escribirá en config.php en el siguiente paso:

# 1. Base de datos. La contraseña se define UNA sola vez en DBPASS y se sustituye en todas las líneas. # El bloque se pega en la terminal COMPLETO; sudo mysql accede como root por socket unix # (no se necesita la contraseña de root). NO use el interactivo `sudo mysql -u root -p` # con copiar y pegar — al pegar, las líneas SQL irán a la petición de contraseña y se perderán. DBPASS='CHOOSE_A_PASSWORD' # ← modifique solo esta línea sudo mysql <<SQL CREATE DATABASE IF NOT EXISTS monitor_db CHARACTER SET utf8mb4; CREATE USER IF NOT EXISTS 'monitor_user'@'localhost' IDENTIFIED BY '$DBPASS'; GRANT ALL ON monitor_db.* TO 'monitor_user'@'localhost'; FLUSH PRIVILEGES; SQL # Comprobación (debe mostrar monitor_db): mysql -u monitor_user -p"$DBPASS" -e "SHOW DATABASES;" # Escriba esta misma contraseña en config.php → DB_PASS.
No es necesario importar el esquema — el panel crea por sí mismo las tablas y la cuenta admin en el primer acceso desde el navegador (a partir de database/db.sql) si la BD está vacía.
El sudo para el servidor web ya lo configuró la autoconfiguración — los módulos ven los datos del sistema de inmediato. Solo hace falta configurar sudo por separado si PHP se ejecuta con un usuario no estándar (distinto de www-data).

05. Configuración de config.php

config.php en la raíz del panel (/var/www/monitor/config.php) es el único archivo que hay que editar a mano. Todos los ajustes del panel se definen en él mediante constantes define(). Ábralo en el editor:

sudo nano /var/www/monitor/config.php

Ponga sus propios valores en los lugares resaltados; deje el resto como está:

// --- Base de datos (del paso 04) --- define('DB_HOST', 'localhost'); // dejar define('DB_NAME', 'db_name'); // lo que creó en el paso 04 define('DB_USER', 'user'); // lo que creó en el paso 04 define('DB_PASS', 'db_password'); // lo que definió en el paso 04 define('DB_CHARSET', 'utf8mb4'); // dejar // --- Aplicación --- define('APP_URL', 'https://monitor.example.com'); // dirección del panel, sin barra al final define('TIMEZONE', 'Europe/Madrid'); // su zona horaria // --- Tiempo de sesión --- define('SESSION_LIFETIME', 28800); // inactividad hasta volver a entrar, seg (28800 = 8 h)

Qué cambiar:

  • DB_NAME, DB_USER, DB_PASS: exactamente el mismo nombre de base de datos, usuario y contraseña que definió al crear la BD en el paso 04 (si dejó los ejemplos: monitor_db / monitor_user). No toque DB_HOST ni DB_CHARSET.
  • APP_URL: dirección completa del panel con https://, sin barra al final y sin www. Debe coincidir con el dominio en el que activa la licencia (paso 07); de lo contrario, la clave será rechazada.
  • TIMEZONE: su zona horaria (lista: timedatectl list-timezones). Solo afecta a cómo el panel muestra las fechas; en la hora de ejecución de las tareas de cron no influye (allí rige la zona del sistema).
  • SESSION_LIFETIME: tras cuántos segundos de inactividad el panel pedirá entrar de nuevo (por defecto 8 horas). Por ej. 3600 = 1 hora, 86400 = un día.
  • El bloque de registro de errores (display_errors, log_errors, error_log): déjelo por defecto.

Guarde el archivo (Ctrl+O, Enter y luego Ctrl+X) y reinicie PHP-FPM; de lo contrario, por culpa de OPcache los cambios no se aplicarán:

sudo systemctl restart php*-fpm
config.php es un archivo secreto (contiene la contraseña de la BD). Está en la raíz del panel, que es también la raíz web, pero está protegido: permisos 640 (asignados en el paso 03) y una denegación explícita en el .htaccess raíz. No lo publique en repositorios públicos ni lo envíe a soporte con la contraseña real.
Un análisis detallado de todos los parámetros en las FAQ: «El archivo config.php: todos los ajustes del panel».

06. Emitir SSL (HTTPS)

El panel funciona solo por HTTPS. La sesión de inicio usa una cookie segura y WebAuthn (2FA) por estándar funciona únicamente en HTTPS. Por http:// no podrá iniciar sesión.

certbot y el complemento para Apache ya están instalados por la autoconfiguración. El DNS del dominio ya debe apuntar al servidor (paso 02). Emisión en un solo comando:

sudo certbot --apache -d monitor.example.com
Lo que certbot preguntará:
  1. Enter email address — su e-mail (allí llegarán las notificaciones de caducidad del certificado).
  2. Terms of Service … (Y)es/(N)oY.
  3. Share email with the EFF … (Y)es/(N)o — a su criterio.
Después certbot emitirá el certificado por sí mismo, escribirá <VirtualHost *:443>, configurará la redirección http→https y la renovación automática. Al final: Successfully enabled HTTPS.
Si la emisión falla, compruebe que dig +short monitor.example.com devuelve la IP del servidor y que los puertos 80/443 están abiertos (sudo ufw allow 80,443/tcp).

Tras la emisión: https://monitor.example.com se abre con candado y http:// redirige a https://.

07. Inicio de sesión y configuración inicial

Abra https://monitor.example.com, inicie sesión con admin / useradmin y complete la lista de comprobación:

  1. Cambiar la contraseña de admin — sección «Usuarios» en el menú.
  2. Activar WebAuthn (2FA) — «Claves WebAuthn» → registrar clave/passkey (requiere HTTPS). Registre dos a la vez: si pierde la única clave, no podrá iniciar sesión con ella. Más información.
  3. Restringir el acceso por IP — «Ajustes» → «Restricción de acceso por IP» (introduzca su IP antes de activarlo, o se bloqueará el acceso a sí mismo).
  4. Introducir la licencia — active en su dominio el código de activación ARCIVEO-… del área personal y pegue la clave en «Ajustes» → «Licencia». Más información.
  5. Configurar las notificaciones — Telegram o Email en «Ajustes». Más información.
  6. Eliminar el instalador public/start_db.php, si aún queda: permite recrear la base de datos sin autenticación. Mientras el archivo esté en la raíz del panel o en public/, el panel avisa de ello con un banner rojo.
Listo. Las herramientas de seguridad ya están funcionando — el panel mostrará de inmediato su estado y la Puntuación de seguridad. La referencia de cada herramienta está en las FAQ.
Arcivéo - Security Monitor © 2026