Cómo monté un servidor de Minecraft modded con Docker en un PC antiguo
Cómo monté un servidor de Minecraft modded con Docker en un PC antiguo
Introducción
Hace unas semanas me propuse algo que mucha gente piensa que necesita un servidor dedicado caro: montar un servidor de Minecraft modded (Cobblemon) estable para jugar con amigos. Lo hice en un PC viejo que tengo en casa al que cariñosamente llamo “Servercito”, corriendo Ubuntu Server, sin gastar ni un euro en hosting.
Este post cubre todo el proceso: desde la configuración de Docker hasta la optimización de RAM, gestión de mods por terminal, trucos de administración y los problemas reales que tuve que resolver. Si tienes un PC viejo por casa y ganas de montar algo, esto es para ti.
La Filosofía “Low-Spec”: No necesitas un super hardware
El reto
Mi “Servercito” no es ninguna bestia. Es un PC antiguo con recursos limitados, pero suficiente para correr un servidor de Minecraft modded para un grupo pequeño de amigos. La clave no está en tener el mejor hardware, sino en optimizar lo que tienes.
Gestión de memoria: ZRAM y Swap
Uno de los primeros problemas fue la RAM. Java es un monstruo consumiendo memoria, y si el sistema operativo se queda sin RAM, el OOM Killer (Out of Memory) de Linux mata el proceso sin piedad. Para evitar esto:
- ZRAM: Comprime la RAM en tiempo real. En lugar de desperdiciar RAM con datos sin comprimir, ZRAM crea un bloque de swap comprimido directamente en memoria. Esto te da más margen antes de que el sistema empiece a usar el disco.
- Swap en disco: Como red de seguridad adicional. Si ZRAM se llena, el sistema usa swap en disco antes de matar procesos.
Monitorización con htop
htop se convirtió en mi mejor amigo. Es un monitor de recursos en tiempo real que te muestra exactamente cuánta RAM y CPU está usando cada proceso. Imprescindible para detectar si el servidor se está pasando de memoria.
htop
Un vistazo rápido y sabes si el servidor va bien o si necesitas ajustar algo.
El Corazón: Docker y Docker Compose
Por qué Docker
Docker te permite levantar y tirar el servidor en segundos. Si algo se rompe, borras el contenedor y vuelves a empezar sin tocar tu sistema. Los backups son tan fáciles como copiar una carpeta. Y lo mejor: todo queda aislado, no necesitas instalar Java “a pelo” en tu sistema.
La imagen itzg/minecraft-server
Es el estándar de la industria para servidores de Minecraft en Docker. Soporta Vanilla, Fabric, Forge, Modrinth modpacks y un montón más. Es increíblemente configurable a través de variables de entorno.
docker-compose vs docker compose
Un detalle que confunde a mucha gente:
docker-compose(con guión): Es la versión antigua (v1), escrita en Python. Está deprecada.docker compose(sin guión): Es la versión moderna (v2), un plugin nativo de Docker escrito en Go. Más rápida y la que debes usar.
Si escribes docker-compose y te funciona, probablemente tengas ambas instaladas, pero usa siempre docker compose.
El docker-compose.yml
Este es el archivo que controla todo. Aquí va mi configuración (adaptada):
version: '3.8'
services:
minecraft:
container_name: minecraft-cobbleverse
image: itzg/minecraft-server
restart: unless-stopped
ports:
- "25565:25565"
environment:
EULA: "TRUE"
TYPE: "MODRINTH"
VERSION: "1.21.1"
MEMORY: "6G"
MODRINTH_MODPACK: "cobbleverse"
MODRINTH_MODPACK_VERSION: "1.7.0c"
MAX_PLAYERS: "5"
ENABLE_WHITELIST: "true"
WHITELIST: "TuUsuario"
OPS: "TuUsuario"
OVERRIDE_SERVER_PROPERTIES: "true"
USE_AIKAR_FLAGS: "true"
ENABLE_ROLLING_LOGS: "true"
REMOVE_OLD_MODS: "true"
mem_limit: 7g
volumes:
- ./data:/data
tty: true
stdin_open: true
duckdns:
image: lscr.io/linuxserver/duckdns
container_name: duckdns
environment:
- SUBDOMAINS=tu-subdominio
- TOKEN=tu-token-aqui
restart: unless-stopped
Puntos clave:
MEMORY: "6G": Cuánta RAM le das al servidor de Java. Ajústala según tu hardware.mem_limit: 7g: Límite duro de Docker. Si el contenedor intenta usar más de 7GB, Docker lo frena. Esto protege tu sistema host de que Java se coma toda la RAM.USE_AIKAR_FLAGS: "true": Activa los flags de Aikar, que optimizan el Garbage Collector de Java para servidores de Minecraft. Menos lag, menos picos de memoria.OVERRIDE_SERVER_PROPERTIES: "true": Fuerza a que las variables de entorno sobreescriban elserver.propertiesexistente. Sin esto, cambiarMAX_PLAYERSno tendría efecto si el archivo ya existe.
DuckDNS: IP dinámica resuelta
Si tu ISP te da una IP dinámica (como la mayoría), necesitas un servicio de DNS dinámico para que tus amigos puedan conectarse siempre a la misma dirección. DuckDNS es gratuito y lo metimos directamente en el docker-compose.yml como otro servicio. Así se actualiza automáticamente sin scripts externos ni crons.
Gestión de Mods por Terminal: Ferium
Qué es Ferium
Cuando tu servidor no tiene interfaz gráfica (es un Ubuntu Server), gestionar mods a mano es tedioso. Ferium es una herramienta CLI que te permite añadir, actualizar y eliminar mods de Minecraft directamente desde la terminal.
# Añadir un mod
ferium add lithium
# Actualizar todos los mods
ferium upgrade
# Listar mods instalados
ferium list
Mods esenciales de rendimiento
En hardware limitado, estos mods son obligatorios:
- Lithium: Optimiza la lógica del juego (IA de mobs, pathfinding, redstone). Sin impacto visual.
- FerriteCore: Reduce el consumo de RAM drásticamente optimizando cómo se almacenan los datos internos.
- ModernFix: Arregla un montón de ineficiencias del juego base. Complementa a Lithium.
- Krypton: Optimiza el networking. Comprime mejor los paquetes y reduce el ancho de banda.
Mods técnicos útiles
- Chunky: Pre-genera el mundo para evitar lag cuando los jugadores exploran zonas nuevas. Generar chunks sobre la marcha es lo que más lag causa.
- Carpet Mod: Permite crear bots con
/player spawnque mantienen zonas cargadas. Muy útil para granjas automáticas (como la de miel) sin necesidad de tener un cliente real conectado.
Trucos de “Admin Ninja”
Gestión sin entrar al juego
No necesitas abrir Minecraft para administrar tu servidor. Desde la terminal:
# Añadir a alguien a la whitelist
docker exec -i minecraft-cobbleverse mc-send-to-console whitelist add NombreJugador
# Dar permisos de administrador
docker exec -i minecraft-cobbleverse mc-send-to-console op NombreJugador
# Ejecutar cualquier comando del servidor
docker exec -i minecraft-cobbleverse mc-send-to-console say Hola a todos!
Inspeccionar datapacks sin descomprimir
Un truco muy útil: puedes inspeccionar el contenido de datapacks y JARs sin descomprimirlos usando unzip. Esto fue especialmente útil para ver los equipos de los líderes de gimnasio de Cobblemon y sus stats (IVs/EVs):
# Ver la lista de archivos dentro de un zip
unzip -l COBBLEVERSE-RCT-DP.zip
# Ver el contenido de un archivo específico sin extraer
unzip -p COBBLEVERSE-RCT-DP.zip ruta/al/archivo.json | python3 -m json.tool
Logs: tu ventana al servidor
# Ver los últimos 20 mensajes del log
docker logs --tail 20 minecraft-cobbleverse
# Seguir los logs en tiempo real (Ctrl+C para salir)
docker logs -f minecraft-cobbleverse
# Combinar ambos: últimos 20 + seguir en tiempo real
docker logs --tail 20 -f minecraft-cobbleverse
Comandos básicos de Docker Compose
# Levantar el servidor (en segundo plano)
docker compose up -d
# Parar el servidor
docker compose down
# Ver el estado de los contenedores
docker ps
# Reiniciar el servidor
docker compose restart
# Ver los recursos que consume
docker stats minecraft-cobbleverse
Problemas que tuvimos y cómo los resolvimos
JSONs corruptos
Un día el servidor dejó de arrancar con un JsonSyntaxException en archivos de Cobblemon. El problema era que algunos archivos JSON temporales se habían corrompido. La solución fue identificar los archivos corruptos (mirando el stack trace en los logs) y borrarlos. El servidor los regenera al arrancar.
Lección: No es lo mismo la carpeta config/ que los archivos temporales en la raíz de data/. Los de config se pueden editar, los temporales se pueden borrar sin miedo.
La RAM: encontrar el equilibrio
Al principio le puse demasiada RAM al servidor y el sistema host se quedaba sin memoria para funcionar. El OOM Killer mataba el proceso.
Solución: Ajustar MEMORY (RAM de Java) y mem_limit (límite de Docker) dejando siempre margen para el sistema operativo. Si tienes 8GB de RAM total, no le des 8GB al servidor. Dale 5-6GB y deja el resto para Linux, Docker, y el overhead de Java.
Crash loops por mods incompatibles
Alguna vez el servidor entraba en un bucle de crashes al añadir un mod nuevo. La clave es leer el crash report: siempre te dice qué mod está causando el problema.
# Ver los últimos logs para encontrar el error
docker logs --tail 100 minecraft-cobbleverse | grep -i "error\|caused by\|crash"
Permisos de Linux en volúmenes Docker
Un problema clásico: Docker crea archivos como un usuario interno, y luego no puedes modificarlos desde fuera. O al revés, restauras un backup con sudo y Docker no puede leer los archivos.
Solución: Asegurarte de que los archivos en ./data pertenecen a tu usuario:
sudo chown -R $USER:$USER ./data
La imagen itzg/minecraft-server es inteligente y arregla permisos al arrancar, pero si restauras backups manualmente, tenlo en cuenta.
Alternativas si no tienes hardware
Si no tienes un PC viejo disponible, hay opciones gratuitas:
- Oracle Cloud Free Tier: Ofrece instancias ARM (Ampere) con hasta 24GB de RAM y 4 CPUs de forma gratuita permanente. Más que suficiente para un servidor de Minecraft.
- Servicios de hosting de Minecraft: Aternos (gratuito pero limitado) o servidores de pago como Apex Hosting.
La ventaja de hacerlo tú mismo: aprendes Linux, Docker, networking y administración de sistemas de verdad.
Conclusión
Montar un servidor de Minecraft modded en un PC viejo con Docker no es ciencia espacial, pero tiene sus trampas. Las claves:
- Docker aísla y simplifica: Levantar, tirar, hacer backups, todo es más limpio.
- Optimiza la RAM: ZRAM, Aikar flags, y límites de memoria bien configurados.
- Mods de rendimiento obligatorios: Lithium, FerriteCore, ModernFix, Krypton.
- Administra por terminal: No necesitas interfaz gráfica para nada.
- No necesitas super hardware: Con un PC viejo y las optimizaciones correctas, puedes tener un servidor estable para un grupo pequeño.
Lo mejor de todo es que montando esto aprendes una barbaridad sobre Linux, Docker, networking y administración de sistemas. Conocimiento que te sirve para mucho más que Minecraft.
Si tienes alguna pregunta o quieres compartir tu experiencia montando servidores, no dudes en contactarme por LinkedIn o GitHub.