--- search: exclude: true --- # Minecraft Server Setup ![](0.png) In this tutorial we're going to setup a minecraft server: ## **Initial Setup** First install the required dependencies: root@minecraft:~# apt update -y ; apt upgrade -y ; apt install default-jdk -y root@minecraft:~# apt update -y ; apt install default-jre software-properties-common python3-launchpadlib -y root@minecraft:~# add-apt-repository ppa:webupd8team/java root@minecraft:~# java -version openjdk version "11.0.11" 2021-04-20 OpenJDK Runtime Environment (build 11.0.11+9-Ubuntu-0ubuntu2.20.04) OpenJDK 64-Bit Server VM (build 11.0.11+9-Ubuntu-0ubuntu2.20.04, mixed mode, sharing) root@minecraft:~# adduser mcuser Adding user `mcuser' ... Adding new group `mcuser' (1000) ... Adding new user `mcuser' (1000) with group `mcuser' ... Creating home directory `/home/mcuser' ... Copying files from `/etc/skel' ... New password: Retype new password: passwd: password updated successfully Changing the user information for mcuser Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y root@minecraft:~# usermod -aG sudo mcuser root@minecraft:~# su - mcuser To run a command as administrator (user "root"), use "sudo ". See "man sudo_root" for details. mcuser@minecraft:~$ pwd /home/mcuser mcuser@minecraft:~$ mkdir minecraft mcuser@minecraft:~$ cd minecraft/ ![](1.png) mcuser@minecraft:~/minecraft$ wget https://maven.minecraftforge.net/net/minecraftforge/forge/1.12.2-14.23.5.2855/forge-1.12.2-14.23.5.2855-installer.jar --2021-11-16 16:26:29-- https://maven.minecraftforge.net/net/minecraftforge/forge/1.12.2-14.23.5.2855/forge-1.12.2-14.23.5.2855-installer.jar Resolving maven.minecraftforge.net (maven.minecraftforge.net)... 51.79.83.165, 2607:5300:203:65a5:: Connecting to maven.minecraftforge.net (maven.minecraftforge.net)|51.79.83.165|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 4583673 (4.4M) [application/java-archive] Saving to: 'forge-1.12.2-14.23.5.2855-installer.jar' forge-1.12.2-14.23.5.2855-installer.jar 100%[======================================================================================================================>] 4.37M 2.84MB/s in 1.5s 2021-11-16 16:26:31 (2.84 MB/s) - 'forge-1.12.2-14.23.5.2855-installer.jar' saved [4583673/4583673] mcuser@minecraft:~/minecraft$ java -jar forge-1.12.2-14.23.5.2855-installer.jar --installServer JVM info: Ubuntu - 11.0.11 - 11.0.11+9-Ubuntu-0ubuntu2.20.04 java.net.preferIPv4Stack=true Found java version 11.0.11 Target Directory: . Data kindly mirrored by CreeperHost at https://www.creeperhost.net/ Extracting main jar: Extracted successfully Considering minecraft server jar Downloading library from https://launcher.mojang.com/v1/objects/886945bfb2b978778c3a0288fd7fab09d315b25f/server.jar [...] Building Processors The server installed successfully You can delete this installer file now if you wish mcuser@minecraft:~/minecraft$ ls -l total 38368 -rw-rw-r-- 1 mcuser mcuser 4583673 Nov 16 16:26 forge-1.12.2-14.23.5.2855-installer.jar -rw-rw-r-- 1 mcuser mcuser 5054 Nov 16 16:28 forge-1.12.2-14.23.5.2855-installer.jar.log -rw-rw-r-- 1 mcuser mcuser 4464387 Nov 16 16:28 forge-1.12.2-14.23.5.2855.jar drwxrwxr-x 7 mcuser mcuser 4096 Nov 16 16:28 libraries -rw-rw-r-- 1 mcuser mcuser 30222121 Nov 16 16:28 minecraft_server.1.12.2.jar Now let's test if it works: mcuser@minecraft:~/minecraft$ java -Xmx2048M -Xms2048M -jar minecraft_server.1.12.2.jar nogui [16:31:36] [Server thread/INFO]: Starting minecraft server version 1.12.2 [16:31:36] [Server thread/INFO]: Loading properties [16:31:36] [Server thread/WARN]: server.properties does not exist [16:31:36] [Server thread/INFO]: Generating new properties file [16:31:36] [Server thread/WARN]: Failed to load eula.txt [16:31:36] [Server thread/INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info. [16:31:36] [Server thread/INFO]: Stopping server [16:31:36] [Server Shutdown Thread/INFO]: Stopping server mcuser@minecraft:~/minecraft$ ls -lash total 38M 4.0K drwxrwxr-x 4 mcuser mcuser 4.0K Nov 16 16:31 . 4.0K drwxr-xr-x 5 mcuser mcuser 4.0K Nov 16 16:27 .. 4.0K -rw-rw-r-- 1 mcuser mcuser 181 Nov 16 16:31 eula.txt 4.4M -rw-rw-r-- 1 mcuser mcuser 4.4M Nov 16 16:26 forge-1.12.2-14.23.5.2855-installer.jar 8.0K -rw-rw-r-- 1 mcuser mcuser 5.0K Nov 16 16:28 forge-1.12.2-14.23.5.2855-installer.jar.log 4.3M -rw-rw-r-- 1 mcuser mcuser 4.3M Nov 16 16:28 forge-1.12.2-14.23.5.2855.jar 4.0K drwxrwxr-x 7 mcuser mcuser 4.0K Nov 16 16:28 libraries 4.0K drwxrwxr-x 2 mcuser mcuser 4.0K Nov 16 16:31 logs 29M -rw-rw-r-- 1 mcuser mcuser 29M Nov 16 16:28 minecraft_server.1.12.2.jar 4.0K -rw-rw-r-- 1 mcuser mcuser 59 Nov 16 16:31 server.properties mcuser@minecraft:~/minecraft$ cat eula.txt #By changing the setting below to TRUE you are indicating your agreement to our EULA (https://account.mojang.com/documents/minecraft_eula). #Tue Nov 16 16:31:36 UTC 2021 eula=true mcuser@minecraft:~/minecraft$ java -Xmx2048M -Xms2048M -jar minecraft_server.1.12.2.jar nogui [16:34:00] [Server thread/INFO]: Starting minecraft server version 1.12.2 [16:34:00] [Server thread/INFO]: Loading properties [16:34:00] [Server thread/INFO]: Default game type: SURVIVAL [16:34:00] [Server thread/INFO]: Generating keypair [16:34:00] [Server thread/INFO]: Starting Minecraft server on *:25565 WARNING: An illegal reflective access operation has occurred WARNING: Illegal reflective access by io.netty.util.internal.ReflectionUtil (file:/home/mcuser/minecraft/minecraft_server.1.12.2.jar) to constructor java.nio.DirectByteBuffer(long,int) WARNING: Please consider reporting this to the maintainers of io.netty.util.internal.ReflectionUtil WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations WARNING: All illegal access operations will be denied in a future release [16:34:00] [Server thread/INFO]: Using epoll channel type [16:34:00] [Server thread/INFO]: Preparing level "world" [16:34:01] [Server thread/INFO]: Loaded 488 advancements [16:34:02] [Server thread/INFO]: Preparing start region for level 0 [16:34:03] [Server thread/INFO]: Preparing spawn area: 5% [16:34:04] [Server thread/INFO]: Preparing spawn area: 8% [16:34:05] [Server thread/INFO]: Preparing spawn area: 13% [16:34:06] [Server thread/INFO]: Preparing spawn area: 16% [16:34:07] [Server thread/INFO]: Preparing spawn area: 21% [16:34:08] [Server thread/INFO]: Preparing spawn area: 27% [16:34:09] [Server thread/INFO]: Preparing spawn area: 35% [16:34:10] [Server thread/INFO]: Preparing spawn area: 41% [16:34:11] [Server thread/INFO]: Preparing spawn area: 48% [16:34:12] [Server thread/INFO]: Preparing spawn area: 55% [16:34:13] [Server thread/INFO]: Preparing spawn area: 62% [16:34:14] [Server thread/INFO]: Preparing spawn area: 70% [16:34:15] [Server thread/INFO]: Preparing spawn area: 78% [16:34:16] [Server thread/INFO]: Preparing spawn area: 86% [16:34:17] [Server thread/INFO]: Preparing spawn area: 94% [16:34:18] [Server thread/INFO]: Done (17.633s)! For help, type "help" or "?" Now the minecraft server is up, let's check if it works, first install minecraft on your client:: [ 10.66.66.2/32 ] [ /dev/pts/135 ] [~] → yay -S minecraft-launcher [ 10.66.66.2/32 ] [ /dev/pts/135 ] [~] → which minecraft-launcher /usr/bin/minecraft-launcher ![](2.png) ![](3.png) ![](4.png) ![](5.png) ![](6.png) ![](7.png) ![](8.png) Next if you need to port forward the mc server to the public, it will be on port 25565. ![]() ## **Setup** Now if you want to make a modded server, you will need a few things, first you will need minecraft forge install: [ 10.66.66.2/32 ] [ /dev/pts/138 ] [~] → cd Downloads [ 10.66.66.2/32 ] [ /dev/pts/138 ] [~/Downloads] → java -jar forge-1.12.2-14.23.5.2855-installer.jar This will open the forge installer, select client this time: ![](9.png) ![](10.png) ![](11.png) ![](12.png) And then we can login once again into the server: ![](13.png) Now let's add a [mod](https://www.curseforge.com/minecraft/mc-mods?filter-game-version=2020709689%3A6756&filter-sort=4) into the minecraft server: mcuser@minecraft:~$ ls -l total 4 drwxrwxr-x 5 mcuser mcuser 4096 Nov 16 16:34 minecraft mcuser@minecraft:~$ cd minecraft/ mcuser@minecraft:~/minecraft$ ls -l total 38404 -rw-rw-r-- 1 mcuser mcuser 2 Nov 16 16:34 banned-ips.json -rw-rw-r-- 1 mcuser mcuser 2 Nov 16 16:34 banned-players.json -rw-rw-r-- 1 mcuser mcuser 180 Nov 16 16:33 eula.txt -rw-rw-r-- 1 mcuser mcuser 4583673 Nov 16 16:26 forge-1.12.2-14.23.5.2855-installer.jar -rw-rw-r-- 1 mcuser mcuser 5054 Nov 16 16:28 forge-1.12.2-14.23.5.2855-installer.jar.log -rw-rw-r-- 1 mcuser mcuser 4464387 Nov 16 16:28 forge-1.12.2-14.23.5.2855.jar drwxrwxr-x 7 mcuser mcuser 4096 Nov 16 16:28 libraries drwxrwxr-x 2 mcuser mcuser 4096 Nov 16 16:33 logs -rw-rw-r-- 1 mcuser mcuser 30222121 Nov 16 16:28 minecraft_server.1.12.2.jar -rw-rw-r-- 1 mcuser mcuser 2 Nov 16 16:34 ops.json -rw-rw-r-- 1 mcuser mcuser 753 Nov 16 16:34 server.properties -rw-rw-r-- 1 mcuser mcuser 109 Nov 16 16:44 usercache.json -rw-rw-r-- 1 mcuser mcuser 2 Nov 16 16:34 whitelist.json drwxrwxr-x 9 mcuser mcuser 4096 Nov 16 16:49 world mcuser@minecraft:~/minecraft$ mkdir mods mcuser@minecraft:~/minecraft$ cd mods mcuser@minecraft:~/minecraft/mods$ wget https://media.forgecdn.net/files/2835/318/defiledlands-1.12.2-1.4.3.jar --2021-11-16 17:10:34-- https://media.forgecdn.net/files/2835/318/defiledlands-1.12.2-1.4.3.jar Resolving media.forgecdn.net (media.forgecdn.net)... 13.224.226.86, 13.224.226.118, 13.224.226.83, ... Connecting to media.forgecdn.net (media.forgecdn.net)|13.224.226.86|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 780421 (762K) [application/x-amz-json-1.0] Saving to: 'defiledlands-1.12.2-1.4.3.jar' defiledlands-1.12.2-1.4.3.jar 100%[======================================================================================================================>] 762.13K 3.50MB/s in 0.2s 2021-11-16 17:10:35 (3.50 MB/s) - 'defiledlands-1.12.2-1.4.3.jar' saved [780421/780421] mcuser@minecraft:~/minecraft/mods$ wget https://media.forgecdn.net/files/2518/667/Baubles-1.12-1.5.2.jar --2021-11-16 17:23:53-- https://media.forgecdn.net/files/2518/667/Baubles-1.12-1.5.2.jar Resolving media.forgecdn.net (media.forgecdn.net)... 13.224.226.110, 13.224.226.86, 13.224.226.83, ... Connecting to media.forgecdn.net (media.forgecdn.net)|13.224.226.110|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 108450 (106K) [application/octet-stream] Saving to: 'Baubles-1.12-1.5.2.jar' Baubles-1.12-1.5.2.jar 100%[======================================================================================================================>] 105.91K --.-KB/s in 0.04s 2021-11-16 17:23:54 (2.38 MB/s) - 'Baubles-1.12-1.5.2.jar' saved [108450/108450] mcuser@minecraft:~/minecraft/mods$ cd .. mcuser@minecraft:~/minecraft$ java -Xmx2048M -Xms2048M -jar minecraft_server.1.12.2.jar nogui Now if we want to run our minecraft forge server we need an older version of java: mcuser@minecraft:~/minecraft$ sudo apt purge java-common default-jdk default-jre mcuser@minecraft:~/minecraft$ sudo apt install openjdk-8-jre -y mcuser@minecraft:~/minecraft$ java -version mcuser@minecraft:~/minecraft$ java -version openjdk version "1.8.0_292" OpenJDK Runtime Environment (build 1.8.0_292-8u292-b10-0ubuntu1~20.04-b10) OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode) mcuser@minecraft:~/minecraft$ java -Xmx2048M -Xms2048M -jar forge-1.12.2-14.23.5.2855.jar nogui [17:24:19] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLServerTweaker [17:24:19] [main/INFO] [LaunchWrapper]: Using primary tweak class name net.minecraftforge.fml.common.launcher.FMLServerTweaker [17:24:19] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLServerTweaker [17:24:19] [main/INFO] [FML]: Forge Mod Loader version 14.23.5.2855 for Minecraft 1.12.2 loading [17:24:19] [main/INFO] [FML]: Java is OpenJDK 64-Bit Server VM, version 1.8.0_292, running on Linux:amd64:5.4.143-1-pve, installed at /usr/lib/jvm/java-8-openjdk-amd64/jre [17:24:19] [main/INFO] [FML]: Searching /home/mcuser/minecraft/./mods for mods [17:24:19] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker [17:24:19] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.FMLDeobfTweaker [17:24:19] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker [17:24:19] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLInjectionAndSortingTweaker [17:24:19] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [17:24:23] [main/INFO] [FML]: Found valid fingerprint for Minecraft Forge. Certificate fingerprint e3c3d50c7c986df74c645c0ac54639741c90a557 [17:24:23] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.relauncher.CoreModManager$FMLPluginWrapper [17:24:23] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.FMLDeobfTweaker [17:24:23] [main/INFO] [LaunchWrapper]: Loading tweak class name net.minecraftforge.fml.common.launcher.TerminalTweaker [17:24:23] [main/INFO] [LaunchWrapper]: Calling tweak class net.minecraftforge.fml.common.launcher.TerminalTweaker [17:24:24] [main/INFO] [LaunchWrapper]: Launching wrapped minecraft {net.minecraft.server.MinecraftServer} [17:24:29] [Server thread/INFO] [minecraft/DedicatedServer]: Starting minecraft server version 1.12.2 [17:24:29] [Server thread/INFO] [FML]: MinecraftForge v14.23.5.2855 Initialized [17:24:29] [Server thread/INFO] [FML]: Starts to replace vanilla recipe ingredients with ore ingredients. [17:24:29] [Server thread/INFO] [FML]: Invalid recipe found with multiple oredict ingredients in the same ingredient... [17:24:30] [Server thread/INFO] [FML]: Replaced 1227 ore ingredients [17:24:30] [Server thread/INFO] [FML]: Searching /home/mcuser/minecraft/./mods for mods [17:24:31] [Server thread/INFO] [FML]: Forge Mod Loader has identified 6 mods to load [17:24:31] [Server thread/WARN] [FML]: Missing English translation for FML: assets/fml/lang/en_us.lang [...] And now it loads our mods ! Now let's download the mods locally for our client: If you try to login without the mods on the client you will see an error like that one: ![](15.png) [ 10.66.66.2/32 ] [ /dev/pts/139 ] [~/.minecraft/mods] → wget https://media.forgecdn.net/files/2518/667/Baubles-1.12-1.5.2.jar --2021-11-16 18:26:43-- https://media.forgecdn.net/files/2518/667/Baubles-1.12-1.5.2.jar SSL_INIT Loaded CA certificate '/etc/ssl/certs/ca-certificates.crt' Resolving media.forgecdn.net (media.forgecdn.net)... 13.224.226.83, 13.224.226.110, 13.224.226.86, ... Connecting to media.forgecdn.net (media.forgecdn.net)|13.224.226.83|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 108450 (106K) [application/octet-stream] Saving to: ‘Baubles-1.12-1.5.2.jar’ Baubles-1.12-1.5.2.jar 100%[=====================================================================================================================>] 105.91K --.-KB/s in 0.05s 2021-11-16 18:26:43 (1.98 MB/s) - ‘Baubles-1.12-1.5.2.jar’ saved [108450/108450] [ 10.66.66.2/32 ] [ /dev/pts/139 ] [~/.minecraft/mods] → wget https://media.forgecdn.net/files/2835/318/defiledlands-1.12.2-1.4.3.jar --2021-11-16 18:26:50-- https://media.forgecdn.net/files/2835/318/defiledlands-1.12.2-1.4.3.jar SSL_INIT Loaded CA certificate '/etc/ssl/certs/ca-certificates.crt' Resolving media.forgecdn.net (media.forgecdn.net)... 13.224.226.86, 13.224.226.83, 13.224.226.110, ... Connecting to media.forgecdn.net (media.forgecdn.net)|13.224.226.86|:443... connected. HTTP request sent, awaiting response... 200 OK Length: 780421 (762K) [application/x-amz-json-1.0] Saving to: ‘defiledlands-1.12.2-1.4.3.jar’ defiledlands-1.12.2-1.4.3.jar 100%[=====================================================================================================================>] 762.13K 2.89MB/s in 0.3s 2021-11-16 18:26:51 (2.89 MB/s) - ‘defiledlands-1.12.2-1.4.3.jar’ saved [780421/780421] And we manage to login! ![](14.png) And that's it! We managed to log into our modded minecraft server. ## **Setup** For the players who want to download the mods they need to log into the server, you can setup a simple nginx to allow them to get there: root@minecraft:~# vim /etc/nginx/sites-available/default root@minecraft:~# cat /etc/nginx/sites-available/default server { listen 80 default_server; listen [::]:80 default_server; root /home/mcuser/minecraft/mods; index index.html index.htm index.nginx-debian.html; server_name _; autoindex on; location / { try_files $uri $uri/ =404; } } root@minecraft:~# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful root@minecraft:~# nginx -s reload ![](16.png) Now let's make a systemd service to launch our minecraft server root@minecraft:~# vim /etc/systemd/system/minecraft.service root@minecraft:~# cat /etc/systemd/system/minecraft.service [Unit] Description=Minecraft Server After=syslog.target network.target [Service] # Ensure to set the correct user and working directory (installation directory of your server) here User=mcuser WorkingDirectory=/home/mcuser/minecraft/ # You can customize the maximum amount of memory as well as the JVM flags here ExecStart=/usr/bin/java -XX:+UseG1GC -Xmx6G -jar forge-1.12.2-14.23.5.2855.jar --nojline --noconsole -Dsun.rmi.dgc.server.gcInterval=2147483646 -XX:+UnlockExperimentalVMOptions -XX:G1HeapRegionSize=32M -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 # Restart the server when it is stopped or crashed after 30 seconds # Comment out RestartSec if you want to restart immediately Restart=always RestartSec=3 # Alternative: Restart the server only when it stops regularly # Restart=on-success # Do not remove this! StandardInput=null [Install] WantedBy=multi-user.target root@minecraft:~# systemctl daemon-reload root@minecraft:~# systemctl enable --now minecraft Created symlink /etc/systemd/system/multi-user.target.wants/minecraft.service -> /etc/systemd/system/minecraft.service. root@minecraft:~# systemctl status minecraft * minecraft.service - Minecraft Server Loaded: loaded (/etc/systemd/system/minecraft.service; enabled; vendor preset: enabled) Active: active (running) since Thu 2021-11-18 08:16:11 UTC; 5s ago Main PID: 31956 (java) Tasks: 33 (limit: 7372) Memory: 113.1M CGroup: /system.slice/minecraft.service `-31956 /usr/bin/java -XX:+UseG1GC -Xmx3G -jar forge-1.12.2-14.23.5.2855.jar --nojline --noconsole Nov 18 08:16:11 minecraft systemd[1]: Started Minecraft Server. For other minecraft versions you will need to install other java versions, sadly you need to deal with oracle being a corporation and you may need to login there. You're going to need either openjdk 11 or 17+, openjdk 11 being the cutover version from minecraft 1.16.5 use java version 1.8.0 (download it from the oracle website) to make a minecraft server 1.12.2 or on 1.16.5 >> https://www.oracle.com/java/technologies/downloads/archive/ (yes you need to create an account there, just fill it with garbage data)