Creating a Minecraft Server - BedRock
This version of Minecraft is for Bedrock clients (Windows and Mac) and will not work with tablets. Instructions on creating a server for Tablet clients is available here.
This tutorial is for creating a Minecraft server using the CraftBukkit Mod on Ubuntu 18. When choosing your server, be sure that it has at a minimum of 1GB of RAM. The more players you want to host, the more RAM you will require. As a guide, 1GB is a good amount for 10 players.
We are assuming you have access to and logged in as root user for this tutorial.
Make a new user for Minecraft
Before we get started, lets make a new user just the run the server - this is good security practice in case we want to run our server public.
sudo adduser mcuser
You'll be prompted to add a password. Lets add the user to sudo group (superuser)
usermod -aG sudo mcuser
And switch to the user
su - mcuser
Install the Requirements
It is best to first check that the server is up-to-date by running the command:
sudo apt-get update
Now we need to make sure that Java is installed on your server. You can check this by typing the command:
java -version
If Java is not installed, you will get a message saying “Command 'java' not found”. You can then download java through apt-get (don't use the command it suggests)
sudo apt-get install default-jdk
You will also need to install Screen which will keep the Minecraft server software running if your connection is dropped:
sudo apt-get install screen
Install the Minecraft Server
Start by creating a directory to store the Minecraft server and switch into it:
mkdir minecraft cd minecraft
Inside that folder, download the CraftBukkit Minecraft server. You can get the URL from the website https://getbukkit.org/download/craftbukkit, click on the version you want to run and then copy the URL to the download. In this example, we are using 1.14.
wget -O craftbukkit-1.14.4-R0.1-SNAPSHOT.jar https://cdn.getbukkit.org/craftbukkit/craftbukkit-1.14.4-R0.1-SNAPSHOT.jar
Since we are using screen, you can start the server by running:
screen -S "Minecraft Server" java -Xmx1024M -Xms1024M -jar craftbukkit-1.14.4-R0.1-SNAPSHOT.jar nogui
The launching text should look something like this:
Loading libraries, please wait... [09:30.16 INFO]: Starting minecraft server version 1.14.4-R0.1-SNAPSHOT [09:30.16 INFO]: Loading properties [09:30.16 WARN]: server.properties does not exist [09:30.16 INFO]: Generating new properties file [09:30.16 WARN]: Failed to load eula.txt [09:30.16 INFO]: You need to agree to the EULA in order to run the server. Go to eula.txt for more info. [09:30.16 INFO]: Stopping server
Now you need to agree to the EULA. You can do this by running:
nano eula.txt
which will show you the contents of the eula.txt file. Using the cursor keys, change the line
eula=false
to
eula=true
then press cntl-o to write the file, press enter to overwrite the eula.txt file, then press cntl.x to exit nano.
Now run the java command again:
java -Xmx1024M -Xms1024M -jar craftbukkit-1.14.4-R0.1-SNAPSHOT.jar nogui
and you should see the following output:
Loading libraries, please wait... [09:43.41 INFO]: Starting minecraft server version 1.14.4-R0.1-SNAPSHOT [09:43.41 INFO]: Loading properties [09:43.41 INFO]: Default game type: SURVIVAL [09:43.41 INFO]: Generating keypair [09:43.42 INFO]: Starting Minecraft server on *:25565 [09:43.42 INFO]: Using epoll channel type [09:43.43 INFO]: This server is running CraftBukkit version get-Bukkit-e60fc34 (MC: 1.14.4-R0.1-SNAPSHOT) (Implementing API version 1.14.4-R0.1-SNAPSHOT) [09:43.43 INFO]: Preparing level "world" [09:43.45 INFO]: Preparing start region for level 0 (Seed: -1369994844442303813) [09:43.46 INFO]: Preparing spawn area: 3% [09:43.47 INFO]: Preparing spawn area: 31% [09:43.48 INFO]: Preparing spawn area: 64% [09:43.49 INFO]: Preparing spawn area: 92% [09:43.50 INFO]: Preparing start region for level 1 (Seed: -1369994844442303813) [09:43.51 INFO]: Preparing spawn area: 5% [09:43.52 INFO]: Preparing spawn area: 29% [09:43.53 INFO]: Preparing spawn area: 57% [09:43.54 INFO]: Preparing spawn area: 83% [09:43.55 INFO]: Preparing start region for level 2 (Seed: -1369994844442303813) [09:43.56 INFO]: Preparing spawn area: 7% [09:43.57 INFO]: Preparing spawn area: 49% [09:43.58 INFO]: Preparing spawn area: 79% [09:43.59 INFO]: Done (12.606s)! For help, type "help" or "?" >
You should now be able to connect a Minecraft client to the server on port 25565.
Commands
While the Minecraft server is running, you can issue commands within the server console. The main commands you can use are:
stop - This stops the server and saves the worlds to disk
gamemode creative <player> - Changes the specified player to CREATIVE
time set 6000 - Sets the worlds time back to midday
To suspend the Screen instance press cntl-a d. This will return you to the main console. The previous Screen instance will still be running in the background. To return to that instance, type:
screen -R
To close the Screen instance, run the command:
exit
Note that if you receive the result
[10:19:48 INFO]: Unknown command. Type "help" for help.
The Minecraft server is still running. You will need to run stop to stop the server first.
To find out the IP address of the server, run the command
ifconfig
again, you cannot do this while the Minecraft server is running. You will need to either stop the server, or suspend the Screen instance and return to the Screen instance later.
Launch Server as a Service
Next we can make a system service to launch our server. This means we can make it launch on start-up, and control it using ubuntu's built in service called systemd.
First we will make a service - called minecraftserver.service. Create it using the nano editor with the command:
nano minecraftserver.service
Then paste the code below:
[Service] WorkingDirectory=/home/mcuser/minecraft User=mcuser #Group=minecraft Type=forking # Run it as a non-root user in a specific directory ExecStart=/usr/bin/screen -h 1024 -dmS minecraft ./minecraft_server.sh # I like to keep my commandline to launch it in a separate file # because sometimes I want to change it or launch it manually # If it's in the WorkingDirectory, then we can use a relative path # Send "stop" to the Minecraft server console ExecStop=/usr/bin/screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015' # Wait for the PID to die - otherwise it's killed after this command finishes! ExecStop=/bin/bash -c "while ps -p $MAINPID > /dev/null; do /bin/sleep 1; done" # Note that absolute paths for all executables are required! [Install] WantedBy=multi-user.target
This service will start up screen (as mcuser) then run a script in the working directory called minecraft_server.sh. To turn this into a service, we need to make it executable with
sudo chmod 775 minecraftserver.service
Then add it to our systemd directory with
sudo cp minecraftserver.service /lib/systemd/system
Server Start-up Script
Before we test our service, lets make our minecraft_server.sh script with nano
nano minecraft_server.sh
and enter
#!/bin/bash java -Xmx1024M -Xms1024M -jar craftbukkit-1.14.4-R0.1-SNAPSHOT.jar nogui echo hi
Now this script needs to be executable
chmod 775 minecraft_server.sh
Test the Service
Nearly there! Lets start our service
sudo systemctl start minecraftrserver
and check its running with
screen -r
All good? Now exit screen with ctrl+a+d
Then enable on start-up with
sudo systemctl enable minecraftserver
Its time to stop the service and reboot your server to check it starts properly:
sudo systemctl stop minecraftserver sudo reboot
Other Information
Your server will require internet access in order to authenticate the Minecraft clients.