Files
project-afterlife/docs/game-servers.md
consultoria-as 81e978947e
Some checks failed
Deploy / deploy (push) Has been cancelled
feat: switch Minecraft from FTB Infinity Evolved to FTB Evolution
Minecraft 1.21.1 + NeoForge 21.1.218 with 200+ mods.
Added MAX_TICK_TIME=-1 to prevent watchdog crashes on startup.
Updated CMS entries, README, and all docs to reflect new modpack.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 13:14:55 +00:00

7.1 KiB

Servidores de Juegos

Guia de setup, operacion y troubleshooting de cada servidor de juegos.

OpenFusion (FusionFall)

Resumen

Dato Valor
Emulador OpenFusion
Lenguaje C++
Puerto 23000 (login), 23001 (shard)
Base de datos SQLite (embebida)
RAM ~254 MB

Archivos

servers/openfusion/
├── Dockerfile              # Ubuntu 24.04, copia binario + config
├── docker-entrypoint.sh    # Genera config.ini desde env vars
├── config.ini              # Configuracion del servidor
├── fusion                  # Binario compilado (no en git)
├── sql/                    # Migraciones SQLite
└── tdata/                  # Datos del juego (NPCs, mobs, drops)

Configuracion

Variables de entorno en docker-compose.dev.yml:

  • OPENFUSION_SHARD_IP: IP publica del servidor (default: 192.168.10.234)
  • OPENFUSION_MOTD: Mensaje del dia

Conexion de cliente

  1. Descargar el cliente FusionFall
  2. Usar el launcher de OpenFusion apuntando a 192.168.10.234:23000

Troubleshooting

  • "Connection refused": Verificar que el contenedor esta corriendo y los puertos estan mapeados
  • Datos de juego: Los archivos tdata/ contienen los NPCs, mobs y drops. Si faltan, el mundo estara vacio

MapleStory 2

Resumen

Dato Valor
Emulador Maple2
Lenguaje C# / .NET 8
Puertos 20001 (login), 21001 (world), 20002/21002 (game), 4000 (web)
Base de datos MySQL 8.0 (puerto 3307)
RAM total ~1.4 GB (5 contenedores)

Arquitectura Multi-Servicio

maple2-mysql (3307)
    │
    ├── maple2-world (21001)     ← Coordinador central, gRPC
    │       │
    │       ├── maple2-login (20001) ← Autenticacion, seleccion de personaje
    │       │
    │       └── maple2-game-ch0 (20002/21002) ← Canal de juego
    │
    └── maple2-web (4000)        ← API web auxiliar

Los servidores se comunican entre si via gRPC (HTTP/2). El World server actua como coordinador central. Los Game servers se conectan al World al iniciar.

Setup Inicial (Primera Vez)

1. Clonar el repositorio

cd servers/
git clone --recurse-submodules https://github.com/MS2Community/Maple2.git maple2

2. Descargar datos del cliente

Se necesita el cliente de MapleStory 2 (~14 GB). Los archivos se colocan en servers/maple2/client-data/Data/.

Fuentes del cliente:

3. Aplicar XML Patches

Descargar MapleStory2-XML v1.2.1 y copiar los archivos Server.m2d, Server.m2h, Xml.m2d, Xml.m2h a servers/maple2/client-data/Data/ (reemplazar los originales).

4. Configurar .env

cp servers/maple2/.env.example servers/maple2/.env
# Editar con las IPs correctas:
# GAME_IP=192.168.10.234
# LOGIN_IP=192.168.10.234

5. Verificar .dockerignore

El archivo servers/maple2/.dockerignore DEBE incluir:

client-data
client-download
xml-patches

Sin esto, el build de Docker intentara copiar 14 GB de datos al contexto.

6. Ingestar datos del juego

cd docker/
docker compose -f docker-compose.maple2.yml up -d maple2-mysql
# Esperar a que MySQL este healthy
docker compose -f docker-compose.maple2.yml run --rm maple2-file-ingest \
  bash -c "cd /app && dotnet restore && cd Maple2.File.Ingest && dotnet run"

Este proceso importa todos los datos del cliente a MySQL. Toma ~10 minutos.

7. Construir y levantar servidores

docker compose -f docker-compose.maple2.yml build
docker compose -f docker-compose.maple2.yml up -d

Conexion de cliente

  1. Tener el cliente de MapleStory 2 instalado
  2. El cliente debe apuntar a 192.168.10.234:20001 (Login Server)
  3. Las IPs se configuran en servers/maple2/.env (GAME_IP, LOGIN_IP)

Troubleshooting

  • "No space left on device" al buildear: Verificar .dockerignore incluye client-data
  • "Scripting/Scripts not found": Ya corregido — se removio la linea COPY del Dockerfile del Game server
  • "project.assets.json not found" en file-ingest: Ejecutar dotnet restore antes de dotnet run
  • Servidores no se conectan entre si: Verificar que GRPC_WORLD_IP=maple2-world y GRPC_GAME_IP=maple2-game-ch0 estan configurados en el compose

Agregar mas canales de juego

Para agregar un segundo canal, duplicar el servicio maple2-game-ch0 en el compose cambiando:

  • Nombre: maple2-game-ch1
  • Puertos: 20003:20003 y 21003:21003
  • GRPC_GAME_IP: maple2-game-ch1

Minecraft: FTB Evolution

Resumen

Dato Valor
Imagen Docker itzg/minecraft-server:java21
Modpack FTB Evolution v1.29.1
Minecraft 1.21.1
NeoForge 21.1.218
Puerto 25565
RAM ~3.5 GB (6 GB JVM heap, 8 GB limite contenedor)
Mods 200+

Configuracion

El servidor se configura via variables de entorno en docker-compose.dev.yml:

environment:
  EULA: "TRUE"
  TYPE: FTBA
  FTB_MODPACK_ID: 125
  FTB_MODPACK_VERSION_ID: 100181
  MEMORY: 6G
  MAX_MEMORY: 6G
  MOTD: "Project Afterlife - FTB Evolution"
  DIFFICULTY: normal
  MAX_PLAYERS: 20
  VIEW_DISTANCE: 10
  ENABLE_COMMAND_BLOCK: "true"

Primer inicio

El primer inicio toma 5-10 minutos porque:

  1. Descarga el FTB App installer
  2. Descarga los 200+ mods del modpack
  3. Instala NeoForge 21.1.218
  4. Genera el mundo

Conexion de cliente

  1. Instalar FTB App, MultiMC, ATLauncher, o Prism Launcher
  2. Instalar modpack FTB Evolution version 1.29.1
  3. Multiplayer > Add Server: 192.168.10.234:25565

Fix: Watchdog crash en primer inicio

Con 200+ mods, el mod Hexerei tarda mas de 60 segundos generando recetas al iniciar, lo que activa el watchdog de Minecraft. Se resuelve con MAX_TICK_TIME: -1 en las variables de entorno del compose.

Troubleshooting

  • Server lag: Reducir VIEW_DISTANCE de 10 a 8, o aumentar MEMORY si hay RAM disponible
  • NeoForge install fails: Verificar que la imagen Docker es java21 (no java8 ni java17)
  • Watchdog crash (single tick took 60s): Verificar que MAX_TICK_TIME: -1 esta configurado

Operaciones Comunes

Ver logs de un servidor

docker logs -f minecraft-ftb          # Minecraft
docker logs -f maple2-world           # MapleStory 2 World
docker logs -f docker-openfusion-1    # OpenFusion

Reiniciar un servidor

docker restart minecraft-ftb
docker restart maple2-world maple2-login docker-maple2-game-ch0-1
docker restart docker-openfusion-1

Ver uso de recursos

docker stats --no-stream

Backup de datos

# PostgreSQL (CMS)
docker exec docker-postgres-1 pg_dump -U afterlife afterlife > backup_cms.sql

# MySQL (MapleStory 2)
docker exec maple2-db mysqldump -u root -pmaplestory --databases maple-data game-server > backup_ms2.sql

# Minecraft (mundo completo)
docker cp minecraft-ftb:/data/world ./backup_minecraft_world/