### 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: ```bash 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: ```bash sudo apt install openjdk-21-jdk -y ``` Para verificar la versión instalada de java ejecutamos el comando: ```bash 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: ```bash 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: ```bash sudo ufw allow 25565 ``` Descargamos la el archivo jar en la página oficial de [Minecraft](https://www.minecraft.net/es-es/download/server) , que para este caso en particular el comando es: ```bash wget -O minecraft_server.1.21.5.jar https://piston-data.mojang.com/v1/objects/e6ec2f64e6080b9b5d9b471b291c33cc7f509733/server.jar ``` Del comando anterior: - wget - Comando para descargar archivos de internet. - -O nombre_archivo.extension - El archivo que descarga lo renombra **siempre debes considerar la extensión**, para este ejemplo lo renombra a *minecraft_server.1.21.4*. - url - Es la ruta del archivo, para este ejemplo es https://piston-data.mojang.com/v1/objects/e6ec2f64e6080b9b5d9b471b291c33cc7f509733/server.jar ![[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: ```bash 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: ```bash 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: ```bash 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: ```bash 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: ```bash nano eula.txt ``` el archivo de aula.txt debe quedar así: ```text #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: ```bash #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: ```bash 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: ```bash 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: ```bash 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: ```bash 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: ```text [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: ```bash sudo systemctl daemon-reload ``` Habilitemos el servicio para que se inicie automáticamente al arranque del servidor: ```bash sudo systemctl enable minecraft.service ``` Por única ocasión iniciamos el servicio de forma manual: ```bash sudo systemctl start minecraft.service ``` Verificamos que el servicio este activo con el comando: ```bash sudo systemctl status minecraft.service ``` Del comando anterior la salida debe ser algo como esto: ```bash ● 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: ```bash journalctl -u minecraft.service -f ```