Files
netadmin/deploy/install.sh
T
kguerineau 63eb9a6af0 feat: historisation DNS avec snapshots, diff et rollback
Snapshots
- Snapshot automatique avant chaque modification de zone (apply_zone + save_zone_raw)
- Stockage dans zones_dir/history/ avec timestamp, purge auto à 20 entrées par zone
- named-checkzone exécuté sur fichier temporaire avant remplacement du fichier réel
- Rollback automatique du snapshot précédent si named-checkzone échoue
- Détection des warnings critiques (MX→IP, CNAME apex) même si returncode=0

Nouvelles routes backend
- GET  /dns/zones/{zone}/snapshots            — liste des snapshots
- GET  /dns/zones/{zone}/snapshots/{name}     — contenu d'un snapshot
- POST /dns/zones/{zone}/rollback?snapshot=   — restauration + named-checkzone + rndc reload

Nouveaux handlers agent
- list_snapshots, get_snapshot, rollback_zone

Interface DNSManager
- Bouton ⏱ Historique dans la toolbar de zone
- Modale avec liste des snapshots (date formatée)
- Diff inline ▼/▲ par snapshot : lignes ajoutées (vert) / supprimées (rouge)
- Bouton ↩ Restaurer avec confirmation
- Erreur named-checkzone affichée dans la modale Raw au lieu de l'interface principale
- Validation MX/NS/CNAME/PTR : bloque les valeurs pointant vers une IP

Déploiement
- install.sh (serveur principal) et install-agent.sh [dns|mail] (serveurs distants)
- Config Nginx avec restriction IP, SSL, reverse proxy /api/
- VITE_API_BASE via .env.development / .env.production
- Services systemd pour backend et agents
2026-05-01 22:58:13 +02:00

142 lines
7.2 KiB
Bash

#!/bin/bash
# ═══════════════════════════════════════════════════════════════════════════
# NetAdmin — Script d'installation SERVEUR PRINCIPAL (front + backend)
# Usage : sudo bash install.sh
# ═══════════════════════════════════════════════════════════════════════════
set -e
NETADMIN_DIR="/opt/netadmin"
NETADMIN_USER="netadmin"
LOG_DIR="/var/log/netadmin"
CONFIG_DIR="/etc/netadmin"
FRONTEND_DIR="/var/www/netadmin"
echo "══════════════════════════════════════════"
echo " NetAdmin — Installation serveur principal"
echo "══════════════════════════════════════════"
if [ "$EUID" -ne 0 ]; then
echo "✗ Ce script doit être exécuté en root (sudo)"
exit 1
fi
# ── Utilisateur système ────────────────────────────────────────────────────
echo "→ Création de l'utilisateur netadmin..."
id -u $NETADMIN_USER &>/dev/null || useradd -r -s /bin/false -d $NETADMIN_DIR $NETADMIN_USER
echo " ✓"
# ── Répertoires ────────────────────────────────────────────────────────────
echo "→ Création des répertoires..."
mkdir -p $NETADMIN_DIR/{backend,agents,venv}
mkdir -p $LOG_DIR
mkdir -p $CONFIG_DIR/certs
mkdir -p $FRONTEND_DIR
chown -R $NETADMIN_USER:$NETADMIN_USER $NETADMIN_DIR $LOG_DIR
chmod 750 $CONFIG_DIR
echo " ✓"
# ── Dépendances système ────────────────────────────────────────────────────
echo "→ Installation des dépendances..."
apt-get update -qq
apt-get install -y -qq python3 python3-venv python3-pip nodejs npm nginx
echo " ✓"
# ── Environnement Python ───────────────────────────────────────────────────
echo "→ Virtualenv Python..."
python3 -m venv $NETADMIN_DIR/venv
$NETADMIN_DIR/venv/bin/pip install --quiet --upgrade pip
$NETADMIN_DIR/venv/bin/pip install --quiet -r $NETADMIN_DIR/backend/requirements.txt
echo " ✓"
# ── Frontend build ─────────────────────────────────────────────────────────
echo "→ Build du frontend..."
cd $NETADMIN_DIR/frontend
npm install --silent
npm run build --silent # utilise .env.production → VITE_API_BASE=/api
cp -r dist/* $FRONTEND_DIR/
chown -R www-data:www-data $FRONTEND_DIR
echo " ✓"
# ── Configuration ──────────────────────────────────────────────────────────
if [ ! -f $CONFIG_DIR/config.yaml ]; then
echo "→ Copie config.yaml..."
cp $NETADMIN_DIR/backend/config.yaml $CONFIG_DIR/config.yaml
chmod 640 $CONFIG_DIR/config.yaml
chown root:$NETADMIN_USER $CONFIG_DIR/config.yaml
echo " ✓ Éditer $CONFIG_DIR/config.yaml avant de démarrer"
else
echo "→ Configuration existante conservée."
fi
# ── Certificats mTLS Redis ─────────────────────────────────────────────────
if [ ! -f $CONFIG_DIR/certs/ca.crt ]; then
echo "→ Génération des certificats mTLS Redis..."
cd $CONFIG_DIR/certs
bash $NETADMIN_DIR/agents/gen_certs.sh
chmod 640 *.key
chown root:$NETADMIN_USER *.crt *.key
echo " ✓ Certificats dans $CONFIG_DIR/certs/"
echo " ⚠ Copier ca.crt + les certificats agents sur les serveurs DNS/Mail"
else
echo "→ Certificats mTLS existants conservés."
fi
# ── Nginx ──────────────────────────────────────────────────────────────────
echo "→ Configuration Nginx..."
cp $NETADMIN_DIR/deploy/nginx-netadmin.conf /etc/nginx/sites-available/netadmin
[ ! -L /etc/nginx/sites-enabled/netadmin ] && \
ln -s /etc/nginx/sites-available/netadmin /etc/nginx/sites-enabled/netadmin
nginx -t && systemctl reload nginx
echo " ✓ Adapter /etc/nginx/sites-available/netadmin (FQDN, IPs autorisées)"
# ── Service systemd backend ────────────────────────────────────────────────
echo "→ Service systemd backend..."
cp $NETADMIN_DIR/deploy/netadmin-backend.service /etc/systemd/system/
cp $NETADMIN_DIR/deploy/log_config.yaml $NETADMIN_DIR/backend/
systemctl daemon-reload
systemctl enable netadmin-backend
echo " ✓"
# ── Logrotate ──────────────────────────────────────────────────────────────
cat > /etc/logrotate.d/netadmin << 'LOGROTATE'
/var/log/netadmin/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 0640 netadmin netadmin
postrotate
systemctl kill -s HUP netadmin-backend 2>/dev/null || true
endscript
}
LOGROTATE
echo "→ Logrotate ✓"
# ── Résumé ─────────────────────────────────────────────────────────────────
echo ""
echo "══════════════════════════════════════════"
echo " Installation terminée !"
echo "══════════════════════════════════════════"
echo ""
echo " Étapes suivantes :"
echo " 1. Éditer $CONFIG_DIR/config.yaml"
echo " - MariaDB, Redis, session_secret, NS, SOA admin"
echo " 2. Adapter Nginx :"
echo " nano /etc/nginx/sites-available/netadmin"
echo " → FQDN, IP autorisées"
echo " 3. Certificat SSL :"
echo " certbot --nginx -d netadmin.example.fr"
echo " 4. Démarrer le backend :"
echo " systemctl start netadmin-backend"
echo " 5. Distribuer les agents sur les serveurs distants :"
echo " scp -r agents/ deploy/ root@serveur-dns:/opt/netadmin-agent/"
echo " scp -r agents/ deploy/ root@serveur-mail:/opt/netadmin-agent/"
echo " scp $CONFIG_DIR/certs/ca.crt root@serveur-dns:/etc/netadmin/certs/"
echo " scp $CONFIG_DIR/certs/ca.crt root@serveur-mail:/etc/netadmin/certs/"
echo " # Puis sur chaque serveur distant :"
echo " sudo bash /opt/netadmin-agent/deploy/install-agent.sh dns"
echo " sudo bash /opt/netadmin-agent/deploy/install-agent.sh mail"
echo ""