Default configuration serveur Build NG RED
This commit is contained in:
386
install-prod.sh
Executable file
386
install-prod.sh
Executable file
@@ -0,0 +1,386 @@
|
||||
#!/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 ""
|
||||
Reference in New Issue
Block a user