Installation automatique

Méthode automatique : un seul script depuis l'espace client prépare tout le serveur (pile web Apache + PHP, base de données, outils de sécurité, cron). Ensuite — déployez le tableau de bord, émettez le SSL et saisissez la licence. Fonctionne sous Ubuntu/Debian : sur un VPS neuf il configure tout de zéro, sur un serveur déjà configuré — de façon uniquement additive (profil « Serveur configuré », étape 01). Toutes les commandes ci-dessous sont dans l'ordre, il suffit de faire défiler du haut vers le bas.

Les valeurs d'exemple dans les commandes à remplacer par les vôtres : monitor.example.com — votre domaine ; 203.0.113.10 — l'IP réelle du serveur ; /var/www/monitor — la racine du tableau de bord (où se trouvent public/, assets/, config.php) ; choisissez votre propre mot de passe BD.
La formule complète (« Protection complète ») est prévue pour un VPS neuf. Sur un Ubuntu/Debian vierge, elle configure le système de sécurité de zéro — Fail2ban (jail.local), crontab root, règles UFW, configuration Apache. Si le serveur est déjà configuré (tableau de bord opérationnel, sites, messagerie, vos propres jails) — choisissez le profil « Serveur configuré » : il n'apporte que des modifications additives et ne touche ni à votre pare-feu, ni à Fail2ban, ni à la messagerie, ni au SSH, ni à sysctl. Si une panneau d'hébergement est détecté, le script bascule tout seul dans ce mode. Avant le premier lancement, vous pouvez activer le test à blanc (case à cocher dans l'espace client) — il montre ce qui sera fait, sans rien modifier. Sur un serveur en production, faites un instantané (snapshot) par précaution.

01. Commande de configuration automatique depuis l'espace client

Vous récupérez la commande dans votre espace client my.arciveo.com → rubrique « Configuration du serveur » (accessible après souscription à Arcivéo Monitor). Elle est liée à votre compte et contient un jeton personnel.

Le script prépare l'intégralité du serveur : pile web (Apache + PHP), base de données, outils SSL, jeu complet de moyens de protection et tâches cron (Lynis, SMART, debsums, Logwatch, rapport quotidien, mise à jour d'ipsum).

1) Choisissez le niveau de protection (dans l'espace client, avant de copier la commande) :

  • Protection complète (recommandée) — UFW (pare-feu), Fail2ban, CrowdSec + bouncer, ipsum (liste d'IP bloquées), Suricata (IDS/IPS), Falco, ModSecurity + OWASP CRS (WAF), PSAD, mod_evasive (anti-DoS), AIDE (intégrité des fichiers), debsums, ClamAV + maldet (antivirus), Auditd, AppArmor, Monit, Lynis (audit), Logwatch, mises à jour de sécurité automatiques.
  • Allégée — pour les VPS à faible RAM : jeu de base sans les composants lourds.
  • Serveur déjà configuré (panneau d'hébergement) — pour un serveur déjà en fonctionnement avec panneau (HestiaCP, etc.), sites et messagerie : uniquement des modifications additives (installation d'outils, cron, règles sudo), tandis que le pare-feu, Fail2ban, la messagerie, SSH et sysctl restent inchangés. Sur un serveur avec panneau, le script choisit ce mode automatiquement.
Simulation. Dans l'espace client, vous pouvez cocher « Simulation » — la commande se contentera alors d'afficher ce que le script installera et modifiera, puis se terminera sans rien toucher. Utile sur un serveur déjà configuré : d'abord la simulation, ensuite le lancement réel sans la case cochée.

2) Exécutez sur le serveur en tant que root la commande de l'espace client — elle se présente ainsi :

curl -fsSL "https://my.arciveo.com/install.php?token=YOUR_TOKEN" | sudo bash
Gardez la commande secrète — elle est liée à votre compte. Le lien a une durée de validité limitée ; s'il a expiré, cliquez dans l'espace client sur « Obtenir un nouveau lien ».
Après la configuration automatique, le serveur web est Apache + PHP-FPM, et les outils de sécurité et tâches cron sont déjà installés et fonctionnels « prêts à l'emploi » — rien de plus à configurer.

02. Domaine et DNS

Pour ouvrir le tableau de bord à une adresse comme monitor.example.com et obtenir un SSL gratuit, le domaine doit pointer vers le serveur. Dans le panneau de gestion DNS (chez votre registraire ou hébergeur), créez un enregistrement A :

Type : A Nom : monitor (sous-domaine → monitor.example.com) ou @ (racine du domaine → example.com) Valeur : 203.0.113.10 ← IP de votre serveur TTL : 3600

Au bout de quelques minutes (parfois jusqu'à une heure), vérifiez que le domaine pointe vers le serveur :

dig +short monitor.example.com # doit renvoyer votre IP # ou, si dig est absent : getent hosts monitor.example.com
Le certificat SSL (étape 06) n'est délivré que pour un domaine — le DNS doit donc pointer vers le serveur avant l'émission du certificat.

03. Transférer les fichiers du panneau

La configuration automatique a déjà créé le répertoire du panneau /var/www/monitor et configuré le site Apache (DocumentRoot vers la racine du panneau, PHP-FPM, AllowOverride pour .htaccess). Pas besoin de créer séparément un répertoire ou un vhost — transférez simplement les fichiers et définissez les droits.
Les fichiers du panneau (archive de distribution) se téléchargent après achat dans l'espace client my.arciveo.com« Téléchargements ». Décompressez l'archive avant de l'envoyer sur le serveur.

Transférez le contenu de la distribution dans /var/www/monitor (pour y retrouver public/, assets/, config.php, etc.) — par SFTP/SCP (FileZilla / WinSCP) ou avec la commande scp depuis votre ordinateur local :

scp -r ./monitor/* deploy@203.0.113.10:/var/www/monitor/
Pour que votre domaine soit directement inscrit dans le vhost (ServerName), on le passe à la commande de configuration automatique dès l'étape 01 : … | sudo bash -s -- monitor.example.com (ou on indique le domaine dans le champ « Domaine du panneau » de l'espace client). Si le domaine n'a pas été fourni, le panneau répond à n'importe quel hôte et par IP, et ServerName sera inscrit par certbot lors de l'émission du SSL (étape 06) ; rien n'est à réinstaller.
Définissez les droits sur les fichiers — c'est une étape obligatoire. Si vous avez transféré sous root ou par SFTP, les fichiers appartiennent à root, et le serveur web (www-data) ne pourra pas les lire — le panneau s'ouvrira vide ou avec une erreur 403 (dans le journal : .htaccess unreadable / directory not executable). La commande ci-dessous corrige cela :
# On normalise les droits de tout le webroot : un répertoire créé par root est inaccessible # au serveur web (www-data) — sans cela le panneau renvoie une page vide ou une 403. cd /var/www/monitor # On crée les dossiers de travail AVANT le chown — sinon les nouveaux répertoires restent root:root # et avec chmod 750 le serveur web (www-data) ne pourra pas y écrire. 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

Ouvrez-vous l'accès au transfert par SFTP. Après la commande ci-dessus, tous les fichiers appartiennent à www-data, alors que FileZilla / WinSCP se connectent sous votre propre utilisateur — le transfert échouera alors avec SSH_FX_PERMISSION_DENIED (Permission denied). Choisissez l'une des deux variantes.

Variante A — une ACL pour votre utilisateur uniquement (recommandé). Vous seul obtenez le droit d'écriture ; le serveur web ne peut toujours pas réécrire le code du panneau :

sudo apt install -y acl # Droit d'écriture pour votre utilisateur sur tout le répertoire du panneau : sudo setfacl -R -m u:deploy:rwX /var/www/monitor # La même règle par défaut — pour les fichiers et dossiers créés plus tard : sudo setfacl -R -d -m u:deploy:rwX /var/www/monitor

Variante B — via le groupe www-data. Plus simple, mais le serveur web obtient lui aussi le droit d'écriture sur les fichiers du panneau : en cas de faille dans PHP, le code pourrait être remplacé. L'ordre des commandes compte — config.php et les dossiers de travail sont verrouillés en dernier :

sudo usermod -aG www-data deploy # Droit d'écriture au groupe + setgid (le bit 2) : les fichiers transférés par SFTP # restent dans le groupe www-data — sinon le panneau ne pourra pas les réécrire. 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
Après la variante B, reconnectez-vous dans FileZilla (Serveur → Déconnexion, puis reconnectez-vous) — le nouveau groupe ne prend effet qu'à une nouvelle connexion, avant cela vous n'aurez toujours aucun droit. Vérification : id deploywww-data doit apparaître dans la liste des groupes ; ls -ld /var/www/monitor — droits drwxrwsr-x, la lettre s à la place de x signifie que setgid est activé.

04. Base de données

Créez la base et l'utilisateur, puis importez le schéma. Le bloc BDD se colle en entier dans le terminal (sudo mysql connecte root via socket unix — pas besoin du mot de passe root). monitor_db et monitor_user sont des noms d'exemple, vous pouvez choisir les vôtres ; retenez le nom de la base, l'utilisateur et le mot de passe — vous les saisirez dans config.php à l'étape suivante :

# 1. Base de données. Le mot de passe se définit UNE seule fois dans DBPASS et est repris dans toutes les lignes. # Le bloc se colle EN ENTIER dans le terminal ; sudo mysql connecte root via socket unix # (pas besoin du mot de passe root). N'utilisez PAS `sudo mysql -u root -p` interactif # avec copier-coller — au collage, les lignes SQL partiront dans l'invite du mot de passe et seront perdues. DBPASS='CHOOSE_A_PASSWORD' # ← ne modifiez que cette ligne 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 # Vérification (doit afficher monitor_db) : mysql -u monitor_user -p"$DBPASS" -e "SHOW DATABASES;" # Saisissez ce même mot de passe dans config.php → DB_PASS.
Pas besoin d'importer le schéma — le tableau de bord crée lui-même les tables et le compte admin lors du premier accès dans le navigateur (depuis database/db.sql), si la base est vide.
Le sudo pour le serveur web a déjà été configuré par l'autoconfiguration — les modules voient immédiatement les données système. Il faut configurer sudo séparément uniquement si PHP tourne sous un utilisateur non standard (pas www-data).

05. Configuration de config.php

config.php à la racine du tableau de bord (/var/www/monitor/config.php) est le seul fichier à modifier manuellement. Tous les paramètres du tableau de bord y sont définis par des constantes define(). Ouvrez-le dans un éditeur :

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

Remplacez par vos valeurs aux endroits surlignés ; laissez le reste tel quel :

// --- Base de données (de l'étape 04) --- define('DB_HOST', 'localhost'); // laisser define('DB_NAME', 'db_name'); // créé à l'étape 04 define('DB_USER', 'user'); // créé à l'étape 04 define('DB_PASS', 'db_password'); // défini à l'étape 04 define('DB_CHARSET', 'utf8mb4'); // laisser // --- Application --- define('APP_URL', 'https://monitor.example.com'); // adresse du tableau de bord, sans slash final define('TIMEZONE', 'Europe/Paris'); // votre fuseau horaire // --- Durée de session --- define('SESSION_LIFETIME', 28800); // inactivité avant reconnexion, sec (28800 = 8 h)

À modifier :

  • DB_NAME, DB_USER, DB_PASS — exactement les mêmes nom de base, utilisateur et mot de passe que ceux définis à la création de la BD à l'étape 04 (si vous avez gardé les exemples — monitor_db / monitor_user). Ne touchez pas à DB_HOST ni DB_CHARSET.
  • APP_URL — adresse complète du tableau de bord avec https://, sans slash final ni www. Elle doit correspondre au domaine sur lequel vous activez la licence (étape 07), sinon la clé sera rejetée.
  • TIMEZONE — votre fuseau horaire (liste : timedatectl list-timezones). N'affecte que l'affichage des dates par le tableau de bord ; n'affecte pas l'heure de lancement des tâches cron (c'est le fuseau du système qui s'applique).
  • SESSION_LIFETIME — après combien de secondes d'inactivité le tableau de bord demande une reconnexion (8 heures par défaut). Par ex. 3600 = 1 heure, 86400 = un jour.
  • Le bloc de journalisation des erreurs (display_errors, log_errors, error_log) — laissez-le par défaut.

Enregistrez le fichier (Ctrl+O, Enter, puis Ctrl+X) et redémarrez PHP-FPM — sinon, à cause d'OPcache, les modifications ne s'appliqueront pas :

sudo systemctl restart php*-fpm
config.php est un fichier secret (il contient le mot de passe de la BD). Il se trouve à la racine du tableau de bord, qui est aussi la racine web, mais il est protégé : droits 640 (définis à l'étape 03) et interdiction explicite dans le .htaccess racine. Ne le publiez pas sur des dépôts publics et ne le transmettez pas au support avec le vrai mot de passe.
Explication détaillée de tous les paramètres dans la FAQ : « Fichier config.php — tous les paramètres du tableau de bord ».

06. Émettre un certificat SSL (HTTPS)

Le tableau de bord fonctionne uniquement en HTTPS. La session de connexion utilise un cookie sécurisé, et WebAuthn (2FA) ne fonctionne, par norme, qu'en HTTPS. En http://, la connexion est impossible.

certbot et le plugin pour Apache sont déjà installés par la configuration automatique. Le DNS du domaine doit déjà pointer vers le serveur (étape 02). Émission en une seule commande :

sudo certbot --apache -d monitor.example.com
Ce que certbot demandera :
  1. Enter email address — votre e-mail (les notifications d'expiration du certificat y seront envoyées).
  2. Terms of Service … (Y)es/(N)oY.
  3. Share email with the EFF … (Y)es/(N)o — à votre convenance.
Ensuite, certbot émettra le certificat, ajoutera <VirtualHost *:443>, configurera la redirection http→https et le renouvellement automatique. À la fin — Successfully enabled HTTPS.
Si l'émission échoue — vérifiez que dig +short monitor.example.com renvoie l'IP du serveur et que les ports 80/443 sont ouverts (sudo ufw allow 80,443/tcp).

Après l'émission : https://monitor.example.com s'ouvre avec un cadenas, http:// redirige vers https://.

07. Connexion et configuration initiale

Ouvrez https://monitor.example.com, connectez-vous avec admin / useradmin et suivez la liste :

  1. Changer le mot de passe admin — section « Utilisateurs » dans le menu.
  2. Activer WebAuthn (2FA) — « Clés WebAuthn » → enregistrer une clé/passkey (nécessite HTTPS). Enregistrez-en deux d'emblée : en cas de perte de l'unique clé, la connexion avec celle-ci sera impossible. En savoir plus.
  3. Restreindre l'accès par IP — « Paramètres » → « Restriction d'accès par IP » (saisissez votre IP avant d'activer, sinon vous vous couperez l'accès).
  4. Saisir la licence — activez le code d'activation ARCIVEO-… depuis l'espace client sur votre domaine et collez la clé dans « Paramètres » → « Licence ». En savoir plus.
  5. Configurer les notifications — Telegram et/ou Email dans « Paramètres ». En savoir plus.
  6. Supprimer l'installateur public/start_db.php s'il subsiste : il permet de recréer la base sans authentification. Tant que le fichier reste à la racine du panneau ou dans public/, le panneau affiche un bandeau rouge d'avertissement.
Terminé. Les outils de sécurité fonctionnent déjà — le tableau de bord affiche aussitôt leur statut et le Score de sécurité. La référence de chaque outil se trouve dans la FAQ.
Arcivéo - Security Monitor © 2026