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
142 lines
7.2 KiB
Bash
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 ""
|