Cómo crear un servidor Minecraft Java en VPS Linux Ubuntu desde cero

Paso a paso para crear un servidor Minecraft Java Edition en VPS Linux Ubuntu 24.04, con Paper, systemd, firewall, backup y plugins listos para producción.

Montar un servidor Minecraft Java Edition en una VPS Linux da un control total que los servidores compartidos no ofrecen — puerto dedicado, RAM garantizada, root para instalar plugins y mods personalizados, y backups cuando quieras. Pero el camino desde cero implica detalles que muchos owners principiantes pasan por alto: correr como root, dejar la JVM por defecto, olvidar el firewall, o cerrar el SSH y ver el servidor morir.

Este tutorial cubre el setup completo para producción real en una VPS Ubuntu 24.04 LTS: instalación de Java 21 (requisito de Minecraft 1.20.5+), descarga de Paper (el servidor que prácticamente todo servidor Java serio corre hoy), creación de usuario dedicado, configuración de systemd para que el servicio se levante solo, firewall UFW y script de backup automático. El tiempo estimado es de 25-35 minutos para alguien familiarizado con la terminal Linux.

La persona objetivo es quien nunca ha corrido un servidor Minecraft en Linux pero tiene experiencia básica de SSH. No vamos a cubrir Bedrock Edition (Geyser es otro tutorial), ni mods Forge (ídem) — foco en Java Edition vanilla o con plugins Bukkit/Paper.

Requisitos previos

Lo que necesitas antes de empezar

VPS corriendo Ubuntu 24.04 LTS (22.04 también sirve), acceso root vía SSH, como mínimo 2 GB de RAM dedicados al servidor, 20 GB de disco libre y conocimiento básico de comandos Linux. Si la VPS es nueva, haz antes el hardening mínimo: cambia la contraseña del root, crea un usuario con sudo y desactiva el login root por contraseña en SSH.

Sistema Ubuntu 24.04 LTS
RAM mínima 2 GB
Java 21 (Temurin)
Puerto por defecto 25565

La versión de Java importa: Minecraft 1.20.5 y superiores exigen Java 21. Versiones antiguas (1.17 a 1.20.4) corren en Java 17. Servidores 1.16 y anteriores aceptan Java 8 u 11. Este tutorial asume 1.21.x — la versión estable actual — así que Java 21 es el camino.

Preparando el sistema base

Antes de descargar Paper, actualiza el sistema e instala las dependencias. Correr como root directamente es innecesario y peligroso — el servicio va a correr con un usuario dedicado después.

01

Conéctate a la VPS vía SSH y actualiza los paquetes:

sudo apt update && sudo apt upgrade -y

Este comando lee los repositorios y aplica todas las actualizaciones de seguridad pendientes. Si es la primera vez en la VPS, el upgrade puede tardar 2-5 minutos.

02

Instala dependencias básicas: utilidades de descarga, screen para sesiones persistentes (fallback en caso de que systemd no funcione bien) y el repositorio de Adoptium (Eclipse Temurin) para Java 21:

sudo apt install -y wget curl screen ca-certificates apt-transport-https gnupg
03

Agrega el repositorio Adoptium e instala Java 21:

wget -qO- https://packages.adoptium.net/artifactory/api/gpg/key/public | \
  sudo gpg --dearmor -o /etc/apt/keyrings/adoptium.gpg

echo "deb [signed-by=/etc/apt/keyrings/adoptium.gpg] \
https://packages.adoptium.net/artifactory/deb $(lsb_release -cs) main" | \
  sudo tee /etc/apt/sources.list.d/adoptium.list

sudo apt update
sudo apt install -y temurin-21-jre

Confirma con java -version — debe aparecer “Temurin-21”.

¿Por qué Temurin y no OpenJDK de Ubuntu?

Temurin (antiguo AdoptOpenJDK) es la distribución oficial del proyecto Eclipse Adoptium, mantenida por el mismo equipo que cuida del OpenJDK original. Rendimiento idéntico, pero con releases más predecibles y soporte LTS extendido. Los servidores Minecraft de producción corren Temurin o Azul Zulu — rara vez el openjdk-21-jre de Ubuntu, que puede tardar en recibir parches críticos.

Creando usuario dedicado y estructura de directorios

Correr Minecraft como root es un anti-patrón clásico. Si se instala un plugin malicioso, tiene acceso root al sistema entero. El usuario dedicado aísla el proceso.

04

Crea un usuario sin login interactivo y el directorio base:

sudo useradd -r -m -U -d /opt/minecraft -s /bin/bash minecraft
sudo mkdir -p /opt/minecraft/server
sudo chown -R minecraft:minecraft /opt/minecraft

La flag -r crea un usuario de sistema (sin UID humano), -m crea el directorio home, -U crea un grupo con el mismo nombre.

05

Cambia al usuario minecraft y entra en el directorio del servidor:

sudo -u minecraft -i
cd /opt/minecraft/server

Todos los comandos a partir de aquí corren como minecraft hasta reiniciar la sesión. Para salir, exit.

Descargando y configurando Paper

Paper se distribuye vía API oficial — siempre toma el build más reciente de la versión objetivo.

06

Descarga Paper 1.21.x (sustituye VERSION y BUILD por los valores actuales de PaperMC downloads):

PAPER_VERSION="1.21.4"
PAPER_BUILD="latest"
wget -O paper.jar \
  "https://api.papermc.io/v2/projects/paper/versions/${PAPER_VERSION}/builds/${PAPER_BUILD}/downloads/paper-${PAPER_VERSION}-${PAPER_BUILD}.jar"

Si el build “latest” no funciona, consulta la API manualmente en https://api.papermc.io/v2/projects/paper/versions/1.21.4 para tomar el número de build más reciente.

07

Acepta el EULA. Sin esto, el servidor se niega a iniciar:

echo "eula=true" > eula.txt
08

Haz la primera ejecución para generar los archivos de configuración:

java -Xms1G -Xmx2G -jar paper.jar nogui

Va a generar server.properties, crear la carpeta world/ y detenerse en el prompt del servidor. Escribe stop y pulsa Enter para cerrar.

Ajusta Xmx según tu plan de VPS

-Xmx2G asigna 2 GB de heap a la JVM. Si tu VPS tiene 4 GB de RAM total, usa -Xmx3G dejando 1 GB para el sistema. Nunca asignes el 100% de la RAM — el sistema operativo y la propia JVM (metaspace, threads, GC) necesitan overhead. Si la VPS tiene 2 GB, usa -Xmx1500M como máximo.

Configurando systemd para correr 24/7

Sin systemd, cerrar el SSH tira el servidor. Con systemd, el servicio se levanta solo en el boot, reinicia en caso de crash y los logs van al journalctl.

09

Sal del usuario minecraft (exit) y crea el unit file como root:

sudo nano /etc/systemd/system/minecraft.service

Pega el contenido siguiente:

[Unit]
Description=Minecraft Java Server (Paper)
After=network.target

[Service]
Type=simple
User=minecraft
Group=minecraft
WorkingDirectory=/opt/minecraft/server
ExecStart=/usr/bin/java -Xms1G -Xmx2G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -jar paper.jar nogui
Restart=on-failure
RestartSec=15s
SuccessExitStatus=0 143

[Install]
WantedBy=multi-user.target
10

Recarga systemd, habilita el servicio e inicia:

sudo systemctl daemon-reload
sudo systemctl enable minecraft
sudo systemctl start minecraft
11

Confirma que está corriendo:

sudo systemctl status minecraft
sudo journalctl -u minecraft -f

El segundo comando muestra los logs en tiempo real — Ctrl+C para salir. Busca la línea “Done (X.XXXs)! For help, type help” — es la señal de servidor operativo.

Liberando el puerto en el firewall

UFW viene instalado en Ubuntu pero generalmente desactivado. Actívalo con cuidado para no quedar trancado fuera.

12

Libera SSH antes que cualquier otra cosa, después el puerto de Minecraft:

sudo ufw allow 22/tcp
sudo ufw allow 25565/tcp
sudo ufw enable

Confirma con sudo ufw status. Debe listar 22/tcp y 25565/tcp como ALLOW IN.

Cuidado al cambiar el puerto SSH

Si la VPS tiene SSH en un puerto no estándar (ej.: 2222), libéralo ANTES de ufw enable. Habilitar UFW sin liberar el puerto SSH activo te deja trancado fuera — solo recuperando vía consola web del proveedor.

Script de backup automático

El mundo de Minecraft se corrompe. Un plugin rompe el mundo. Un jugador con WorldEdit borra el spawn. El backup diario es seguro para una noche tranquila.

13

Crea el script como usuario minecraft:

sudo -u minecraft -i
mkdir -p /opt/minecraft/backups
nano /opt/minecraft/backup.sh

Contenido:

#!/bin/bash
BACKUP_DIR="/opt/minecraft/backups"
SERVER_DIR="/opt/minecraft/server"
DATE=$(date +%Y%m%d-%H%M)
tar -czf "${BACKUP_DIR}/world-${DATE}.tar.gz" -C "${SERVER_DIR}" world world_nether world_the_end
find "${BACKUP_DIR}" -name "world-*.tar.gz" -mtime +7 -delete

Hazlo ejecutable:

chmod +x /opt/minecraft/backup.sh
14

Prográmalo con cron para correr diariamente a las 4 de la madrugada:

crontab -e

Agrega:

0 4 * * * /opt/minecraft/backup.sh

El script mantiene 7 días de backup automático, borrando el más antiguo.

Verificación final

Para confirmar que todo funciona:

# Estado del servicio
sudo systemctl status minecraft

# Puerto escuchando
sudo ss -tlnp | grep 25565

# Conectividad externa (desde tu escritorio)
nc -vz <IP_DE_LA_VPS> 25565

Abre el cliente Minecraft Java, ve a “Multiplayer”, “Add Server”, y usa el IP de la VPS. Si conecta sin timeout, está listo.

Resolución de problemas comunes

El servidor inicia pero crashea en segundos

Verifica los logs con sudo journalctl -u minecraft -n 100. Causas frecuentes: Java en la versión incorrecta (1.21+ exige Java 21), Xmx mayor que la RAM disponible, o EULA no aceptado.

”Connection refused” en el cliente

Generalmente firewall — confirma que sudo ufw status liste 25565. Si la VPS tiene firewall externo (en el panel del proveedor), libéralo también allí. El UFW local no ve el firewall del proveedor.

Lag intenso con pocos jugadores

Antes de hacer upgrade del plan, ajusta view-distance en server.properties a 8 o 6 (por defecto es 10). Cada reducción corta drásticamente el uso de CPU en chunks. Activa simulation-distance=6 también.

Próximos pasos

  • Instala el plugin EssentialsX para comandos básicos (/home, /spawn, /tpa) — va en /opt/minecraft/server/plugins/ y reinicia el servicio.
  • Configura RCON para administración remota sin necesidad de SSH — enable-rcon=true en server.properties.
  • Agrega anti-cheat (Matrix, Vulcan) si el servidor es público.
  • Configura un registro DNS A para apuntar tu dominio a la VPS — los jugadores conectan por nombre en lugar de IP.
  • Si vas a escalar a 30+ jugadores o alojar una comunidad seria, una VPS dedicada de Hostini con protección DDoS es el piso técnico — un servidor Minecraft público es blanco constante de ataques L4 que tumban el puerto 25565 entero sin protección adecuada.

Preguntas frecuentes

¿Cuánta RAM necesita el servidor Minecraft Java?

Para 5-10 jugadores sin mods pesados, 2 GB son suficientes con Paper. Para 10-20 jugadores o mundos grandes, planifica 4 GB. Mods complejos (Forge con 50+ mods) pueden requerir 6-8 GB. La regla práctica es dimensionar 256-512 MB por jugador activo, sumados al baseline de 1 GB del servidor.

¿Puedo ejecutar Minecraft Java en una VPS de 1 GB de RAM?

Técnicamente sí, pero con restricciones severas — view-distance 4, máximo 3 jugadores y cero plugins pesados. La JVM necesita overhead, así que con 1 GB asignas como máximo 768 MB al servidor y el sistema queda ajustado. Para cualquier servidor con pretensión de uso real, 2 GB es el mínimo práctico.

¿Cuál es la diferencia entre Paper, Spigot y Vanilla?

Vanilla es el servidor oficial de Mojang — referencia, pero lento y sin soporte para plugins. Spigot es un fork optimizado con API de plugins. Paper es un fork de Spigot con optimizaciones de rendimiento significativas (chunks asíncronos, redstone reescrito) y correcciones de exploits — es el estándar de facto para servidores Java desde 2018.

¿Necesito abrir el puerto 25565 en el firewall aunque la VPS sea pública?

Sí. La interfaz de red de la VPS acepta paquetes que llegan desde internet, pero iptables/UFW de Linux bloquea por defecto los puertos no liberados. Sin `ufw allow 25565`, los jugadores que intenten conectar reciben timeout — el puerto ni siquiera responde. Si cambias el puerto por defecto en server.properties, libera el nuevo puerto antes de reiniciar.

¿Cómo mantengo el servidor corriendo después de cerrar el SSH?

No uses `java -jar paper.jar` directo en la sesión SSH — cerrar el terminal mata el proceso. Usa systemd (lo cubre el tutorial) o screen/tmux. Systemd es superior porque reinicia automáticamente si el servidor crashea, registra logs en journalctl y se levanta junto con el boot de la VPS después de un reboot.

¿El backup del mundo requiere detener el servidor?

No — pero necesitas avisar al servidor para que vacíe los datos en disco antes. El comando `save-off` desactiva los guardados automáticos, `save-all flush` fuerza la escritura pendiente, ahí haces tar del directorio y `save-on` reactiva. El script de backup del tutorial hace esto vía RCON sin desconectar a los jugadores.

Temas:
Próximos pasos VPS, dedicado o panel gestionado para FiveM, SAMP, MTA, Tibia y más.Aloja tu servidor de juegos con Hostini →
¿Te resultó útil este tutorial?
Hablar por WhatsApp