Skip to content

Instantly share code, notes, and snippets.

@benoitpetit
Last active March 8, 2026 13:33
Show Gist options
  • Select an option

  • Save benoitpetit/009a7fc596957fa254050a500642f5ef to your computer and use it in GitHub Desktop.

Select an option

Save benoitpetit/009a7fc596957fa254050a500642f5ef to your computer and use it in GitHub Desktop.
Déploiement Automatisé d'un Node Pi Network (Ubuntu Server)
NODE_SEED=SBUX3...[ta_vraie_cle_secrete_de_56_caracteres_ici]...
POSTGRES_PWD=MonMotDePasseSuperSecurise123!

Cet ensemble de scripts permet d'installer, de configurer et de surveiller facilement un nœud Pi Network sur un serveur Linux (Ubuntu/Debian). Il s'appuie sur le paquet officiel Linux en ligne de commande (pi-node) sorti par la Core Team, garantissant ainsi des mises à jour fluides et une gestion native des conteneurs Docker sans avoir à bricoler de fichiers docker-compose.yml complexes.

#!/bin/bash
set -e
echo "======================================================="
echo " 🚀 Installation & Gestion du Node Pi (Linux CLI) 🚀 "
echo "======================================================="
echo ""
# 0. On demande les droits sudo dès le départ pour éviter tout blocage !
echo "🔐 Vérification des droits administrateur (sudo)..."
sudo -v
echo ""
# 1. Gestion du fichier .env
ENV_FILE="$(dirname "$0")/.env"
if [ ! -f "$ENV_FILE" ]; then
echo "📄 Le fichier .env est introuvable. Création de celui-ci..."
read -s -p "🔑 Entrez votre Node Private Key (Seed) commençant par 'S' : " NODE_SEED
echo ""
read -s -p "🔒 Créez un mot de passe pour la base de données PostgreSQL : " POSTGRES_PWD
echo ""
# Enregistrement et sécurisation du fichier
echo "NODE_SEED=$NODE_SEED" > "$ENV_FILE"
echo "POSTGRES_PWD=$POSTGRES_PWD" >> "$ENV_FILE"
chmod 600 "$ENV_FILE"
echo "✅ Fichier .env créé et sécurisé (droits restreints)."
else
echo "📄 Fichier .env détecté. Chargement des variables..."
export $(grep -v '^#' "$ENV_FILE" | xargs)
fi
if [ -z "$NODE_SEED" ] || [ -z "$POSTGRES_PWD" ]; then
echo "❌ Erreur : Les variables NODE_SEED ou POSTGRES_PWD sont vides dans le .env."
exit 1
fi
# 2. Configuration du pare-feu (UFW)
echo "🛡️ Configuration du pare-feu (UFW)..."
# On laisse l'affichage pour voir si apt-get est bloqué par autre chose
sudo apt-get update
sudo apt-get install -y ufw
sudo ufw allow ssh
sudo ufw allow 31400:31409/tcp
echo "y" | sudo ufw enable
echo "✅ Ports 31400-31409 ouverts et UFW activé."
echo ""
# 3. Installation des dépendances et de Docker
echo "🐳 Vérification de Docker..."
sudo apt-get install -y ca-certificates curl gnupg lsb-release
if ! command -v docker &> /dev/null; then
echo "⚙️ Installation de Docker en cours..."
curl -fsSL https://get.docker.com | sudo sh
sudo usermod -aG docker $USER
echo "✅ Docker installé avec succès."
else
echo "✅ Docker est déjà installé."
fi
echo ""
# =========================================================
# 🛑 VÉRIFICATION SI LE NŒUD EST DÉJÀ LANCÉ 🛑
# =========================================================
echo "🔍 Vérification de l'état actuel du nœud Pi..."
if sudo docker ps -a --format '{{.Names}}' | grep -Eq "^mainnet$"; then
echo "⚠️ ATTENTION : Un nœud Pi (conteneur 'mainnet') est DÉJÀ installé sur ce serveur."
read -p "❓ Voulez-vous le RÉINITIALISER et le relancer ? (o/N) : " RELANCER
if [[ "$RELANCER" =~ ^[oOyY]$ ]]; then
echo "🔄 Arrêt et nettoyage de l'ancien conteneur..."
sudo docker stop mainnet 2>/dev/null || true
sudo docker rm mainnet 2>/dev/null || true
echo "✅ Ancien nœud supprimé. Préparation de la réinstallation..."
else
echo "🛑 Opération annulée par l'utilisateur."
echo "👉 Le nœud actuel continue de tourner normalement."
exit 0
fi
else
echo "✅ Aucun nœud existant détecté, on procède à l'installation."
fi
echo ""
# =========================================================
# 4. Ajout du dépôt APT officiel de Pi Network
echo "📦 Configuration du dépôt officiel Pi Network..."
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://apt.minepi.com/repository.gpg.key | sudo gpg --dearmor --yes -o /etc/apt/keyrings/pinetwork-archive-keyring.gpg
sudo chmod a+r /etc/apt/keyrings/pinetwork-archive-keyring.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/pinetwork-archive-keyring.gpg] https://apt.minepi.com/ stable main" | sudo tee /etc/apt/sources.list.d/minepi.list > /dev/null
# 5. Installation de l'outil pi-node
echo "⚙️ Installation/Mise à jour du paquet pi-node..."
sudo apt-get update
sudo apt-get install -y pi-node
# 6. Configuration des dossiers
PI_FOLDER="$HOME/pi-node"
DOCKER_VOLUMES="$PI_FOLDER/docker_volumes/mainnet"
mkdir -p "$DOCKER_VOLUMES"
# 7. Initialisation du nœud
echo "🚀 Initialisation et lancement du nœud Pi..."
pi-node initialize \
--pi-folder "$PI_FOLDER" \
--docker-volumes "$DOCKER_VOLUMES" \
--node-private-key "$NODE_SEED" \
--postgres-password "$POSTGRES_PWD" \
--start-node
echo ""
echo "======================================================="
echo " 🎉 INSTALLATION TERMINÉE AVEC SUCCÈS ! 🎉 "
echo "======================================================="
#!/bin/bash
echo "======================================================="
echo " 🔍 DIAGNOSTIC COMPLET DU NODE PI 🔍 "
echo "======================================================="
echo ""
# 1. Vérification des conteneurs Docker
echo "🐳 1. ÉTAT DES CONTENEURS DOCKER :"
echo "-------------------------------------------------------"
if command -v docker &> /dev/null; then
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep -E "pi-|NAMES"
echo ""
CONTAINER_COUNT=$(docker ps -q | wc -l)
if [ "$CONTAINER_COUNT" -gt 0 ]; then
echo "✅ Les conteneurs tournent correctement."
else
echo "❌ ATTENTION : Aucun conteneur Docker n'est en cours d'exécution !"
fi
else
echo "❌ Docker n'est pas installé ou inaccessible."
fi
echo ""
# 2. Vérification de l'outil Pi-Node et de la synchronisation
echo "🔗 2. ÉTAT DE LA SYNCHRONISATION (BLOCKCHAIN) :"
echo "-------------------------------------------------------"
if command -v pi-node &> /dev/null; then
# Capture la sortie du status
pi-node protocol-status
else
echo "❌ L'outil pi-node n'est pas installé ou introuvable."
fi
echo ""
# 3. Vérification du pare-feu (UFW)
echo "🛡️ 3. ÉTAT DU PARE-FEU LOCAL (UFW) :"
echo "-------------------------------------------------------"
sudo ufw status | grep -E "3140|Status|État"
echo ""
# 4. Vérification de l'écoute des ports (Système)
echo "📡 4. ÉCOUTE DES PORTS RÉSEAU :"
echo "-------------------------------------------------------"
echo "Vérification si le serveur écoute bien sur les ports 31400-31409..."
if ss -tuln | grep -q "3140"; then
ss -tuln | grep "3140"
echo "✅ Les ports sont bien ouverts et en écoute sur le serveur."
else
echo "⏳ Les ports ne sont pas encore en écoute (le conteneur démarre peut-être)."
fi
echo ""
# 5. Derniers logs du consensus
echo "📜 5. DERNIERS LOGS DU CONSENSUS (10 dernières lignes) :"
echo "-------------------------------------------------------"
# On cherche le conteneur qui s'appelle pi-consensus (ou similaire)
CONSENSUS_CONTAINER=$(docker ps --format "{{.Names}}" | grep -i "consensus" | head -n 1)
if [ -n "$CONSENSUS_CONTAINER" ]; then
docker logs --tail 10 "$CONSENSUS_CONTAINER"
else
echo "⏳ Le conteneur de consensus n'est pas encore trouvé ou nommé différemment."
fi
echo ""
echo "======================================================="
echo " 🏁 FIN DU DIAGNOSTIC 🏁 "
echo "======================================================="
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment