obsidian-dix/DIX-Notes/Servidor Minecraft/Crear un servidor de Minecraft Java Edition (versión 1.21.5).md

13 KiB

Requisitos

  1. Tener un equipo con ubuntu server
  2. Tener licencia de Minecraft.

Instalación

Entramos a nuestro servidor, actualizamos todo el sistema con el comando:

sudo apt update && sudo apt upgrade -y

Para nuestra versión debemos instalar java en su versión 21, por lo tanto debes ejecutar el comando:

sudo apt install openjdk-21-jdk -y

Para verificar la versión instalada de java ejecutamos el comando:

java --version

La salida del comando debe ser algo como esta:

openjdk 21.0.6 2025-01-21
OpenJDK Runtime Environment (build 21.0.6+7-Ubuntu-124.04.1)
OpenJDK 64-Bit Server VM (build 21.0.6+7-Ubuntu-124.04.1, mixed mode, sharing)

Instalamos screen para poder ejecutar Minecraft en segundo plano y no tener que estar arrancando de forma manual el servidor de Minecraft cada vez que encendamos el servidor:

ya no aplica esto sudo apt install screen

Abrimos el puerto para permitir conexiones externas dentro de nuestra red local, por defecto el puerto para Minecraft es el 25565:

sudo ufw allow 25565

Descargamos la el archivo jar en la página oficial de Minecraft , que para este caso en particular el comando es:

wget -O minecraft_server.1.21.5.jar https://piston-data.mojang.com/v1/objects/e6ec2f64e6080b9b5d9b471b291c33cc7f509733/server.jar

Del comando anterior:

!Pasted image 20250325192642.png

En la inspección del texto minecraft_server_1.21.4.jar verás el tag a con su atributo href copia ese contenido y será tu complemento de tu comando wget:

!Pasted image 20250325192745.png

Una vez descargado el archivo vamos a crear una carpeta que se llame Minecraft , movemos el archivo jar dentro de la carpeta y nos movemos a la carpeta:

mkdir Minecraft
mv minecraft_server.1.21.5.jar Minecraft/
cd Minecraft/

Dentro de la carpeta ejecutamos el comando iniciar de forma manual el servidor de Minecraft:

java -Xmx1024M -Xms1024M -jar minecraft_server.1.21.5.jar nogui

Lo que hará el comando es:

  • -Xmx1024M - Esté flag indica que el servidor iniciara con con 1024MB en la memoria RAM (1GB), puedes modificarlo si así lo deseas, considerando los recursos de la maquina, solo debes indicar con M para megabytes y G para gigabytes, por ejemplo -Xmx2G

  • Xms1024M - Esté flag indica que a lo mucho usará 1024 MB de RAM, puedes aumentarlo o disminuirlo con base en los recursos de la maquina y la sintaxis de los parámetros es igual al flag anterior.

  • jar - esta bandera indica el nombre del archivo jar a ejecutar en el servidor.

  • nogui - Está bandera indica que no mostrara interfaz gráfica (No Graphical User Interface) desde el servidor, lo que implica que reducirá la carga de trabajo considerablemente, ya que solo nos conectaremos de forma remota desde otra PC o laptops.

Cuando termine de ejecutarse el comando anterior veremos varios logs del sistema, una vez que termine nos dirá que fallo la carga del archivo eula.txt y que debemo aceptar el acuerdo de eula para iniciar el servidor por lo tanto, en la terminal si ejecutamos un simple ls -la, veremos el archivo eula:

ls -la 
# archivos mostrados
# -rw-rw-r-- 1 web web      158 Mar 20 19:47 eula.txt
# drwxrwxr-x 8 web web     4096 Mar 20 19:47 libraries
# drwxrwxr-x 2 web web     4096 Mar 20 19:47 logs
# -rw-rw-r-- 1 web web 56880250 Dec  3 10:24 minecraft_server.1.21.5.jar
# -rw-rw-r-- 1 web web     1394 Mar 20 19:47 server.properties
# drwxrwxr-x 3 web web     4096 Mar 20 19:47 versions

Si vemos el contenido del archivo eula.txt con un simple cat veremos que tiene un parámetro llamado eula el cual tiene un valor de false:

cat eula.txt
# CONTENIDO DEL ARCHIVO eula.txt [comentado]
#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
#Thu Mar 20 19:47:34 UTC 2025
#eula=false

Para modificar el archivo solo ejecutamos el comando nano y el valor de false lo cambiamos a true:

nano eula.txt

el archivo de aula.txt debe quedar así:

#By changing the setting below to TRUE you are indicating your agreement to our EULA (https://aka.ms/MinecraftEULA).
#Sat Mar 29 12:27:53 CST 2025
eula=true

Guardamos con CTRL + S y cerramos con CTRL + X.

Tambien debemos modificar el archivo llamado server.properties acorde a lo que queremos en nuestro juego, esta es mi configuración para dos usuarios en modo survival y el mundo se llama como mi gatita:

#Minecraft server properties
#Thu Mar 20 19:47:34 UTC 2025
accepts-transfers=false
allow-flight=false
allow-nether=true
broadcast-console-to-ops=true
broadcast-rcon-to-ops=true
bug-report-link=
difficulty=normal
enable-command-block=true
enable-jmx-monitoring=false
enable-query=true
enable-rcon=false
enable-status=true
enforce-secure-profile=true
enforce-whitelist=false
entity-broadcast-range-percentage=100
force-gamemode=false
function-permission-level=2
gamemode=survival
generate-structures=true
generator-settings={}
hardcore=false
hide-online-players=false
initial-disabled-packs=
initial-enabled-packs=vanilla
level-name=world_gorromina
level-seed=
level-type=minecraft\:normal
log-ips=true
max-chained-neighbor-updates=1000000
max-players=4
max-tick-time=60000
max-world-size=29999984
motd=A Minecraft Server
network-compression-threshold=256
online-mode=true
op-permission-level=4
pause-when-empty-seconds=60
player-idle-timeout=0
prevent-proxy-connections=false
pvp=true
query.port=25565
rate-limit=0
rcon.password=
rcon.port=25575
region-file-compression=deflate
require-resource-pack=false
resource-pack=
resource-pack-id=
resource-pack-prompt=
resource-pack-sha1=
server-ip=
server-port=25565
simulation-distance=10
spawn-monsters=true
spawn-protection=16
sync-chunk-writes=true
text-filtering-config=
text-filtering-version=0
use-native-transport=true
view-distance=10
white-list=false

Una vez modificado los dos archivo anteriores, volvemos a ejecutar el comando:

java -Xmx1024M -Xms1024M -jar minecraft_server.1.21.5.jar nogui

Veremos varios logs en la terminal que nos indican que ya se ha levantado el servidor, ejemplo logs:

web@web-s:~/Minecraft$ java -Xmx1024M -Xms1024M -jar minecraft_server.1.21.5.jar nogui
Starting net.minecraft.server.Main
[20:24:50] [ServerMain/INFO]: Environment: Environment[sessionHost=https://sessionserver.mojang.com, servicesHost=https://api.minecraftservices.com, name=PROD]
[20:24:51] [ServerMain/INFO]: No existing world data, creating new world
[20:24:52] [ServerMain/INFO]: Loaded 1370 recipes
[20:24:52] [ServerMain/INFO]: Loaded 1481 advancements
[20:24:52] [Server thread/INFO]: Starting minecraft server version 1.21.4
[20:24:52] [Server thread/INFO]: Loading properties
[20:24:52] [Server thread/INFO]: Default game type: SURVIVAL
[20:24:52] [Server thread/INFO]: Generating keypair
[20:24:52] [Server thread/INFO]: Starting Minecraft server on *:25565
[20:24:52] [Server thread/INFO]: Using epoll channel type
[20:24:52] [Server thread/INFO]: Preparing level "world_gorromina"
[20:24:57] [Server thread/INFO]: Preparing start region for dimension minecraft:overworld
[20:24:57] [Worker-Main-2/INFO]: Preparing spawn area: 2%
[20:24:57] [Worker-Main-3/INFO]: Preparing spawn area: 2%
[20:24:58] [Worker-Main-4/INFO]: Preparing spawn area: 2%
[20:24:58] [Worker-Main-2/INFO]: Preparing spawn area: 18%
[20:24:59] [Worker-Main-1/INFO]: Preparing spawn area: 18%
[20:24:59] [Worker-Main-5/INFO]: Preparing spawn area: 51%
[20:25:00] [Worker-Main-5/INFO]: Preparing spawn area: 51%
[20:25:00] [Server thread/INFO]: Time elapsed: 3246 ms
[20:25:00] [Server thread/INFO]: Done (7.914s)! For help, type "help"
[20:25:00] [Server thread/INFO]: Starting GS4 status listener
[20:25:00] [Server thread/INFO]: Thread Query Listener started
[20:25:00] [Query Listener #1/INFO]: Query running on 0.0.0.0:25565
[20:26:00] [Server thread/INFO]: Server empty for 60 seconds, pausing

Así desde nuestra laptop o PC nos conectamos a el servidor para necesitas la IP del servidor, en el juego de Minecraft para agregar un servidor es tan simple como ir a Multiplayer > Add Server > Ingresar el nombre del servidor > agregar la ip del servidor (No indicar puerto).

Una vez hecho eso cuando te conectes en los logs del servidor verás que un usuario se ha conectado, ahora si podemos continuar con la configuración para ejecutar el segundo plano el servicio y evitar estar haciendolo de forma manual.

Primero, desde el juego debes de desconectarte del servidor, en el servidor, donde se muestran los logs debes detenerlo con la combinación de teclas CTRL + C y espera un par de segundo.

Antes de crear el archivo de servicio debemos obtener la ruta de nuestro archivo jar de Minecraft, para ello ejecuta el comando:

pwd
# en mi caso la salida es: /home/dave/Minecraft

Ese comando te mostrara la ruta padre del archivo minecraft_server.1.21.4.jar, copia esa ruta que la usaras en la configuración del archivo de servicio, procedemos a crear un archivo de servicio mediante el comando:

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

Si seguiste los pasos anteriores donde creamos una carpeta dedicada al archivo jar de Minecraft entonces pega el siguiente contenido en minecraft.service, de lo contrario debes modificar las rutas:

[Unit]
Description=Servidor de Minecraft
After=network.target

[Service]
# CAMBIA EL NOMBRE DEL USUARIO A TU USUARIO EN TU SERVIDOR
User=web
# RUTA PADRE DEL ARCHIVO JAR DE MINECRAFT
WorkingDirectory=/home/web/Minecraft
ExecStart=/usr/bin/java -Xmx1024M -Xms1024M -jar minecraft_server.1.21.5.jar nogui
Restart=on-failure

[Install]
WantedBy=multi-user.target

Guardamos con CTRL + S y cerramos con CTRL + X, recarga systemctrl para que cargue la nueva configuración del servicio:

sudo systemctl daemon-reload

Habilitemos el servicio para que se inicie automáticamente al arranque del servidor:

sudo systemctl enable minecraft.service

Por única ocasión iniciamos el servicio de forma manual:

sudo systemctl start minecraft.service

Verificamos que el servicio este activo con el comando:

sudo systemctl status minecraft.service

Del comando anterior la salida debe ser algo como esto:

● minecraft.service - Servidor de Minecraft
     Loaded: loaded (/etc/systemd/system/minecraft.service; enabled; preset: enabled)
     Active: active (running) since Thu 2025-03-20 21:11:25 UTC; 18s ago
 Invocation: 82d8418ca3d04d62bd41021c633dbf81
   Main PID: 4205 (java)
      Tasks: 44 (limit: 17919)
     Memory: 610.2M (peak: 612.7M)
        CPU: 33.404s
     CGroup: /system.slice/minecraft.service
             └─4205 /usr/bin/java -Xmx1024M -Xms1024M -jar minecraft_server.1.21.5.jar nogui

Mar 20 21:11:31 web-s java[4205]: [21:11:31] [Server thread/INFO]: Preparing start region for dimension minecraft:overworld
Mar 20 21:11:33 web-s java[4205]: [21:11:33] [Worker-Main-3/INFO]: Preparing spawn area: 0%
Mar 20 21:11:33 web-s java[4205]: [21:11:33] [Worker-Main-3/INFO]: Preparing spawn area: 0%
Mar 20 21:11:33 web-s java[4205]: [21:11:33] [Worker-Main-3/INFO]: Preparing spawn area: 0%
Mar 20 21:11:33 web-s java[4205]: [21:11:33] [Worker-Main-3/INFO]: Preparing spawn area: 0%
Mar 20 21:11:33 web-s java[4205]: [21:11:33] [Server thread/INFO]: Time elapsed: 1900 ms
Mar 20 21:11:33 web-s java[4205]: [21:11:33] [Server thread/INFO]: Done (2.128s)! For help, type "help"
Mar 20 21:11:33 web-s java[4205]: [21:11:33] [Server thread/INFO]: Starting GS4 status listener
Mar 20 21:11:33 web-s java[4205]: [21:11:33] [Server thread/INFO]: Thread Query Listener started
Mar 20 21:11:33 web-s java[4205]: [21:11:33] [Query Listener #1/INFO]: Query running on 0.0.0.0:25565

La salida del comando nos indica que el servicio esta activo y corriendo, así que cada vez que se reinicie el servidor el servicio se ejecutara de forma automática y podrás conectarte sin problemas, en caso de que quieras ver los logs solo ejecuta el comando:

journalctl -u minecraft.service -f