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.
Connectez-vous à votre machine via SSH (ou un écran/clavier direct) et exécutez ces commandes avec les droits administrateur (ou utilisez sudo devant)
apt update && apt upgrade -y
dpkg --add-architecture i386 apt update
apt install -y curl wget git unzip nano jq tmux net-tools ca-certificates
curl -fsSL https://get.docker.com -o get-docker.sh sh get-docker.sh
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.
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 !
Créer un serveur Ragnarok est une chose, pouvoir s'y connecter en est une autre. Voici comment forger le client :
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).
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.
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 !
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ù !