12 KiB
Installation sur une VM de test (Proxmox, sans nom de domaine)
Ce guide déploie l'espace d'administration NetMonster sur une VM Ubuntu 24.04 LTS + Nginx, hébergée sur votre hyperviseur Proxmox, accessible directement via l'IP de la VM sur votre réseau (LAN ou Tailscale), sans domaine ni certificat HTTPS.
Note de coherence : votre serveur de production tourne sur Ubuntu 24.04 + Apache2 (voir
INSTALL.md), tandis que cette VM de test utilise Ubuntu 24.04 + Nginx. C'est intentionnel et sans consequence : le code PHP de NetMonster Admin est identique et fonctionne a l'identique sur les deux stacks web, seule la configuration du serveur (virtualhost Apache vs bloc server Nginx) differe. Gardez seulement a l'esprit que cette VM ne reproduit pas exactement le routage par sous-domaine prevu en production (ici vous accedez via l'IP de la VM, en prod ce seranetmonster.votre-domaine.tld) : testez la logique fonctionnelle ici, et validez le sous-domaine + HTTPS uniquement sur la prod ou un environnement de pre-prod dedie si vous en avez un.
Pour le déploiement définitif, référez-vous a INSTALL.md.
1. Prérequis de la VM Proxmox
- Une VM Ubuntu 24.04 LTS fraîchement installee (serveur minimal suffit, pas besoin d'environnement graphique).
- Réseau en mode bridge (vmbr0) pour un acces direct depuis votre LAN, ou rattachee a votre tailnet Tailscale si vous préférez ne pas l'exposer sur le LAN.
- Au moins 1 vCPU, 1 Go de RAM et 10 Go de disque (ressources minimales, ajustez selon la charge de test prevue).
- Si vous utilisez cloud-init pour le provisioning Proxmox, veillez a activer l'agent QEMU (
qemu-guest-agent) pour recuperer facilement l'IP depuis l'interface Proxmox.
Récupérez l'adresse IP de la VM (affichee dans l'onglet Summary de Proxmox si l'agent QEMU est actif, ou directement depuis la VM) :
ip a
2. Mise à jour et installation des paquets
sudo apt update && sudo apt upgrade -y
sudo apt install -y nginx php-fpm php-mysql php-mbstring php-xml php-curl mariadb-server mariadb-client curl unzip
sudo systemctl enable --now nginx php8.3-fpm mariadb
Ubuntu 24.04 fournit nativement PHP 8.3 et MariaDB 10.11, comme en production — c'est un des avantages de tester sur la meme distribution que la prod plutot que sur une distribution differente.
php-curl est installe des maintenant pour permettre de tester le CAPTCHA Cloudflare Turnstile si besoin (voir etape 8bis) ; il n'est pas obligatoire si vous ne testez pas cette fonctionnalite.
Verifiez la version du socket PHP-FPM installee (utile pour l'etape 6) :
ls /run/php/
Vous devriez voir php8.3-fpm.sock (adaptez le nom dans la config Nginx si votre version differe).
3. Sécurisation minimale de MariaDB
sudo mysql_secure_installation
4. Création de la base de données : un seul fichier a executer
sudo mysql -u root -p
CREATE DATABASE netmonster CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'netmonster_user'@'localhost' IDENTIFIED BY 'test_password';
GRANT ALL PRIVILEGES ON netmonster.* TO 'netmonster_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Importez le schema complet en une seule commande :
mysql -u netmonster_user -ptest_password netmonster < /tmp/netmonster_admin/admin/sql/install_full_schema.sql
Ce fichier unique cree toutes les tables (deja avec les colonnes de parametres radio bande/frequence/azimut/largeur, la contrainte d'unicite corrigee sur cells, la table login_attempts pour le rate limiting du login, et l'ENUM source de staging_cells incluant cellmapper_import), et pré-remplit le Luxembourg + ses 4 operateurs. Il est idempotent : l'executer une seconde fois par erreur ne casse rien.
5. Déploiement rapide des fichiers
Transferez d'abord le depot sur la VM (via scp, un partage Proxmox, ou un git clone direct sur la VM), puis :
sudo mkdir -p /var/www/netmonster
sudo cp -r /tmp/netmonster_admin/* /var/www/netmonster/
sudo mkdir -p /var/www/netmonster/uploads
sudo mkdir -p /var/www/netmonster/config
sudo chown -R www-data:www-data /var/www/netmonster
sudo chmod -R 755 /var/www/netmonster
sudo chmod 750 /var/www/netmonster/uploads
sudo chmod 750 /var/www/netmonster/config
Vérifiez que l'arborescence deployee correspond a celle-ci (voir aussi README.md) :
/var/www/netmonster/
├── lib/ (db.php, csrf.php, ntm_import_to_staging.php)
├── config/ (turnstile.php — optionnel, voir etape 8bis)
├── admin/ (admin_auth.php, login.php, index.php, review.php, import_ntm.php,
│ manual_add.php, edit_site.php, countries_settings.php, export.php,
│ cellmapper_import.php, duplicates.php, import_history.php,
│ audit_log.php, backup.php, operator_sites.php, map_layers.php,
│ statistics.php, data_quality.php, search_site.php, _nav.php,
│ assets/theme.css, assets/navigation.css)
└── uploads/
6. Configuration Nginx sans domaine
sudo tee /etc/nginx/sites-available/netmonster-test <<'EOF'
server {
listen 80 default_server;
server_name _;
root /var/www/netmonster;
index index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
location ~* ^/admin/.*\.(sql|md)$ {
deny all;
}
location ^~ /config/ {
deny all;
}
location ^~ /uploads/ {
location ~ \.php$ {
deny all;
return 403;
}
}
# Interdire l'accès à tout dossier ou fichier .git
location ~ /\.git {
deny all;
return 404;
}
}
EOF
sudo rm -f /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/netmonster-test /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
Adaptez php8.3-fpm.sock si l'etape 2 a installe une autre version de PHP-FPM. Le bloc location ^~ /config/ { deny all; } interdit tout acces HTTP direct au dossier destine a turnstile.php, meme en test.
7. Configuration de la connexion à la base
Éditez /var/www/netmonster/lib/db.php avec test_password (voir etape 4).
8. Création d'un compte admin de test
php -r "echo password_hash('test1234', PASSWORD_DEFAULT), PHP_EOL;"
INSERT INTO admin_users (username, password_hash, role) VALUES ('admin', '<hash>', 'admin');
8bis. Test du CAPTCHA Cloudflare Turnstile (optionnel)
Le rate limiting de connexion (table login_attempts) est actif par defaut des que le schema SQL est importe. Le CAPTCHA Turnstile, lui, reste desactive tant que config/turnstile.php n'existe pas — vous pouvez ignorer cette section pour un test rapide.
Pour le tester malgre l'absence de nom de domaine public :
- Sur dash.cloudflare.com (compte gratuit), menu Turnstile > Add site. Si la VM est accessible uniquement via Tailscale ou votre LAN, ajoutez le nom d'hote local ou l'IP en mode test (Cloudflare accepte des domaines/hotes de test comme
localhost) — sinon utilisez temporairement le hostname Tailscale de la VM si vous avez active Tailscale Funnel dessus. - Copiez le modele et renseignez vos cles :
sudo cp /var/www/netmonster/config/turnstile.example.php /var/www/netmonster/config/turnstile.php sudo nano /var/www/netmonster/config/turnstile.php - Passez
TURNSTILE_ENABLEDatrue, renseignez les deux cles. - Protegez le fichier :
sudo chmod 640 /var/www/netmonster/config/turnstile.php sudo chown www-data:www-data /var/www/netmonster/config/turnstile.php - Rechargez
/admin/login.php: le widget CAPTCHA doit apparaitre sous le formulaire.
Pour desactiver a nouveau : repassez TURNSTILE_ENABLED a false, ou supprimez config/turnstile.php.
9. Accès depuis votre machine
Recuperez l'IP de la VM (onglet Summary dans Proxmox, ou ip a dans la VM), puis ouvrez directement :
http://IP_DE_LA_VM/admin/login.php
Si la VM est rattachee a votre tailnet (recommande, coherent avec votre usage habituel de Tailscale pour Proxmox), utilisez plutot l'IP ou le nom Tailscale de la VM, accessible depuis n'importe lequel de vos appareils sans configuration reseau supplementaire :
http://IP_TAILSCALE_DE_LA_VM/admin/login.php
Connectez-vous avec admin / test1234.
Sur une session HTTP simple,
admin/admin_auth.phpdesactive automatiquement le flagsecuredes cookies de session (detecte l'absence de HTTPS) : la connexion fonctionne normalement sans configuration supplementaire. Ce flag s'activera seul une fois la prod en HTTPS (voirINSTALL.md, etape Certbot).
Si vous avez teste plusieurs mots de passe incorrects par erreur, la connexion peut se retrouver temporairement bloquee (5 echecs sur le meme compte+IP, ou 30 echecs sur l'IP en 15 minutes). Videz la table de test si besoin :
DELETE FROM login_attempts;
10. Génération de données de démonstration
Pour visualiser rapidement le regroupement par site dans /admin/review.php, insérez quelques lignes factices en staging :
INSERT INTO staging_cells (tech, mcc, mnc, operator_guess, cell_id, area_code, sub_id, sub_id2, band, frequency, azimuth, bandwidth, lat, lon, location_desc, address_desc, arfcn, source, status)
VALUES
('4G', '270', '01', (SELECT id FROM operators WHERE mcc='270' AND mnc='01'), 43, 3006, 23, 4620, 'B7', '700MHz', 280, '10MHz', 49.492048, 6.116873, 'eNB ID 4620 - LTE B7 700Mhz - 280° - 10Mhz - E25 Echangeur Burange/Hellange, Dudelange', 'E25 Echangeur Burange/Hellange, Dudelange', 6200, 'ntm_import', 'pending'),
('4G', '270', '01', (SELECT id FROM operators WHERE mcc='270' AND mnc='01'), 44, 3006, 45, 4620, 'B7', '700MHz', 40, '10MHz', 49.492048, 6.116873, 'eNB ID 4620 - LTE B7 700Mhz - 40° - 10Mhz - E25 Echangeur Burange/Hellange, Dudelange', 'E25 Echangeur Burange/Hellange, Dudelange', 6200, 'ntm_import', 'pending'),
('3G', '270', '77', (SELECT id FROM operators WHERE mcc='270' AND mnc='77'), 987654, 3002, 45, 210, NULL, NULL, NULL, NULL, 49.6100, 6.1350, 'Antenne test peripherie', 'Antenne test peripherie', 10700, 'ntm_import', 'pending');
Rechargez /admin/review.php : les deux premieres lignes (meme eNB 4620) doivent se regrouper dans le meme site, la troisieme rester isolee. Validez le premier groupe pour tester ensuite /admin/edit_site.php (le site valide doit y apparaitre) et /admin/export.php.
11. Test de l'upload manuel de fichier .ntm
Créez un petit fichier de test sur votre machine :
4G;270;99;12;3010;5001;18;49.610000;6.130000;eNB ID 5001 - LTE B20 800Mhz - 90° - 10Mhz - Test upload manuel;6300
Enregistrez-le en test.ntm, puis deposez-le via /admin/import_ntm.php en selectionnant le Luxembourg comme pays. Verifiez que l'apercu de regroupement s'affiche et que la ligne apparait ensuite dans /admin/review.php.
12. Test de l'import CellMapper (optionnel)
Pour tester /admin/cellmapper_import.php, utilisez un export JSON CellMapper (voir la documentation de la page pour le format attendu : cle responseData avec RAT, siteID, regionID, cells, channels). Renseignez le MCC/MNC de l'operateur Luxembourgeois de votre choix (ex: 270 / 01 pour POST) puisqu'ils ne sont pas presents dans le JSON source.
13. Snapshot Proxmox (recommande avant tests destructifs)
Avant de tester des actions irreversibles (suppression de site, fusion de doublons, purge d'historique), prenez un snapshot de la VM depuis l'interface Proxmox (VM > Snapshots > Take Snapshot). Cela permet de revenir instantanement a un etat propre sans repasser par toute la procedure d'installation :
# Depuis le noeud Proxmox (CLI), si vous preferez la ligne de commande :
qm snapshot <VMID> avant_tests_destructifs
Pour restaurer :
qm rollback <VMID> avant_tests_destructifs
14. Nettoyage après les tests
Si vous ne conservez pas la VM pour des tests futurs (sinon, un snapshot "etat propre" suffit, voir etape 13) :
sudo mysql -u root -p -e "DROP DATABASE netmonster;"
sudo rm -rf /var/www/netmonster
Ou plus simplement, supprimez la VM depuis Proxmox si elle a ete creee uniquement pour ce test ponctuel.