387 lines
10 KiB
Bash
Executable File
387 lines
10 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Script d'installation automatique pour serveur de production
|
||
# Usage: curl -fsSL https://raw.githubusercontent.com/.../install.sh | sudo bash
|
||
# Ou: sudo bash install.sh
|
||
|
||
set -e
|
||
|
||
echo "╔══════════════════════════════════════════════════════════════════╗"
|
||
echo "║ 🎮 Installation automatique - Serveur NationsGlory Docker ║"
|
||
echo "╚══════════════════════════════════════════════════════════════════╝"
|
||
echo ""
|
||
|
||
# Configuration
|
||
INSTALL_DIR="/srv/minecraft/moddé"
|
||
BACKUP_DIR="/srv/minecraft/backups"
|
||
|
||
# Couleurs
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# Fonctions
|
||
log_info() {
|
||
echo -e "${BLUE}ℹ${NC} $1"
|
||
}
|
||
|
||
log_success() {
|
||
echo -e "${GREEN}✅${NC} $1"
|
||
}
|
||
|
||
log_warning() {
|
||
echo -e "${YELLOW}⚠️${NC} $1"
|
||
}
|
||
|
||
log_error() {
|
||
echo -e "${RED}❌${NC} $1"
|
||
}
|
||
|
||
# Vérification root
|
||
if [ "$EUID" -ne 0 ]; then
|
||
log_error "Ce script nécessite les droits root"
|
||
echo "Relancer avec: sudo $0"
|
||
exit 1
|
||
fi
|
||
|
||
echo "📋 Vérification du système..."
|
||
echo ""
|
||
|
||
# Vérifier l'OS
|
||
if [ -f /etc/os-release ]; then
|
||
. /etc/os-release
|
||
OS=$NAME
|
||
VER=$VERSION_ID
|
||
log_info "Système détecté: $OS $VER"
|
||
else
|
||
log_warning "Système non identifié, continuation..."
|
||
fi
|
||
|
||
# Installation Docker
|
||
echo ""
|
||
log_info "Vérification de Docker..."
|
||
|
||
if ! command -v docker &> /dev/null; then
|
||
log_warning "Docker n'est pas installé"
|
||
read -p "Installer Docker? [Y/n] " -n 1 -r
|
||
echo ""
|
||
if [[ ! $REPLY =~ ^[Nn]$ ]]; then
|
||
log_info "Installation de Docker..."
|
||
curl -fsSL https://get.docker.com | sh
|
||
systemctl enable docker
|
||
systemctl start docker
|
||
log_success "Docker installé"
|
||
else
|
||
log_error "Docker est requis. Installation annulée."
|
||
exit 1
|
||
fi
|
||
else
|
||
log_success "Docker déjà installé ($(docker --version))"
|
||
fi
|
||
|
||
# Installation Docker Compose
|
||
echo ""
|
||
log_info "Vérification de Docker Compose..."
|
||
|
||
if ! command -v docker-compose &> /dev/null; then
|
||
log_warning "Docker Compose n'est pas installé"
|
||
log_info "Installation de Docker Compose..."
|
||
|
||
if [ -f /etc/debian_version ]; then
|
||
apt-get update -qq
|
||
apt-get install -y -qq docker-compose
|
||
elif [ -f /etc/redhat-release ]; then
|
||
yum install -y docker-compose
|
||
else
|
||
# Installation via pip
|
||
apt-get update -qq
|
||
apt-get install -y -qq python3-pip
|
||
pip3 install docker-compose
|
||
fi
|
||
|
||
log_success "Docker Compose installé"
|
||
else
|
||
log_success "Docker Compose déjà installé ($(docker-compose --version))"
|
||
fi
|
||
|
||
# Création de la structure
|
||
echo ""
|
||
log_info "Création de la structure /srv/minecraft..."
|
||
|
||
mkdir -p /srv/minecraft/{moddé,proxy,survie,backups}
|
||
mkdir -p "$INSTALL_DIR"/{data,mods,plugins,config,libraries,backups}
|
||
|
||
log_success "Structure créée"
|
||
|
||
# Configuration du firewall (si UFW installé)
|
||
echo ""
|
||
if command -v ufw &> /dev/null; then
|
||
log_info "Configuration du firewall..."
|
||
ufw allow 25565/tcp comment "Minecraft NationsGlory" >/dev/null 2>&1 || true
|
||
log_success "Port 25565 ouvert"
|
||
else
|
||
log_warning "UFW non installé, configuration firewall manuelle requise"
|
||
fi
|
||
|
||
# Création des fichiers de configuration
|
||
echo ""
|
||
log_info "Création des fichiers de configuration..."
|
||
|
||
# .env
|
||
cat > "$INSTALL_DIR/.env" << 'EOF'
|
||
# Configuration NationsGlory
|
||
MEMORY=2G
|
||
INIT_MEMORY=1G
|
||
MINECRAFT_PORT=25565
|
||
MAX_PLAYERS=20
|
||
VIEW_DISTANCE=10
|
||
DIFFICULTY=peaceful
|
||
GAMEMODE=creative
|
||
LEVEL_TYPE=FLAT
|
||
SERVER_NAME=NationsGlory Moddé
|
||
MOTD=§6NationsGlory §8- §7Serveur Moddé 1.6.4
|
||
DEBUG=false
|
||
TZ=Europe/Paris
|
||
EOF
|
||
|
||
log_success "Fichier .env créé"
|
||
|
||
# docker-compose.yml
|
||
cat > "$INSTALL_DIR/docker-compose.yml" << 'EOF'
|
||
version: '3.8'
|
||
|
||
services:
|
||
nationsglory-modded:
|
||
image: itzg/minecraft-server:java8
|
||
container_name: mc-nationsglory
|
||
restart: unless-stopped
|
||
|
||
environment:
|
||
TYPE: "CUSTOM"
|
||
CUSTOM_SERVER: "/data/mcpc.jar"
|
||
MEMORY: "${MEMORY:-2G}"
|
||
INIT_MEMORY: "${INIT_MEMORY:-1G}"
|
||
JVM_OPTS: "-XX:+UseG1GC"
|
||
EULA: "TRUE"
|
||
ONLINE_MODE: "FALSE"
|
||
DIFFICULTY: "${DIFFICULTY:-peaceful}"
|
||
MODE: "${GAMEMODE:-creative}"
|
||
LEVEL_TYPE: "${LEVEL_TYPE:-FLAT}"
|
||
PVP: "FALSE"
|
||
SPAWN_MONSTERS: "FALSE"
|
||
SPAWN_NPCS: "TRUE"
|
||
SPAWN_ANIMALS: "TRUE"
|
||
ALLOW_FLIGHT: "TRUE"
|
||
MAX_PLAYERS: "${MAX_PLAYERS:-20}"
|
||
VIEW_DISTANCE: "${VIEW_DISTANCE:-10}"
|
||
SERVER_NAME: "${SERVER_NAME:-NationsGlory}"
|
||
MOTD: "${MOTD:-NationsGlory Serveur}"
|
||
USE_AIKAR_FLAGS: "FALSE"
|
||
DEBUG: "${DEBUG:-FALSE}"
|
||
TZ: "${TZ:-Europe/Paris}"
|
||
|
||
ports:
|
||
- "${MINECRAFT_PORT:-25565}:25565"
|
||
|
||
volumes:
|
||
- ./data:/data
|
||
- ./mods:/data/mods
|
||
- ./plugins:/data/plugins
|
||
- ./config:/data/config
|
||
- ./world:/data/world
|
||
- ./libraries:/data/libraries
|
||
|
||
deploy:
|
||
resources:
|
||
limits:
|
||
memory: 3G
|
||
reservations:
|
||
memory: 1G
|
||
|
||
ulimits:
|
||
nofile:
|
||
soft: 65535
|
||
hard: 65535
|
||
|
||
networks:
|
||
- minecraft-network
|
||
|
||
networks:
|
||
minecraft-network:
|
||
driver: bridge
|
||
EOF
|
||
|
||
log_success "Fichier docker-compose.yml créé"
|
||
|
||
# Makefile
|
||
cat > "$INSTALL_DIR/Makefile" << 'EOF'
|
||
.PHONY: start stop restart logs status backup
|
||
|
||
start:
|
||
@docker-compose up -d
|
||
@echo "✅ Serveur démarré"
|
||
|
||
stop:
|
||
@docker-compose down
|
||
@echo "✅ Serveur arrêté"
|
||
|
||
restart:
|
||
@docker-compose restart
|
||
@echo "✅ Serveur redémarré"
|
||
|
||
logs:
|
||
@docker-compose logs -f --tail=100
|
||
|
||
status:
|
||
@docker-compose ps
|
||
@docker stats --no-stream mc-nationsglory 2>/dev/null || true
|
||
|
||
backup:
|
||
@mkdir -p backups
|
||
@docker-compose exec -T nationsglory-modded rcon-cli save-all flush || true
|
||
@sleep 3
|
||
@tar -czf backups/world-$(shell date +%Y%m%d-%H%M).tar.gz data/world/
|
||
@echo "✅ Backup créé"
|
||
|
||
console:
|
||
@docker-compose exec nationsglory-modded rcon-cli
|
||
EOF
|
||
|
||
log_success "Makefile créé"
|
||
|
||
# README rapide
|
||
cat > "$INSTALL_DIR/README.txt" << 'EOF'
|
||
╔══════════════════════════════════════════════════════════════════╗
|
||
║ 🎮 Serveur NationsGlory - Docker ║
|
||
╚══════════════════════════════════════════════════════════════════╝
|
||
|
||
⚠️ AVANT DE DÉMARRER:
|
||
|
||
1. Copier mcpc.jar dans data/
|
||
2. Copier les mods dans mods/
|
||
3. Copier les plugins dans plugins/
|
||
4. Copier les configs dans config/
|
||
5. Copier les libraries dans libraries/
|
||
|
||
🚀 DÉMARRER:
|
||
|
||
make start
|
||
ou: docker-compose up -d
|
||
|
||
📊 VOIR LES LOGS:
|
||
|
||
make logs
|
||
ou: docker-compose logs -f
|
||
|
||
🛑 ARRÊTER:
|
||
|
||
make stop
|
||
ou: docker-compose down
|
||
|
||
📚 Documentation complète:
|
||
https://github.com/votre-repo/DEPLOYMENT.md
|
||
|
||
EOF
|
||
|
||
log_success "README créé"
|
||
|
||
# Permissions
|
||
echo ""
|
||
log_info "Configuration des permissions..."
|
||
|
||
chown -R 1000:1000 "$INSTALL_DIR"
|
||
chmod -R 755 "$INSTALL_DIR"
|
||
|
||
log_success "Permissions configurées"
|
||
|
||
# Script de backup automatique
|
||
echo ""
|
||
log_info "Création du script de backup automatique..."
|
||
|
||
cat > /usr/local/bin/minecraft-backup.sh << 'EOF'
|
||
#!/bin/bash
|
||
cd /srv/minecraft/moddé
|
||
docker-compose exec -T nationsglory-modded rcon-cli save-all flush 2>/dev/null
|
||
sleep 5
|
||
tar -czf /srv/minecraft/backups/auto-$(date +%Y%m%d-%H%M).tar.gz data/world/
|
||
find /srv/minecraft/backups/ -name "auto-*.tar.gz" -mtime +7 -delete
|
||
echo "Backup terminé: $(date)" >> /var/log/minecraft-backup.log
|
||
EOF
|
||
|
||
chmod +x /usr/local/bin/minecraft-backup.sh
|
||
|
||
log_success "Script de backup créé: /usr/local/bin/minecraft-backup.sh"
|
||
|
||
# Cron pour backups automatiques
|
||
echo ""
|
||
read -p "Configurer des backups automatiques quotidiens à 3h? [Y/n] " -n 1 -r
|
||
echo ""
|
||
if [[ ! $REPLY =~ ^[Nn]$ ]]; then
|
||
(crontab -l 2>/dev/null; echo "0 3 * * * /usr/local/bin/minecraft-backup.sh") | crontab -
|
||
log_success "Backups automatiques configurés (3h du matin)"
|
||
fi
|
||
|
||
# Service systemd (optionnel)
|
||
echo ""
|
||
read -p "Créer un service systemd pour démarrage automatique? [Y/n] " -n 1 -r
|
||
echo ""
|
||
if [[ ! $REPLY =~ ^[Nn]$ ]]; then
|
||
cat > /etc/systemd/system/minecraft-nationsglory.service << EOF
|
||
[Unit]
|
||
Description=NationsGlory Minecraft Server
|
||
Requires=docker.service
|
||
After=docker.service
|
||
|
||
[Service]
|
||
Type=oneshot
|
||
RemainAfterExit=yes
|
||
WorkingDirectory=$INSTALL_DIR
|
||
ExecStart=/usr/bin/docker-compose up -d
|
||
ExecStop=/usr/bin/docker-compose down
|
||
TimeoutStartSec=0
|
||
|
||
[Install]
|
||
WantedBy=multi-user.target
|
||
EOF
|
||
|
||
systemctl daemon-reload
|
||
systemctl enable minecraft-nationsglory.service
|
||
log_success "Service systemd créé et activé"
|
||
fi
|
||
|
||
# Résumé final
|
||
echo ""
|
||
echo "╔══════════════════════════════════════════════════════════════════╗"
|
||
echo "║ ✅ INSTALLATION TERMINÉE ! ║"
|
||
echo "╚══════════════════════════════════════════════════════════════════╝"
|
||
echo ""
|
||
log_info "Emplacement: $INSTALL_DIR"
|
||
log_info "Backups: $BACKUP_DIR"
|
||
echo ""
|
||
echo "📋 PROCHAINES ÉTAPES:"
|
||
echo ""
|
||
echo "1. Copier les fichiers du serveur:"
|
||
echo " cd $INSTALL_DIR"
|
||
echo " # Copier mcpc.jar, mods, plugins, config, libraries"
|
||
echo ""
|
||
echo "2. Démarrer le serveur:"
|
||
echo " cd $INSTALL_DIR"
|
||
echo " make start"
|
||
echo ""
|
||
echo "3. Voir les logs:"
|
||
echo " make logs"
|
||
echo ""
|
||
echo "4. Se connecter:"
|
||
echo " IP: $(hostname -I | awk '{print $1}'):25565"
|
||
echo " Version: Minecraft 1.6.4"
|
||
echo ""
|
||
echo "📚 Aide:"
|
||
echo " cd $INSTALL_DIR"
|
||
echo " make help"
|
||
echo " cat README.txt"
|
||
echo ""
|
||
log_success "Installation réussie !"
|
||
echo ""
|