Installazione automatica

Metodo automatico: un unico script dall'area personale prepara l'intero server (stack web Apache + PHP, database, strumenti di sicurezza, cron). Poi non resta che distribuire il pannello, emettere l'SSL e inserire la licenza. Funziona su Ubuntu/Debian: su un VPS nuovo configura tutto da zero, su un server già configurato agisce solo in modo additivo (profilo «Server configurato», passo 01). Tutti i comandi seguenti sono in ordine: basta scorrere dall'alto verso il basso.

I valori segnaposto nei comandi vanno sostituiti con i propri: monitor.example.com è il suo dominio; 203.0.113.10 è l'IP reale del server; /var/www/monitor è la radice del pannello (dove si trovano public/, assets/, config.php); scelga una propria password per il database.
Il set completo («Protezione completa») è pensato per un VPS nuovo. Su una Ubuntu/Debian pulita configura il sistema di sicurezza da zero — Fail2ban (jail.local), root-crontab, regole UFW, configurazione di Apache. Se il server è già configurato (pannello funzionante, siti, posta, jail propri) scelga il profilo «Server configurato»: apporta solo modifiche additive e non tocca il suo firewall, Fail2ban, la posta, SSH e sysctl. Se rileva un pannello di hosting, lo script passa da solo a questa modalità. Prima del primo avvio può attivare l'esecuzione a vuoto (casella nell'area personale): mostra cosa verrà fatto senza modificare nulla. Su un server in produzione, per sicurezza, esegua uno snapshot.

01. Comando di configurazione automatica dall'area personale

Il comando si ottiene nella propria area personale my.arciveo.com → sezione «Configurazione del server» (disponibile dopo l'attivazione di Arcivéo Monitor). È associato al Suo account e contiene un token personale.

Lo script prepara l'intero server: stack web (Apache + PHP), database, strumenti per SSL, l'insieme completo di soluzioni di protezione e attività cron (Lynis, SMART, debsums, Logwatch, report giornaliero, aggiornamento ipsum).

1) Scelga il livello di protezione (nell'area personale, prima di copiare il comando):

  • Protezione completa (consigliata) — UFW (firewall), Fail2ban, CrowdSec + bouncer, ipsum (blocklist IP), Suricata (IDS/IPS), Falco, ModSecurity + OWASP CRS (WAF), PSAD, mod_evasive (anti-DoS), AIDE (integrità dei file), debsums, ClamAV + maldet (antivirus), Auditd, AppArmor, Monit, Lynis (audit), Logwatch, aggiornamenti di sicurezza automatici.
  • Alleggerita — per VPS con poca RAM: set di base senza componenti pesanti.
  • Server già configurato (pannello di hosting) — per un server già in funzione con pannello (HestiaCP e simili), siti e posta: solo modifiche additive (installazione di strumenti aggiuntivi, cron, regole sudo), mentre firewall, Fail2ban, posta, SSH e sysctl restano invariati. Su un server con pannello lo script sceglie questa modalità da solo.
Prova a vuoto. Nell'area personale si può selezionare la casella «Prova a vuoto» — così il comando mostrerà soltanto ciò che lo script installerà e modificherà, e terminerà senza toccare nulla. Utile su un server già configurato: prima la prova, poi l'esecuzione reale senza la casella.

2) Esegua sul server come root il comando dall'area personale — ha questo aspetto:

curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN" | sudo bash
Tenga segreto il comando — è associato al Suo account. Il link ha una durata limitata; se è scaduto, prema «Ottieni un nuovo link» nell'area personale.
Dopo la configurazione automatica il server web è Apache + PHP-FPM, mentre gli strumenti di sicurezza e le attività cron sono già installati e funzionano «pronti all'uso» — non serve configurare nient'altro.

02. Dominio e DNS

Per aprire il pannello a un indirizzo come monitor.example.com e ottenere un SSL gratuito, il dominio deve puntare al server. Nel pannello di gestione DNS (presso il registrar o l'hoster) crei un record A:

Tipo: A Nome: monitor (sottodominio → monitor.example.com) oppure @ (radice del dominio → example.com) Valore: 203.0.113.10 ← IP del suo server TTL: 3600

Dopo qualche minuto (a volte fino a un'ora) verifichi che il dominio punti al server:

dig +short monitor.example.com # deve restituire il suo IP # oppure, se dig non è disponibile: getent hosts monitor.example.com
Il certificato SSL (passo 06) viene rilasciato solo per un dominio — perciò il DNS deve puntare al server prima del rilascio del certificato.

03. Caricare i file del pannello

La configurazione automatica ha già creato la cartella del pannello /var/www/monitor e configurato il sito Apache (DocumentRoot sulla radice del pannello, PHP-FPM, AllowOverride per .htaccess). Non serve creare separatamente la cartella e il vhost: basta caricare i file e impostare i permessi.
I file del pannello (l'archivio della distribuzione) si scaricano dopo l'acquisto nell'area my.arciveo.com«Download». Estragga l'archivio prima di caricarlo sul server.

Carichi il contenuto della distribuzione in /var/www/monitor (in modo che all'interno ci siano public/, assets/, config.php ecc.) tramite SFTP/SCP (FileZilla / WinSCP) o con il comando scp dal computer locale:

scp -r ./monitor/* deploy@203.0.113.10:/var/www/monitor/
Per far scrivere subito nel vhost il suo dominio (ServerName), lo si passa al comando di configurazione automatica già al passo 01: … | sudo bash -s -- monitor.example.com (oppure lo si indica nel campo «Dominio del pannello» nell'area personale). Se il dominio non è stato passato, il pannello risponde su qualsiasi host e per IP, e ServerName lo scriverà certbot all'emissione del SSL (passo 06); non serve reinstallare nulla.
Imposti i permessi sui file: è un passo obbligatorio. Se ha caricato come root o via SFTP, i file appartengono a root e il web server (www-data) non potrà leggerli: il pannello si aprirà vuoto o con errore 403 (nel log: .htaccess unreadable / directory not executable). Il comando qui sotto risolve il problema:
# Normalizziamo i permessi di tutta la webroot: la cartella creata da root non è # accessibile al web server (www-data) — senza questo il pannello restituisce una pagina vuota o 403. cd /var/www/monitor # Le cartelle di lavoro si creano PRIMA del chown — altrimenti le nuove cartelle restano root:root # e con chmod 750 il web server (www-data) non potrà scriverci. 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

Si abra il caricamento dei file via SFTP. Dopo il comando qui sopra tutti i file appartengono a www-data, mentre FileZilla / WinSCP si collegano con il suo utente: il caricamento fallirà con SSH_FX_PERMISSION_DENIED (Permission denied). Scelga una delle due varianti.

Variante A: una ACL solo per il suo utente (consigliata). Il permesso di scrittura lo riceve soltanto lei; il web server continua a non poter sovrascrivere il codice del pannello:

sudo apt install -y acl # Permesso di scrittura per il suo utente sull'intera directory del pannello: sudo setfacl -R -m u:deploy:rwX /var/www/monitor # La stessa regola come predefinita: per file e cartelle creati in seguito: sudo setfacl -R -d -m u:deploy:rwX /var/www/monitor

Variante B: tramite il gruppo www-data. Più semplice, ma il permesso di scrittura sui file del pannello lo ottiene anche il web server: con una vulnerabilità in PHP il codice potrebbe essere sostituito. L'ordine dei comandi è importante: config.php e le cartelle di lavoro vengono chiuse per ultime:

sudo usermod -aG www-data deploy # Scrittura per il gruppo + setgid (il bit 2): i file caricati via SFTP restano # nel gruppo www-data, altrimenti il pannello non potrà sovrascriverli. 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
Dopo la variante B si ricolleghi in FileZilla (Server → Disconnetti, poi acceda di nuovo): il nuovo gruppo ha effetto solo a un nuovo accesso, prima di allora i permessi continueranno a mancare. Verifica: id deploy, nell'elenco dei gruppi deve comparire www-data; ls -ld /var/www/monitor, permessi drwxrwsr-x, la lettera s al posto di x indica che setgid è attivo.

04. Database

Crei il database e l'utente, quindi importi lo schema. Il blocco con il DB va incollato nel terminale per intero (sudo mysql accede come root tramite socket unix — la password di root non serve). monitor_db e monitor_user sono nomi di esempio, può impostare quelli che preferisce; memorizzi il nome del database, l'utente e la password — li inserirà in config.php al passo successivo:

# 1. Database. La password si imposta UNA sola volta in DBPASS e viene inserita in tutte le righe. # Il blocco va incollato nel terminale PER INTERO; sudo mysql accede come root tramite socket unix # (la password di root non serve). NON usi l'interattivo `sudo mysql -u root -p` # con copia-incolla — durante l'incolla le righe SQL finiscono nella richiesta della password e vanno perse. DBPASS='CHOOSE_A_PASSWORD' # ← modifichi solo questa riga 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 # Verifica (deve mostrare monitor_db): mysql -u monitor_user -p"$DBPASS" -e "SHOW DATABASES;" # Inserisca questa stessa password in config.php → DB_PASS.
Non è necessario importare lo schema — al primo accesso dal browser il dashboard crea automaticamente le tabelle e l'account admin (da database/db.sql), se il DB è vuoto.
Il sudo per il server web è già stato impostato dalla configurazione automatica — i moduli vedono subito i dati di sistema. Occorre configurare sudo separatamente solo se PHP gira con un utente non standard (diverso da www-data).

05. Configurazione di config.php

config.php nella radice del pannello (/var/www/monitor/config.php) è l'unico file da modificare manualmente. Tutte le impostazioni del pannello vi sono definite come costanti define(). Aprirlo in un editor:

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

Inserisca i propri valori nei punti evidenziati; lasci il resto invariato:

// --- Database (dal passo 04) --- define('DB_HOST', 'localhost'); // lasciare define('DB_NAME', 'db_name'); // creato nel passo 04 define('DB_USER', 'user'); // creato nel passo 04 define('DB_PASS', 'db_password'); // impostato nel passo 04 define('DB_CHARSET', 'utf8mb4'); // lasciare // --- Applicazione --- define('APP_URL', 'https://monitor.example.com'); // indirizzo del pannello, senza slash finale define('TIMEZONE', 'Europe/Rome'); // il suo fuso orario // --- Durata sessione --- define('SESSION_LIFETIME', 28800); // inattività prima del nuovo accesso, sec (28800 = 8 h)

Cosa modificare:

  • DB_NAME, DB_USER, DB_PASS — esattamente lo stesso nome del database, utente e password impostati alla creazione del DB nel passo 04 (se ha mantenuto gli esempi — monitor_db / monitor_user). Non tocchi DB_HOST e DB_CHARSET.
  • APP_URL — indirizzo completo del pannello con https://, senza slash finale e senza www. Deve coincidere con il dominio su cui attiva la licenza (passo 07), altrimenti la chiave verrà rifiutata.
  • TIMEZONE — il suo fuso orario (elenco — timedatectl list-timezones). Influisce solo su come il pannello mostra le date; sull'orario di avvio delle attività cron non influisce (lì vale il fuso del sistema).
  • SESSION_LIFETIME — dopo quanti secondi di inattività il pannello richiede un nuovo accesso (predefinito 8 ore). Es. 3600 = 1 ora, 86400 = un giorno.
  • Il blocco di logging degli errori (display_errors, log_errors, error_log) — lo lasci ai valori predefiniti.

Salvi il file (Ctrl+O, Enter, poi Ctrl+X) e riavvii PHP-FPM — altrimenti, a causa di OPcache, le modifiche non verranno applicate:

sudo systemctl restart php*-fpm
config.php è un file segreto (contiene la password del DB). Si trova nella radice del pannello, che è anche la radice web, ma è protetto: permessi 640 (impostati nel passo 03) e divieto esplicito nel .htaccess radice. Non lo pubblichi in repository pubblici e non lo invii al supporto con la password reale.
Analisi dettagliata di tutti i parametri — nelle FAQ: «Il file config.php — tutte le impostazioni del pannello».

06. Emettere SSL (HTTPS)

Il pannello funziona solo tramite HTTPS. La sessione di accesso usa un cookie protetto e WebAuthn (2FA) per standard funziona solo su HTTPS. Tramite http:// non sarà possibile accedere.

certbot e il plugin per Apache sono già installati dalla configurazione automatica. Il DNS del dominio deve già puntare al server (passo 02). Emissione con un solo comando:

sudo certbot --apache -d monitor.example.com
Cosa chiederà certbot:
  1. Enter email address — il Suo indirizzo e-mail (vi arriveranno le notifiche di scadenza del certificato).
  2. Terms of Service … (Y)es/(N)oY.
  3. Share email with the EFF … (Y)es/(N)o — a Sua discrezione.
Poi certbot emetterà da solo il certificato, scriverà <VirtualHost *:443>, configurerà il redirect http→https e il rinnovo automatico. Alla fine — Successfully enabled HTTPS.
Se l'emissione fallisce, verifichi che dig +short monitor.example.com restituisca l'IP del server e che le porte 80/443 siano aperte (sudo ufw allow 80,443/tcp).

Dopo l'emissione: https://monitor.example.com si apre con il lucchetto, http:// reindirizza a https://.

07. Accesso e configurazione iniziale

Apra https://monitor.example.com, acceda con admin / useradmin e completi la checklist:

  1. Cambiare la password di admin — sezione «Utenti» nel menu.
  2. Attivare WebAuthn (2FA) — «Chiavi WebAuthn» → registri una chiave/passkey (richiede HTTPS). Ne registri subito due: in caso di smarrimento dell'unica chiave, l'accesso tramite essa sarà impossibile. Maggiori dettagli.
  3. Limitare l'accesso per IP — «Impostazioni» → «Limitazione dell'accesso per IP» (inserisca il proprio IP prima di attivarla, altrimenti si bloccherà l'accesso).
  4. Inserire la licenza — attivi il codice di attivazione ARCIVEO-… dall'area personale sul proprio dominio e incolli la chiave in «Impostazioni» → «Licenza». Maggiori dettagli.
  5. Configurare le notifiche — Telegram e/o Email in «Impostazioni». Maggiori dettagli.
  6. Eliminare l'installer public/start_db.php, se è rimasto: consente di ricreare il database senza autenticazione. Finché il file resta nella radice del pannello o in public/, il pannello lo segnala con un banner rosso.
Fatto. Gli strumenti di sicurezza sono già attivi — la dashboard ne mostrerà subito lo stato e il punteggio di sicurezza. La guida a ogni strumento è nelle FAQ.
Arcivéo - Security Monitor © 2026