feat(system): add version.json and nexus-update OTA update script
This commit is contained in:
1 parent
dfb5670cea
commit
2376e7eebb
2 files changed
+167
No files matched your search
Executable
+153
@@ -0,0 +1,153 @@
|
||||
#!/usr/bin/env bash
|
||||
# ==============================================================================
|
||||
# NexusPBX - Script de Mise à Jour Automatique (OTA)
|
||||
# ==============================================================================
|
||||
|
||||
set -e
|
||||
|
||||
# Couleurs pour le terminal
|
||||
C_RESET="\033[0m"
|
||||
C_GREEN="\033[1;32m"
|
||||
C_CYAN="\033[1;36m"
|
||||
C_YELLOW="\033[1;33m"
|
||||
C_RED="\033[1;31m"
|
||||
C_BOLD="\033[1m"
|
||||
C_GRAY="\033[0;90m"
|
||||
|
||||
APP_DIR="/var/www/nexus-pbx"
|
||||
GIT_REMOTE="origin"
|
||||
GIT_BRANCH="main"
|
||||
|
||||
# Vérification des privilèges
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
echo -e "${C_RED}[ERREUR] Ce script doit être exécuté en root (ou via sudo).${C_RESET}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MODE="update"
|
||||
for arg in "$@"; do
|
||||
case "$arg" in
|
||||
--check|-c)
|
||||
MODE="check"
|
||||
;;
|
||||
--force|-f)
|
||||
MODE="force"
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
cd "$APP_DIR" || exit 1
|
||||
git config --global --add safe.directory "$APP_DIR" 2>/dev/null || true
|
||||
|
||||
# Lecture de la version locale
|
||||
CURRENT_VER="Inconnue"
|
||||
if [ -f "$APP_DIR/version.json" ]; then
|
||||
CURRENT_VER=$(grep -o '"version"[^:]*:[^"]*"[^"]*"' "$APP_DIR/version.json" | cut -d'"' -f4)
|
||||
fi
|
||||
|
||||
echo -e "${C_CYAN}${C_BOLD}==========================================================${C_RESET}"
|
||||
echo -e "${C_CYAN}${C_BOLD} NexusPBX - Gestionnaire de Mises à Jour ${C_RESET}"
|
||||
echo -e "${C_CYAN}${C_BOLD}==========================================================${C_RESET}"
|
||||
echo -e "Version actuellement installée : ${C_BOLD}v${CURRENT_VER}${C_RESET}"
|
||||
|
||||
# Récupération des informations distantes
|
||||
echo -e "${C_GRAY}-> Recherche de nouvelles versions sur le dépôt officiel...${C_RESET}"
|
||||
git fetch "$GIT_REMOTE" "$GIT_BRANCH" --quiet 2>/dev/null || {
|
||||
echo -e "${C_RED}[AVERTISSEMENT] Impossible de contacter le serveur distant Git.${C_RESET}"
|
||||
}
|
||||
|
||||
# Extraction de la version distante depuis le commit distant
|
||||
REMOTE_VER=$(git show "${GIT_REMOTE}/${GIT_BRANCH}:version.json" 2>/dev/null | grep -o '"version"[^:]*:[^"]*"[^"]*"' | cut -d'"' -f4 || echo "$CURRENT_VER")
|
||||
LOCAL_HASH=$(git rev-parse HEAD 2>/dev/null || echo "local")
|
||||
REMOTE_HASH=$(git rev-parse "${GIT_REMOTE}/${GIT_BRANCH}" 2>/dev/null || echo "remote")
|
||||
|
||||
if [ "$MODE" = "check" ]; then
|
||||
if [ "$LOCAL_HASH" != "$REMOTE_HASH" ] || [ "$CURRENT_VER" != "$REMOTE_VER" ]; then
|
||||
echo -e "${C_GREEN}${C_BOLD}[NOUVEAUTÉ] Une mise à jour est disponible !${C_RESET}"
|
||||
echo -e "Version disponible : ${C_GREEN}${C_BOLD}v${REMOTE_VER}${C_RESET} (actuelle: v${CURRENT_VER})"
|
||||
exit 0
|
||||
else
|
||||
echo -e "${C_GREEN}[OK] Votre système NexusPBX est à jour (v${CURRENT_VER}).${C_RESET}"
|
||||
exit 0
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$LOCAL_HASH" = "$REMOTE_HASH" ] && [ "$CURRENT_VER" = "$REMOTE_VER" ] && [ "$MODE" != "force" ]; then
|
||||
echo -e "${C_GREEN}[OK] Vous disposez déjà de la dernière version (v${CURRENT_VER}).${C_RESET}"
|
||||
echo -e "${C_GRAY}(Utilisez 'nexus-update --force' pour forcer une réinstallation complète des fichiers.)${C_RESET}"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo -e "\n${C_YELLOW}-> Mise à jour vers la version v${REMOTE_VER}...${C_RESET}"
|
||||
|
||||
# 1. Sauvegarde préventive automatique
|
||||
echo -e "${C_GRAY}[1/6] Création d'une sauvegarde préventive du système...${C_RESET}"
|
||||
mkdir -p "$APP_DIR/storage/backups"
|
||||
BACKUP_DATE=$(date +%Y%m%d_%H%M%S)
|
||||
BACKUP_FILE="$APP_DIR/storage/backups/pre-update-${BACKUP_DATE}.tar.gz"
|
||||
tar -czf "$BACKUP_FILE" \
|
||||
-C "$APP_DIR/storage" database.sqlite \
|
||||
-C /etc/asterisk pjsip.custom.conf extensions.custom.conf 2>/dev/null || true
|
||||
echo -e "${C_GREEN} ✓ Sauvegarde de sécurité créée : $(basename "$BACKUP_FILE")${C_RESET}"
|
||||
|
||||
# 2. Application des derniers fichiers de code Git
|
||||
echo -e "${C_GRAY}[2/6] Déploiement des nouveaux fichiers de code...${C_RESET}"
|
||||
git reset --hard "${GIT_REMOTE}/${GIT_BRANCH}"
|
||||
chown -R www-data:asterisk "$APP_DIR"
|
||||
chmod 2775 "$APP_DIR/storage" "$APP_DIR/storage/backups" "$APP_DIR/storage/sounds" 2>/dev/null || true
|
||||
|
||||
# 3. Vérification des dépendances Debian
|
||||
echo -e "${C_GRAY}[3/6] Vérification des composants et outils système...${C_RESET}"
|
||||
which ffmpeg >/dev/null 2>&1 && which rsync >/dev/null 2>&1 && which sox >/dev/null 2>&1 || {
|
||||
echo -e " -> Installation de paquets complémentaires..."
|
||||
apt-get update -y -qq && apt-get install -y -qq --no-install-recommends acl ffmpeg rsync sox
|
||||
}
|
||||
|
||||
# 4. Exécution des migrations SQLite et régénération Dialplan
|
||||
echo -e "${C_GRAY}[4/6] Exécution des migrations de base de données & régénération dialplan...${C_RESET}"
|
||||
php -r '
|
||||
require_once "/var/www/nexus-pbx/src/Database.php";
|
||||
require_once "/var/www/nexus-pbx/src/ConfigGenerator.php";
|
||||
$db = App\Database::getConnection(true);
|
||||
$gen = new App\ConfigGenerator($db);
|
||||
$gen->writeAllConfigs();
|
||||
'
|
||||
|
||||
# 5. Fix permissions & ACLs
|
||||
echo -e "${C_GRAY}[5/6] Application des permissions et ACLs système...${C_RESET}"
|
||||
setfacl -R -m u:www-data:rwx,g:asterisk:rwx /etc/asterisk /var/lib/asterisk/sounds /var/lib/asterisk/moh 2>/dev/null || true
|
||||
setfacl -R -d -m u:www-data:rwx,g:asterisk:rwx /etc/asterisk /var/lib/asterisk/sounds /var/lib/asterisk/moh 2>/dev/null || true
|
||||
chmod 0664 /etc/asterisk/*.conf /etc/asterisk/*.custom.conf 2>/dev/null || true
|
||||
|
||||
# 6. Rechargement des services
|
||||
echo -e "${C_GRAY}[6/6] Rechargement à chaud d'Asterisk et des services web...${C_RESET}"
|
||||
asterisk -rx "core reload" >/dev/null 2>&1 || true
|
||||
asterisk -rx "pjsip reload" >/dev/null 2>&1 || true
|
||||
asterisk -rx "dialplan reload" >/dev/null 2>&1 || true
|
||||
systemctl reload php*-fpm 2>/dev/null || true
|
||||
systemctl reload nginx 2>/dev/null || true
|
||||
|
||||
NEW_VER="Inconnue"
|
||||
if [ -f "$APP_DIR/version.json" ]; then
|
||||
NEW_VER=$(grep -o '"version"[^:]*:[^"]*"[^"]*"' "$APP_DIR/version.json" | cut -d'"' -f4)
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo -e "${C_GREEN}${C_BOLD}==========================================================${C_RESET}"
|
||||
echo -e "${C_GREEN}${C_BOLD} [SUCCÈS] NexusPBX a été mis à jour avec succès en v${NEW_VER} !${C_RESET}"
|
||||
echo -e "${C_GREEN}${C_BOLD}==========================================================${C_RESET}"
|
||||
echo ""
|
||||
|
||||
# Affichage du changelog de la nouvelle version
|
||||
if [ -f "$APP_DIR/version.json" ]; then
|
||||
echo -e "${C_CYAN}${C_BOLD}Nouveautés de cette version :${C_RESET}"
|
||||
php -r '
|
||||
$v = json_decode(file_get_contents("/var/www/nexus-pbx/version.json"), true);
|
||||
if (!empty($v["changelog"])) {
|
||||
foreach ($v["changelog"] as $line) {
|
||||
echo " • " . $line . "\n";
|
||||
}
|
||||
}
|
||||
'
|
||||
fi
|
||||
echo ""
|
||||
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"version": "1.3.0",
|
||||
"codename": "Helios",
|
||||
"release_date": "2026-11-04",
|
||||
"min_php_version": "8.2",
|
||||
"changelog": [
|
||||
"Gestion avancée des passerelles analogiques / FXO (Grandstream HT813, Cisco SPA, ATA)",
|
||||
"Message vocal d'indisponibilité / congestion configurable sur les routes sortantes",
|
||||
"Système de mise à jour automatique en 1-clic et commande CLI nexus-update",
|
||||
"Compatibilité étendue téléphones IP (Yealink, Fanvil, Grandstream, Snom, Cisco)",
|
||||
"Préfixe de ligne CID entrant pour identifier la provenance des appels",
|
||||
"Génération automatique des tonalités et dial options Asterisk optimisées"
|
||||
]
|
||||
}
|
||||
Reference in new issue
Block a user