Outils pour utilisateurs

Outils du site


jeux:ragnarok

Ragnarok (et plus !)

Le titre est trompeur car en fait je vais faire plus que juste un serveur Raganarok

Validation de la compatibilité de mon matériel et de l'OS: - Debian 13 (Trixie) gère parfaitement mon matériel. Son noyau récent optimisera la gestion de mes 32 Go de RAM. - Calagopus étant écrit en Rust (langage compilé très proche du matériel), il est ultra-performant. Là où un panel PHP classique solliciterait mon vieux processeur, Calagopus sera “invisible” en termes de charge. - Le fait que l'image Calagopus contrôle Docker directement signifie que mes serveurs de jeux tourneront de manière isolée sur le même réseau hôte.

Étape 1 : Préparation de Debian 13

Connectez-vous à votre machine via SSH (ou un écran/clavier direct) et exécutez ces commandes avec les droits administrateur (ou utilisez sudo devant)

# 1. Mise à jour du système
apt update && apt upgrade -y
# 2. Activation de l'architecture 32 bits (vital pour les vieux serveurs comme CS 1.6)
dpkg --add-architecture i386
apt update 
# 3. Installation des prérequis de base
apt install -y curl wget git unzip nano jq tmux net-tools ca-certificates
# 4. Installation de Docker et de ses composants
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh

Étape 2 : Installation de Calagopus (Édition All-in-One) et MariaDB

Calagopus propose une image “AIO” (All-In-One) très pratique qui contient à la fois l'interface Web (Panel) et le daemon d'exécution des jeux (Wings). Nous allons également y ajouter une base de données MariaDB dédiée pour Ragnarok.Créez un dossier pour votre infrastructure

mkdir -p /opt/calagopus
cd /opt/calagopus

Créez le fichier de configuration Docker Compose :Bashnano docker-compose.yml Collez ce contenu dans le fichier (modifiez les mots de passe et la clé de chiffrement !)

services:
  # Base de données du Panel
  database:
    image: postgres:16-alpine
    restart: always
    environment:
      POSTGRES_USER: panel
      POSTGRES_PASSWORD: panel_password_secret # À CHANGER
      POSTGRES_DB: panel
    volumes:
      - /opt/calagopus/data/postgres:/var/lib/postgresql/data
 
  # Cache pour la réactivité du Panel
  cache:
    image: valkey/valkey:latest
    restart: always
 
  # Base de données pour RAGNAROK ONLINE
    mariadb_ro:
      image: mariadb:11
      restart: always
      environment:
        MYSQL_ROOT_PASSWORD: root_ro_password     # À CHANGER
        MYSQL_DATABASE: rathena
        MYSQL_USER: rathena
        MYSQL_PASSWORD: ro_db_password            # À CHANGER
      ports:
        - "3306:3306"
      volumes:
        - /opt/calagopus/data/mariadb:/var/lib/mysql
 
  # Calagopus Panel + Wings (Daemon)
  calagopus:
    image: ghcr.io/calagopus/panel:aio
    restart: always
    ports:
      - "80:8000"     # Port HTTP de l'interface Web
      - "2022:2022"   # Port SFTP pour uploader les fichiers
      - "8080:8080"   # Port de communication Wings
    environment:
      # DOIT faire au moins 32 caractères aléatoires
      APP_ENCRYPTION_KEY: "VOTRE_CLE_DE_CHIFFREMENT_TRES_LONGUE_32_CARACT" 
      DATABASE_URL: "postgresql://panel:panel_password_secret@database:5432/panel"
      REDIS_URL: "redis://cache:6379"
      DATABASE_MIGRATE: "true"
      # Forcer l'installation initiale :
      SETUP: "true"
      AUTO_MIGRATE: "true"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /opt/calagopus/data/panel:/var/lib/calagopus
      - /opt/calagopus/data/wings:/var/lib/calagopus-wings
    # Empeche le panel de demarrer avant les bases de données :
    depends_on:
      - database
      - cache

Sauvegardez (Ctrl+O, Entrée) et quittez (Ctrl+X).

Lancez l'infrastructure

docker compose up -d database cache mariadb_ro
docker compose up -d calagopus
docker compose logs -f calagopus

Patientez 2-3 minutes le temps que les bases de données s'initialisent. Accédez à l'interface depuis un PC de votre réseau en tapant l'adresse IP locale de votre serveur dans le navigateur. Connectez-vous et créez le compte Administrateur lorsqu'on vous le propose.

Étape 3 : Création des serveurs de jeu sur le Panel

Dans Calagopus, tout se passe via l'interface web : Créer la Node (le “Nœud” local) : Allez dans l'administration, créez une Node pointant vers l'IP 127.0.0.1 et le port 8080 (puisque l'AIO inclut Wings en local).

Pour Ragnarok Online (rAthena) :rAthena nécessite la création de l'Egg dans le panel : - Dans l'administration de Calagopus, allez dans Nests et sélectionnez votre Nest (ex: “MMO”). - Cliquez sur New Egg (Nouveau modèle). * Name : rAthena * Description : Émulateur Ragnarok Online * Docker Image : ghcr.io/pterodactyl/yolks:debian (C'est l'image officielle de base, sous Debian, qui fera tourner le jeu). * Startup Command : C'est ici que réside l'astuce. Copiez-collez exactement ceci :./athena-start start; sleep 2; tail -F log/login-server.log log/char-server.log log/map-server.log * Configuration d'arrêt : ./athena-start stop * Configuration Files : Laissez vide pour l'instant.

Configuration: Allez dans l'onglet Install/Update de votre Egg. C'est le script qui s'exécutera une seule fois, lors de la création du serveur, pour télécharger et compiler le jeu.

Install Container Image : ghcr.io/pterodactyl/installers:debian

Install Script : Copiez ce code bash complet :

#!/bin/bash
export DEBIAN_FRONTEND=noninteractive
 
echo "1. Correction des sources APT pour contourner les erreurs 404..."
echo "Acquire::Check-Valid-Until \"false\";" > /etc/apt/apt.conf.d/99no-check-valid
echo "deb http://archive.debian.org/debian/ bullseye main" > /etc/apt/sources.list
echo "deb http://archive.debian.org/debian-security/ bullseye-security main" >> /etc/apt/sources.list
 
echo "2. Installation des outils nécessaires et du client MySQL..."
apt-get update -y
apt-get install -y --allow-unauthenticated git make gcc g++ python3 default-mysql-client default-libmysqlclient-dev zlib1g-dev libpcre3-dev
 
echo "3. Test de connexion à la base de données..."
echo "   -> Hôte cible : ${DB_HOST}"
echo "   -> Utilisateur : ${DB_USER}"
 
# Test de connexion via le client MySQL (interrompt le script si échec)
if mysql -h "${DB_HOST}" -u "${DB_USER}" -p"${DB_PASS}" -e "SELECT 1;" > /dev/null 2>&1; then
    echo "Succès : Connexion à la base de données établie avec succès !"
else
    echo "ERREUR CRITIQUE : Impossible de se connecter à la base de données !"
    echo "Vérifiez que :"
    echo " - L'adresse de l'hôte (${DB_HOST}) est correcte et accessible."
    echo " - L'utilisateur (${DB_USER}) et le mot de passe sont valides."
    echo " - Le serveur MariaDB autorise les connexions distantes."
    exit 1
fi
 
# Déplacement dans le dossier du serveur
cd /mnt/server
 
# Clonage ou mise à jour du code source
if [ ! -d ".git" ]; then
    echo "4. Clonage de rAthena..."
    git clone https://github.com/rathena/rathena.git .
else
    echo "4. Mise à jour du dépôt existant..."
    git pull
fi
 
echo "5. Configuration automatique de tous les fichiers de connexion SQL..."
python3 - <<EOF
import os
import re
 
db_host = os.environ.get("DB_HOST", "127.0.0.1")
db_user = os.environ.get("DB_USER", "rathena")
db_pass = os.environ.get("DB_PASS", "")
 
files_to_update = [
    "conf/inter_athena.conf",
    "conf/login_athena.conf",
    "conf/char_athena.conf",
    "conf/map_athena.conf"
]
 
for file_path in files_to_update:
    if os.path.exists(file_path):
        with open(file_path, "r", encoding="utf-8", errors="ignore") as f:
            lines = f.readlines()
 
        new_lines = []
        for line in lines:
            if re.match(r"^\s*(login_server_ip|char_server_ip|map_server_ip|web_server_ip|log_db_ip|ipban_db_ip|sql_hostname|db_hostname)\s*:", line):
                key = line.split(":")[0]
                new_lines.append(f"{key}: {db_host}\n")
            elif re.match(r"^\s*(login_server_id|char_server_id|map_server_id|web_server_id|log_db_id|ipban_db_id|sql_id|db_user|sql_user)\s*:", line):
                key = line.split(":")[0]
                new_lines.append(f"{key}: {db_user}\n")
            elif re.match(r"^\s*(login_server_pw|char_server_pw|map_server_pw|web_server_pw|log_db_pw|ipban_db_pw|sql_pw|db_pass|sql_password)\s*:", line):
                key = line.split(":")[0]
                new_lines.append(f"{key}: {db_pass}\n")
            else:
                new_lines.append(line)
 
        with open(file_path, "w", encoding="utf-8") as f:
            f.writelines(new_lines)
        print(f"Mis à jour avec succès : {file_path}")
    else:
        print(f"Attention : {file_path} introuvable.")
EOF
 
# Compilation
echo "6. Compilation en cours (patientez quelques minutes sur le i7-965)..."
./configure
make clean
make server
 
# Finalisation
chmod +x athena-start
echo "Installation et configuration de rAthena terminées avec succès !"

Création des variables (Variables d'environnement) :Allez dans l'onglet Variables de votre Egg. Ajoutez ces variables pour pouvoir les modifier plus tard depuis l'interface utilisateur sans toucher aux fichiers :Name: Database Host | Env Variable: DB_HOST | Default: 127.0.0.1 (ou l'IP locale pointant vers votre MariaDB).Name: Database User | Env Variable: DB_USER | Default: rathenaName: Database Password | Env Variable: DB_PASS | Default: (votre mot de passe)5.Déploiement de votre serveur maison :Enregistrez votre Egg.Allez dans la section de gestion des serveurs, et créez un nouveau serveur en sélectionnant votre nouvel Egg “rAthena”.Le panel va lancer le conteneur d'installation. Vous pourrez voir en temps réel votre script bash télécharger le code et le compiler à l'aide des compilateurs C++.Une fois terminé, le serveur s'éteint. Il vous restera à configurer vos accès SQL dans les fichiers conf/inter_athena.conf via le gestionnaire de fichiers intégré de Calagopus.Cliquez sur Start : le serveur va lancer ses trois processus et vous verrez tous les logs défiler directement dans votre belle interface web !

Étape 4 : Création du Client Ragnarok (pour vous et vos amis)

Créer un serveur Ragnarok est une chose, pouvoir s'y connecter en est une autre. Voici comment forger le client :

1. Le dossier du jeu de base (kRO)

Téléchargez un client coréen complet (kRO) mis à jour (des sites communautaires comme ratemyserver.net ou des forums d'émulation fournissent des archives de base).

2. Le fichier de connexion (clientinfo.xml)

Dans le dossier data de votre jeu, vous devez créer ou éditer le fichier clientinfo.xml. Il dicte au client où se connecter.

<?xml version="1.0" encoding="euc-kr" ?>
<clientinfo>
	<servicetype>korea</servicetype>
	<servertype>primary</servertype>
	<connection>
		<display>Serveur Entre Potes</display>
		<address>VOTRE_IP_PUBLIQUE</address>
		<port>6900</port>
		<version>55</version>
		<langtype>1</langtype>
		<registrationweb>Site ou Discord</registrationweb>
	</connection>
</clientinfo>

Note : Si vous jouez en LAN, mettez l'IP locale du serveur à la place de l'IP publique.

3. Le patch de l'exécutable (NEMO / WARP)

L'exécutable officiel (ragexe.exe) cherche à se connecter aux serveurs officiels et utilise des systèmes anti-triche incompatibles avec les serveurs privés. Téléchargez un outil de patch d'exécutable comme NEMO (New Executable Modification) ou WARP. Chargez votre ragexe.exe dans l'outil. Cochez les options suivantes : Disable GameGuard/Hackshield Enable Multiple GRFs Read Data Folder First Restore Login Window.

Générez le nouvel exécutable et lancez-le pour vous connecter à votre Calagopus !

Étape 5 : Redirection des ports (Box Internet)

Pour que vos amis puissent vous rejoindre depuis l'extérieur, connectez-vous à l'interface de votre box internet et redirigez ces ports vers l'adresse IP locale de votre machine Debian : Panel Calagopus (Optionnel, si vous voulez qu'ils gèrent le serveur) : Port 80 (TCP) CS 1.6 : Port 27015 (TCP & UDP) CS 2 : Port 27016 (TCP & UDP) Ragnarok Online : Ports 6900 (Login), 6121 (Personnages), et 5121 (Carte) (TCP uniquement).

Vous disposez désormais d'une infrastructure moderne, extrêmement propre, facile à mettre à jour et administrable depuis n'importe où !

jeux/ragnarok.txt · Dernière modification : de frog